aboutsummaryrefslogtreecommitdiff
path: root/home-manager/modules/services/screen-locker.nix
diff options
context:
space:
mode:
Diffstat (limited to 'home-manager/modules/services/screen-locker.nix')
-rw-r--r--home-manager/modules/services/screen-locker.nix92
1 files changed, 92 insertions, 0 deletions
diff --git a/home-manager/modules/services/screen-locker.nix b/home-manager/modules/services/screen-locker.nix
new file mode 100644
index 00000000000..554d64f9abe
--- /dev/null
+++ b/home-manager/modules/services/screen-locker.nix
@@ -0,0 +1,92 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+
+ cfg = config.services.screen-locker;
+
+in {
+
+ options.services.screen-locker = {
+ enable = mkEnableOption "screen locker for X session";
+
+ lockCmd = mkOption {
+ type = types.str;
+ description = "Locker command to run.";
+ example = "\${pkgs.i3lock}/bin/i3lock -n -c 000000";
+ };
+
+ enableDetectSleep = mkOption {
+ type = types.bool;
+ default = true;
+ description = ''
+ Whether to reset timers when awaking from sleep.
+ '';
+ };
+
+ inactiveInterval = mkOption {
+ type = types.int;
+ default = 10;
+ description = ''
+ Inactive time interval in minutes after which session will be locked.
+ The minimum is 1 minute, and the maximum is 1 hour.
+ See <link xlink:href="https://linux.die.net/man/1/xautolock"/>.
+ '';
+ };
+
+ xautolockExtraOptions = mkOption {
+ type = types.listOf types.str;
+ default = [ ];
+ description = ''
+ Extra command-line arguments to pass to <command>xautolock</command>.
+ '';
+ };
+
+ xssLockExtraOptions = mkOption {
+ type = types.listOf types.str;
+ default = [ ];
+ description = ''
+ Extra command-line arguments to pass to <command>xss-lock</command>.
+ '';
+ };
+ };
+
+ config = mkIf cfg.enable {
+ systemd.user.services.xautolock-session = {
+ Unit = {
+ Description = "xautolock, session locker service";
+ After = [ "graphical-session-pre.target" ];
+ PartOf = [ "graphical-session.target" ];
+ };
+
+ Install = { WantedBy = [ "graphical-session.target" ]; };
+
+ Service = {
+ ExecStart = concatStringsSep " " ([
+ "${pkgs.xautolock}/bin/xautolock"
+ "-time ${toString cfg.inactiveInterval}"
+ "-locker '${pkgs.systemd}/bin/loginctl lock-session $XDG_SESSION_ID'"
+ ] ++ optional cfg.enableDetectSleep "-detectsleep"
+ ++ cfg.xautolockExtraOptions);
+ };
+ };
+
+ systemd.user.services.xss-lock = {
+ Unit = {
+ Description = "xss-lock, session locker service";
+ After = [ "graphical-session-pre.target" ];
+ PartOf = [ "graphical-session.target" ];
+ };
+
+ Install = { WantedBy = [ "graphical-session.target" ]; };
+
+ Service = {
+ ExecStart = concatStringsSep " "
+ ([ "${pkgs.xss-lock}/bin/xss-lock" "-s \${XDG_SESSION_ID}" ]
+ ++ cfg.xssLockExtraOptions ++ [ "-- ${cfg.lockCmd}" ]);
+ };
+ };
+ };
+
+}