firefox: configure Kagi as default search
This commit is contained in:
@@ -45,7 +45,7 @@ in
|
|||||||
enable = lib.mkDefault false; #< obsoleted by uBlock Origin annoyances/cookies lists
|
enable = lib.mkDefault false; #< obsoleted by uBlock Origin annoyances/cookies lists
|
||||||
};
|
};
|
||||||
kagi-search = {
|
kagi-search = {
|
||||||
enable = lib.mkDefault false;
|
enable = lib.mkDefault true;
|
||||||
};
|
};
|
||||||
# open-in-mpv = {
|
# open-in-mpv = {
|
||||||
# # test: `open-in-mpv 'mpv:///open?url=https://www.youtube.com/watch?v=dQw4w9WgXcQ'`
|
# # test: `open-in-mpv 'mpv:///open?url=https://www.youtube.com/watch?v=dQw4w9WgXcQ'`
|
||||||
|
@@ -270,24 +270,37 @@ in
|
|||||||
|
|
||||||
env.BROWSER = "firefox"; # used by misc tools like xdg-email, as fallback
|
env.BROWSER = "firefox"; # used by misc tools like xdg-email, as fallback
|
||||||
|
|
||||||
fs = {
|
fs.".mozilla/firefox/bookmarks.html".symlink.target = ./bookmarks.html;
|
||||||
".mozilla/firefox/bookmarks.html".symlink.target = ./bookmarks.html;
|
# instruct Firefox to put the profile in a predictable directory (so we can do things like persist just it).
|
||||||
|
# XXX: the directory *must* exist, even if empty; Firefox will not create the directory itself.
|
||||||
|
fs.".mozilla/firefox/profiles.ini".symlink.text = ''
|
||||||
|
[Profile0]
|
||||||
|
Name=default
|
||||||
|
IsRelative=1
|
||||||
|
Path=default
|
||||||
|
Default=1
|
||||||
|
|
||||||
# instruct Firefox to put the profile in a predictable directory (so we can do things like persist just it).
|
[General]
|
||||||
# XXX: the directory *must* exist, even if empty; Firefox will not create the directory itself.
|
StartWithLastProfile=1
|
||||||
".mozilla/firefox/profiles.ini".symlink.text = ''
|
'';
|
||||||
[Profile0]
|
|
||||||
Name=default
|
|
||||||
IsRelative=1
|
|
||||||
Path=default
|
|
||||||
Default=1
|
|
||||||
|
|
||||||
[General]
|
fs.".mozilla/firefox/user.js".symlink.target = ./user.js;
|
||||||
StartWithLastProfile=1
|
fs.".mozilla/firefox/default/search.json.mozlz4".symlink.target = let
|
||||||
'';
|
drv = pkgs.stdenvNoCC.mkDerivation {
|
||||||
|
# Mozilla uses a custom compression scheme for `search.json` because they're ASSHOLES.
|
||||||
".mozilla/firefox/user.js".symlink.target = ./user.js;
|
# seriously, why do you need to compress this 2 KiB file? and then why do you need to INVENT YOUR OWN COMPRESSION FORMAT FOR THAT?
|
||||||
};
|
# GET YOUR HEAD OUT OF YOUR ASS.
|
||||||
|
name = "search.json.mozlz4";
|
||||||
|
src = ./.;
|
||||||
|
nativeBuildInputs = with pkgs; [ mozlz4a ];
|
||||||
|
buildPhase = ''
|
||||||
|
mozlz4a ./search.json search.json.mozlz4
|
||||||
|
'';
|
||||||
|
installPhase = ''
|
||||||
|
install -D search.json.mozlz4 "$out"/search.json.mozlz4
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
in "${drv}/search.json.mozlz4";
|
||||||
|
|
||||||
# flush the cache to disk to avoid it taking up too much tmp.
|
# flush the cache to disk to avoid it taking up too much tmp.
|
||||||
persist.byPath = let
|
persist.byPath = let
|
||||||
@@ -298,7 +311,81 @@ in
|
|||||||
;
|
;
|
||||||
in {
|
in {
|
||||||
".cache/mozilla".store = maybePersist;
|
".cache/mozilla".store = maybePersist;
|
||||||
".mozilla/firefox/default".store = maybePersist;
|
# storage consumes 80+ MB
|
||||||
|
# the other profile dirs take significantly less; < 20MB total
|
||||||
|
".mozilla/firefox/default/storage".store = maybePersist;
|
||||||
|
# profile files (.mozilla/firefox/default/...):
|
||||||
|
# - addons.json
|
||||||
|
# - regenerated on launch
|
||||||
|
# - addonStartup.json.lz4
|
||||||
|
# - regenerated on next-next launch
|
||||||
|
# - bookmarkbackups/
|
||||||
|
# - bounce-tracking-protection.sqlite
|
||||||
|
# - recreated on launch
|
||||||
|
# - cert9.db
|
||||||
|
# - regenerated on launch
|
||||||
|
# - compatibility.ini
|
||||||
|
# - regenerated on launch
|
||||||
|
# - containers.json
|
||||||
|
# - regenerated on launch
|
||||||
|
# - content-prefs.sqlite
|
||||||
|
# - recreated on launch
|
||||||
|
# - cookies.sqlite{,-wal}
|
||||||
|
# - recreated on launch
|
||||||
|
# - crashes/
|
||||||
|
# - datareporting/
|
||||||
|
# - domain_to_categories.sqlite{,-journal}
|
||||||
|
# - recreated on launch
|
||||||
|
# - enumerate_devices.txt
|
||||||
|
# - recreated on launch
|
||||||
|
# - extension-preferences.json
|
||||||
|
# - NOT recreated, but inconsequential to delete
|
||||||
|
# - extension-settings.json
|
||||||
|
# - regenerated on launch
|
||||||
|
# - extension-store/
|
||||||
|
# - extension-store-menus/
|
||||||
|
# - extensions/
|
||||||
|
# - extensions.json
|
||||||
|
# - regenerated on launch
|
||||||
|
# - failover.jsc
|
||||||
|
# - regenerated on launch
|
||||||
|
# - favicons.sqlite{,-wal}
|
||||||
|
# - regenerated on launch
|
||||||
|
# - formhistory.sqlite
|
||||||
|
# - recreated on launch
|
||||||
|
# - handlers.json
|
||||||
|
# - NOT recreated, but inconsequential to delete
|
||||||
|
# - key4.db
|
||||||
|
# - recreated on launch
|
||||||
|
# - lock -> ...
|
||||||
|
# - minidumps/
|
||||||
|
# - permissions.sqlite
|
||||||
|
# - recreated on launch
|
||||||
|
# - pkcs11.txt
|
||||||
|
# - regenerated on launch
|
||||||
|
# - places.sqlite{,-wal}
|
||||||
|
# - recreated on launch
|
||||||
|
# - prefs.js
|
||||||
|
# - recreated on launch
|
||||||
|
# - protections.sqlite
|
||||||
|
# - recreated on launch
|
||||||
|
# - search.json.mozlz4
|
||||||
|
# - recreated on launch; loses any customized search engines
|
||||||
|
# - security_state/
|
||||||
|
# - serviceworker.txt
|
||||||
|
# - NOT recreated, but inconsequential to delete
|
||||||
|
# - sessionCheckpoints.json
|
||||||
|
# - recreated on launch
|
||||||
|
# - shield-preference-experiments.json
|
||||||
|
# - NOT recreated, but inconsequential to delete
|
||||||
|
# - storage/
|
||||||
|
# - storage-sync-v2.sqlite
|
||||||
|
# - recreated on launch
|
||||||
|
# - storage.sqlite
|
||||||
|
# - times.json
|
||||||
|
# - recreated on launch
|
||||||
|
# - xulstore.json
|
||||||
|
# - recreated on launch
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
83
hosts/common/programs/firefox/search.json
Normal file
83
hosts/common/programs/firefox/search.json
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
{
|
||||||
|
"version": 12,
|
||||||
|
"engines": [
|
||||||
|
{
|
||||||
|
"id": "google",
|
||||||
|
"_name": "Google",
|
||||||
|
"_isAppProvided": true,
|
||||||
|
"_metaData": {
|
||||||
|
"order": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "bing",
|
||||||
|
"_name": "Bing",
|
||||||
|
"_isAppProvided": true,
|
||||||
|
"_metaData": {
|
||||||
|
"order": 2
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ddg",
|
||||||
|
"_name": "DuckDuckGo",
|
||||||
|
"_isAppProvided": true,
|
||||||
|
"_metaData": {
|
||||||
|
"order": 3
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "wikipedia",
|
||||||
|
"_name": "Wikipedia (en)",
|
||||||
|
"_isAppProvided": true,
|
||||||
|
"_metaData": {
|
||||||
|
"order": 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "search@kagi.comdefault",
|
||||||
|
"_name": "Kagi",
|
||||||
|
"_loadPath": "[addon]search@kagi.com",
|
||||||
|
"_iconMapObj": {
|
||||||
|
"16": "moz-extension://8866e489-faf9-4122-a9a4-4845afbc578f/icons/icon_16px.png",
|
||||||
|
"32": "moz-extension://8866e489-faf9-4122-a9a4-4845afbc578f/icons/icon_32px.png",
|
||||||
|
"48": "moz-extension://8866e489-faf9-4122-a9a4-4845afbc578f/icons/favicon-48.png",
|
||||||
|
"180": "moz-extension://8866e489-faf9-4122-a9a4-4845afbc578f/icons/icon_180px.png"
|
||||||
|
},
|
||||||
|
"_metaData": {
|
||||||
|
"order": 5,
|
||||||
|
"loadPathHash": "cvZ7LzXkcfkHdmbuYpDRqhvLSfZPgPO0CxObgIPkYU0="
|
||||||
|
},
|
||||||
|
"_urls": [
|
||||||
|
{
|
||||||
|
"params": [],
|
||||||
|
"rels": [],
|
||||||
|
"template": "https://kagi.com/search?q={searchTerms}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"params": [],
|
||||||
|
"rels": [],
|
||||||
|
"template": "https://kagi.com/api/autosuggest?q={searchTerms}",
|
||||||
|
"type": "application/x-suggestions+json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"_orderHint": null,
|
||||||
|
"_telemetryId": null,
|
||||||
|
"_filePath": null,
|
||||||
|
"_definedAliases": [
|
||||||
|
"@kagi"
|
||||||
|
],
|
||||||
|
"_extensionID": "search@kagi.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"metaData": {
|
||||||
|
"locale": "en-US",
|
||||||
|
"region": "unknown",
|
||||||
|
"channel": "default",
|
||||||
|
"experiment": "",
|
||||||
|
"distroID": "nixos",
|
||||||
|
"appDefaultEngineId": "google",
|
||||||
|
"useSavedOrder": true,
|
||||||
|
"defaultEngineId": "search@kagi.comdefault",
|
||||||
|
"defaultEngineIdHash": "hrzTeftqb+2F9OI3GYJwG6XAMryJr8Eut/3f90YKv3k="
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user