diff options
Diffstat (limited to 'hm/soispha/conf/firefox/config')
6 files changed, 294 insertions, 22 deletions
diff --git a/hm/soispha/conf/firefox/config/bookmarks/default.nix b/hm/soispha/conf/firefox/config/bookmarks/default.nix index 8315cffd..c612bf4d 100644 --- a/hm/soispha/conf/firefox/config/bookmarks/default.nix +++ b/hm/soispha/conf/firefox/config/bookmarks/default.nix @@ -1,21 +1,31 @@ -[ - { - name = "Feed - Piped"; - url = "https://piped.video/feed"; - } +{ + lib, + pkgs, + ... +}: let + bookmarks = [ + { + name = "Feed - Piped"; + url = "https://piped.video/feed"; + } - { - name = "DeepL Translate"; - url = "https://www.deepl.com/translator"; - } + { + name = "DeepL Translate"; + url = "https://www.deepl.com/translator"; + } - { - name = "Nix lib"; - url = "https://teu5us.github.io/nix-lib.html"; - } + { + name = "Nix lib"; + url = "https://teu5us.github.io/nix-lib.html"; + } - { - name = "Nixpkgs manual"; - url = "https://ryantm.github.io/nixpkgs/"; - } -] + { + name = "Nixpkgs manual"; + url = "https://ryantm.github.io/nixpkgs/"; + } + ]; + + mkBookmarksFile = (import ./lib.nix) {inherit lib pkgs;}; + bookmarks_file = mkBookmarksFile bookmarks; +in + bookmarks_file diff --git a/hm/soispha/conf/firefox/config/bookmarks/lib.nix b/hm/soispha/conf/firefox/config/bookmarks/lib.nix new file mode 100644 index 00000000..d1d89dd2 --- /dev/null +++ b/hm/soispha/conf/firefox/config/bookmarks/lib.nix @@ -0,0 +1,49 @@ +{ + lib, + pkgs, +}: bookmarks: let + indent = level: + lib.concatStringsSep "" (map (lib.const " ") (lib.range 1 level)); + + bookmarkToHTML = indentLevel: bookmark: '' + ${indent indentLevel}<DT><A HREF="${ + lib.escapeXML bookmark.url + }" ADD_DATE="0" LAST_MODIFIED="0">${lib.escapeXML bookmark.name}</A>''; + + directoryToHTML = indentLevel: directory: '' + ${indent indentLevel}<DT>${ + if directory.toolbar + then ''<H3 PERSONAL_TOOLBAR_FOLDER="true">Bookmarks Toolbar'' + else "<H3>${lib.escapeXML directory.name}" + }</H3> + ${indent indentLevel}<DL><p> + ${allItemsToHTML (indentLevel + 1) directory.bookmarks} + ${indent indentLevel}</p></DL>''; + + itemToHTMLOrRecurse = indentLevel: item: + if item ? "url" + then bookmarkToHTML indentLevel item + else directoryToHTML indentLevel item; + + allItemsToHTML = indentLevel: bookmarks: + lib.concatStringsSep "\n" + (map (itemToHTMLOrRecurse indentLevel) bookmarks); + + bookmarkEntries = allItemsToHTML 1 bookmarks; +in + pkgs.writeText "firefox-bookmarks.html" '' + <!DOCTYPE NETSCAPE-Bookmark-file-1> + <!-- This is an automatically generated file. + It will be read and overwritten. + DO NOT EDIT! --> + <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"> + <TITLE>Bookmarks</TITLE> + <H1>Bookmarks Menu</H1> + + <DL><p> + <DT><H3 ADD_DATE="0" LAST_MODIFIED="0" PERSONAL_TOOLBAR_FOLDER="true">Bookmarks Toolbar</H3> + <DL><p> + ${bookmarkEntries} + </DL><p> + </p></DL> + '' diff --git a/hm/soispha/conf/firefox/config/extensions/native_messaging_hosts/default.nix b/hm/soispha/conf/firefox/config/extensions/native_messaging_hosts/default.nix new file mode 100644 index 00000000..053b6465 --- /dev/null +++ b/hm/soispha/conf/firefox/config/extensions/native_messaging_hosts/default.nix @@ -0,0 +1,28 @@ +{ + pkgs, + video_pause, + ... +}: let + video_pause_ext = import ./video-pauser.nix {inherit pkgs video_pause;}; +in + /* + ++ lib.optional (cfg.enableBrowserpass or false) (lib.getBin browserpass) + ++ lib.optional (cfg.enableBukubrow or false) bukubrow + ++ lib.optional (cfg.enableTridactylNative or false) tridactyl-native + ++ lib.optional (cfg.enableGnomeExtensions or false) gnome-browser-connector + ++ lib.optional (cfg.enableUgetIntegrator or false) uget-integrator + ++ lib.optional (cfg.enablePlasmaBrowserIntegration or false) plasma5Packages.plasma-browser-integration + ++ lib.optional (cfg.enableFXCastBridge or false) fx-cast-bridge + ++ lib.optional (cfg.enableKeePassXC or false) keepassxc + + + mkdir -p $out/lib/mozilla/native-messaging-hosts + for ext in ${toString nativeMessagingHosts}; do + ln -sLt $out/lib/mozilla/native-messaging-hosts $ext/lib/mozilla/native-messaging-hosts/* + done + */ + with pkgs; [ + video_pause_ext + tridactyl-native + keepassxc + ] diff --git a/hm/soispha/conf/firefox/config/extensions/native_messaging_hosts/video-pauser.nix b/hm/soispha/conf/firefox/config/extensions/native_messaging_hosts/video-pauser.nix new file mode 100644 index 00000000..a652b596 --- /dev/null +++ b/hm/soispha/conf/firefox/config/extensions/native_messaging_hosts/video-pauser.nix @@ -0,0 +1,46 @@ +{ + pkgs, + video_pause, + ... +}: let + extensions = builtins.fromJSON (builtins.readFile ../extensions.json); + inherit (extensions) video-pauser; +in + /* + mkdir -p $out/lib/mozilla/native-messaging-hosts + for ext in ${toString nativeMessagingHosts}; do + ln -sLt $out/lib/mozilla/native-messaging-hosts $ext/lib/mozilla/native-messaging-hosts/* + done + */ + pkgs.stdenv.mkDerivation { + inherit (video-pauser) pname version; + buildInputs = [ + video_pause + ]; + buildPhase = '' + mkdir -p $out/share/ + cat << EOF > $out/share/"${video-pauser.pname}".json + { + "name": "${video-pauser.pname}", + "description": "Stop a video with a native hotkey", + "path": "${video_pause}/bin/video_pause", + "type": "stdio", + "allowed_extensions": ["${video-pauser.addonId}"] + } + EOF + + nativeMessagingPaths="$(cat << EOF + lib/mozilla/native-messaging-hosts + lib/librewolf/native-messaging-hosts + etc/opt/chrome/native-messaging-hosts + etc/chromium/native-messaging-hosts + etc/vivaldi/native-messaging-hosts + EOF + )" + + cat "$nativeMessagingPaths" | while read -r path; do + mkdir -p $out/$path; + cp $out/share/"${video-pauser.pname}".json $out/$path/ + done + ''; + } diff --git a/hm/soispha/conf/firefox/config/policies/default.nix b/hm/soispha/conf/firefox/config/policies/default.nix new file mode 100644 index 00000000..ada281d8 --- /dev/null +++ b/hm/soispha/conf/firefox/config/policies/default.nix @@ -0,0 +1,141 @@ +{ + config, + extensions, + ... +}: let + locals = [ + "en-CA" + "de" + "sv-SE" + ]; +in { + policies = let + mkAllowedExtension = extension: { + name = extension.addonId; + value = { + installation_mode = "normal_installed"; + updates_disabled = true; + inherit (extension) default_area; + install_url = "file://${builtins.fetchurl { + inherit + (extension) + url + sha256 + ; + }}"; + }; + }; + allowedExtensions = + builtins.listToAttrs + (builtins.map mkAllowedExtension (builtins.attrValues + extensions)); + + mkBlockedExtension = id: { + name = id; + value = { + install_mode = "blocked"; + }; + }; + blockedExtensions = builtins.listToAttrs (builtins.map mkBlockedExtension [ + # these are the default search engines + "addons-search-detection@mozilla.com" + "amazon@search.mozilla.org" + "bing@search.mozilla.org" + "ddg@search.mozilla.org" + "google@search.mozilla.org" + "wikipedia@search.mozilla.org" + ]); + + language_packs = builtins.listToAttrs (builtins.map + ( + lang: { + name = "langpack-${lang}@firefox.mozilla.org"; + value = { + installation_mode = "normal_installed"; + install_url = "https://releases.mozilla.org/pub/firefox/releases/${config.soispha.firefox.package_version}/linux-x86_64/xpi/${lang}.xpi"; + }; + } + ) + locals); + in { + # NOTE: See https://mozilla.github.io/policy-templates for documentation <2023-10-21> + + # NixOS manages this already + DisableAppUpdate = true; + + DisableFirefoxAccounts = true; + DisableFirefoxScreenshots = true; + + # KeepassXC does this for me + DisableMasterPasswordCreation = true; + + # I use a self-hosted services for that + DisablePocket = true; + + # I don't want to lose my data + DisableProfileRefresh = true; + + DisplayBookmarksToolbar = "newtab"; + DisplayMenuBar = "default-off"; + + DNSOverHTTPS = { + Enabled = true; + Locked = false; + }; + # The concept of a "default browser" does not apply to my NixOS config + DontCheckDefaultBrowser = true; + + EnableTrackingProtection = { + Value = true; + Locked = false; + Cryptomining = true; + Fingerprinting = true; + EmailTracking = true; + }; + + EncryptedMediaExtensions = { + # I want a _free_ config (and I can always just run another browser) + Enabled = false; + Locked = true; + }; + + ExtensionSettings = + { + "*" = { + blocked_install_message = '' + You can't install a extension manually, + please specify it in your NixOS configuration + ''; + installation_mode = "blocked"; + }; + } + // allowedExtensions + // blockedExtensions + // language_packs; + ExtensionUpdate = false; + + # TODO: Add handlers for the default file types <2023-10-21> + # Handlers = { + # }; + + HardwareAcceleration = true; + + InstallAddonsPermission = { + Allowed = []; + Default = false; + }; + + # KeepassXC and such things + OfferToSaveLogins = false; + PasswordManagerEnable = false; + + PDFjs = { + Enabled = true; + # Don't honor documents right to be un-copy-able + EnablePermissions = false; + }; + + SearchBar = "unified"; + RequestedLocales = locals; + }; +} diff --git a/hm/soispha/conf/firefox/config/prefs/default.nix b/hm/soispha/conf/firefox/config/prefs/default.nix index 6bcaf76f..80c6d274 100644 --- a/hm/soispha/conf/firefox/config/prefs/default.nix +++ b/hm/soispha/conf/firefox/config/prefs/default.nix @@ -2,11 +2,9 @@ pkgs, config, user_js, - lib, + bookmarks, ... }: let - bookmarks = import ../bookmarks; - firefoxBookmarksFile = (import ../../functions/bookmarks) {inherit lib pkgs;}; user_js_override = pkgs.writeText "user.override.js" (builtins.readFile ./override.js); in pkgs.runCommand "user.js" {} '' @@ -16,7 +14,7 @@ in cat << EOF >> $out/user.js; // My bookmarks - user_pref("browser.bookmarks.file", "${toString (firefoxBookmarksFile bookmarks)}"); + user_pref("browser.bookmarks.file", "${toString bookmarks}"); user_pref("browser.startup.homepage", "file:///home/dt/home.html"); // 0103 // TODO: add this from a flake user_pref("browser.download.dir", "${config.xdg.userDirs.download}"); EOF |