diff --git a/flake.lock b/flake.lock index 0f95089..90bea69 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,21 @@ { "nodes": { + "betterfox": { + "flake": false, + "locked": { + "lastModified": 1716574980, + "narHash": "sha256-i6fxW6hOOUWjWJ7lhX5qjEh9tyE2JyD6vwPEsfov7fY=", + "owner": "yokoffing", + "repo": "Betterfox", + "rev": "9756922ee951f9c0dd09f1e7037b93089a661963", + "type": "github" + }, + "original": { + "owner": "yokoffing", + "repo": "Betterfox", + "type": "github" + } + }, "disko": { "inputs": { "nixpkgs": [ @@ -20,6 +36,29 @@ "type": "github" } }, + "firefox-addons": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "dir": "pkgs/firefox-addons", + "lastModified": 1717098199, + "narHash": "sha256-yYUDGNSjB9F2Nz6/sU7J10Ts5fGXPmRLJam54WbMVsM=", + "owner": "rycee", + "repo": "nur-expressions", + "rev": "968544b6ed405daaf1469de42fd00e4f53ab255e", + "type": "gitlab" + }, + "original": { + "dir": "pkgs/firefox-addons", + "owner": "rycee", + "repo": "nur-expressions", + "type": "gitlab" + } + }, "flake-compat": { "flake": false, "locked": { @@ -37,6 +76,21 @@ } }, "flake-utils": { + "locked": { + "lastModified": 1629284811, + "narHash": "sha256-JHgasjPR0/J1J3DRm4KxM4zTyAj4IOJY8vIl75v/kPI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c5d161cc0af116a2e17f54316f0bf43f0819785c", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { "inputs": { "systems": "systems" }, @@ -97,7 +151,7 @@ "nix-vscode-extensions": { "inputs": { "flake-compat": "flake-compat", - "flake-utils": "flake-utils", + "flake-utils": "flake-utils_2", "nixpkgs": [ "nixpkgs" ] @@ -150,7 +204,9 @@ }, "root": { "inputs": { + "betterfox": "betterfox", "disko": "disko", + "firefox-addons": "firefox-addons", "home-manager": "home-manager", "nix-index-database": "nix-index-database", "nix-vscode-extensions": "nix-vscode-extensions", diff --git a/flake.nix b/flake.nix index d687b5b..522a54e 100644 --- a/flake.nix +++ b/flake.nix @@ -31,6 +31,16 @@ url = "github:nix-community/nix-vscode-extensions"; inputs.nixpkgs.follows = "nixpkgs"; }; + + firefox-addons = { + url = "gitlab:rycee/nur-expressions?dir=pkgs/firefox-addons"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + betterfox = { + url = "github:yokoffing/Betterfox"; + flake = false; + }; }; outputs = diff --git a/wrappers/firefox/default.nix b/wrappers/firefox/default.nix new file mode 100644 index 0000000..9747b1d --- /dev/null +++ b/wrappers/firefox/default.nix @@ -0,0 +1,10 @@ +{ assembleWrapper, moduleArgs, ... }: +let + inherit (moduleArgs) pkgs; +in +assembleWrapper { + basePackage = pkgs.wrapFirefox pkgs.firefox-unwrapped { + extraPolicies.ExtensionSettings = import ./extensions.nix { inherit moduleArgs; }; + extraPrefs = import ./preferences.nix { inherit moduleArgs; }; + }; +} diff --git a/wrappers/firefox/extensions.nix b/wrappers/firefox/extensions.nix new file mode 100644 index 0000000..127f8d3 --- /dev/null +++ b/wrappers/firefox/extensions.nix @@ -0,0 +1,26 @@ +{ moduleArgs, ... }: +let + inherit (moduleArgs) lib inputs; + + extension = shortId: uuid: { + name = uuid; + value = { + install_url = "file:///${ + inputs.firefox-addons.packages.x86_64-linux.${shortId} + }/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/${uuid}.xpi"; + installation_mode = "force_installed"; + default_area = "menupanel"; + }; + }; +in +{ + "*".installation_mode = "blocked"; +} +// lib.listToAttrs [ + (extension "dictionary-german" "de-DE@dictionaries.addons.mozilla.org") + (extension "ublock-origin" "uBlock0@raymondhill.net") + (extension "bitwarden" "{446900e4-71c2-419f-a6a7-df9c091e268b}") + (extension "return-youtube-dislikes" "{762f9885-5a13-4abd-9c77-433dcd38b8fd}") + (extension "sponsorblock" "sponsorBlocker@ajay.app") + (extension "clearurls" "{74145f27-f039-47ce-a470-a662b129930a}") +] diff --git a/wrappers/firefox/preferences.nix b/wrappers/firefox/preferences.nix new file mode 100644 index 0000000..4c84b36 --- /dev/null +++ b/wrappers/firefox/preferences.nix @@ -0,0 +1,26 @@ +{ moduleArgs, ... }: +let + inherit (moduleArgs) lib inputs; + + escapedUiState = + builtins.replaceStrings [ ''"'' ] [ ''\"'' ] + ''{"placements":{"widget-overflow-fixed-list":[],"unified-extensions-area":["_762f9885-5a13-4abd-9c77-433dcd38b8fd_-browser-action","_74145f27-f039-47ce-a470-a662b129930a_-browser-action","sponsorblocker_ajay_app-browser-action","_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action","ublock0_raymondhill_net-browser-action"],"nav-bar":["back-button","forward-button","stop-reload-button","customizableui-special-spring1","urlbar-container","customizableui-special-spring2","save-to-pocket-button","downloads-button","fxa-toolbar-menu-button","unified-extensions-button","sidebar-button"],"toolbar-menubar":["menubar-items"],"TabsToolbar":["firefox-view-button","tabbrowser-tabs","new-tab-button","alltabs-button"],"PersonalToolbar":["personal-bookmarks"]},"seen":["developer-button","_762f9885-5a13-4abd-9c77-433dcd38b8fd_-browser-action","_74145f27-f039-47ce-a470-a662b129930a_-browser-action","sponsorblocker_ajay_app-browser-action","_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action","ublock0_raymondhill_net-browser-action"],"dirtyAreaCache":["nav-bar","unified-extensions-area","PersonalToolbar","toolbar-menubar","TabsToolbar"],"currentVersion":20,"newElementCount":4}''; +in +lib.concatLines [ + (builtins.replaceStrings [ "user_pref" ] [ "pref" ] ( + builtins.readFile "${inputs.betterfox}/user.js" + )) + '' + pref("intl.accept_languages", "en-us,en,de-de,de"); + pref("browser.uiCustomization.state", "${escapedUiState}") + pref("sidebar.position_start", false); + pref("browser.toolbars.bookmarks.visibility", "always"); + pref("browser.bookmarks.restore_default_bookmarks", false); + pref("browser.bookmarks.file", ""); + pref("media.videocontrols.picture-in-picture.video-toggle.enabled", false); + pref("general.autoScroll", true); + pref("middlemouse.paste", false); + pref("signon.rememberSignons", false); + pref("extensions.formautofill.creditCards.enabled", false); + '' +]