grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / desktops / profile-sync-daemon.nix
blob48b29a59135c913e5164e15c6224e4b6151a8bd7
1 { config, pkgs, lib, ... }:
2 let
3   cfg = config.services.psd;
4 in {
5   options.services.psd = with lib.types; {
6     enable = lib.mkOption {
7       type = bool;
8       default = false;
9       description = ''
10         Whether to enable the Profile Sync daemon.
11       '';
12     };
13     resyncTimer = lib.mkOption {
14       type = str;
15       default = "1h";
16       example = "1h 30min";
17       description = ''
18         The amount of time to wait before syncing browser profiles back to the
19         disk.
21         Takes a systemd.unit time span. The time unit defaults to seconds if
22         omitted.
23       '';
24     };
25   };
27   config = lib.mkIf cfg.enable {
28     systemd = {
29       user = {
30         services = {
31           psd = {
32             enable = true;
33             description = "Profile Sync daemon";
34             wants = [ "psd-resync.service" ];
35             wantedBy = [ "default.target" ];
36             path = with pkgs; [ rsync kmod gawk nettools util-linux profile-sync-daemon ];
37             unitConfig = {
38               RequiresMountsFor = [ "/home/" ];
39             };
40             serviceConfig = {
41               Type = "oneshot";
42               RemainAfterExit = "yes";
43               ExecStart = "${pkgs.profile-sync-daemon}/bin/profile-sync-daemon sync";
44               ExecStop = "${pkgs.profile-sync-daemon}/bin/profile-sync-daemon unsync";
45             };
46           };
48           psd-resync = {
49             enable = true;
50             description = "Timed profile resync";
51             after = [ "psd.service" ];
52             wants = [ "psd-resync.timer" ];
53             partOf = [ "psd.service" ];
54             wantedBy = [ "default.target" ];
55             path = with pkgs; [ rsync kmod gawk nettools util-linux profile-sync-daemon ];
56             serviceConfig = {
57               Type = "oneshot";
58               ExecStart = "${pkgs.profile-sync-daemon}/bin/profile-sync-daemon resync";
59             };
60           };
61         };
63         timers.psd-resync = {
64           description = "Timer for profile sync daemon - ${cfg.resyncTimer}";
65           partOf = [ "psd-resync.service" "psd.service" ];
67           timerConfig = {
68             OnUnitActiveSec = "${cfg.resyncTimer}";
69           };
70         };
71       };
72     };
73   };