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}