From 641a62305305692c294ab3f67c597bc90067a667 Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Fri, 18 May 2018 18:24:53 +0200 Subject: [PATCH] nixos/xss-lock: add module (#40619) `xsslock` (which was originally packaged in 6cb1d1aaaf02a72329bedf9c6960e54fea6f5c6e) is a simple screensaver which connects a given screen locker (e.g. `i3lock`) with `logind`. Whenever `loginctl lock-sessions` is invoked the locker will be used to lock the screen. This works with its power management features (e.g. `lid switch`) as well, so the PC can be locked automatically when the lid is closed. The module can be used like this: ``` { services.xserver.enable = true; programs.xss-lock.enable = true; programs.xss-lock.lockerCommand = "i3lock"; } ``` --- nixos/modules/module-list.nix | 1 + nixos/modules/programs/xss-lock.nix | 26 ++++++++++++++++++++++++++ nixos/release.nix | 1 + nixos/tests/xss-lock.nix | 25 +++++++++++++++++++++++++ 4 files changed, 53 insertions(+) create mode 100644 nixos/modules/programs/xss-lock.nix create mode 100644 nixos/tests/xss-lock.nix diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 6fe29af3a00d..d5cfd87520c5 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -122,6 +122,7 @@ ./programs/wireshark.nix ./programs/xfs_quota.nix ./programs/xonsh.nix + ./programs/xss-lock.nix ./programs/yabar.nix ./programs/zsh/oh-my-zsh.nix ./programs/zsh/zsh.nix diff --git a/nixos/modules/programs/xss-lock.nix b/nixos/modules/programs/xss-lock.nix new file mode 100644 index 000000000000..49d522c604f5 --- /dev/null +++ b/nixos/modules/programs/xss-lock.nix @@ -0,0 +1,26 @@ +{ config, pkgs, lib, ... }: + +with lib; + +let + cfg = config.programs.xss-lock; +in +{ + options.programs.xss-lock = { + enable = mkEnableOption "xss-lock"; + lockerCommand = mkOption { + example = "xlock"; + type = types.string; + description = "Locker to be used with xsslock"; + }; + }; + + config = mkIf cfg.enable { + systemd.user.services.xss-lock = { + description = "XSS Lock Daemon"; + wantedBy = [ "graphical-session.target" ]; + partOf = [ "graphical-session.target" ]; + serviceConfig.ExecStart = "${pkgs.xss-lock}/bin/xss-lock ${cfg.lockerCommand}"; + }; + }; +} diff --git a/nixos/release.nix b/nixos/release.nix index 4c0bb7bfb756..f7c2943b96fa 100644 --- a/nixos/release.nix +++ b/nixos/release.nix @@ -402,6 +402,7 @@ in rec { tests.xfce = callTest tests/xfce.nix {}; tests.xmonad = callTest tests/xmonad.nix {}; tests.xrdp = callTest tests/xrdp.nix {}; + tests.xss-lock = callTest tests/xss-lock.nix {}; tests.yabar = callTest tests/yabar.nix {}; tests.zookeeper = callTest tests/zookeeper.nix {}; diff --git a/nixos/tests/xss-lock.nix b/nixos/tests/xss-lock.nix new file mode 100644 index 000000000000..3e3864cab770 --- /dev/null +++ b/nixos/tests/xss-lock.nix @@ -0,0 +1,25 @@ +import ./make-test.nix ({ pkgs, lib, ... }: + +with lib; + +{ + name = "xss-lock"; + meta.maintainers = with pkgs.stdenv.lib.maintainers; [ ma27 ]; + + machine = { + imports = [ ./common/x11.nix ./common/user-account.nix ]; + programs.xss-lock.enable = true; + programs.xss-lock.lockerCommand = "${pkgs.xlockmore}/bin/xlock"; + services.xserver.displayManager.auto.user = "alice"; + }; + + testScript = '' + $machine->start; + $machine->waitForX; + $machine->waitForUnit("xss-lock.service", "alice"); + + $machine->fail("pgrep xlock"); + $machine->succeed("su -l alice -c 'xset dpms force standby'"); + $machine->succeed("pgrep xlock"); + ''; +})