firefox module

This commit is contained in:
fuckwit 2025-01-04 15:08:20 +01:00
parent acc9c123df
commit 7539947bb0
5 changed files with 191 additions and 95 deletions

View File

@ -0,0 +1,110 @@
{
pkgs,
config,
lib,
...
}: let
inherit (lib) mkOption mkEnableOption mkPackageOption types;
defaultExtensions = with pkgs.nur.repos.rycee.firefox-addons; [
bitwarden
darkreader
i-dont-care-about-cookies
privacy-badger
ublock-origin
];
defaultSettings = {
"app.normandy.first_run" = false;
"app.shield.optoutstudies.enabled" = false;
# disable updates (pretty pointless with nix)
"app.update.channel" = "default";
"browser.contentblocking.category" = "standard"; # "strict"
"browser.ctrlTab.recentlyUsedOrder" = false;
"browser.download.viewableInternally.typeWasRegistered.svg" = true;
"browser.download.viewableInternally.typeWasRegistered.webp" = true;
"browser.download.viewableInternally.typeWasRegistered.xml" = true;
"browser.search.region" = "DE";
"browser.shell.checkDefaultBrowser" = false;
"browser.tabs.loadInBackground" = true;
"browser.urlbar.placeholderName" = "EnteEnteLauf";
"browser.urlbar.showSearchSuggestionsFirst" = false;
# disable all the annoying quick actions
"browser.urlbar.quickactions.enabled" = false;
"browser.urlbar.quickactions.showPrefs" = false;
"browser.urlbar.shortcuts.quickactions" = false;
"browser.urlbar.suggest.quickactions" = false;
"distribution.searchplugins.defaultLocale" = "en-US";
"doh-rollout.balrog-migration-done" = true;
"doh-rollout.doneFirstRun" = true;
"general.useragent.locale" = "en-US";
"extensions.activeThemeID" = "firefox-compact-dark@mozilla.org";
"extensions.extensions.activeThemeID" = "firefox-compact-dark@mozilla.org";
"extensions.update.enabled" = false;
"extensions.webcompat.enable_picture_in_picture_overrides" = true;
"extensions.webcompat.enable_shims" = true;
"extensions.webcompat.perform_injections" = true;
"extensions.webcompat.perform_ua_overrides" = true;
"privacy.donottrackheader.enabled" = true;
"browser.translations.enable" = false;
# Yubikey
"security.webauth.u2f" = true;
"security.webauth.webauthn" = true;
"security.webauth.webauthn_enable_softtoken" = false;
"security.webauth.webauthn_enable_usbtoken" = true;
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
"layout.word_select.stop_at_punctuation" = false;
};
cfg = config.personal.firefox;
in {
options.personal.firefox = {
enable = mkEnableOption "Apply personal firefox defaults.";
package = mkPackageOption pkgs "firefox-bin" {};
extensions = mkOption {
type = types.listOf types.package;
default = defaultExtensions;
description = "Firefox extensions to install.";
};
settings = mkOption {
type = types.attrsOf (pkgs.formats.json.type
// {
description = "Preferences (int, bool, string, and also attrs, list, float as a JSON string)";
});
default = defaultSettings;
description = "Attribute set of preferences.";
};
};
config = {
programs.firefox = lib.mkIf cfg.enable {
enable = true;
package = cfg.package;
profiles = {
default = {
isDefault = true;
id = 0;
userChrome = builtins.readFile ./userChrome.css;
inherit (cfg) extensions settings;
};
};
};
};
}

View File

@ -0,0 +1,76 @@
/* Source file https://github.com/MrOtherGuy/firefox-csshacks/tree/master/chrome/toolbars_below_content_v2.css made available under Mozilla Public License v. 2.0
See the above repository for updates as well as full license text. */
/* This requires Firefox 133
* By default tabs will be the top-most toolbar, but you can set the following pref to move them to bottom:
* userchrome.toolbars-below-content.tabs-at-bottom.enabled
*/
#navigator-toolbox{
display: contents;
--uc-navbar-height: 40px;
}
:root[uidensity="compact"] #navigator-toolbox{
--uc-navbar-height: 34px;
}
#main-window > body > #browser,
.global-notificationbox,
#tab-notification-deck,
#toolbar-menubar{
order: -1;
}
#TabsToolbar{
max-height: calc((var(--tab-min-height) + 2 * var(--tab-block-margin,0px)) * var(--multirow-n-rows,1));
}
#toolbar-menubar,
#TabsToolbar{
background: inherit !important;
}
@media (-moz-platform: linux){
:root[sizemode="normal"][customtitlebar] #toolbar-menubar{
border-top-left-radius: inherit;
border-top-right-radius: inherit;
}
#toolbar-menubar,
#TabsToolbar{
opacity: 1 !important;
will-change: unset !important;
}
#notification-popup[side="top"]{
margin-top: calc(-2 * var(--panel-padding-block) - 40px - 32px - 8.5em) !important;
}
#permission-popup[side="top"]{
margin-top: calc(-2 * var(--panel-padding-block) - 2.5em);
}
}
#nav-bar,
#PersonalToolbar{
background-image: linear-gradient(var(--toolbar-bgcolor),var(--toolbar-bgcolor)), var(--lwt-additional-images,var(--toolbar-bgimage)) !important;
background-position: top,var(--lwt-background-alignment);
background-position-y: calc(0px - var(--tab-min-height) - 2*var(--tab-block-margin,0px));
background-repeat: repeat,var(--lwt-background-tiling);
}
:root[lwtheme-image] #nav-bar,
:root[lwtheme-image] #PersonalToolbar{
background-image: linear-gradient(var(--toolbar-bgcolor),var(--toolbar-bgcolor)),var(--lwt-header-image), var(--lwt-additional-images,var(--toolbar-bgimage)) !important;
}
#PersonalToolbar{
background-position-y: calc(0px - var(--tab-min-height) - 2*var(--tab-block-margin,0px) - var( --uc-navbar-height));
}
#urlbar[breakout][breakout-extend]{
display: flex !important;
flex-direction: column-reverse !important;
transform: translateY(calc(var(--urlbar-container-height) - 100%));
}
#urlbar[breakout-extend]:not([usertyping]) > .urlbar-input-container::after{
display: flex;
content: "";
height: calc(var(--urlbar-min-height) - 2px - 2 * var(--urlbar-container-padding));
}
.urlbarView-body-inner{ border-top-style: none !important; }
#TabsToolbar{
order: 3
}

View File

@ -1,5 +1,6 @@
{...}: { {...}: {
imports = [ imports = [
./firefox
./firefox-webapp.nix ./firefox-webapp.nix
]; ];
} }

View File

@ -8,7 +8,7 @@
}: let }: let
pkgs = import nixpkgs rec { pkgs = import nixpkgs rec {
system = "x86_64-linux"; system = "x86_64-linux";
overlays = [(final: prev: {nixvim = nixvim.packages.${system}.default;})]; overlays = [(final: prev: {nixvim = nixvim.packages.${system}.default;}) nurpkgs.overlay];
}; };
nur = import nurpkgs { nur = import nurpkgs {
@ -33,12 +33,8 @@ in {
framework = home-manager.lib.homeManagerConfiguration { framework = home-manager.lib.homeManagerConfiguration {
inherit pkgs; inherit pkgs;
extraSpecialArgs = {
ff-addons = nur.repos.rycee.firefox-addons;
};
modules = [ modules = [
# ../home-modules/modules-list.nix ../home-modules/modules-list.nix
./framework ./framework
]; ];
}; };

View File

@ -1,92 +1,5 @@
{ {...}: {
pkgs, personal.firefox = {
lib,
stdenv,
specialArgs,
...
}: let
extensions = with specialArgs.ff-addons; [
bitwarden
darkreader
i-dont-care-about-cookies
privacy-badger
ublock-origin
tree-style-tab
# tridactyl
];
customChrome = builtins.readFile ./userChrome.css;
userChrome = customChrome;
# ~/.mozilla/firefox/PROFILE_NAME/prefs.js | user.js
settings = {
"app.normandy.first_run" = false;
"app.shield.optoutstudies.enabled" = false;
# disable updates (pretty pointless with nix)
"app.update.channel" = "default";
"browser.contentblocking.category" = "standard"; # "strict"
"browser.ctrlTab.recentlyUsedOrder" = false;
"browser.download.viewableInternally.typeWasRegistered.svg" = true;
"browser.download.viewableInternally.typeWasRegistered.webp" = true;
"browser.download.viewableInternally.typeWasRegistered.xml" = true;
"browser.search.region" = "DE";
"browser.shell.checkDefaultBrowser" = false;
"browser.tabs.loadInBackground" = true;
"browser.urlbar.placeholderName" = "EnteEnteLauf";
"browser.urlbar.showSearchSuggestionsFirst" = false;
# disable all the annoying quick actions
"browser.urlbar.quickactions.enabled" = false;
"browser.urlbar.quickactions.showPrefs" = false;
"browser.urlbar.shortcuts.quickactions" = false;
"browser.urlbar.suggest.quickactions" = false;
"distribution.searchplugins.defaultLocale" = "en-US";
"doh-rollout.balrog-migration-done" = true;
"doh-rollout.doneFirstRun" = true;
"general.useragent.locale" = "en-US";
"extensions.activeThemeID" = "firefox-compact-dark@mozilla.org";
"extensions.extensions.activeThemeID" = "firefox-compact-dark@mozilla.org";
"extensions.update.enabled" = false;
"extensions.webcompat.enable_picture_in_picture_overrides" = true;
"extensions.webcompat.enable_shims" = true;
"extensions.webcompat.perform_injections" = true;
"extensions.webcompat.perform_ua_overrides" = true;
"privacy.donottrackheader.enabled" = true;
"browser.translations.enable" = false;
# Yubikey
"security.webauth.u2f" = true;
"security.webauth.webauthn" = true;
"security.webauth.webauthn_enable_softtoken" = false;
"security.webauth.webauthn_enable_usbtoken" = true;
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
"layout.word_select.stop_at_punctuation" = false;
};
in {
programs.firefox = {
enable = true; enable = true;
package = pkgs.firefox-bin;
profiles = {
default = {
isDefault = true;
id = 0;
inherit extensions settings userChrome;
};
};
}; };
} }