1{pkgs, config, lib, ...}:
2
3let
4
5 inherit (lib) mkOption mkIf singleton;
6
7 inherit (pkgs) uptimed;
8
9 stateDir = "/var/spool/uptimed";
10
11 uptimedUser = "uptimed";
12
13in
14
15{
16
17 ###### interface
18
19 options = {
20
21 services.uptimed = {
22
23 enable = mkOption {
24 default = false;
25 description = ''
26 Uptimed allows you to track your highest uptimes.
27 '';
28 };
29
30 };
31
32 };
33
34
35 ###### implementation
36
37 config = mkIf config.services.uptimed.enable {
38
39 environment.systemPackages = [ uptimed ];
40
41 users.extraUsers = singleton
42 { name = uptimedUser;
43 uid = config.ids.uids.uptimed;
44 description = "Uptimed daemon user";
45 home = stateDir;
46 };
47
48 jobs.uptimed =
49 { description = "Uptimed daemon";
50
51 startOn = "startup";
52
53 preStart =
54 ''
55 mkdir -m 0755 -p ${stateDir}
56 chown ${uptimedUser} ${stateDir}
57
58 if ! test -f ${stateDir}/bootid ; then
59 ${uptimed}/sbin/uptimed -b
60 fi
61 '';
62
63 exec = "${uptimed}/sbin/uptimed";
64 };
65
66 };
67
68}