at 23.11-pre 1.5 kB view raw
1{ config, lib, pkgs, ... }: 2 3with lib; 4 5let 6 cfg = config.services.uptimed; 7 stateDir = "/var/lib/uptimed"; 8in 9{ 10 options = { 11 services.uptimed = { 12 enable = mkOption { 13 type = types.bool; 14 default = false; 15 description = lib.mdDoc '' 16 Enable `uptimed`, allowing you to track 17 your highest uptimes. 18 ''; 19 }; 20 }; 21 }; 22 23 config = mkIf cfg.enable { 24 25 environment.systemPackages = [ pkgs.uptimed ]; 26 27 users.users.uptimed = { 28 description = "Uptimed daemon user"; 29 home = stateDir; 30 uid = config.ids.uids.uptimed; 31 group = "uptimed"; 32 }; 33 users.groups.uptimed = {}; 34 35 systemd.services.uptimed = { 36 unitConfig.Documentation = "man:uptimed(8) man:uprecords(1)"; 37 description = "uptimed service"; 38 wantedBy = [ "multi-user.target" ]; 39 40 serviceConfig = { 41 Restart = "on-failure"; 42 User = "uptimed"; 43 Nice = 19; 44 IOSchedulingClass = "idle"; 45 PrivateTmp = "yes"; 46 PrivateNetwork = "yes"; 47 NoNewPrivileges = "yes"; 48 StateDirectory = [ "uptimed" ]; 49 InaccessibleDirectories = "/home"; 50 ExecStart = "${pkgs.uptimed}/sbin/uptimed -f -p ${stateDir}/pid"; 51 }; 52 53 preStart = '' 54 if ! test -f ${stateDir}/bootid ; then 55 ${pkgs.uptimed}/sbin/uptimed -b 56 fi 57 ''; 58 }; 59 }; 60}