mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-01-22 21:04:30 +00:00
nixos/firefox: add autoConfigFiles (#321254)
This commit is contained in:
commit
716f0a7327
@ -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
|
||||
];
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user