From bd27f3a0159d2c0b509e9e7400ae540cf57dc24a Mon Sep 17 00:00:00 2001 From: Colin Date: Wed, 6 Mar 2024 20:55:01 +0000 Subject: [PATCH] swayidle: enable; pair with swaylock --- hosts/by-name/moby/default.nix | 1 + hosts/common/programs/default.nix | 1 + hosts/common/programs/sway/default.nix | 2 +- hosts/common/programs/swayidle.nix | 64 ++++++++++++++++++++++++++ hosts/common/programs/swaylock.nix | 5 ++ 5 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 hosts/common/programs/swayidle.nix diff --git a/hosts/by-name/moby/default.nix b/hosts/by-name/moby/default.nix index c52ac61a..0fa6f86a 100644 --- a/hosts/by-name/moby/default.nix +++ b/hosts/by-name/moby/default.nix @@ -38,6 +38,7 @@ # sane.gui.sxmo.enable = true; sane.programs.sway.enableFor.user.colin = true; + sane.programs.swaylock.enableFor.user.colin = false; #< TODO: could the locker be made to accept virtual keyboard input? sane.programs.sane-input-handler.enableFor.user.colin = true; sane.programs.blueberry.enableFor.user.colin = false; # bluetooth manager: doesn't cross compile! sane.programs.mercurial.enableFor.user.colin = false; # does not cross compile diff --git a/hosts/common/programs/default.nix b/hosts/common/programs/default.nix index a3aadb7d..438a6b06 100644 --- a/hosts/common/programs/default.nix +++ b/hosts/common/programs/default.nix @@ -99,6 +99,7 @@ ./supertuxkart.nix ./sway ./sway-autoscaler + ./swayidle.nix ./swaylock.nix ./swaynotificationcenter.nix ./tangram.nix diff --git a/hosts/common/programs/sway/default.nix b/hosts/common/programs/sway/default.nix index a8216969..1a35550e 100644 --- a/hosts/common/programs/sway/default.nix +++ b/hosts/common/programs/sway/default.nix @@ -114,7 +114,7 @@ in "sane-open-desktop" "splatmoji" # used by sway config "sway-contrib.grimshot" # used by sway config - # "swayidle" # enable if you need it + "swayidle" # enable if you need it "swaylock" # used by sway config "swaynotificationcenter" # notification daemon "unl0kr" # greeter diff --git a/hosts/common/programs/swayidle.nix b/hosts/common/programs/swayidle.nix new file mode 100644 index 00000000..c834b8e8 --- /dev/null +++ b/hosts/common/programs/swayidle.nix @@ -0,0 +1,64 @@ +{ config, lib, ... }: +let + cfg = config.sane.programs.swayidle; + idleAction = with lib; types.submodule ({ config, name, ... }: { + options.enable = mkOption { + type = types.bool; + default = true; + }; + options.command = mkOption { + type = types.str; + default = name; + }; + options.desktop = mkOption { + type = types.nullOr types.str; + default = null; + }; + options.delay = mkOption { + type = types.int; + description = '' + how many seconds of idle time before triggering the command. + ''; + }; + config.command = lib.mkIf (config.desktop != null) "sane-open-desktop ${config.desktop}"; + }); +in +{ + sane.programs.swayidle = { + configOption = with lib; mkOption { + default = {}; + type = types.submodule { + options.actions = mkOption { + type = types.attrsOf idleAction; + default = {}; + }; + }; + }; + # sandboxing: TODO + services.swayidle = { + description = "swayidle: perform actions when sway session is idle"; + after = [ "graphical-session.target" ]; + wantedBy = [ "graphical-session.target" ]; + + serviceConfig = { + ExecStart = lib.escapeShellArgs ( + [ + "${cfg.package}/bin/swayidle" + "-w" + ] ++ lib.flatten ( + lib.mapAttrsToList + (_: { command, delay, enable, ... }: lib.optionals enable [ + "timeout" + (builtins.toString delay) + command + ]) + cfg.config.actions + ) + ); + Type = "simple"; + Restart = "always"; + RestartSec = "20s"; + }; + }; + }; +} diff --git a/hosts/common/programs/swaylock.nix b/hosts/common/programs/swaylock.nix index c01eca31..a61ac0f4 100644 --- a/hosts/common/programs/swaylock.nix +++ b/hosts/common/programs/swaylock.nix @@ -28,6 +28,11 @@ in sandbox.whitelistWayland = true; }; + sane.programs.swayidle.config = lib.mkIf cfg.enabled { + actions.swaylock.desktop = "swaylock.desktop"; + actions.swaylock.delay = 1800; + }; + security.pam.services = lib.mkIf cfg.enabled { swaylock = {}; };