diff options
Diffstat (limited to 'nixos/modules/programs/firefox.nix')
-rw-r--r-- | nixos/modules/programs/firefox.nix | 345 |
1 files changed, 196 insertions, 149 deletions
diff --git a/nixos/modules/programs/firefox.nix b/nixos/modules/programs/firefox.nix index 7521708fa94f..ed874cad74e4 100644 --- a/nixos/modules/programs/firefox.nix +++ b/nixos/modules/programs/firefox.nix @@ -1,4 +1,9 @@ -{ pkgs, config, lib, ... }: +{ + pkgs, + config, + lib, + ... +}: let cfg = config.programs.firefox; @@ -78,7 +83,7 @@ in wrapperConfig = lib.mkOption { type = lib.types.attrs; - default = {}; + default = { }; description = "Arguments to pass to Firefox wrapper"; }; @@ -99,7 +104,13 @@ in }; preferences = lib.mkOption { - type = with lib.types; attrsOf (oneOf [ bool int str ]); + type = + with lib.types; + attrsOf (oneOf [ + bool + int + str + ]); default = { }; description = '' Preferences to set from `about:config`. @@ -112,7 +123,12 @@ in }; preferencesStatus = lib.mkOption { - type = lib.types.enum [ "default" "locked" "user" "clear" ]; + type = lib.types.enum [ + "default" + "locked" + "user" + "clear" + ]; default = "locked"; description = '' The status of `firefox.preferences`. @@ -127,111 +143,113 @@ in languagePacks = lib.mkOption { # Available languages can be found in https://releases.mozilla.org/pub/firefox/releases/${cfg.package.version}/linux-x86_64/xpi/ - type = lib.types.listOf (lib.types.enum ([ - "ach" - "af" - "an" - "ar" - "ast" - "az" - "be" - "bg" - "bn" - "br" - "bs" - "ca-valencia" - "ca" - "cak" - "cs" - "cy" - "da" - "de" - "dsb" - "el" - "en-CA" - "en-GB" - "en-US" - "eo" - "es-AR" - "es-CL" - "es-ES" - "es-MX" - "et" - "eu" - "fa" - "ff" - "fi" - "fr" - "fur" - "fy-NL" - "ga-IE" - "gd" - "gl" - "gn" - "gu-IN" - "he" - "hi-IN" - "hr" - "hsb" - "hu" - "hy-AM" - "ia" - "id" - "is" - "it" - "ja" - "ka" - "kab" - "kk" - "km" - "kn" - "ko" - "lij" - "lt" - "lv" - "mk" - "mr" - "ms" - "my" - "nb-NO" - "ne-NP" - "nl" - "nn-NO" - "oc" - "pa-IN" - "pl" - "pt-BR" - "pt-PT" - "rm" - "ro" - "ru" - "sat" - "sc" - "sco" - "si" - "sk" - "skr" - "sl" - "son" - "sq" - "sr" - "sv-SE" - "szl" - "ta" - "te" - "tg" - "th" - "tl" - "tr" - "trs" - "uk" - "ur" - "uz" - "vi" - "xh" - "zh-CN" - "zh-TW" - ])); + type = lib.types.listOf ( + lib.types.enum ([ + "ach" + "af" + "an" + "ar" + "ast" + "az" + "be" + "bg" + "bn" + "br" + "bs" + "ca-valencia" + "ca" + "cak" + "cs" + "cy" + "da" + "de" + "dsb" + "el" + "en-CA" + "en-GB" + "en-US" + "eo" + "es-AR" + "es-CL" + "es-ES" + "es-MX" + "et" + "eu" + "fa" + "ff" + "fi" + "fr" + "fur" + "fy-NL" + "ga-IE" + "gd" + "gl" + "gn" + "gu-IN" + "he" + "hi-IN" + "hr" + "hsb" + "hu" + "hy-AM" + "ia" + "id" + "is" + "it" + "ja" + "ka" + "kab" + "kk" + "km" + "kn" + "ko" + "lij" + "lt" + "lv" + "mk" + "mr" + "ms" + "my" + "nb-NO" + "ne-NP" + "nl" + "nn-NO" + "oc" + "pa-IN" + "pl" + "pt-BR" + "pt-PT" + "rm" + "ro" + "ru" + "sat" + "sc" + "sco" + "si" + "sk" + "skr" + "sl" + "son" + "sq" + "sr" + "sv-SE" + "szl" + "ta" + "te" + "tg" + "th" + "tl" + "tr" + "trs" + "uk" + "ur" + "uz" + "vi" + "xh" + "zh-CN" + "zh-TW" + ]) + ); default = [ ]; description = '' The language packs to install. @@ -249,10 +267,23 @@ in ''; }; + autoConfigFiles = lib.mkOption { + type = with lib.types; listOf path; + default = [ ]; + description = '' + AutoConfig files can be used to set and lock preferences that are not covered + by the policies.json for Mac and Linux. This method can be used to automatically + change user preferences or prevent the end user from modifiying specific + preferences by locking them. More info can be found in https://support.mozilla.org/en-US/kb/customizing-firefox-using-autoconfig. + + Files are concated and autoConfig is appended. + ''; + }; + nativeMessagingHosts = ({ packages = lib.mkOption { type = lib.types.listOf lib.types.package; - default = []; + default = [ ]; description = '' Additional packages containing native messaging hosts that should be made available to Firefox extensions. ''; @@ -260,48 +291,64 @@ in }) // (builtins.mapAttrs (k: v: lib.mkEnableOption "${v.name} support") nmhOptions); }; - config = let - forEachEnabledNmh = fn: lib.flatten (lib.mapAttrsToList (k: v: lib.optional cfg.nativeMessagingHosts.${k} (fn k v)) nmhOptions); - in lib.mkIf cfg.enable { - warnings = forEachEnabledNmh (k: v: - "The `programs.firefox.nativeMessagingHosts.${k}` option is deprecated, " + - "please add `${v.package.pname}` to `programs.firefox.nativeMessagingHosts.packages` instead." - ); - programs.firefox.nativeMessagingHosts.packages = forEachEnabledNmh (_: v: v.package); + config = + let + forEachEnabledNmh = + fn: + lib.flatten ( + lib.mapAttrsToList (k: v: lib.optional cfg.nativeMessagingHosts.${k} (fn k v)) nmhOptions + ); + in + lib.mkIf cfg.enable { + warnings = forEachEnabledNmh ( + k: v: + "The `programs.firefox.nativeMessagingHosts.${k}` option is deprecated, " + + "please add `${v.package.pname}` to `programs.firefox.nativeMessagingHosts.packages` instead." + ); + programs.firefox.nativeMessagingHosts.packages = forEachEnabledNmh (_: v: v.package); - environment.systemPackages = [ - (cfg.package.override (old: { - extraPrefsFiles = old.extraPrefsFiles or [] ++ [(pkgs.writeText "firefox-autoconfig.js" cfg.autoConfig)]; - nativeMessagingHosts = old.nativeMessagingHosts or [] ++ cfg.nativeMessagingHosts.packages; - cfg = (old.cfg or {}) // cfg.wrapperConfig; - })) - ]; + environment.systemPackages = [ + (cfg.package.override (old: { + extraPrefsFiles = + old.extraPrefsFiles or [ ] + ++ cfg.autoConfigFiles + ++ [ (pkgs.writeText "firefox-autoconfig.js" cfg.autoConfig) ]; + nativeMessagingHosts = old.nativeMessagingHosts or [ ] ++ cfg.nativeMessagingHosts.packages; + cfg = (old.cfg or { }) // cfg.wrapperConfig; + })) + ]; - environment.etc = - let - policiesJSON = policyFormat.generate "firefox-policies.json" { inherit (cfg) policies; }; - in - lib.mkIf (cfg.policies != { }) { - "firefox/policies/policies.json".source = "${policiesJSON}"; - }; + environment.etc = + let + policiesJSON = policyFormat.generate "firefox-policies.json" { inherit (cfg) policies; }; + in + lib.mkIf (cfg.policies != { }) { + "firefox/policies/policies.json".source = "${policiesJSON}"; + }; - # Preferences are converted into a policy - programs.firefox.policies = { - DisableAppUpdate = true; - Preferences = (builtins.mapAttrs - (_: value: { Value = value; Status = cfg.preferencesStatus; }) - cfg.preferences); - ExtensionSettings = builtins.listToAttrs (builtins.map - (lang: lib.attrsets.nameValuePair - "langpack-${lang}@firefox.mozilla.org" - { - installation_mode = "normal_installed"; - install_url = "https://releases.mozilla.org/pub/firefox/releases/${cfg.package.version}/linux-x86_64/xpi/${lang}.xpi"; - } - ) - cfg.languagePacks); + # Preferences are converted into a policy + programs.firefox.policies = { + DisableAppUpdate = true; + Preferences = ( + builtins.mapAttrs (_: value: { + Value = value; + Status = cfg.preferencesStatus; + }) cfg.preferences + ); + ExtensionSettings = builtins.listToAttrs ( + builtins.map ( + lang: + lib.attrsets.nameValuePair "langpack-${lang}@firefox.mozilla.org" { + installation_mode = "normal_installed"; + install_url = "https://releases.mozilla.org/pub/firefox/releases/${cfg.package.version}/linux-x86_64/xpi/${lang}.xpi"; + } + ) cfg.languagePacks + ); + }; }; - }; - meta.maintainers = with lib.maintainers; [ danth ]; + meta.maintainers = with lib.maintainers; [ + danth + linsui + ]; } |