at master 1.7 kB view raw
1{ 2 pkgs, 3 lib, 4 config, 5 ... 6}: 7let 8 cfg = config.services.timekpr; 9 targetBaseDir = "/var/lib/timekpr"; 10 daemonUser = "root"; 11 daemonGroup = "root"; 12in 13{ 14 options = { 15 services.timekpr = { 16 package = lib.mkPackageOption pkgs "timekpr" { }; 17 enable = lib.mkEnableOption "Timekpr-nExT, a screen time managing application that helps optimizing time spent at computer for your subordinates, children or even for yourself"; 18 adminUsers = lib.mkOption { 19 type = lib.types.listOf lib.types.str; 20 default = [ ]; 21 example = [ 22 "alice" 23 "bob" 24 ]; 25 description = '' 26 All listed users will become part of the `timekpr` group so they can manage timekpr settings without requiring sudo. 27 ''; 28 }; 29 }; 30 }; 31 32 config = lib.mkIf cfg.enable { 33 users.groups.timekpr = { 34 gid = 2000; 35 members = cfg.adminUsers; 36 }; 37 38 environment.systemPackages = [ 39 # Add timekpr to system packages so that polkit can find it 40 cfg.package 41 ]; 42 services.dbus.enable = true; 43 services.dbus.packages = [ 44 cfg.package 45 ]; 46 environment.etc."timekpr" = { 47 source = "${cfg.package}/etc/timekpr"; 48 }; 49 systemd.packages = [ 50 cfg.package 51 ]; 52 systemd.services.timekpr = { 53 enable = true; 54 wantedBy = [ "multi-user.target" ]; 55 }; 56 security.polkit.enable = true; 57 systemd.tmpfiles.rules = [ 58 "d ${targetBaseDir} 0755 ${daemonUser} ${daemonGroup} -" 59 "d ${targetBaseDir}/config 0755 ${daemonUser} ${daemonGroup} -" 60 "d ${targetBaseDir}/work 0755 ${daemonUser} ${daemonGroup} -" 61 ]; 62 }; 63 64 meta.maintainers = [ lib.maintainers.atry ]; 65}