1{ config, lib, ... }:
2
3with lib;
4
5let
6 cfg = config.programs.chromium;
7
8 defaultProfile = filterAttrs (k: v: v != null) {
9 HomepageLocation = cfg.homepageLocation;
10 DefaultSearchProviderSearchURL = cfg.defaultSearchProviderSearchURL;
11 DefaultSearchProviderSuggestURL = cfg.defaultSearchProviderSuggestURL;
12 ExtensionInstallForcelist = map (extension:
13 "${extension};https://clients2.google.com/service/update2/crx"
14 ) cfg.extensions;
15 };
16in
17
18{
19 ###### interface
20
21 options = {
22 programs.chromium = {
23 enable = mkEnableOption "<command>chromium</command> policies";
24
25 extensions = mkOption {
26 type = types.listOf types.str;
27 description = ''
28 List of chromium extensions to install.
29 For list of plugins ids see id in url of extensions on
30 <link xlink:href="https://chrome.google.com/webstore/category/extensions">chrome web store</link>
31 page.
32 '';
33 default = [];
34 example = literalExample ''
35 [
36 "chlffgpmiacpedhhbkiomidkjlcfhogd" # pushbullet
37 "mbniclmhobmnbdlbpiphghaielnnpgdp" # lightshot
38 "gcbommkclmclpchllfjekcdonpmejbdp" # https everywhere
39 "cjpalhdlnbpafiamejdnhcphjbkeiagm" # ublock origin
40 ]
41 '';
42 };
43
44 homepageLocation = mkOption {
45 type = types.nullOr types.str;
46 description = "Chromium default homepage";
47 default = null;
48 example = "https://nixos.org";
49 };
50
51 defaultSearchProviderSearchURL = mkOption {
52 type = types.nullOr types.str;
53 description = "Chromium default search provider url.";
54 default = null;
55 example =
56 "https://encrypted.google.com/search?q={searchTerms}&{google:RLZ}{google:originalQueryForSuggestion}{google:assistedQueryStats}{google:searchFieldtrialParameter}{google:searchClient}{google:sourceId}{google:instantExtendedEnabledParameter}ie={inputEncoding}";
57 };
58
59 defaultSearchProviderSuggestURL = mkOption {
60 type = types.nullOr types.str;
61 description = "Chromium default search provider url for suggestions.";
62 default = null;
63 example =
64 "https://encrypted.google.com/complete/search?output=chrome&q={searchTerms}";
65 };
66
67 extraOpts = mkOption {
68 type = types.attrs;
69 description = ''
70 Extra chromium policy options, see
71 <link xlink:href="https://www.chromium.org/administrators/policy-list-3">https://www.chromium.org/administrators/policy-list-3</link>
72 for a list of avalible options
73 '';
74 default = {};
75 };
76 };
77 };
78
79 ###### implementation
80
81 config = lib.mkIf cfg.enable {
82 # for chromium
83 environment.etc."chromium/policies/managed/default.json".text = builtins.toJSON defaultProfile;
84 environment.etc."chromium/policies/managed/extra.json".text = builtins.toJSON cfg.extraOpts;
85 # for google-chrome https://www.chromium.org/administrators/linux-quick-start
86 environment.etc."opt/chrome/policies/managed/default.json".text = builtins.toJSON defaultProfile;
87 environment.etc."opt/chrome/policies/managed/extra.json".text = builtins.toJSON cfg.extraOpts;
88 };
89}