# limitations: # - schlock fails open (pkill it and the wayland session is left unprotected) # - schlock does not accept keyboard input; hence, unusable without a touchscreen # - pin is not synchronized with PAM. # - generate a hashed pin with: `mkpin` # - does not seem to render in landscape mode { config, lib, ... }: let cfg = config.sane.programs.schlock; in { sane.programs.schlock = { configOption = with lib; mkOption { default = {}; type = types.submodule { options.autolock = mkOption { type = types.bool; default = true; description = '' integrate with things like `swayidle` to auto-lock when appropriate. ''; }; }; }; sandbox.method = "bwrap"; sandbox.whitelistWayland = true; secrets.".config/schlock/schlock.pin" = ../../../secrets/common/schlock.pin.bin; services.schlock = { description = "schlock mobile-friendly screen locker"; command = ''schlock -p "$HOME/.config/schlock/schlock.pin"''; restartCondition = "on-failure"; }; }; sane.programs.swayidle.config = lib.mkIf (cfg.enabled && cfg.config.autolock) { actions.lock.service = "schlock"; }; }