grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / misc / nix-optimise.nix
blobed33f6746a4e4b2a9423ebadf4add291c92b3f5a
1 { config, lib, ... }:
3 let
4   cfg = config.nix.optimise;
5 in
8   options = {
9     nix.optimise = {
10       automatic = lib.mkOption {
11         default = false;
12         type = lib.types.bool;
13         description = "Automatically run the nix store optimiser at a specific time.";
14       };
16       dates = lib.mkOption {
17         default = ["03:45"];
18         type = with lib.types; listOf str;
19         description = ''
20           Specification (in the format described by
21           {manpage}`systemd.time(7)`) of the time at
22           which the optimiser will run.
23         '';
24       };
25     };
26   };
28   config = {
29     assertions = [
30       {
31         assertion = cfg.automatic -> config.nix.enable;
32         message = ''nix.optimise.automatic requires nix.enable'';
33       }
34     ];
36     systemd = lib.mkIf config.nix.enable {
37       services.nix-optimise = {
38         description = "Nix Store Optimiser";
39         # No point this if the nix daemon (and thus the nix store) is outside
40         unitConfig.ConditionPathIsReadWrite = "/nix/var/nix/daemon-socket";
41         serviceConfig.ExecStart = "${config.nix.package}/bin/nix-store --optimise";
42         startAt = lib.optionals cfg.automatic cfg.dates;
43       };
45       timers.nix-optimise = lib.mkIf cfg.automatic {
46         timerConfig = {
47           Persistent = true;
48           RandomizedDelaySec = 1800;
49         };
50       };
51     };
52   };