| { lib |
| , pkgs |
| , config |
| , ... |
| }: |
| let |
| lockMessage = "This computer has been locked, please authenticate to continue"; |
| in |
| { |
| config = { |
| services.fprintd.enable = true; |
| environment.persistence."/nix/persist".directories = [ "/var/lib/fprint" ]; |
| |
| security.apparmor = { |
| enable = true; |
| killUnconfinedConfinables = true; |
| }; |
| |
| boot.initrd.availableKernelModules = [ |
| "aesni_intel" |
| "cryptd" |
| "uas" |
| "xhci_hcd" |
| ]; |
| |
| boot.initrd.luks.devices = { |
| nix.device = "/dev/disk/by-label/NIX"; |
| swap.device = "/dev/disk/by-label/SWAP"; |
| expansion0.device = "/dev/disk/by-label/EXPANSION0"; |
| }; |
| |
| services.physlock = { |
| inherit lockMessage; |
| enable = false; |
| allowAnyUser = true; |
| }; |
| |
| security.wrappers = { |
| lock = { |
| source = ./security/lock.sh; |
| setuid = true; |
| owner = config.users.users.root.name; |
| group = config.users.users.nobody.group; |
| }; |
| _onLock = { |
| source = ./security/onLock.sh; |
| setuid = false; |
| owner = config.users.users.root.name; |
| group = config.users.users.nobody.group; |
| }; |
| }; |
| }; |
| |
| home = |
| let |
| lockCommand = |
| lib.pipe '' |
| ${pkgs.systemd}/bin/systemd-inhibit --why="Already locked" --what=idle --who="lock script" ${config.security.wrapperDir}/lock |
| '' [ |
| (lib.splitString "\n") |
| (lib.filter (line: line != "")) |
| (lib.concatStringsSep " && ") |
| ]; |
| in |
| { |
| services.swayidle = { |
| enable = false; |
| timeouts = [ |
| { |
| timeout = 60; |
| command = lockCommand; |
| } |
| ]; |
| }; |
| home.packages = [ |
| (pkgs.writeScriptBin "lock" lockCommand) |
| pkgs.kbd |
| ]; |
| }; |
| } |