grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / programs / thunderbird.nix
blobb15c1df6094393b36d5d3a3a67cec711773ff2fb
2   pkgs,
3   config,
4   lib,
5   ...
6 }:
7 let
8   cfg = config.programs.thunderbird;
9   policyFormat = pkgs.formats.json { };
10   policyDoc = "https://github.com/thunderbird/policy-templates";
13   options.programs.thunderbird = {
14     enable = lib.mkEnableOption "Thunderbird mail client";
16     package = lib.mkPackageOption pkgs "thunderbird" { };
18     policies = lib.mkOption {
19       type = policyFormat.type;
20       default = { };
21       description = ''
22         Group policies to install.
24         See [Thunderbird's documentation](${policyDoc})
25         for a list of available options.
27         This can be used to install extensions declaratively! Check out the
28         documentation of the `ExtensionSettings` policy for details.
30       '';
31     };
33     preferences = lib.mkOption {
34       type =
35         with lib.types;
36         attrsOf (oneOf [
37           bool
38           int
39           str
40         ]);
41       default = { };
42       description = ''
43         Preferences to set from `about:config`.
45         Some of these might be able to be configured more ergonomically
46         using policies.
47       '';
48     };
50     preferencesStatus = lib.mkOption {
51       type = lib.types.enum [
52         "default"
53         "locked"
54         "user"
55         "clear"
56       ];
57       default = "locked";
58       description = ''
59         The status of `thunderbird.preferences`.
61         `status` can assume the following values:
62         - `"default"`: Preferences appear as default.
63         - `"locked"`: Preferences appear as default and can't be changed.
64         - `"user"`: Preferences appear as changed.
65         - `"clear"`: Value has no effect. Resets to factory defaults on each startup.
66       '';
67     };
68   };
70   config = lib.mkIf cfg.enable {
71     environment.systemPackages = [ cfg.package ];
73     environment.etc =
74       let
75         policiesJSON = policyFormat.generate "thunderbird-policies.json" { inherit (cfg) policies; };
76       in
77       lib.mkIf (cfg.policies != { }) { "thunderbird/policies/policies.json".source = policiesJSON; };
79     programs.thunderbird.policies = {
80       DisableAppUpdate = true;
81       Preferences = builtins.mapAttrs (_: value: {
82         Value = value;
83         Status = cfg.preferencesStatus;
84       }) cfg.preferences;
85     };
86   };
88   meta.maintainers = with lib.maintainers; [ nydragon ];