blob: c9dba17001f6bdee2a3401913912d9008adfb769 [file] [log] [blame]
Skyler Grey252927a2022-10-18 22:18:15 +01001{ lib
2, pkgs
3, config
4, ...
5}:
6let
Skyler Greya2dabd72022-10-31 00:36:05 +00007 lockMessage = "This computer has been locked, please authenticate to continue";
Skyler Grey252927a2022-10-18 22:18:15 +01008in
9{
Skyler Greyff3c6a22022-08-21 07:25:02 +010010 config = {
Skyler Greyebd5a8e2023-02-26 12:58:17 +000011 services.fprintd.enable = true;
Skyler Greyd2642a22023-02-26 12:47:10 +000012
Skyler Greyff3c6a22022-08-21 07:25:02 +010013 security.apparmor = {
14 enable = true;
15 killUnconfinedConfinables = true;
16 };
17
18 boot.initrd.availableKernelModules = [
19 "aesni_intel"
20 "cryptd"
Skyler Greyebd5a8e2023-02-26 12:58:17 +000021 "uas"
22 "xhci_hcd"
Skyler Greyff3c6a22022-08-21 07:25:02 +010023 ];
24
25 boot.initrd.luks.devices = {
Skyler Grey91935932022-09-01 23:43:06 +010026 nix.device = "/dev/disk/by-label/NIX";
27 swap.device = "/dev/disk/by-label/SWAP";
Skyler Greyebd5a8e2023-02-26 12:58:17 +000028 expansion0.device = "/dev/disk/by-label/EXPANSION0";
Skyler Grey0fa154f2022-08-21 07:30:37 +010029 };
Skyler Grey91935932022-09-01 23:43:06 +010030
31 services.physlock = {
32 inherit lockMessage;
Skyler Grey09c14112023-02-19 23:41:20 +000033 enable = false;
Skyler Grey91935932022-09-01 23:43:06 +010034 allowAnyUser = true;
35 };
Skyler Grey09c14112023-02-19 23:41:20 +000036
37 security.wrappers = {
38 lock = {
39 source = ./security/lock.sh;
40 setuid = true;
41 owner = config.users.users.root.name;
42 group = config.users.users.nobody.group;
43 };
44 _onLock = {
45 source = ./security/onLock.sh;
46 setuid = false;
47 owner = config.users.users.root.name;
48 group = config.users.users.nobody.group;
49 };
50 };
Skyler Grey91935932022-09-01 23:43:06 +010051 };
52
Skyler Grey252927a2022-10-18 22:18:15 +010053 home =
54 let
55 lockCommand =
56 lib.pipe ''
Skyler Grey09c14112023-02-19 23:41:20 +000057 ${pkgs.systemd}/bin/systemd-inhibit --why="Already locked" --what=idle --who="lock script" ${config.security.wrapperDir}/lock
Skyler Grey252927a2022-10-18 22:18:15 +010058 '' [
59 (lib.splitString "\n")
60 (lib.filter (line: line != ""))
61 (lib.concatStringsSep " && ")
62 ];
63 in
64 {
65 services.swayidle = {
Skyler Grey09c14112023-02-19 23:41:20 +000066 enable = false;
Skyler Grey252927a2022-10-18 22:18:15 +010067 timeouts = [
68 {
69 timeout = 60;
70 command = lockCommand;
71 }
72 ];
73 };
74 home.packages = [
75 (pkgs.writeScriptBin "lock" lockCommand)
Skyler Grey09c14112023-02-19 23:41:20 +000076 pkgs.kbd
Skyler Grey91935932022-09-01 23:43:06 +010077 ];
78 };
Skyler Grey6aa7c262022-08-20 22:22:03 +010079}