gogup: 0.27.5 -> 0.27.6 (#373906)
[NixPkgs.git] / nixos / modules / services / system / localtimed.nix
blob404cdaba7b426948675272e0b11dfd1e4c1171cf
2   config,
3   lib,
4   pkgs,
5   ...
6 }:
7 let
8   cfg = config.services.localtimed;
9 in
11   imports = [ (lib.mkRenamedOptionModule [ "services" "localtime" ] [ "services" "localtimed" ]) ];
13   options = {
14     services.localtimed = {
15       enable = lib.mkOption {
16         type = lib.types.bool;
17         default = false;
18         description = ''
19           Enable `localtimed`, a simple daemon for keeping the
20           system timezone up-to-date based on the current location. It uses
21           geoclue2 to determine the current location.
23           To avoid silent overriding by the service, if you have explicitly set a
24           timezone, either remove it or ensure that it is set with a lower priority
25           than the default value using `lib.mkDefault` or `lib.mkOverride`. This is
26           to make the choice deliberate. An error will be presented otherwise.
27         '';
28       };
29       package = lib.mkPackageOption pkgs "localtime" { };
30       geoclue2Package = lib.mkPackageOption pkgs "Geoclue2" { default = "geoclue2-with-demo-agent"; };
31     };
32   };
34   config = lib.mkIf cfg.enable {
35     # This will give users an error if they have set an explicit time
36     # zone, rather than having the service silently override it.
37     time.timeZone = null;
39     services.geoclue2.appConfig.localtimed = {
40       isAllowed = true;
41       isSystem = true;
42       users = [ (toString config.ids.uids.localtimed) ];
43     };
45     # Install the polkit rules.
46     environment.systemPackages = [ cfg.package ];
48     systemd.services.localtimed = {
49       wantedBy = [ "multi-user.target" ];
50       partOf = [ "localtimed-geoclue-agent.service" ];
51       after = [ "localtimed-geoclue-agent.service" ];
52       serviceConfig = {
53         ExecStart = "${cfg.package}/bin/localtimed";
54         Restart = "on-failure";
55         Type = "exec";
56         User = "localtimed";
57       };
58     };
60     systemd.services.localtimed-geoclue-agent = {
61       wantedBy = [ "multi-user.target" ];
62       partOf = [ "geoclue.service" ];
63       after = [ "geoclue.service" ];
64       serviceConfig = {
65         ExecStart = "${cfg.geoclue2Package}/libexec/geoclue-2.0/demos/agent";
66         Restart = "on-failure";
67         Type = "exec";
68         User = "localtimed";
69       };
70     };
72     users = {
73       users.localtimed = {
74         uid = config.ids.uids.localtimed;
75         group = "localtimed";
76       };
77       groups.localtimed.gid = config.ids.gids.localtimed;
78     };
79   };