|
|
|
@ -25,20 +25,73 @@ let |
|
|
|
|
|
|
|
|
|
extensions = mkOption { |
|
|
|
|
inherit visible; |
|
|
|
|
type = types.listOf types.str; |
|
|
|
|
type = with types; |
|
|
|
|
let |
|
|
|
|
extensionType = submodule { |
|
|
|
|
options = { |
|
|
|
|
id = mkOption { |
|
|
|
|
type = strMatching "[a-zA-Z]{32}"; |
|
|
|
|
description = '' |
|
|
|
|
The extension's ID from the Chome Web Store url or the unpacked crx. |
|
|
|
|
''; |
|
|
|
|
default = ""; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
updateUrl = mkOption { |
|
|
|
|
type = str; |
|
|
|
|
description = '' |
|
|
|
|
URL of the extension's update manifest XML file. Linux only. |
|
|
|
|
''; |
|
|
|
|
default = "https://clients2.google.com/service/update2/crx"; |
|
|
|
|
visible = pkgs.stdenv.isLinux; |
|
|
|
|
readOnly = pkgs.stdenv.isDarwin; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
crxPath = mkOption { |
|
|
|
|
type = nullOr path; |
|
|
|
|
description = '' |
|
|
|
|
Path to the extension's crx file. Linux only. |
|
|
|
|
''; |
|
|
|
|
default = null; |
|
|
|
|
visible = pkgs.stdenv.isLinux; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
version = mkOption { |
|
|
|
|
type = nullOr str; |
|
|
|
|
description = '' |
|
|
|
|
The extension's version, required for local installation. Linux only. |
|
|
|
|
''; |
|
|
|
|
default = null; |
|
|
|
|
visible = pkgs.stdenv.isLinux; |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
in listOf (coercedTo str (v: { id = v; }) extensionType); |
|
|
|
|
default = [ ]; |
|
|
|
|
example = literalExample '' |
|
|
|
|
[ |
|
|
|
|
"chlffgpmiacpedhhbkiomidkjlcfhogd" # pushbullet |
|
|
|
|
"mbniclmhobmnbdlbpiphghaielnnpgdp" # lightshot |
|
|
|
|
"gcbommkclmclpchllfjekcdonpmejbdp" # https everywhere |
|
|
|
|
"cjpalhdlnbpafiamejdnhcphjbkeiagm" # ublock origin |
|
|
|
|
{ id = "cjpalhdlnbpafiamejdnhcphjbkeiagm"; } # ublock origin |
|
|
|
|
{ |
|
|
|
|
id = "dcpihecpambacapedldabdbpakmachpb"; |
|
|
|
|
updateUrl = "https://raw.githubusercontent.com/iamadamdev/bypass-paywalls-chrome/master/updates.xml"; |
|
|
|
|
} |
|
|
|
|
{ |
|
|
|
|
id = "aaaaaaaaaabbbbbbbbbbcccccccccc"; |
|
|
|
|
crxPath = "/home/share/extension.crx"; |
|
|
|
|
version = "1.0"; |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
''; |
|
|
|
|
description = '' |
|
|
|
|
List of ${name} extensions to install. |
|
|
|
|
To find the extension ID, check its URL on the |
|
|
|
|
<link xlink:href="https://chrome.google.com/webstore/category/extensions">Chrome Web Store</link>. |
|
|
|
|
</para><para> |
|
|
|
|
To install extensions outside of the Chrome Web Store set |
|
|
|
|
<literal>updateUrl</literal> or <literal>crxPath</literal> and |
|
|
|
|
<literal>version</literal> as explained in the |
|
|
|
|
<link xlink:href="https://developer.chrome.com/docs/extensions/mv2/external_extensions">Chrome |
|
|
|
|
documentation</link>. |
|
|
|
|
''; |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
@ -61,13 +114,17 @@ let |
|
|
|
|
else |
|
|
|
|
"${config.xdg.configHome}/${browser}"; |
|
|
|
|
|
|
|
|
|
extensionJson = ext: { |
|
|
|
|
name = "${configDir}/External Extensions/${ext}.json"; |
|
|
|
|
value.text = builtins.toJSON { |
|
|
|
|
external_update_url = |
|
|
|
|
"https://clients2.google.com/service/update2/crx"; |
|
|
|
|
extensionJson = ext: |
|
|
|
|
with builtins; { |
|
|
|
|
name = "${configDir}/External Extensions/${ext.id}.json"; |
|
|
|
|
value.text = toJSON |
|
|
|
|
(if (isPath ext.crxPath && isString ext.version) then { |
|
|
|
|
external_crx = ext.crxPath; |
|
|
|
|
external_version = ext.version; |
|
|
|
|
} else { |
|
|
|
|
external_update_url = ext.updateUrl; |
|
|
|
|
}); |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
in mkIf cfg.enable { |
|
|
|
|
home.packages = [ cfg.package ]; |
|
|
|
|