52 Commits

Author SHA1 Message Date
5a76f7703f flake.lock: Update
Flake lock file updates:

• Updated input 'agenix':
    'github:ryantm/agenix/457669db4259ff69d1ac1183aaa6000420940c1f' (2023-12-23)
  → 'github:ryantm/agenix/417caa847f9383e111d1397039c9d4337d024bf0' (2023-12-24)
• Updated input 'nixos-hardware':
    'github:NixOS/nixos-hardware/7763c6fd1f299cb9361ff2abf755ed9619ef01d6' (2023-12-13)
  → 'github:NixOS/nixos-hardware/a15b6e525f5737a47b4ce28445c836996fb2ea8c' (2023-12-25)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/d65bceaee0fb1e64363f7871bc43dc1c6ecad99f' (2023-12-20)
  → 'github:NixOS/nixpkgs/0b3d618173114c64ab666f557504d6982665d328' (2023-12-21)
• Updated input 'secrets':
    'git+ssh://git@git.vimium.com/jordan/nix-secrets.git?ref=refs/heads/master&rev=4ec3e87d6a7b1f14d23c12c60cad62a6e43be4ca' (2023-12-25)
  → 'git+ssh://git@git.vimium.com/jordan/nix-secrets.git?ref=refs/heads/master&rev=ef1f91b155f3bdc4efb2824ad0c47b21b8b1bbfa' (2023-12-25)
2023-12-26 00:33:08 +00:00
e642de2d19 Add WIP modules for matrix and coturn 2023-12-26 00:31:31 +00:00
30e88a3859 More wireless networking to module 2023-12-26 00:30:59 +00:00
61bdd78444 Move borgmatic config to module 2023-12-25 23:02:36 +00:00
b6abcf41b0 Update secrets for helios 2023-12-25 20:11:46 +00:00
015d9c6532 Add borg configuration to helios 2023-12-25 17:03:01 +00:00
26795610d2 flake.lock: Update
Flake lock file updates:

• Updated input 'agenix':
    'github:ryantm/agenix/d0d4ad5be611da43da04321f49684ad72d705c7e' (2023-12-22)
  → 'github:ryantm/agenix/457669db4259ff69d1ac1183aaa6000420940c1f' (2023-12-23)
• Updated input 'agenix/darwin':
    'github:lnl7/nix-darwin/87b9d090ad39b25b2400029c64825fc2a8868943' (2023-01-09)
  → 'github:lnl7/nix-darwin/4b9b83d5a92e8c1fbfd8eb27eda375908c11ec4d' (2023-11-24)
• Updated input 'agenix/home-manager':
    'github:nix-community/home-manager/32d3e39c491e2f91152c84f8ad8b003420eab0a1' (2023-04-22)
  → 'github:nix-community/home-manager/3bfaacf46133c037bb356193bd2f1765d9dc82c1' (2023-12-20)
• Updated input 'agenix/nixpkgs':
    'github:NixOS/nixpkgs/a08d6979dd7c82c4cef0dcc6ac45ab16051c1169' (2023-03-01)
  → 'github:NixOS/nixpkgs/54aac082a4d9bb5bbc5c4e899603abfb76a3f6d6' (2023-12-19)
• Added input 'agenix/systems':
    'github:nix-systems/default/da67096a3b9bf56a91d16901293e51ba5b49a27e' (2023-04-09)
• Updated input 'home-manager':
    'github:nix-community/home-manager/0c2353d5d930c3d93724df6858aef064a31b3c00' (2023-12-20)
  → 'github:nix-community/home-manager/d5824a76bc6bb93d1dce9ebbbcb09a9b6abcc224' (2023-12-23)
2023-12-24 10:19:21 +00:00
2a2a6c52b9 Enable PlayStation emulators on odyssey 2023-12-23 00:38:56 +00:00
037794ee2d Add pods if podman is enabled 2023-12-22 21:56:03 +00:00
0d2d120ef1 flake.lock: Update
Flake lock file updates:

• Updated input 'agenix':
    'github:ryantm/agenix/17090d105af1b9f941109c1e12d6e3a596657f97' (2023-12-20)
  → 'github:ryantm/agenix/d0d4ad5be611da43da04321f49684ad72d705c7e' (2023-12-22)
2023-12-22 17:13:27 +00:00
526436dd1f flake.lock: Update
Flake lock file updates:

• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/d02ffbbe834b5599fc5f134e644e49397eb07188' (2023-12-18)
  → 'github:NixOS/nixpkgs/d65bceaee0fb1e64363f7871bc43dc1c6ecad99f' (2023-12-20)
2023-12-21 12:20:36 +00:00
42eb58c755 Use ID for Zigbee coordinator 2023-12-21 11:54:16 +00:00
0e5c3c5ebc flake.lock: Update
Flake lock file updates:

• Updated input 'agenix':
    'github:ryantm/agenix/13ac9ac6d68b9a0896e3d43a082947233189e247' (2023-11-29)
  → 'github:ryantm/agenix/17090d105af1b9f941109c1e12d6e3a596657f97' (2023-12-20)
• Updated input 'deploy-rs':
    'github:serokell/deploy-rs/915327515f5fd1b7719c06e2f1eb304ee0bdd803' (2023-12-13)
  → 'github:serokell/deploy-rs/b709d63debafce9f5645a5ba550c9e0983b3d1f7' (2023-12-20)
• Updated input 'home-manager':
    'github:nix-community/home-manager/1488651d02c1a7a15e284210f0d380a62d8d8cef' (2023-12-17)
  → 'github:nix-community/home-manager/0c2353d5d930c3d93724df6858aef064a31b3c00' (2023-12-20)
2023-12-20 23:40:24 +00:00
3eefefadd9 flake.lock: Update
Flake lock file updates:

• Updated input 'firefox-gnome-theme':
    'github:rafaelmardojai/firefox-gnome-theme/d2e6cfdd63651ae8168e5905d94138f406580dd6' (2023-12-09)
  → 'github:rafaelmardojai/firefox-gnome-theme/bad853333d9021e7012adb9b8fbfe7a7003f26bc' (2023-12-19)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/1e2e384c5b7c50dbf8e9c441a9e58d85f408b01f' (2023-12-17)
  → 'github:NixOS/nixpkgs/d02ffbbe834b5599fc5f134e644e49397eb07188' (2023-12-18)
2023-12-20 13:15:06 +00:00
137bee5f59 Use home-assistant container instead 2023-12-18 23:26:06 +00:00
4698badc2e More home assistant components 2023-12-18 23:10:06 +00:00
87684ec397 Fix permissions on zigbee2mqtt secret.yaml 2023-12-18 22:17:03 +00:00
eb15df8c84 Add zigbee network settings 2023-12-18 22:05:28 +00:00
5b6d05cdbc flake.lock: Update
Flake lock file updates:

• Updated input 'secrets':
    'git+ssh://git@git.vimium.com/jordan/nix-secrets.git?ref=refs/heads/master&rev=ba52c86b6ff0d0657cb57ce737851d6f6026f7f5' (2023-12-17)
  → 'git+ssh://git@git.vimium.com/jordan/nix-secrets.git?ref=refs/heads/master&rev=c6db5c3ba8bff0e618fc3e31c9680863c5e53800' (2023-12-18)
2023-12-18 22:04:53 +00:00
de7a42a05f Add components to home-assistant 2023-12-18 11:32:09 +00:00
fb44d2ea74 flake.lock: Update
Flake lock file updates:

• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/40c3c94c241286dd2243ea34d3aef8a488f9e4d0' (2023-12-15)
  → 'github:NixOS/nixpkgs/1e2e384c5b7c50dbf8e9c441a9e58d85f408b01f' (2023-12-17)
2023-12-18 09:10:39 +00:00
9132709546 Add home-assistant to pi 2023-12-18 09:09:55 +00:00
b7f5c8200d flake.lock: Update
Flake lock file updates:

• Updated input 'secrets':
    'git+ssh://git@git.vimium.com/jordan/nix-secrets.git?ref=refs/heads/master&rev=a603c652568fc0e9b66aac70400aee2e394e5542' (2023-12-17)
  → 'git+ssh://git@git.vimium.com/jordan/nix-secrets.git?ref=refs/heads/master&rev=ba52c86b6ff0d0657cb57ce737851d6f6026f7f5' (2023-12-17)
2023-12-17 23:29:13 +00:00
c554a44523 Add borgmatic config for pi 2023-12-17 23:29:00 +00:00
0a99aeff19 Update odyssey borg passphrase path 2023-12-17 23:28:45 +00:00
baf9ae7bd1 Disable z2m joining 2023-12-17 23:15:16 +00:00
a33764db8c Fix LXD containers not receiving IPs 2023-12-17 23:14:30 +00:00
480e862bee Allow anonymous connections to mqtt listener 2023-12-17 21:14:12 +00:00
2177abf06c Add mqtt server config to pi 2023-12-17 20:09:03 +00:00
934f405586 Update pi README.md 2023-12-17 19:29:05 +00:00
b2b126d21c Update pi config 2023-12-17 19:13:19 +00:00
f9ec1ccf9d flake.lock: Update
Flake lock file updates:

• Updated input 'secrets':
    'git+ssh://git@git.vimium.com/jordan/nix-secrets.git?ref=refs/heads/master&rev=1374b9508620b9dcded687ff6f0110a1f916515a' (2023-12-17)
  → 'git+ssh://git@git.vimium.com/jordan/nix-secrets.git?ref=refs/heads/master&rev=a603c652568fc0e9b66aac70400aee2e394e5542' (2023-12-17)
2023-12-17 15:18:47 +00:00
1f14d7be1b Add hashedPasswordFile for jordan 2023-12-17 15:06:19 +00:00
53f7d1de0f flake.lock: Update
Flake lock file updates:

• Updated input 'home-manager':
    'github:nix-community/home-manager/aa99c2f4e9847cbb7e46fac0844ea1eb164b3b3a' (2023-12-15)
  → 'github:nix-community/home-manager/1488651d02c1a7a15e284210f0d380a62d8d8cef' (2023-12-17)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/cf28ee258fd5f9a52de6b9865cdb93a1f96d09b7' (2023-12-12)
  → 'github:NixOS/nixpkgs/40c3c94c241286dd2243ea34d3aef8a488f9e4d0' (2023-12-15)
• Updated input 'secrets':
    'git+ssh://git@git.vimium.com/jordan/nix-secrets.git?ref=refs/heads/master&rev=08e2b6b214e43e8bf3b3db9b7819fd27a1038c86' (2023-12-16)
  → 'git+ssh://git@git.vimium.com/jordan/nix-secrets.git?ref=refs/heads/master&rev=1374b9508620b9dcded687ff6f0110a1f916515a' (2023-12-17)
2023-12-17 15:04:07 +00:00
47f665b742 Add Raspberry Pi 4 host 2023-12-16 23:47:43 +00:00
26be10bd0c Enable autoUpgrade 2023-12-16 20:21:26 +00:00
aa5a4e27a3 Migrate secrets to separate repo 2023-12-16 18:39:00 +00:00
f9cf5758e3 flake.lock: Update
Flake lock file updates:

• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/781e2a9797ecf0f146e81425c822dca69fe4a348' (2023-12-10)
  → 'github:NixOS/nixpkgs/cf28ee258fd5f9a52de6b9865cdb93a1f96d09b7' (2023-12-12)
2023-12-14 20:02:56 +00:00
f0e0cf2772 Refactor deprecated borgmatic.settings.location 2023-12-11 23:39:09 +00:00
cad9ab738d flake.lock: Update
Flake lock file updates:

• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/b4372c4924d9182034066c823df76d6eaf1f4ec4' (2023-12-07)
  → 'github:NixOS/nixpkgs/781e2a9797ecf0f146e81425c822dca69fe4a348' (2023-12-10)
2023-12-11 18:32:45 +00:00
88c3e1305c Format hosts hardware-configuration.nix 2023-12-11 18:31:55 +00:00
3f8c817418 Remove custom lib usage 2023-12-10 23:53:54 +00:00
0d015ac418 Refactor sound card config 2023-12-10 19:45:31 +00:00
8380969c95 Remove FC from Studio 1824c channel map 2023-12-10 18:44:42 +00:00
9c97905bb6 flake.lock: Update
Flake lock file updates:

• Updated input 'firefox-gnome-theme':
    'github:rafaelmardojai/firefox-gnome-theme/ec9421f82d922b7293ffd45a47f7abdee80038c6' (2023-11-30)
  → 'github:rafaelmardojai/firefox-gnome-theme/d2e6cfdd63651ae8168e5905d94138f406580dd6' (2023-12-09)
• Updated input 'home-manager':
    'github:nix-community/home-manager/aeb2232d7a32530d3448318790534d196bf9427a' (2023-11-24)
  → 'github:nix-community/home-manager/6761b8188b860f374b457eddfdb05c82eef9752f' (2023-12-10)
2023-12-10 11:17:41 +00:00
f6b9fb1429 Fix formatting 2023-12-08 22:38:26 +00:00
7e591ee7d5 Add GNOME rounded window corner extension 2023-12-08 21:06:58 +00:00
8ddc5c9269 Enable Wayland for vscode, add config 2023-12-08 21:06:23 +00:00
91103dc0e7 Enable vscode on odyssey 2023-12-08 20:50:48 +00:00
1c2ca078c8 Add vscode extensions 2023-12-08 20:50:27 +00:00
f98d1d546f Update mutter triple buffering overlay 2023-12-08 13:28:21 +00:00
55cf784f56 flake.lock: Update
Flake lock file updates:

• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/5de0b32be6e85dc1a9404c75131316e4ffbc634c' (2023-12-01)
  → 'github:NixOS/nixpkgs/b4372c4924d9182034066c823df76d6eaf1f4ec4' (2023-12-07)
• Updated input 'thunderbird-gnome-theme':
    'github:rafaelmardojai/thunderbird-gnome-theme/a899ca12204d19f4834fbd092aa5bb05dc4bd127' (2023-11-06)
  → 'github:rafaelmardojai/thunderbird-gnome-theme/966e9dd54bd2ce9d36d51cd6af8c3bac7a764a68' (2023-12-06)
2023-12-08 13:20:31 +00:00
60 changed files with 1165 additions and 715 deletions

177
flake.lock generated
View File

@ -4,14 +4,15 @@
"inputs": { "inputs": {
"darwin": "darwin", "darwin": "darwin",
"home-manager": "home-manager", "home-manager": "home-manager",
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs",
"systems": "systems"
}, },
"locked": { "locked": {
"lastModified": 1701216516, "lastModified": 1703433843,
"narHash": "sha256-jKSeJn+7hZ1dZdiH1L+NWUGT2i/BGomKAJ54B9kT06Q=", "narHash": "sha256-nmtA4KqFboWxxoOAA6Y1okHbZh+HsXaMPFkYHsoDRDw=",
"owner": "ryantm", "owner": "ryantm",
"repo": "agenix", "repo": "agenix",
"rev": "13ac9ac6d68b9a0896e3d43a082947233189e247", "rev": "417caa847f9383e111d1397039c9d4337d024bf0",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -28,11 +29,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1673295039, "lastModified": 1700795494,
"narHash": "sha256-AsdYgE8/GPwcelGgrntlijMg4t3hLFJFCRF3tL5WVjA=", "narHash": "sha256-gzGLZSiOhf155FW7262kdHo2YDeugp3VuIFb4/GGng0=",
"owner": "lnl7", "owner": "lnl7",
"repo": "nix-darwin", "repo": "nix-darwin",
"rev": "87b9d090ad39b25b2400029c64825fc2a8868943", "rev": "4b9b83d5a92e8c1fbfd8eb27eda375908c11ec4d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -42,14 +43,34 @@
"type": "github" "type": "github"
} }
}, },
"deploy-rs": {
"inputs": {
"flake-compat": "flake-compat",
"nixpkgs": "nixpkgs_2",
"utils": "utils"
},
"locked": {
"lastModified": 1703087360,
"narHash": "sha256-0VUbWBW8VyiDRuimMuLsEO4elGuUw/nc2WDeuO1eN1M=",
"owner": "serokell",
"repo": "deploy-rs",
"rev": "b709d63debafce9f5645a5ba550c9e0983b3d1f7",
"type": "github"
},
"original": {
"owner": "serokell",
"repo": "deploy-rs",
"type": "github"
}
},
"firefox-gnome-theme": { "firefox-gnome-theme": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1701370547, "lastModified": 1703023593,
"narHash": "sha256-pCtPIcRnMMJOwAlNh5qTO00uw/PBThIIzjMCRcCyHYw=", "narHash": "sha256-M+Cw6vh7xCDmIhyVuEPNmaNVUwpmdFQq8zlsXZTKees=",
"owner": "rafaelmardojai", "owner": "rafaelmardojai",
"repo": "firefox-gnome-theme", "repo": "firefox-gnome-theme",
"rev": "ec9421f82d922b7293ffd45a47f7abdee80038c6", "rev": "bad853333d9021e7012adb9b8fbfe7a7003f26bc",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -58,6 +79,22 @@
"type": "github" "type": "github"
} }
}, },
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"home-manager": { "home-manager": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@ -66,11 +103,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1682203081, "lastModified": 1703113217,
"narHash": "sha256-kRL4ejWDhi0zph/FpebFYhzqlOBrk0Pl3dzGEKSAlEw=", "narHash": "sha256-7ulcXOk63TIT2lVDSExj7XzFx09LpdSAPtvgtM7yQPE=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "32d3e39c491e2f91152c84f8ad8b003420eab0a1", "rev": "3bfaacf46133c037bb356193bd2f1765d9dc82c1",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -86,11 +123,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1700814205, "lastModified": 1703367386,
"narHash": "sha256-lWqDPKHRbQfi+zNIivf031BUeyciVOtwCwTjyrhDB5g=", "narHash": "sha256-FMbm48UGrBfOWGt8+opuS+uLBLQlRfhiYXhHNcYMS5k=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "aeb2232d7a32530d3448318790534d196bf9427a", "rev": "d5824a76bc6bb93d1dce9ebbbcb09a9b6abcc224",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -102,11 +139,11 @@
}, },
"nixos-hardware": { "nixos-hardware": {
"locked": { "locked": {
"lastModified": 1701598471, "lastModified": 1703545041,
"narHash": "sha256-kHdJ2qc4qKeMTzUIHEcP41ah/dBIhCgvWgrjllt2G78=", "narHash": "sha256-nvQA+k1rSszrf4kA4eK2i/SGbzoXyoKHzzyzq/Jca1w=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixos-hardware", "repo": "nixos-hardware",
"rev": "a89745edd5f657e2e5be5ed1bea86725ca78d92e", "rev": "a15b6e525f5737a47b4ce28445c836996fb2ea8c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -117,11 +154,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1677676435, "lastModified": 1703013332,
"narHash": "sha256-6FxdcmQr5JeZqsQvfinIMr0XcTyTuR7EXX0H3ANShpQ=", "narHash": "sha256-+tFNwMvlXLbJZXiMHqYq77z/RfmpfpiI3yjL6o/Zo9M=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "a08d6979dd7c82c4cef0dcc6ac45ab16051c1169", "rev": "54aac082a4d9bb5bbc5c4e899603abfb76a3f6d6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -133,11 +170,27 @@
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1701389149, "lastModified": 1702272962,
"narHash": "sha256-rU1suTIEd5DGCaAXKW6yHoCfR1mnYjOXQFOaH7M23js=", "narHash": "sha256-D+zHwkwPc6oYQ4G3A1HuadopqRwUY/JkMwHz1YF7j4Q=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "5de0b32be6e85dc1a9404c75131316e4ffbc634c", "rev": "e97b3e4186bcadf0ef1b6be22b8558eab1cdeb5d",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1703200384,
"narHash": "sha256-q5j06XOsy0qHOarsYPfZYJPWbTbc8sryRxianlEPJN0=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "0b3d618173114c64ab666f557504d6982665d328",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -149,21 +202,69 @@
"root": { "root": {
"inputs": { "inputs": {
"agenix": "agenix", "agenix": "agenix",
"deploy-rs": "deploy-rs",
"firefox-gnome-theme": "firefox-gnome-theme", "firefox-gnome-theme": "firefox-gnome-theme",
"home-manager": "home-manager_2", "home-manager": "home-manager_2",
"nixos-hardware": "nixos-hardware", "nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs_2", "nixpkgs": "nixpkgs_3",
"secrets": "secrets",
"thunderbird-gnome-theme": "thunderbird-gnome-theme" "thunderbird-gnome-theme": "thunderbird-gnome-theme"
} }
}, },
"secrets": {
"flake": false,
"locked": {
"lastModified": 1703545643,
"narHash": "sha256-FS/acsRQ01Gj39P1t5CQ6cKOdwADmenk//vVmpA/EgU=",
"ref": "refs/heads/master",
"rev": "ef1f91b155f3bdc4efb2824ad0c47b21b8b1bbfa",
"revCount": 9,
"type": "git",
"url": "ssh://git@git.vimium.com/jordan/nix-secrets.git"
},
"original": {
"type": "git",
"url": "ssh://git@git.vimium.com/jordan/nix-secrets.git"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_2": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"thunderbird-gnome-theme": { "thunderbird-gnome-theme": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1699285862, "lastModified": 1701889124,
"narHash": "sha256-3TQYBJAeQ2fPFxQnD5iKRKKWFlN3GJhz1EkdwE+4m0k=", "narHash": "sha256-K+6oh7+J6RDBFkxphY/pzf0B+q5+IY54ZMKZrFSKXlc=",
"owner": "rafaelmardojai", "owner": "rafaelmardojai",
"repo": "thunderbird-gnome-theme", "repo": "thunderbird-gnome-theme",
"rev": "a899ca12204d19f4834fbd092aa5bb05dc4bd127", "rev": "966e9dd54bd2ce9d36d51cd6af8c3bac7a764a68",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -171,6 +272,24 @@
"repo": "thunderbird-gnome-theme", "repo": "thunderbird-gnome-theme",
"type": "github" "type": "github"
} }
},
"utils": {
"inputs": {
"systems": "systems_2"
},
"locked": {
"lastModified": 1701680307,
"narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
} }
}, },
"root": "root", "root": "root",

122
flake.nix
View File

@ -1,10 +1,10 @@
{ {
description = "NixOS/Darwin system configuration"; description = "NixOS system configuration";
inputs = { inputs = {
nixpkgs.url = "nixpkgs/nixos-23.11"; nixpkgs.url = "nixpkgs/nixos-23.11";
nixos-hardware.url = "github:NixOS/nixos-hardware";
agenix.url = "github:ryantm/agenix"; agenix.url = "github:ryantm/agenix";
deploy-rs.url = "github:serokell/deploy-rs";
home-manager = { home-manager = {
url = "github:nix-community/home-manager/release-23.11"; url = "github:nix-community/home-manager/release-23.11";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
@ -13,74 +13,74 @@
url = "github:rafaelmardojai/firefox-gnome-theme"; url = "github:rafaelmardojai/firefox-gnome-theme";
flake = false; flake = false;
}; };
nixos-hardware.url = "github:NixOS/nixos-hardware";
secrets = {
url = "git+ssh://git@git.vimium.com/jordan/nix-secrets.git";
flake = false;
};
thunderbird-gnome-theme = { thunderbird-gnome-theme = {
url = "github:rafaelmardojai/thunderbird-gnome-theme"; url = "github:rafaelmardojai/thunderbird-gnome-theme";
flake = false; flake = false;
}; };
}; };
outputs = inputs @ { self, nixpkgs, agenix, home-manager, ... }: outputs = inputs @ { self, nixpkgs, agenix, deploy-rs, home-manager, nixos-hardware, secrets, ... }:
let let
inherit (lib) attrValues; nixpkgsForSystem = system: inputs.nixpkgs;
inherit (lib.my) mapModules mapModulesRec; overlays = [
agenix.overlays.default
system = "x86_64-linux"; (import ./overlays/gnome.nix)
];
mkPkgs = pkgs: extraOverlays: commonModules = [
import pkgs { agenix.nixosModules.age
inherit system; home-manager.nixosModule
config.allowUnfree = true; ./modules
overlays = extraOverlays ++ (lib.attrValues self.overlays); ];
nixosSystem = { system, name, extraModules ? [] }:
let
nixpkgs = nixpkgsForSystem system;
lib = (import nixpkgs { inherit overlays system; }).lib;
in
inputs.nixpkgs.lib.nixosSystem {
inherit lib system;
specialArgs = { modulesPath = toString (nixpkgs + "/nixos/modules"); inherit inputs; };
baseModules = import (nixpkgs + "/nixos/modules/module-list.nix");
modules = commonModules ++ [
({ config, ... }:
{
nixpkgs.pkgs = import nixpkgs {
inherit overlays system;
config.allowUnfree = true;
};
networking.hostName = name;
nix = {
extraOptions = "experimental-features = nix-command flakes";
};
})
./hosts/${name}
] ++ extraModules;
}; };
pkgs = mkPkgs nixpkgs []; in
{
lib = nixpkgs.lib.extend (self: super: {
my = import ./lib {
inherit pkgs inputs;
lib = self;
};
});
in {
lib = lib.my;
nixosConfigurations = { nixosConfigurations = {
atlas = nixpkgs.lib.nixosSystem { atlas = nixosSystem { system = "x86_64-linux"; name = "atlas"; };
modules = [ eos = nixosSystem { system = "x86_64-linux"; name = "eos"; };
home-manager.nixosModules.home-manager helios = nixosSystem { system = "x86_64-linux"; name = "helios"; };
{ nixpkgs.overlays = [ (import ./overlays/gnome.nix) ]; } odyssey = nixosSystem { system = "x86_64-linux"; name = "odyssey"; };
(import ./modules) pi = nixosSystem { system = "aarch64-linux"; name = "pi"; extraModules = [ nixos-hardware.nixosModules.raspberry-pi-4 ]; };
./hosts/atlas };
];
specialArgs = { inherit lib inputs; }; deploy.nodes.pi = {
}; hostname = "10.0.1.191";
eos = nixpkgs.lib.nixosSystem { sshUser = "root";
modules = [
home-manager.nixosModules.home-manager profiles.system = {
{ nixpkgs.overlays = [ (import ./overlays/gnome.nix) ]; } user = "root";
(import ./modules) path = deploy-rs.lib.aarch64-linux.activate.nixos self.nixosConfigurations.pi;
./hosts/eos
];
specialArgs = { inherit lib inputs; };
};
helios = nixpkgs.lib.nixosSystem {
modules = [
home-manager.nixosModules.home-manager
{ nixpkgs.overlays = [ (import ./overlays/gnome.nix) ]; }
(import ./modules)
./hosts/helios
];
specialArgs = { inherit lib inputs; };
};
odyssey = nixpkgs.lib.nixosSystem {
modules = [
home-manager.nixosModules.home-manager
agenix.nixosModules.default
{ nixpkgs.overlays = [ (import ./overlays/gnome.nix) ]; }
(import ./modules)
./hosts/odyssey
];
specialArgs = { inherit lib inputs; };
}; };
}; };
};
# checks = builtins.mapAttrs (system: deployLib: deployLib.deployChecks self.deploy) deploy-rs.lib;
};
} }

View File

@ -1,6 +1,5 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib.my;
{ {
imports = [ imports = [
./hardware-configuration.nix ./hardware-configuration.nix

View File

@ -1,70 +1,66 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }: { config, lib, pkgs, modulesPath, ... }:
{ {
imports = imports = [
[ (modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
]; ];
boot.initrd.availableKernelModules = [ "xhci_pci" "ehci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ]; boot = {
boot.initrd.kernelModules = [ ]; initrd.availableKernelModules = [ "xhci_pci" "ehci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ];
boot.initrd.supportedFilesystems = [ "zfs" ]; initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ]; initrd.supportedFilesystems = [ "zfs" ];
boot.kernelParams = [ "elevator=none" ]; kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ]; kernelParams = [ "elevator=none" ];
boot.supportedFilesystems = [ "zfs" ]; extraModulePackages = [ ];
supportedFilesystems = [ "zfs" ];
};
fileSystems."/" = fileSystems."/" = {
{ device = "rpool/system/root"; device = "rpool/system/root";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/home" = fileSystems."/home" = {
{ device = "rpool/user/home"; device = "rpool/user/home";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/nix" = fileSystems."/nix" = {
{ device = "rpool/local/nix"; device = "rpool/local/nix";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/tmp" = fileSystems."/tmp" = {
{ device = "rpool/local/tmp"; device = "rpool/local/tmp";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/var" = fileSystems."/var" = {
{ device = "rpool/system/var"; device = "rpool/system/var";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/var/log" = fileSystems."/var/log" = {
{ device = "rpool/system/var/log"; device = "rpool/system/var/log";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/var/tmp" = fileSystems."/var/tmp" = {
{ device = "rpool/system/var/tmp"; device = "rpool/system/var/tmp";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/boot" = fileSystems."/boot" = {
{ device = "/dev/disk/by-uuid/00B2-0384"; device = "/dev/disk/by-uuid/00B2-0384";
fsType = "vfat"; fsType = "vfat";
}; };
swapDevices = [ ]; swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true; networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp0s25.useDHCP = lib.mkDefault true; # networking.interfaces.enp0s25.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
} }

View File

@ -1,7 +1,5 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
{ {
time.timeZone = "Europe/London"; time.timeZone = "Europe/London";
@ -46,6 +44,12 @@ with lib.my;
neovim neovim
]; ];
system.autoUpgrade = {
enable = true;
flake = "git+ssh://git@git.vimium.com/jordan/nix-config.git";
randomizedDelaySec = "10min";
};
nix = { nix = {
settings = { settings = {
connect-timeout = 5; connect-timeout = 5;

View File

@ -1,6 +1,5 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib.my;
{ {
imports = [ imports = [
./hardware-configuration.nix ./hardware-configuration.nix

View File

@ -1,71 +1,65 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }: { config, lib, pkgs, modulesPath, ... }:
{ {
imports = imports = [
[ (modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
]; ];
boot.initrd.availableKernelModules = [ "ehci_pci" "ahci" "usb_storage" "sd_mod" "sdhci_pci" ]; boot = {
boot.initrd.kernelModules = [ ]; initrd.availableKernelModules = [ "ehci_pci" "ahci" "usb_storage" "sd_mod" "sdhci_pci" ];
boot.initrd.supportedFilesystems = [ "zfs" ]; initrd.kernelModules = [ ];
boot.kernelModules = [ ]; initrd.supportedFilesystems = [ "zfs" ];
boot.kernelParams = [ "elevator=none" ]; kernelModules = [ ];
boot.extraModulePackages = [ ]; kernelParams = [ "elevator=none" ];
boot.supportedFilesystems = [ "zfs" ]; extraModulePackages = [ ];
supportedFilesystems = [ "zfs" ];
};
fileSystems."/" = fileSystems."/" = {
{ device = "rpool/system/root"; device = "rpool/system/root";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/home" = fileSystems."/home" = {
{ device = "rpool/user/home"; device = "rpool/user/home";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/nix" = fileSystems."/nix" = {
{ device = "rpool/local/nix"; device = "rpool/local/nix";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/tmp" = fileSystems."/tmp" = {
{ device = "rpool/local/tmp"; device = "rpool/local/tmp";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/var" = fileSystems."/var" = {
{ device = "rpool/system/var"; device = "rpool/system/var";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/var/log" = fileSystems."/var/log" = {
{ device = "rpool/system/var/log"; device = "rpool/system/var/log";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/var/tmp" = fileSystems."/var/tmp" = {
{ device = "rpool/system/var/tmp"; device = "rpool/system/var/tmp";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/boot" = fileSystems."/boot" = {
{ device = "/dev/disk/by-uuid/28E6-5509"; device = "/dev/disk/by-uuid/28E6-5509";
fsType = "vfat"; fsType = "vfat";
}; };
swapDevices = [ ]; swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true; networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp0s25.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp3s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
} }

View File

@ -1,19 +1,24 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, inputs, ... }:
with lib.my;
{ {
imports = [ imports = [
./hardware-configuration.nix ./hardware-configuration.nix
../desktop.nix ../desktop.nix
]; ];
boot.loader.grub.enable = true; boot = {
boot.loader.grub.device = "/dev/sda"; loader.grub = {
boot.loader.grub.zfsSupport = true; enable = true;
device = "/dev/sda";
zfsSupport = true;
};
};
networking.hostName = "helios"; networking = {
networking.hostId = "47d23505"; hostName = "helios";
networking.networkmanager.enable = true; hostId = "47d23505";
networkmanager.enable = true;
};
nix.package = pkgs.nixFlakes; nix.package = pkgs.nixFlakes;
nix.extraOptions = '' nix.extraOptions = ''
@ -41,6 +46,15 @@ with lib.my;
gpg.enable = true; gpg.enable = true;
pass.enable = true; pass.enable = true;
}; };
services = {
borgmatic = {
enable = true;
directories = [
"/home/jordan/Documents"
];
repoPath = "ssh://b9cjl9hq@b9cjl9hq.repo.borgbase.com/./repo";
};
};
shell = { shell = {
git.enable = true; git.enable = true;
zsh.enable = true; zsh.enable = true;

View File

@ -1,65 +1,61 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }: { config, lib, pkgs, modulesPath, ... }:
{ {
imports = imports = [
[ (modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
]; ];
boot.initrd.availableKernelModules = [ "ehci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" "sr_mod" "zfs" ]; boot = {
boot.initrd.kernelModules = [ ]; initrd.availableKernelModules = [ "ehci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" "sr_mod" "zfs" ];
boot.initrd.supportedFilesystems = [ "zfs" ]; initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ]; initrd.supportedFilesystems = [ "zfs" ];
boot.kernelParams = [ "elevator=none" ]; kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ]; kernelParams = [ "elevator=none" ];
boot.supportedFilesystems = [ "zfs" ]; extraModulePackages = [ ];
supportedFilesystems = [ "zfs" ];
};
fileSystems."/" = fileSystems."/" = {
{ device = "rpool/system/root"; device = "rpool/system/root";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/home" = fileSystems."/home" = {
{ device = "rpool/user/home"; device = "rpool/user/home";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/nix" = fileSystems."/nix" = {
{ device = "rpool/local/nix"; device = "rpool/local/nix";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/tmp" = fileSystems."/tmp" = {
{ device = "rpool/local/tmp"; device = "rpool/local/tmp";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/var/log" = fileSystems."/var/log" = {
{ device = "rpool/system/var/log"; device = "rpool/system/var/log";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/var/tmp" = fileSystems."/var/tmp" = {
{ device = "rpool/system/var/tmp"; device = "rpool/system/var/tmp";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/boot" = fileSystems."/boot" = {
{ device = "/dev/sda1"; device = "/dev/sda1";
fsType = "ext2"; fsType = "ext2";
}; };
swapDevices = [ ]; swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true; networking.useDHCP = lib.mkDefault true;
# networking.interfaces.eno1.useDHCP = lib.mkDefault true; # networking.interfaces.eno1.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
} }

View File

@ -1,4 +1,4 @@
From c16be6b3b4da5a55e3ff4258ada123b5f03757e5 Mon Sep 17 00:00:00 2001 From daebf42bd955f6f8d971af967c675e4e339cb0b2 Mon Sep 17 00:00:00 2001
From: Jordan Holt <jordan@vimium.com> From: Jordan Holt <jordan@vimium.com>
Date: Sun, 12 Nov 2023 12:13:39 +0000 Date: Sun, 12 Nov 2023 12:13:39 +0000
Subject: [PATCH] Update device ID for PreSonus 1824c Subject: [PATCH] Update device ID for PreSonus 1824c
@ -6,8 +6,9 @@ Subject: [PATCH] Update device ID for PreSonus 1824c
--- ---
sound/usb/format.c | 4 ++-- sound/usb/format.c | 4 ++--
sound/usb/mixer_quirks.c | 2 +- sound/usb/mixer_quirks.c | 2 +-
sound/usb/mixer_s1810c.c | 2 +-
sound/usb/quirks.c | 4 ++-- sound/usb/quirks.c | 4 ++--
3 files changed, 5 insertions(+), 5 deletions(-) 4 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/sound/usb/format.c b/sound/usb/format.c diff --git a/sound/usb/format.c b/sound/usb/format.c
index ab5fed9f55b6..da50a4782414 100644 index ab5fed9f55b6..da50a4782414 100644
@ -37,6 +38,19 @@ index 898bc3baca7b..c3135459c38c 100644
err = snd_sc1810_init_mixer(mixer); err = snd_sc1810_init_mixer(mixer);
break; break;
case USB_ID(0x2a39, 0x3fb0): /* RME Babyface Pro FS */ case USB_ID(0x2a39, 0x3fb0): /* RME Babyface Pro FS */
diff --git a/sound/usb/mixer_s1810c.c b/sound/usb/mixer_s1810c.c
index fac4bbc6b275..5bc2e66d452c 100644
--- a/sound/usb/mixer_s1810c.c
+++ b/sound/usb/mixer_s1810c.c
@@ -552,7 +552,7 @@ int snd_sc1810_init_mixer(struct usb_mixer_interface *mixer)
return 0;
dev_info(&dev->dev,
- "Presonus Studio 1810c, device_setup: %u\n", chip->setup);
+ "Presonus Studio 1824c, device_setup: %u\n", chip->setup);
if (chip->setup == 1)
dev_info(&dev->dev, "(8out/18in @ 48kHz)\n");
else if (chip->setup == 2)
diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
index ab2b938502eb..b86832edaaa0 100644 index ab2b938502eb..b86832edaaa0 100644
--- a/sound/usb/quirks.c --- a/sound/usb/quirks.c
@ -53,5 +67,5 @@ index ab2b938502eb..b86832edaaa0 100644
-- --
2.40.1 2.42.0

45
hosts/odyssey/audio.nix Normal file
View File

@ -0,0 +1,45 @@
{ config, pkgs, ... }:
let
snd-usb-audio-module = pkgs.callPackage ./snd-usb-audio.nix {
kernel = config.boot.kernelPackages.kernel;
};
upmixConfig = ''
stream.properties = {
channelmix.upmix = true
channelmix.upmix-method = psd
}
'';
in {
boot.extraModulePackages = [
(snd-usb-audio-module.overrideAttrs (_: {
patches = [ ./0001-Update-device-ID-for-PreSonus-1824c.patch ];
}))
];
environment.etc = {
"pipewire/pipewire.conf.d/surround.conf".text = ''
context.modules = [
{
name = libpipewire-module-loopback
args = {
node.description = "Genelec 4.1 Surround"
capture.props = {
node.name = "Genelec_Speakers"
media.class = "Audio/Sink"
audio.position = [ FL FR SL SR LFE ]
}
playback.props = {
node.name = "playback.Genelec_Speakers"
audio.position = [ AUX0 AUX1 AUX3 AUX4 AUX5 ]
target.object = "alsa_output.usb-PreSonus_Studio_1824c_SC4E21110775-00.multichannel-output"
stream.dont-remix = true
node.passive = true
}
}
}
]
'';
"pipewire/pipewire-pulse.conf.d/40-upmix.conf".text = upmixConfig;
"pipewire/client-rt.conf.d/40-upmix.conf".text = upmixConfig;
};
}

View File

@ -1,9 +1,9 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, inputs, ... }:
with lib.my;
{ {
imports = [ imports = [
./hardware-configuration.nix ./hardware-configuration.nix
./audio.nix
../desktop.nix ../desktop.nix
]; ];
@ -16,32 +16,8 @@ with lib.my;
networking.hostName = "odyssey"; networking.hostName = "odyssey";
networking.hostId = "c5e68d78"; networking.hostId = "c5e68d78";
networking.networkmanager.enable = true; networking.networkmanager.enable = true;
environment.etc."pipewire/pipewire.conf.d/surround.conf".text = ''
context.modules = [
{
name = libpipewire-module-loopback
args = {
node.description = "1824c Surround"
capture.props = {
node.name = "1824c_Speakers"
media.class = "Audio/Sink"
audio.position = [ FL FR FC SL SR LFE ]
}
playback.props = {
node.name = "playback.1824c_Speakers"
audio.position = [ AUX0 AUX1 AUX2 AUX3 AUX4 AUX5 ]
target.object = "alsa_output.usb-PreSonus_Studio_1824c_SC4E21110775-00.multichannel-output"
stream.dont-remix = true
node.passive = true
}
}
}
]
'';
nix.package = pkgs.nixFlakes; nix.package = pkgs.nixFlakes;
nix.extraOptions = '' nix.extraOptions = ''
experimental-features = nix-command flakes experimental-features = nix-command flakes
@ -49,6 +25,8 @@ with lib.my;
virtualisation.libvirtd.enable = true; virtualisation.libvirtd.enable = true;
virtualisation.lxd.enable = true; virtualisation.lxd.enable = true;
# Work around https://github.com/NixOS/nixpkgs/issues/263359
networking.firewall.trustedInterfaces = [ "lxdbr0" "virbr0" ];
users.defaultUserShell = pkgs.zsh; users.defaultUserShell = pkgs.zsh;
@ -74,42 +52,16 @@ with lib.my;
}; };
}; };
age.secrets."odyssey_borg_passphrase" = {
file = ../../secrets/odyssey_borg_passphrase.age;
};
services.borgmatic = {
enable = true;
settings = {
location = {
source_directories = [
"/home/jordan/Documents"
];
repositories = [
"ssh://iqwu22oq@iqwu22oq.repo.borgbase.com/./repo"
];
};
storage = {
encryption_passcommand = "cat ${config.age.secrets.odyssey_borg_passphrase.path}";
ssh_command = "ssh -i /etc/ssh/ssh_host_ed25519_key";
};
retention = {
keep_daily = 7;
keep_weekly = 4;
keep_monthly = 6;
};
};
};
# Without this override, `cat` is unavailable for `encryption_passcommand`
systemd.services.borgmatic.confinement.fullUnit = true;
modules = { modules = {
desktop = { desktop = {
apps.qbittorrent.enable = true; apps.qbittorrent.enable = true;
browsers = { browsers = {
firefox.enable = true; firefox.enable = true;
}; };
gaming.emulators = {
ps2.enable = true;
psp.enable = true;
};
media.graphics = { media.graphics = {
modeling.enable = true; modeling.enable = true;
raster.enable = true; raster.enable = true;
@ -125,11 +77,21 @@ with lib.my;
}; };
editors = { editors = {
neovim.enable = true; neovim.enable = true;
vscode.enable = true;
}; };
security = { security = {
gpg.enable = true; gpg.enable = true;
pass.enable = true; pass.enable = true;
}; };
services = {
borgmatic = {
enable = true;
directories = [
"/home/jordan/Documents"
];
repoPath = "ssh://iqwu22oq@iqwu22oq.repo.borgbase.com/./repo";
};
};
shell = { shell = {
git.enable = true; git.enable = true;
zsh.enable = true; zsh.enable = true;

View File

@ -1,78 +1,68 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }: { config, lib, pkgs, modulesPath, ... }:
let {
snd-usb-audio-module = pkgs.callPackage ./snd-usb-audio.nix { imports = [
kernel = config.boot.kernelPackages.kernel; (modulesPath + "/installer/scan/not-detected.nix")
};
in {
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "xhci_pci" "ehci_pci" "nvme" "usbhid" "usb_storage" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [
(snd-usb-audio-module.overrideAttrs (_: {
patches = [ ./0001-Update-device-ID-for-PreSonus-1824c.patch ];
}))
]; ];
boot.supportedFilesystems = [ "ntfs" ];
boot.binfmt.emulatedSystems = [ "aarch64-linux" ];
hardware.nvidia = { boot = {
modesetting.enable = true; initrd.availableKernelModules = [ "xhci_pci" "ehci_pci" "nvme" "usbhid" "usb_storage" "sd_mod" ];
powerManagement.enable = true; initrd.kernelModules = [ ];
initrd.supportedFilesystems = [ "zfs" ];
kernelModules = [ "kvm-intel" ];
kernelPackages = pkgs.linuxPackages;
supportedFilesystems = [ "ntfs" ];
binfmt.emulatedSystems = [ "aarch64-linux" ];
}; };
hardware = {
cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
nvidia = {
modesetting.enable = true;
powerManagement.enable = true;
};
};
services.xserver.videoDrivers = [ "nvidia" ]; services.xserver.videoDrivers = [ "nvidia" ];
fileSystems."/" = fileSystems."/" = {
{ device = "rpool/system/root"; device = "rpool/system/root";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/home" = fileSystems."/home" = {
{ device = "rpool/user/home"; device = "rpool/user/home";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/var" = fileSystems."/var" = {
{ device = "rpool/system/var"; device = "rpool/system/var";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/tmp" = fileSystems."/tmp" = {
{ device = "rpool/local/tmp"; device = "rpool/local/tmp";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/var/log" = fileSystems."/var/log" = {
{ device = "rpool/system/var/log"; device = "rpool/system/var/log";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/var/tmp" = fileSystems."/var/tmp" = {
{ device = "rpool/system/var/tmp"; device = "rpool/system/var/tmp";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/boot" = fileSystems."/boot" = {
{ device = "/dev/disk/by-uuid/E63E-8E75"; device = "/dev/disk/by-uuid/E63E-8E75";
fsType = "vfat"; fsType = "vfat";
}; };
swapDevices = [ ]; swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true; networking.useDHCP = lib.mkDefault true;
# networking.interfaces.eno1.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
} }

18
hosts/pi/README.md Normal file
View File

@ -0,0 +1,18 @@
# Pi
## Overview
Raspberry Pi 4
## Specs
* SoC - Broadcom BCM2711
* CPU - ARM Cortex-A72 @ 1.8 GHz
* Memory - 8 GB LPDDR4
### Disks
Device | Partitions _(filesystem, usage)_
--- | ---
SD card | `/dev/mmcblk0` (ext4, NixOS Root)
### Networks
- DHCP on `10.0.1.0/24` subnet.
- Tailscale on `100.64.0.0/10` subnet. FQDN: `pi.mesh.vimium.net`.

View File

@ -1,30 +1,33 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, inputs, ... }:
with lib.my;
{ {
imports = [ imports = [
<nixos-hardware/raspberry-pi/4>
./hardware-configuration.nix ./hardware-configuration.nix
../server.nix ../server.nix
]; ];
networking.hostName = "pi"; networking.hostId = "731d1660";
networking.hostId = "";
hardware = { hardware = {
raspberry-pi."4" = { raspberry-pi."4" = {
apply-overlays-dtmerge.enable = true; apply-overlays-dtmerge.enable = true;
audio.enable = true; audio.enable = false;
fkms-3d.enable = true; fkms-3d.enable = false;
xhci.enable = false;
}; };
deviceTree = { deviceTree = {
enable = true; enable = true;
filter = "*rpi-4-*.dtb"; overlays = [
{ name = "hifiberry-digi-pro"; dtboFile = "${pkgs.device-tree_rpi.overlays}/hifiberry-digi-pro.dtbo"; }
];
}; };
firmware = with pkgs; [
firmwareLinuxNonfree
wireless-regdb
];
}; };
sound.enable = true; sound.enable = true;
console.enable = false;
security.rtkit.enable = true; security.rtkit.enable = true;
services.pipewire = { services.pipewire = {
@ -32,6 +35,81 @@ with lib.my;
alsa.enable = true; alsa.enable = true;
alsa.support32Bit = true; alsa.support32Bit = true;
pulse.enable = true; pulse.enable = true;
systemWide = true;
};
virtualisation.oci-containers = {
backend = "podman";
containers.homeassistant = {
volumes = [ "home-assistant:/config" ];
environment.TZ = config.time.timeZone;
image = "ghcr.io/home-assistant/home-assistant:stable";
extraOptions = [
"--network=host"
"--device=/dev/ttyUSB0:/dev/ttyUSB0"
];
};
};
services.mosquitto = {
enable = true;
listeners = [{
port = 1883;
settings = {
allow_anonymous = true;
};
}];
};
age.secrets."files/services/zigbee2mqtt/secret.yaml" = {
file = "${inputs.secrets}/files/services/zigbee2mqtt/secret.yaml.age";
path = "${config.services.zigbee2mqtt.dataDir}/secret.yaml";
owner = "zigbee2mqtt";
group = "zigbee2mqtt";
};
services.zigbee2mqtt = {
enable = true;
dataDir = "/var/lib/zigbee2mqtt";
settings = {
homeassistant = true;
frontend = true;
device_options = {
retain = true;
};
serial = {
port = "/dev/serial/by-id/usb-Silicon_Labs_Sonoff_Zigbee_3.0_USB_Dongle_Plus_0001-if00-port0";
};
advanced = {
channel = 20;
network_key = "!secret.yaml network_key";
pan_id = 13001;
ext_pan_id = [ 79 1 73 47 250 136 124 222 ];
};
mqtt = {
version = 5;
server = "mqtt://localhost:1883";
};
};
};
modules = {
networking = {
wireless = {
enable = true;
interfaces = [ "wlan0" ];
};
};
services = {
borgmatic = {
enable = true;
directories = [
"/var/lib/mosquitto"
"/var/lib/zigbee2mqtt"
];
repoPath = "ssh://qcw86s11@qcw86s11.repo.borgbase.com/./repo";
};
};
}; };
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [

View File

@ -2,7 +2,22 @@
{ {
imports = [ imports = [
<nixos-hardware/raspberry-pi/4> (modulesPath + "/installer/sd-card/sd-image-aarch64.nix")
];
boot = {
# Stop ZFS kernel being built
supportedFilesystems = lib.mkForce [ "btrfs" "cifs" "f2fs" "jfs" "ntfs" "reiserfs" "vfat" "xfs" ];
tmp.cleanOnBoot = true;
};
# Fix missing modules
# https://github.com/NixOS/nixpkgs/issues/154163
nixpkgs.overlays = [
(final: super: {
makeModulesClosure = x:
super.makeModulesClosure (x // { allowMissing = true; });
})
]; ];
fileSystems = { fileSystems = {

View File

@ -1,7 +1,5 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
{ {
time.timeZone = "Europe/London"; time.timeZone = "Europe/London";
@ -20,6 +18,8 @@ with lib.my;
console.keyMap = "uk"; console.keyMap = "uk";
documentation.enable = false;
services.openssh = { services.openssh = {
enable = true; enable = true;
settings = { settings = {

View File

@ -1,26 +0,0 @@
{ lib, ... }:
with builtins;
with lib;
rec {
# attrsToList
attrsToList = attrs:
mapAttrsToList (name: value: { inherit name value; }) attrs;
# mapFilterAttrs ::
# (name -> value -> bool)
# (name -> value -> { name = any; value = any; })
# attrs
mapFilterAttrs = pred: f: attrs: filterAttrs pred (mapAttrs' f attrs);
# Generate an attribute set by mapping a function over a list of values.
genAttrs' = values: f: listToAttrs (map f values);
# anyAttrs :: (name -> value -> bool) attrs
anyAttrs = pred: attrs:
any (attr: pred attr.name attr.value) (attrsToList attrs);
# countAttrs :: (name -> value -> bool) attrs
countAttrs = pred: attrs:
count (attr: pred attr.name attr.value) (attrsToList attrs);
}

View File

@ -1,19 +0,0 @@
{ inputs, lib, pkgs, ... }:
let
inherit (lib) makeExtensible attrValues foldr;
inherit (modules) mapModules;
modules = import ./modules.nix {
inherit lib;
self.attrs = import ./attrs.nix { inherit lib; self = {}; };
};
mylib = makeExtensible (self:
with self; mapModules ./.
(file: import file { inherit self lib pkgs inputs; }));
in
mylib.extend
(self: super:
foldr (a: b: a // b) {} (attrValues super))

View File

@ -1,53 +0,0 @@
{ self, lib, ... }:
let
inherit (builtins) attrValues readDir pathExists concatLists;
inherit (lib) id mapAttrsToList filterAttrs hasPrefix hasSuffix nameValuePair removeSuffix;
inherit (self.attrs) mapFilterAttrs;
in
rec {
mapModules = dir: fn:
mapFilterAttrs
(n: v:
v != null &&
!(hasPrefix "_" n))
(n: v:
let path = "${toString dir}/${n}"; in
if v == "directory" && pathExists "${path}/default.nix"
then nameValuePair n (fn path)
else if v == "regular" &&
n != "default.nix" &&
hasSuffix ".nix" n
then nameValuePair (removeSuffix ".nix" n) (fn path)
else nameValuePair "" null)
(readDir dir);
mapModules' = dir: fn:
attrValues (mapModules dir fn);
mapModulesRec = dir: fn:
mapFilterAttrs
(n: v:
v != null &&
!(hasPrefix "_" n))
(n: v:
let path = "${toString dir}/${n}"; in
if v == "directory"
then nameValuePair n (mapModulesRec path fn)
else if v == "regular" && n != "default.nix" && hasSuffix ".nix" n
then nameValuePair (removeSuffix ".nix" n) (fn path)
else nameValuePair "" null)
(readDir dir);
mapModulesRec' = dir: fn:
let
dirs =
mapAttrsToList
(k: _: "${dir}/${k}")
(filterAttrs
(n: v: v == "directory" && !(hasPrefix "_" n))
(readDir dir));
files = attrValues (mapModules dir id);
paths = files ++ concatLists (map (d: mapModulesRec' d id) dirs);
in map fn paths;
}

View File

@ -1,25 +0,0 @@
{ inputs, lib, pkgs, ... }:
with lib;
with lib.my;
let sys = "x86_64-linux";
in {
mkHost = path: attrs @ { system ? sys, ... }:
nixosSystem {
inherit system;
specialArgs = { inherit lib inputs system; };
modules = [
{
nixpkgs.pkgs = pkgs;
networking.hostName = mkDefault (removeSuffix ".nix" (baseNameOf path));
}
(filterAttrs (n: v: !elem n [ "system" ]) attrs)
../. # /default.nix
(import path)
];
};
mapHosts = dir: attrs @ { system ? system, ... }:
mapModules dir
(hostPath: mkHost hostPath attrs);
}

View File

@ -1,35 +0,0 @@
{ lib, ... }:
let
inherit (lib) mkOption types;
in
rec {
mkOpt = type: default:
mkOption { inherit type default; };
mkOpt' = type: default: description:
mkOption { inherit type default description; };
mkBoolOpt = default: mkOption {
inherit default;
type = types.bool;
example = true;
};
mkStringOpt = default: mkOption {
inherit default;
type = types.lines;
example = "";
};
mkListOfStringOpt = default: mkOption {
inherit default;
type = types.listOf types.lines;
example = [ "a" "b" "c" ];
};
mkPath = path:
if path != null
then toString path
else "";
}

View File

@ -26,8 +26,12 @@
./editors/neovim ./editors/neovim
./editors/vscode.nix ./editors/vscode.nix
./networking/tailscale.nix ./networking/tailscale.nix
./networking/wireless.nix
./security/gpg.nix ./security/gpg.nix
./security/pass.nix ./security/pass.nix
./services/borgmatic
./services/coturn
./services/matrix
./shell/git ./shell/git
./shell/zsh ./shell/zsh
]; ];

View File

@ -1,16 +1,17 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.desktop.apps.qbittorrent; let cfg = config.modules.desktop.apps.qbittorrent;
in { in {
options.modules.desktop.apps.qbittorrent = { options.modules.desktop.apps.qbittorrent = {
enable = mkBoolOpt false; enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
qbittorrent qbittorrent
]; ];
}; };
} }

View File

@ -1,14 +1,15 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.desktop.apps.slack; let cfg = config.modules.desktop.apps.slack;
in { in {
options.modules.desktop.apps.slack = { options.modules.desktop.apps.slack = {
enable = mkBoolOpt false; enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
slack slack
]; ];

View File

@ -1,14 +1,15 @@
{ config, lib, pkgs, inputs, ... }: { config, lib, pkgs, inputs, ... }:
with lib;
with lib.my;
let cfg = config.modules.desktop.apps.thunderbird; let cfg = config.modules.desktop.apps.thunderbird;
in { in {
options.modules.desktop.apps.thunderbird = { options.modules.desktop.apps.thunderbird = {
enable = mkBoolOpt false; enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
home.file.".thunderbird/Default/chrome/thunderbird-gnome-theme".source = inputs.thunderbird-gnome-theme; home.file.".thunderbird/Default/chrome/thunderbird-gnome-theme".source = inputs.thunderbird-gnome-theme;
home.programs.thunderbird = { home.programs.thunderbird = {

View File

@ -1,14 +1,15 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.desktop.apps.zoom; let cfg = config.modules.desktop.apps.zoom;
in { in {
options.modules.desktop.apps.zoom = { options.modules.desktop.apps.zoom = {
enable = mkBoolOpt false; enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
zoom-us zoom-us
]; ];

View File

@ -1,14 +1,15 @@
{ config, lib, pkgs, inputs, ... }: { config, lib, pkgs, inputs, ... }:
with lib;
with lib.my;
let cfg = config.modules.desktop.browsers.firefox; let cfg = config.modules.desktop.browsers.firefox;
in { in {
options.modules.desktop.browsers.firefox = { options.modules.desktop.browsers.firefox = {
enable = mkBoolOpt false; enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
home.file.".mozilla/firefox/Default/chrome/firefox-gnome-theme".source = inputs.firefox-gnome-theme; home.file.".mozilla/firefox/Default/chrome/firefox-gnome-theme".source = inputs.firefox-gnome-theme;
home.programs.firefox = { home.programs.firefox = {

View File

@ -1,34 +1,59 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.desktop.gaming.emulators; let cfg = config.modules.desktop.gaming.emulators;
in { in {
options.modules.desktop.gaming.emulators = { options.modules.desktop.gaming.emulators = {
ds.enable = mkBoolOpt false; ds.enable = lib.mkOption {
gb.enable = mkBoolOpt false; default = false;
gba.enable = mkBoolOpt false; example = true;
gamecube.enable = mkBoolOpt false; };
ps2.enable = mkBoolOpt false; gb.enable = lib.mkOption {
ps3.enable = mkBoolOpt false; default = false;
psp.enable = mkBoolOpt false; example = true;
snes.enable = mkBoolOpt false; };
wii.enable = mkBoolOpt false; gba.enable = lib.mkOption {
default = false;
example = true;
};
gamecube.enable = lib.mkOption {
default = false;
example = true;
};
ps2.enable = lib.mkOption {
default = false;
example = true;
};
ps3.enable = lib.mkOption {
default = false;
example = true;
};
psp.enable = lib.mkOption {
default = false;
example = true;
};
snes.enable = lib.mkOption {
default = false;
example = true;
};
wii.enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = { config = {
user.packages = with pkgs; [ user.packages = with pkgs; [
(mkIf cfg.ps2.enable pcsx2) (lib.mkIf cfg.ps2.enable pcsx2)
(mkIf cfg.ps3.enable rpcs3) (lib.mkIf cfg.ps3.enable rpcs3)
(mkIf cfg.psp.enable ppsspp) (lib.mkIf cfg.psp.enable ppsspp)
(mkIf cfg.ds.enable desmume) (lib.mkIf cfg.ds.enable desmume)
(mkIf (cfg.gba.enable || (lib.mkIf (cfg.gba.enable ||
cfg.gb.enable || cfg.gb.enable ||
cfg.snes.enable) cfg.snes.enable)
higan) higan)
(mkIf (cfg.wii.enable || (lib.mkIf (cfg.wii.enable ||
cfg.gamecube.enable) cfg.gamecube.enable)
dolphin-emu) dolphin-emu)
]; ];
}; };
} }

View File

@ -1,14 +1,15 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.desktop.gaming.lutris; let cfg = config.modules.desktop.gaming.lutris;
in { in {
options.modules.desktop.gaming.lutris = { options.modules.desktop.gaming.lutris = {
enable = mkBoolOpt false; enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
lutris lutris
vulkan-loader vulkan-loader

View File

@ -1,16 +1,17 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.desktop.gaming.steam; let cfg = config.modules.desktop.gaming.steam;
in { in {
options.modules.desktop.gaming.steam = { options.modules.desktop.gaming.steam = {
enable = mkBoolOpt false; enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
programs.steam.enable = true; programs.steam.enable = true;
systemd.extraConfig = "DefaultLimitNOFILE=1048576"; systemd.extraConfig = "DefaultLimitNOFILE=1048576";
}; };
} }

View File

@ -1,14 +1,15 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.desktop.gnome; let cfg = config.modules.desktop.gnome;
in { in {
options.modules.desktop.gnome = { options.modules.desktop.gnome = {
enable = mkBoolOpt false; enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
services.xserver = { services.xserver = {
enable = true; enable = true;
displayManager.gdm.enable = true; displayManager.gdm.enable = true;
@ -180,6 +181,7 @@ in {
gnomeExtensions.pano gnomeExtensions.pano
gnomeExtensions.paperwm gnomeExtensions.paperwm
# gnomeExtensions.pip-on-top # gnomeExtensions.pip-on-top
gnomeExtensions.rounded-window-corners
gnomeExtensions.search-light gnomeExtensions.search-light
gnomeExtensions.smart-auto-move gnomeExtensions.smart-auto-move
gnomeExtensions.space-bar gnomeExtensions.space-bar
@ -198,7 +200,9 @@ in {
tokei tokei
tree tree
wl-clipboard wl-clipboard
]; ] ++ (if config.virtualisation.podman.enable then [
pods
] else []);
home.services.gpg-agent.pinentryFlavor = "gnome3"; home.services.gpg-agent.pinentryFlavor = "gnome3";
}; };

View File

@ -1,21 +1,28 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.desktop.media.graphics; let cfg = config.modules.desktop.media.graphics;
in { in {
options.modules.desktop.media.graphics = { options.modules.desktop.media.graphics = {
modeling.enable = mkBoolOpt false; modeling.enable = lib.mkOption {
raster.enable = mkBoolOpt false; default = false;
vector.enable = mkBoolOpt false; example = true;
};
raster.enable = lib.mkOption {
default = false;
example = true;
};
vector.enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = { config = {
user.packages = with pkgs; [ user.packages = with pkgs; [
(mkIf cfg.modeling.enable blender) (lib.mkIf cfg.modeling.enable blender)
(mkIf cfg.raster.enable gimp) (lib.mkIf cfg.raster.enable gimp)
(mkIf cfg.raster.enable krita) (lib.mkIf cfg.raster.enable krita)
(mkIf cfg.vector.enable inkscape) (lib.mkIf cfg.vector.enable inkscape)
]; ];
}; };
} }

View File

@ -1,12 +1,16 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.desktop.media.recording; let cfg = config.modules.desktop.media.recording;
in { in {
options.modules.desktop.media.recording = { options.modules.desktop.media.recording = {
audio.enable = mkBoolOpt false; audio.enable = lib.mkOption {
video.enable = mkBoolOpt false; default = false;
example = true;
};
video.enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = { config = {
@ -21,4 +25,4 @@ in {
obs-studio obs-studio
] else []); ] else []);
}; };
} }

View File

@ -1,17 +1,18 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let let
cfg = config.modules.desktop.mimeapps; cfg = config.modules.desktop.mimeapps;
avApp = "io.github.celluloid_player.Celluloid.desktop"; avApp = "io.github.celluloid_player.Celluloid.desktop";
imageApp = "org.gnome.eog.desktop"; imageApp = "org.gnome.eog.desktop";
in { in {
options.modules.desktop.mimeapps = { options.modules.desktop.mimeapps = {
enable = mkBoolOpt false; enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
xdg.mime.defaultApplications = { xdg.mime.defaultApplications = {
# Audio/video # Audio/video
"audio/x-vorbis+ogg" = avApp; "audio/x-vorbis+ogg" = avApp;

View File

@ -1,14 +1,15 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.desktop.office.libreoffice; let cfg = config.modules.desktop.office.libreoffice;
in { in {
options.modules.desktop.office.libreoffice = { options.modules.desktop.office.libreoffice = {
enable = mkBoolOpt false; enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
libreoffice libreoffice
]; ];

View File

@ -1,14 +1,15 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.dev.cc; let cfg = config.modules.dev.cc;
in { in {
options.modules.dev.cc = { options.modules.dev.cc = {
enable = mkBoolOpt false; enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
clang clang
gcc gcc
@ -17,4 +18,4 @@ in {
llvmPackages.libcxx llvmPackages.libcxx
]; ];
}; };
} }

View File

@ -1,16 +1,17 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.dev.java; let cfg = config.modules.dev.java;
in { in {
options.modules.dev.java = { options.modules.dev.java = {
enable = mkBoolOpt false; enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
jdk jdk
]; ];
}; };
} }

View File

@ -1,16 +1,17 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.dev.lua; let cfg = config.modules.dev.lua;
in { in {
options.modules.dev.lua = { options.modules.dev.lua = {
enable = mkBoolOpt false; enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
lua lua
]; ];
}; };
} }

View File

@ -1,16 +1,17 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.dev.node; let cfg = config.modules.dev.node;
in { in {
options.modules.dev.node = { options.modules.dev.node = {
enable = mkBoolOpt false; enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
nodejs_latest nodejs_latest
]; ];
}; };
} }

View File

@ -1,16 +1,17 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.dev.python; let cfg = config.modules.dev.python;
in { in {
options.modules.dev.python = { options.modules.dev.python = {
enable = mkBoolOpt false; enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
python310 python310
]; ];
}; };
} }

View File

@ -1,14 +1,15 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.dev.rust; let cfg = config.modules.dev.rust;
in { in {
options.modules.dev.rust = { options.modules.dev.rust = {
enable = mkBoolOpt false; enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
rustc rustc
rustup rustup
@ -16,4 +17,4 @@ in {
rust-bindgen rust-bindgen
]; ];
}; };
} }

View File

@ -1,18 +1,19 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.dev.scala; let cfg = config.modules.dev.scala;
in { in {
options.modules.dev.scala = { options.modules.dev.scala = {
enable = mkBoolOpt false; enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
jdk jdk
sbt sbt
scala scala
]; ];
}; };
} }

View File

@ -1,16 +1,17 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.dev.shell; let cfg = config.modules.dev.shell;
in { in {
options.modules.dev.shell = { options.modules.dev.shell = {
enable = mkBoolOpt false; enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
shellcheck shellcheck
]; ];
}; };
} }

View File

@ -1,16 +1,17 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.dev.zig; let cfg = config.modules.dev.zig;
in { in {
options.modules.dev.zig = { options.modules.dev.zig = {
enable = mkBoolOpt false; enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
zig zig
]; ];
}; };
} }

View File

@ -1,16 +1,17 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let let
cfg = config.modules.editors.neovim; cfg = config.modules.editors.neovim;
dev = config.modules.dev; dev = config.modules.dev;
in { in {
options.modules.editors.neovim = { options.modules.editors.neovim = {
enable = mkBoolOpt false; enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
(neovim.override { (neovim.override {
configure = { configure = {

View File

@ -1,16 +1,49 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.editors.vscode; let cfg = config.modules.editors.vscode;
in { in {
options.modules.editors.vscode = { options.modules.editors.vscode = {
enable = mkBoolOpt false; enable = lib.mkOption {
}; default = false;
example = true;
config = mkIf cfg.enable {
home.programs.vscode = {
enable = true;
}; };
}; };
}
config = lib.mkIf cfg.enable {
environment.sessionVariables.NIXOS_OZONE_WL = "1";
home.programs.vscode = {
enable = true;
extensions = with pkgs.vscode-extensions; [
asvetliakov.vscode-neovim
brettm12345.nixfmt-vscode
coolbear.systemd-unit-file
editorconfig.editorconfig
golang.go
graphql.vscode-graphql-syntax
mattn.lisp
# mkhl.direnv
ms-python.vscode-pylance
ms-vscode.cpptools
ms-vscode.hexeditor
piousdeer.adwaita-theme
# redhat.java
# sumneko.lua
];
userSettings = {
"editor.renderLineHighlight" = "none";
"extensions.experimental.affinity" = {
"asvetliakov.vscode-neovim" = 1;
};
"files.autoSave" = "off";
"window.autoDetectColorScheme" = true;
"window.commandCenter" = true;
"window.titleBarStyle" = "custom";
"workbench.iconTheme" = null;
"workbench.preferredDarkColorTheme" = "Adwaita Dark";
"workbench.preferredLightColorTheme" = "Adwaita Light";
"workbench.tree.indent" = 12;
};
};
};
}

View File

@ -1,15 +1,19 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.networking.tailscale; let cfg = config.modules.networking.tailscale;
in { in {
options.modules.networking.tailscale = { options.modules.networking.tailscale = {
enable = mkBoolOpt false; enable = lib.mkOption {
restrictSSH = mkBoolOpt true; default = false;
example = true;
};
restrictSSH = lib.mkOption {
default = true;
example = true;
};
}; };
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
services.tailscale.enable = true; services.tailscale.enable = true;
services.openssh.openFirewall = !cfg.restrictSSH; services.openssh.openFirewall = !cfg.restrictSSH;
networking.firewall = { networking.firewall = {

View File

@ -0,0 +1,36 @@
{ config, lib, pkgs, inputs, ... }:
with lib;
let cfg = config.modules.networking.wireless;
in {
options.modules.networking.wireless = {
enable = mkOption {
default = false;
example = true;
description = mdDoc "Automatically connect to known networks";
};
interfaces = mkOption {
default = [ ]; # All interfaces
example = [ "wlan0" ];
description = mdDoc "Interfaces for `wpa_supplicant` to bind to";
};
};
config = mkIf cfg.enable {
age.secrets."passwords/networks" = {
file = "${inputs.secrets}/passwords/networks.age";
};
networking = {
wireless = {
enable = true;
interfaces = cfg.interfaces;
environmentFile = config.age.secrets.passwords/networks.path;
networks = {
"Apollo 600 Mbps".psk = "@PSK_APOLLO@";
};
};
};
};
}

View File

@ -1,21 +1,20 @@
{ config, options, lib, home-manager, ... }: { config, options, lib, home-manager, inputs, ... }:
with lib; with lib;
with lib.my;
{ {
options = with types; { options = with types; {
user = mkOpt attrs { }; user = mkOption { type = attrs; default = { }; };
home = { home = {
configFile = mkOpt' attrs { } "Files to place in $XDG_CONFIG_HOME"; configFile = mkOption { type = attrs; default = { }; description = "Files to place in $XDG_CONFIG_HOME"; };
dataFile = mkOpt' attrs { } "Files to place in $XDG_DATA_HOME"; dataFile = mkOption { type = attrs; default = { }; description = "Files to place in $XDG_DATA_HOME"; };
file = mkOpt' attrs { } "Files to place directly in $HOME"; file = mkOption { type = attrs; default = { }; description = "Files to place directly in $HOME"; };
packages = mkOpt' attrs { } "User-level installed packages"; packages = mkOption { type = attrs; default = { }; description = "User-level installed packages"; };
programs = mkOpt' attrs { } "Programs managed directly from home-manager"; programs = mkOption { type = attrs; default = { }; description = "Programs managed directly from home-manager"; };
services = mkOpt' attrs { } "Services managed directly from home-manager"; services = mkOption { type = attrs; default = { }; description = "Services managed directly from home-manager"; };
}; };
dconf.settings = mkOpt' attrs { } "dconf settings to enable"; dconf.settings = mkOption { type = attrs; default = { }; description = "dconf settings to enable"; };
env = mkOption { env = mkOption {
type = attrsOf (oneOf [ str path (listOf (either str path)) ]); type = attrsOf (oneOf [ str path (listOf (either str path)) ]);
@ -30,6 +29,7 @@ with lib.my;
}; };
config = { config = {
age.secrets."passwords/users/jordan".file = "${inputs.secrets}/passwords/users/jordan.age";
user = user =
let user = builtins.getEnv "USER"; let user = builtins.getEnv "USER";
name = if elem user [ "" "root" ] then "jordan" else user; name = if elem user [ "" "root" ] then "jordan" else user;
@ -42,6 +42,7 @@ with lib.my;
openssh.authorizedKeys.keys = [ openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILVHTjsyMIV4THNw6yz0OxAxGnC+41gX72UrPqTzR+OS jordan@vimium.com" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILVHTjsyMIV4THNw6yz0OxAxGnC+41gX72UrPqTzR+OS jordan@vimium.com"
]; ];
hashedPasswordFile = config.age.secrets."passwords/users/jordan".path;
home = "/home/${name}"; home = "/home/${name}";
group = "users"; group = "users";
uid = 1000; uid = 1000;
@ -69,8 +70,6 @@ with lib.my;
users.users.${config.user.name} = mkAliasDefinitions options.user; users.users.${config.user.name} = mkAliasDefinitions options.user;
nixpkgs.config.allowUnfree = true;
environment.extraInit = environment.extraInit =
concatStringsSep "\n" concatStringsSep "\n"
(mapAttrsToList (n: v: "export ${n}=\"${v}\"") config.env); (mapAttrsToList (n: v: "export ${n}=\"${v}\"") config.env);

View File

@ -1,14 +1,15 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.security.gpg; let cfg = config.modules.security.gpg;
in { in {
options.modules.security.gpg = { options.modules.security.gpg = {
enable = mkBoolOpt false; enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
home.programs.gpg = { home.programs.gpg = {
enable = true; enable = true;
}; };
@ -18,4 +19,4 @@ in {
enableSshSupport = true; enableSshSupport = true;
}; };
}; };
} }

View File

@ -1,17 +1,18 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.security.pass; let cfg = config.modules.security.pass;
in { in {
options.modules.security.pass = { options.modules.security.pass = {
enable = mkBoolOpt false; enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
home.programs.password-store = { home.programs.password-store = {
enable = true; enable = true;
package = pkgs.pass.withExtensions (exts: [ exts.pass-otp ]); package = pkgs.pass.withExtensions (exts: [ exts.pass-otp ]);
}; };
}; };
} }

View File

@ -0,0 +1,57 @@
{ config, lib, pkgs, inputs, ... }:
with lib;
let
cfg = config.modules.services.borgmatic;
hostname = config.networking.hostName;
in {
options.modules.services.borgmatic = {
enable = mkOption {
default = false;
example = true;
description = mdDoc "Enable backups on this host with `borgmatic`";
};
directories = mkOption {
type = types.listOf types.str;
default = [];
example = [
"/home/jordan/Documents"
];
description = mdDoc "List of directories to backup";
};
repoPath = mkOption {
type = types.str;
example = "ssh://example@example.repo.borgbase.com/./repo";
description = mdDoc "Destination borg repository for backup";
};
};
config = mkIf cfg.enable {
age.secrets."passwords/services/borg/${hostname}-passphrase" = {
file = "${inputs.secrets}/passwords/services/borg/${hostname}-passphrase.age";
};
services.borgmatic = {
enable = true;
settings = {
source_directories = cfg.directories;
repositories = [
{ label = "borgbase"; path = cfg.repoPath; }
];
storage = {
encryption_passcommand = "cat ${config.age.secrets."passwords/services/borg/${hostname}-passphrase".path}";
ssh_command = "ssh -i /etc/ssh/ssh_host_ed25519_key";
};
retention = {
keep_daily = 7;
keep_weekly = 4;
keep_monthly = 6;
};
};
};
# Without this override, `cat` is unavailable for `encryption_passcommand`
systemd.services.borgmatic.confinement.fullUnit = true;
};
}

View File

@ -0,0 +1,59 @@
{ config, lib, pkgs, inputs, ... }:
with lib;
let
cfg = config.modules.services.coturn;
domain = "vimium.com";
in {
options.modules.services.coturn = {
enable = mkOption {
default = false;
example = true;
};
};
config = {
age.secrets."passwords/services/coturn/secret" = {
file = "${inputs.secrets}/passwords/services/coturn/secret.age";
};
networking.firewall = {
allowedTCPPorts = [
5349 # STUN TLS
5350 # STUN TLS alt
];
allowedUDPPortRanges = [
{ from = 49152; to = 49999; } # TURN relay
];
};
services.coturn = {
enable = true;
lt-cred-mech = true;
use-auth-secret = true;
static-auth-secret = ""; # TODO: Pass as extraConfig
realm = "turn.${domain}";
relay-ips = [
"198.244.190.160"
];
no-tcp-relay = true;
extraConfig = ''
cipher-list="HIGH"
no-loopback-peers
no-multicast-peers
'';
secure-stun = true;
cert = "/var/lib/acme/turn.${domain}/fullchain.pem";
pkey = "/var/lib/acme/turn.${domain}/key.pem";
min-port = 49152;
max-port = 49999;
};
security.acme.certs = {
"turn.${domain}" = {
reloadServices = [ "coturn" ];
};
};
};
}

View File

@ -0,0 +1,120 @@
{ config, lib, pkgs, inputs, ... }:
with lib;
let
cfg = config.modules.services.matrix;
domain = "vimium.com";
clientConfig = {
"m.homeserver" = {
base_url = "https://matrix.${domain}";
server_name = domain;
};
"m.identity_server" = {};
};
serverConfig."m.server" = "matrix.${domain}:443";
mkWellKnown = data: ''
more_set_headers 'Content-Type: application/json';
return 200 '${builtins.toJSON data}';
'';
in {
options.modules.services.matrix = {
enable = mkOption {
default = false;
example = true;
};
coturn = mkOption {
default = config.services.coturn.enable;
example = true;
};
elementWeb = mkOption {
default = true;
example = true;
};
};
config = mkIf cfg.enable {
networking.firewall = {
allowedTCPPorts = [
8448 # Matrix federation
];
};
services.nginx = {
virtualHosts = {
"${domain}" = {
# Assume this listener is already setup
locations."= /.well-known/matrix/server".extraConfig = (mkWellKnown serverConfig);
locations."= /.well-known/matrix/client".extraConfig = (mkWellKnown clientConfig);
};
"matrix.${domain}" = {
forceSSL = true;
useACMEHost = "matrix.${domain}";
listen = [
{ addr = "0.0.0.0"; port = 443; ssl = true; }
{ addr = "0.0.0.0"; port = 80; }
{ addr = "0.0.0.0"; port = 8448; ssl = true; }
{ addr = "[::1]"; port = 443; ssl = true; }
{ addr = "[::1]"; port = 80; }
{ addr = "[::1]"; port = 8448; ssl = true; }
];
locations = {
"/" = {
proxyPass = "http://localhost:8008";
extraConfig = ''
proxy_set_header X-Forwarded-For $remote_addr;
'';
};
"/_matrix" = {
proxyPass = "http://localhost:8008";
extraConfig = ''
proxy_set_header X-Forwarded-For $remote_addr;
client_max_body_size ${services.matrix-synapse.settings.max_upload_size};
'';
};
"/_synapse/client".proxyPass = "http://localhost:8008";
};
};
"chat.${domain}" = mkIf cfg.elementWeb {
forceSSL = true;
useACMEHost = "matrix.${domain}";
root = pkgs.element-web.override {
conf = {
default_server_config = clientConfig;
brand = "Vimium Chat";
branding = {
auth_header_logo_url = "https://vimium.com/images/logo.svg";
auth_footer_links = [
{ text = "Vimium.com"; url = "https://www.vimium.com"; }
];
};
};
};
};
};
};
services.matrix-synapse = {
enable = true;
settings = {
database.name = "sqlite3";
enable_registration = false;
server_name = domain;
turn_shared_secret_file = mkIf cfg.coturn config.age.secrets."passwords/services/coturn/secret".path;
turn_uris = mkIf cfg.coturn [
"turn:${config.services.coturn.realm}:5349?transport=udp"
"turn:${config.services.coturn.realm}:5350?transport=udp"
"turn:${config.services.coturn.realm}:5349?transport=tcp"
"turn:${config.services.coturn.realm}:5350?transport=tcp"
];
};
};
security.acme.certs = {
"matrix.${domain}" = {
extraDomainNames = mkIf cfg.elementWeb [ "chat.${domain}" ];
reloadServices = [ "matrix-synapse" ];
};
};
};
}

View File

@ -1,14 +1,15 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.shell.git; let cfg = config.modules.shell.git;
in { in {
options.modules.shell.git = { options.modules.shell.git = {
enable = mkBoolOpt false; enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
home.programs.git = { home.programs.git = {
enable = true; enable = true;
aliases = { aliases = {
@ -35,4 +36,4 @@ in {
"git/ignore".source = ./ignore; "git/ignore".source = ./ignore;
}; };
}; };
} }

View File

@ -1,14 +1,15 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.shell.zsh; let cfg = config.modules.shell.zsh;
in { in {
options.modules.shell.zsh = { options.modules.shell.zsh = {
enable = mkBoolOpt false; enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
users.defaultUserShell = pkgs.zsh; users.defaultUserShell = pkgs.zsh;
programs.zsh = { programs.zsh = {

View File

@ -4,7 +4,7 @@ self: super:
mutter = gsuper.mutter.overrideAttrs (oldAttrs: { mutter = gsuper.mutter.overrideAttrs (oldAttrs: {
src = super.fetchurl { src = super.fetchurl {
url = "https://gitlab.gnome.org/Community/Ubuntu/mutter/-/archive/triple-buffering-v4-45/mutter-triple-buffering-v4-45.tar.gz"; url = "https://gitlab.gnome.org/Community/Ubuntu/mutter/-/archive/triple-buffering-v4-45/mutter-triple-buffering-v4-45.tar.gz";
sha256 = "E+AdsQdotqlH/kYskl+Fwv0i+UTK7mfdkJ+zlfLdU9o="; sha256 = "tN+zQ5brk+hc+louIipqPV/Bqft42ghKOzjZZMj5Q8A=";
}; };
}); });
}); });

View File

@ -1,10 +0,0 @@
let
jordan = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILVHTjsyMIV4THNw6yz0OxAxGnC+41gX72UrPqTzR+OS";
users = [ jordan ];
odyssey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJre8/cjdoUnbTu0x4ClTITcq4lq+FjpEyJBbLbOlox7";
systems = [ odyssey ];
in
{
"secrets/odyssey_borg_passphrase.age".publicKeys = [ jordan odyssey ];
}

Binary file not shown.