firefox: add internal options for config paths

This commit is contained in:
bricked 2024-03-16 16:47:44 +01:00 committed by Robert Helgesson
parent cac6d3721d
commit 88cd895cf6
No known key found for this signature in database
GPG Key ID: 96E745BD17AA17ED
2 changed files with 62 additions and 35 deletions

View File

@ -29,18 +29,12 @@ let
else
unwrappedPackageName;
vendorPath = with platforms;
if isDarwin then darwin.vendorPath or null else linux.vendorPath or null;
configPath = with platforms;
if isDarwin then darwin.configPath else linux.configPath;
profilesPath = if isDarwin then "${configPath}/Profiles" else configPath;
profilesPath = if isDarwin then "${cfg.configPath}/Profiles" else cfg.configPath;
nativeMessagingHostsPath = if isDarwin then
"${vendorPath}/NativeMessagingHosts"
"${cfg.vendorPath}/NativeMessagingHosts"
else
"${vendorPath}/native-messaging-hosts";
"${cfg.vendorPath}/native-messaging-hosts";
nativeMessagingHostsJoined = pkgs.symlinkJoin {
name = "ff_native-messaging-hosts";
@ -233,8 +227,11 @@ let
in {
options = setAttrByPath modulePath {
enable = mkOption {
type = types.bool;
default = false;
example = true;
description = ''
Whether to enable ${name}.${
Whether to enable ${cfg.name}.${
optionalString (description != null) " ${description}"
}
${optionalString (!visible)
@ -259,20 +256,50 @@ in {
}
'';
description = ''
The ${name} package to use. If state version 19.09 then
this should be a wrapped ${name} package. For earlier state
versions it should be an unwrapped ${name} package.
Set to `null` to disable installing ${name}.
The ${cfg.name} package to use. If state version 19.09 then
this should be a wrapped ${cfg.name} package. For earlier state
versions it should be an unwrapped ${cfg.name} package.
Set to `null` to disable installing ${cfg.name}.
'';
};
nativeMessagingHosts = optionalAttrs (vendorPath != null) (mkOption {
name = mkOption {
internal = true;
type = types.str;
default = name;
example = "Firefox";
description = "The name of the browser.";
};
vendorPath = mkOption {
internal = true;
type = with types; nullOr str;
default = with platforms;
if isDarwin then
darwin.vendorPath or null
else
linux.vendorPath or null;
example = ".mozilla";
description =
"Directory containing the native messaging hosts directory.";
};
configPath = mkOption {
internal = true;
type = types.str;
default = with platforms;
if isDarwin then darwin.configPath else linux.configPath;
example = ".mozilla/firefox";
description = "Directory containing the ${cfg.name} configuration files.";
};
nativeMessagingHosts = optionalAttrs (cfg.vendorPath != null) (mkOption {
inherit visible;
type = types.listOf types.package;
default = [ ];
description = ''
Additional packages containing native messaging hosts that should be
made available to ${name} extensions.
made available to ${cfg.name} extensions.
'';
});
@ -280,7 +307,7 @@ in {
inherit visible;
type = with types; nullOr package;
readOnly = true;
description = "Resulting ${name} package.";
description = "Resulting ${cfg.name} package.";
};
policies = optionalAttrs (unwrappedPackageName != null) (mkOption {
@ -316,7 +343,7 @@ in {
settings = mkOption {
type = types.attrsOf (jsonFormat.type // {
description =
"${name} preference (int, bool, string, and also attrs, list, float as a JSON string)";
"${cfg.name} preference (int, bool, string, and also attrs, list, float as a JSON string)";
});
default = { };
example = literalExpression ''
@ -334,9 +361,9 @@ in {
}
'';
description = ''
Attribute set of ${name} preferences.
Attribute set of ${cfg.name} preferences.
${name} only supports int, bool, and string types for
${cfg.name} only supports int, bool, and string types for
preferences, but home-manager will automatically
convert all other JSON-compatible values into strings.
'';
@ -353,7 +380,7 @@ in {
userChrome = mkOption {
type = types.lines;
default = "";
description = "Custom ${name} user chrome CSS.";
description = "Custom ${cfg.name} user chrome CSS.";
example = ''
/* Hide tab bar in FF Quantum */
@-moz-document url("chrome://browser/content/browser.xul") {
@ -372,7 +399,7 @@ in {
userContent = mkOption {
type = types.lines;
default = "";
description = "Custom ${name} user content CSS.";
description = "Custom ${cfg.name} user content CSS.";
example = ''
/* Hide scrollbar in FF Quantum */
*{scrollbar-width:none !important}
@ -498,7 +525,7 @@ in {
default = false;
description = ''
Whether to force replace the existing search
configuration. This is recommended since ${name} will
configuration. This is recommended since ${cfg.name} will
replace the symlink for the search configuration on every
launch, but note that you'll lose any existing
configuration by enabling this.
@ -566,7 +593,7 @@ in {
description = ''
Attribute set of search engine configurations. Engines
that only have {var}`metaData` specified will
be treated as builtin to ${name}.
be treated as builtin to ${cfg.name}.
See [SearchEngine.jsm](https://searchfox.org/mozilla-central/rev/669329e284f8e8e2bb28090617192ca9b4ef3380/toolkit/components/search/SearchEngine.jsm#1138-1177)
in Firefox's source for available options. We maintain a
@ -678,7 +705,7 @@ in {
]
'';
description = ''
List of ${name} add-on packages to install for this profile.
List of ${cfg.name} add-on packages to install for this profile.
Some pre-packaged add-ons are accessible from the
[Nix User Repository](https://github.com/nix-community/NUR).
Once you have NUR installed run
@ -687,10 +714,10 @@ in {
$ nix-env -f '<nixpkgs>' -qaP -A nur.repos.rycee.firefox-addons
```
to list the available ${name} add-ons.
to list the available ${cfg.name} add-ons.
Note that it is necessary to manually enable these extensions
inside ${name} after the first installation.
inside ${cfg.name} after the first installation.
To automatically enable extensions add
`"extensions.autoDisableScopes" = 0;`
@ -702,7 +729,7 @@ in {
};
}));
default = { };
description = "Attribute set of ${name} profiles.";
description = "Attribute set of ${cfg.name} profiles.";
};
enableGnomeExtensions = mkOption {
@ -727,7 +754,7 @@ in {
catAttrs "name" (filter (a: a.isDefault) (attrValues cfg.profiles));
in {
assertion = cfg.profiles == { } || length defaults == 1;
message = "Must have exactly one default ${name} profile but found "
message = "Must have exactly one default ${cfg.name} profile but found "
+ toString (length defaults) + optionalString (length defaults > 1)
(", namely " + concatStringsSep ", " defaults);
})
@ -761,9 +788,9 @@ in {
home.packages = lib.optional (cfg.finalPackage != null) cfg.finalPackage;
home.file = mkMerge ([{
"${configPath}/profiles.ini" =
"${cfg.configPath}/profiles.ini" =
mkIf (cfg.profiles != { }) { text = profilesIni; };
}] ++ optional (vendorPath != null) {
}] ++ optional (cfg.vendorPath != null) {
"${nativeMessagingHostsPath}" = {
source =
"${nativeMessagingHostsJoined}/lib/mozilla/native-messaging-hosts";
@ -913,12 +940,12 @@ in {
+ "to accordingly.";
salt = if profile.search.default != null then
profile.path + profile.search.default + disclaimer name
profile.path + profile.search.default + disclaimer cfg.name
else
null;
privateSalt = if profile.search.privateDefault != null then
profile.path + profile.search.privateDefault + disclaimer name
profile.path + profile.search.privateDefault + disclaimer cfg.name
else
null;
in pkgs.runCommand "search.json.mozlz4" {

View File

@ -1,6 +1,6 @@
{ config, lib, pkgs, ... }:
with lib;
{ config, lib, ... }:
{
imports = [ ./setup-firefox-mock-overlay.nix ];