diff options
author | WilliButz <wbutz@cyberfnord.de> | 2017-10-05 15:49:12 +0200 |
---|---|---|
committer | Robin Gloster <mail@glob.in> | 2017-10-10 19:02:27 +0200 |
commit | 5e8d1757ef38629e240e4c5262def2ba9418c35b (patch) | |
tree | 2555f3f21a5c5189fad3bb6c29acb82d790596ec | |
parent | e64f4d811814a0e44f70c222fba3731af0300d3f (diff) | |
download | nixpkgs-5e8d1757ef38629e240e4c5262def2ba9418c35b.tar nixpkgs-5e8d1757ef38629e240e4c5262def2ba9418c35b.tar.gz nixpkgs-5e8d1757ef38629e240e4c5262def2ba9418c35b.tar.bz2 nixpkgs-5e8d1757ef38629e240e4c5262def2ba9418c35b.tar.lz nixpkgs-5e8d1757ef38629e240e4c5262def2ba9418c35b.tar.xz nixpkgs-5e8d1757ef38629e240e4c5262def2ba9418c35b.tar.zst nixpkgs-5e8d1757ef38629e240e4c5262def2ba9418c35b.zip |
nixos/xautolock: rewrite and add some options
-rw-r--r-- | nixos/modules/services/x11/xautolock.nix | 92 |
1 files changed, 78 insertions, 14 deletions
diff --git a/nixos/modules/services/x11/xautolock.nix b/nixos/modules/services/x11/xautolock.nix index 60ce9e6ed5c..28fc92024bc 100644 --- a/nixos/modules/services/x11/xautolock.nix +++ b/nixos/modules/services/x11/xautolock.nix @@ -31,7 +31,17 @@ in type = types.string; description = '' - The script to use when locking the computer. + The script to use when automatically locking the computer. + ''; + }; + + nowlocker = mkOption { + default = null; + example = "i3lock -i /path/to/img"; + type = types.nullOr types.string; + + description = '' + The script to use when manually locking the computer with <command>xautolock -locknow</command>. ''; }; @@ -45,28 +55,82 @@ in }; notifier = mkOption { - default = "notify-send 'Locking in 10 seconds'"; - type = types.string; + default = null; + example = literalExample '' + "${pkgs.libnotify}/bin/notify-send \"Locking in 10 seconds\"" + ''; + type = types.nullOr types.string; description = '' Notification script to be used to warn about the pending autolock. ''; }; + + killer = mkOption { + default = null; # default according to `man xautolock` is none + example = "systemctl suspend"; + type = types.nullOr types.string; + + description = '' + The script to use when nothing has happend for as long as <option>killtime</option> + ''; + }; + + killtime = mkOption { + default = 20; # default according to `man xautolock` + type = types.int; + + description = '' + Minutes xautolock waits until it executes the script specified in <option>killer</option> + (Has to be at least 10 minutes) + ''; + }; + + extraOptions = mkOption { + type = types.listOf types.str; + default = [ ]; + example = [ "-detectsleep" ]; + description = '' + Additional command-line arguments to pass to + <command>xautolock</command>. + ''; + }; }; }; config = mkIf cfg.enable { environment.systemPackages = with pkgs; [ xautolock ]; - - services.xserver.displayManager.sessionCommands = with builtins; with pkgs; '' - ${xautolock}/bin/xautolock \ - ${concatStringsSep " \\\n" ([ - "-time ${toString(cfg.time)}" - "-locker ${cfg.locker}" - ] ++ optional cfg.enableNotifier (concatStringsSep " " [ - "-notify ${toString(cfg.notify)}" - "-notifier \"${cfg.notifier}\"" - ]))} & - ''; + systemd.user.services.xautolock = { + description = "xautolock service"; + wantedBy = [ "graphical-session.target" ]; + partOf = [ "graphical-session.target" ]; + serviceConfig = with lib; { + ExecStart = strings.concatStringsSep " " ([ + "${pkgs.xautolock}/bin/xautolock" + "-noclose" + "-time ${toString cfg.time}" + "-locker '${cfg.locker}'" + ] ++ optionals cfg.enableNotifier [ + "-notify ${toString cfg.notify}" + "-notifier '${cfg.notifier}'" + ] ++ optionals (cfg.nowlocker != null) [ + "-nowlocker '${cfg.nowlocker}'" + ] ++ optionals (cfg.killer != null) [ + "-killer '${cfg.killer}'" + "-killtime ${toString cfg.killtime}" + ] ++ cfg.extraOptions); + Restart = "always"; + }; + }; + assertions = [ + { + assertion = cfg.enableNotifier -> cfg.notifier != null; + message = "When enabling the notifier for xautolock, you also need to specify the notify script"; + } + { + assertion = cfg.killer != null -> cfg.killtime >= 10; + message = "killtime has to be at least 10 minutes according to `man xautolock`"; + } + ]; }; } |