1193 Commits

Author SHA1 Message Date
Shelvacu
6ab9c8178d stuff 2025-08-26 23:39:44 -07:00
Shelvacu
a4dca9524e stuff 2025-08-26 20:06:51 -07:00
Shelvacu
69496131d2 stuff 2025-08-26 19:47:07 -07:00
Shelvacu
43f4181a37 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-08-24 20:57:17 -07:00
Shelvacu
29dc0c3fd1 stuff 2025-08-23 21:50:46 -07:00
Shelvacu
be41d4bb64 stuff 2025-08-23 21:41:41 -07:00
Shelvacu
b82c0e209e update most-winningest 2025-08-23 21:37:18 -07:00
Shelvacu
f424da84d1 stuff 2025-08-23 21:04:24 -07:00
Shelvacu
14e63b11fc stuff 2025-08-22 22:12:30 -07:00
Shelvacu
a3fbf1e706 stuff 2025-08-22 19:55:10 -07:00
Shelvacu
7f1f6f9781 stuff 2025-08-22 19:54:48 -07:00
Shelvacu
2dedcb7919 stuff 2025-08-22 19:49:14 -07:00
Shelvacu
584a223c20 stuff 2025-08-22 19:43:53 -07:00
Shelvacu
9d09ab5efd stuff 2025-08-22 19:41:16 -07:00
Shelvacu
6bd9fa612e stuff 2025-08-22 16:34:38 -07:00
Shelvacu
ab2471c64a thunderbird build with mold maybe? 2025-08-22 16:01:07 -07:00
Shelvacu
e72e57822d stuff 2025-08-22 16:00:46 -07:00
Shelvacu
c738e46c40 stuff 2025-08-22 14:11:10 -07:00
Shelvacu
29334bd8fe reorganize secrets and stuff 2025-08-22 14:01:09 -07:00
Shelvacu
2fddd494ea reorganize hosts 2025-08-22 13:27:12 -07:00
Shelvacu
5e26a1aa5f Merge branch 'master' of /home/shelvacu/baregit/nix-stuff 2025-08-22 13:21:09 -07:00
Shelvacu
aabb2847e1 stuff 2025-08-22 13:19:19 -07:00
Shelvacu
c6b67a468c nix flake update 2025-08-22 11:41:03 -07:00
Shelvacu
899dba89da stuff 2025-08-22 11:22:16 -07:00
Shelvacu
5ef3a4f43c stuff 2025-08-21 06:55:29 -07:00
Shelvacu
0a6c15091e stuff 2025-08-21 00:33:04 -07:00
Shelvacu
9d80371eac stuff 2025-08-16 20:44:09 -07:00
Shelvacu
c0b79f7d4a Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-08-16 20:16:10 -07:00
Shelvacu
3846b473e3 stuff 2025-08-16 20:16:05 -07:00
Shelvacu
4ea9388566 stuff 2025-08-16 19:06:50 -07:00
Shelvacu
a8398bfe70 stuff 2025-08-15 21:54:27 -07:00
Shelvacu
680dac0f8a stuff 2025-08-15 21:28:31 -07:00
Shelvacu
dc8e2044c3 stuff 2025-08-15 19:19:43 -07:00
Shelvacu
8ab2030c3c Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-08-15 16:57:21 -07:00
Shelvacu
df668b7f71 stuff 2025-08-15 16:57:13 -07:00
Shelvacu
766f581a21 stuff 2025-08-15 15:56:56 -07:00
Shelvacu
e67c804405 stuff 2025-08-15 15:44:34 -07:00
Shelvacu
3483e20298 stuff 2025-08-15 00:39:51 -07:00
Shelvacu
4df4e56d14 stuff 2025-08-14 18:47:37 -07:00
Shelvacu
41f4421ce0 stuff 2025-08-14 11:56:47 -07:00
Shelvacu
a9016e7c31 stuff 2025-08-13 17:44:55 -07:00
Shelvacu
f825b85c9f Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-08-13 13:00:24 -07:00
Shelvacu
a58b271f6d stuff 2025-08-13 12:59:12 -07:00
Shelvacu
f7388ae514 fix my silly bug 2025-08-13 03:18:47 -07:00
Shelvacu
54f1613f1e stuff 2025-08-13 02:55:31 -07:00
Shelvacu
b65f4bd762 stuff 2025-08-13 02:03:28 -07:00
Shelvacu
8b35acb8b3 stuff 2025-08-13 01:43:15 -07:00
Shelvacu
a41e8267ea stuff 2025-08-13 01:17:52 -07:00
Shelvacu
6763bf282b stuff 2025-08-13 00:42:43 -07:00
Shelvacu
62f6e25781 stuff 2025-08-13 00:34:42 -07:00
Shelvacu
ec01ae310d Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-08-12 19:39:55 -07:00
Shelvacu
e5b487d7d4 stuff 2025-08-12 19:32:21 -07:00
Shelvacu
3b0f0f6cf3 stuff 2025-08-12 19:19:36 -07:00
Shelvacu
4f545a2e30 stuff 2025-08-12 18:41:21 -07:00
Shelvacu
9feb536006 stuff 2025-08-12 18:35:25 -07:00
Shelvacu
0aac371e97 stuff 2025-08-12 18:30:48 -07:00
Shelvacu
506ccbe35d stuff 2025-08-12 18:26:23 -07:00
Shelvacu
1adab5a3fe stuff 2025-08-12 17:38:32 -07:00
Shelvacu
f2778cd177 stuff 2025-08-12 17:27:10 -07:00
Shelvacu
a3658b7974 stuff 2025-08-12 17:23:40 -07:00
Shelvacu
a4b3262986 stuff 2025-08-12 17:21:04 -07:00
Shelvacu
163df6659a stuff 2025-08-12 14:32:19 -07:00
Shelvacu
cfb0e40fc8 stuff 2025-08-12 14:19:53 -07:00
Shelvacu
d0157db914 stuff 2025-08-12 14:06:17 -07:00
Shelvacu
e7e21f652e stuff 2025-08-12 13:51:43 -07:00
Shelvacu
9b6c0fc4a9 stuff 2025-08-12 13:46:59 -07:00
Shelvacu
b0c10a9def stuff 2025-08-12 13:44:46 -07:00
Shelvacu
e43afa9d9d stuff 2025-08-12 13:25:52 -07:00
Shelvacu
3867722913 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-08-12 13:24:59 -07:00
8c71d71743 Merge pull request 'Update Emily's DNS' (#1) from emily/nix-stuff:emily-dns into master
Reviewed-on: #1
2025-08-12 20:23:54 +00:00
Shelvacu
b0346871be stuff 2025-08-12 13:18:47 -07:00
07ced5b22d Update Emily's DNS 2025-08-12 12:33:19 -07:00
Shelvacu
dd0dd9fccc stuff 2025-08-12 10:45:59 -07:00
Shelvacu
48f4a4d22a stuff 2025-08-12 10:42:56 -07:00
Shelvacu
af1f6f55b0 stuff 2025-08-12 10:34:04 -07:00
Shelvacu
ad095a653b stuff 2025-08-12 01:38:06 -07:00
Shelvacu
1fc1afb17a stuff 2025-08-11 20:32:58 -07:00
Shelvacu
9903a38476 stuff 2025-08-11 20:13:29 -07:00
Shelvacu
827c1efbd6 stuff 2025-08-10 19:48:53 -07:00
Shelvacu
5f580d06d8 stuff 2025-08-10 18:47:39 -07:00
Shelvacu
c2843c309c stuff 2025-08-10 16:17:33 -07:00
Shelvacu
4b249bed2d stuff 2025-08-10 16:16:19 -07:00
Shelvacu
055c006692 stuff 2025-08-10 14:01:50 -07:00
Shelvacu
07217fdf80 stuff 2025-08-10 13:33:25 -07:00
Shelvacu
c477949143 wip heritrix package 2025-08-10 13:33:15 -07:00
Shelvacu
8f1dfd462d stuff 2025-08-09 17:07:13 -07:00
Shelvacu
1e82e52a6c increase open file limit for garage 2025-08-09 15:17:02 -07:00
Shelvacu
f1e8f4afd0 nix flake update 2025-08-07 23:52:22 -07:00
Shelvacu
6a736e52a1 stuff 2025-08-07 23:49:27 -07:00
Shelvacu
219ef9a92f stuff 2025-08-07 23:25:05 -07:00
Shelvacu
6e4958ceb2 stuff 2025-08-07 23:01:22 -07:00
Shelvacu
e7af7bca2e stuff 2025-08-06 14:40:48 -07:00
Shelvacu
e3bfa18cc2 stuff 2025-08-05 15:05:15 -07:00
Shelvacu
cdbb65b2af Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-08-05 15:04:13 -07:00
Shelvacu
1d87cb921e stuff 2025-08-05 15:04:04 -07:00
Shelvacu
32111216b7 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-08-05 11:52:47 -07:00
Shelvacu
7205c2bb94 stuff 2025-08-05 11:52:43 -07:00
Shelvacu
72d998c59b Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-08-05 02:26:31 -07:00
Shelvacu
9725eabff9 stuff 2025-08-05 02:18:24 -07:00
Shelvacu
8543034d4f Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-08-05 01:41:17 -07:00
Shelvacu
906acd81d5 stuff 2025-08-05 01:41:12 -07:00
Shelvacu
97f4db278a Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-08-04 22:38:55 -07:00
Shelvacu
83f664aaf8 stuff 2025-08-04 20:06:28 -07:00
Shelvacu
69373479e1 stuff 2025-08-04 19:39:28 -07:00
Shelvacu
2729ae23bb stuff 2025-08-04 18:18:27 -07:00
Shelvacu
e5544e0626 add borgbackup v2.0.0b19 2025-08-04 16:30:18 -07:00
Shelvacu
358227de32 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-08-04 14:38:45 -07:00
Shelvacu
4d689b6534 stuff 2025-08-04 14:38:39 -07:00
Shelvacu
f019a84aae stuff 2025-08-03 23:14:56 -07:00
Shelvacu
7cc4a48bff stuff 2025-08-01 23:12:58 -07:00
Shelvacu
06f2be361e stuff 2025-08-01 23:00:01 -07:00
Shelvacu
f1ae0f7cb8 stuff 2025-08-01 22:59:13 -07:00
Shelvacu
247cb04cb4 stuff 2025-08-01 22:58:46 -07:00
Shelvacu
cf87551263 stuff 2025-08-01 22:47:52 -07:00
Shelvacu
2d342ceaf5 stuff 2025-08-01 22:28:58 -07:00
Shelvacu
6df5ad6476 stuff 2025-08-01 22:21:33 -07:00
Shelvacu
027f05c9cb stuff 2025-08-01 22:18:48 -07:00
Shelvacu
8dec887793 stuff 2025-08-01 22:18:15 -07:00
Shelvacu
7c8a1b53cb stuff 2025-08-01 21:07:59 -07:00
Shelvacu
2696eed07b Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-08-01 20:52:29 -07:00
Shelvacu
9b4fdeb989 stuff 2025-08-01 20:52:25 -07:00
Shelvacu
c3d630e116 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-07-31 21:08:29 -07:00
Shelvacu
6c5fdae839 stuff 2025-07-31 17:40:39 -07:00
Shelvacu
3485a398a4 stuff 2025-07-30 21:02:50 -07:00
Shelvacu
b84e0a9539 stuff 2025-07-30 21:00:50 -07:00
Shelvacu
95dca34913 stuff 2025-07-30 20:22:25 -07:00
Shelvacu
baf69b9f40 stuff 2025-07-30 20:03:27 -07:00
Shelvacu
b35ef5bc8a stuff 2025-07-30 13:43:07 -07:00
Shelvacu
b5c7a31c10 stuff 2025-07-30 13:42:38 -07:00
Shelvacu
7aad020230 stuff 2025-07-30 13:19:10 -07:00
Shelvacu
b8da509b18 stuff 2025-07-30 11:58:32 -07:00
Shelvacu
88aa45abe2 stuff 2025-07-30 11:54:55 -07:00
Shelvacu
41fc90417c stuff 2025-07-30 11:26:31 -07:00
Shelvacu
8a2fba753e stuff 2025-07-28 02:33:46 -07:00
Shelvacu
72ab7f2d0c dufs-vacu: 0.43.0-unstable-2025-05-11 -> 0.43.0-unstable-2025-05-12
Diff: f8b69f4df8...f8b69f4df8

Changelog: f8b69f4df8/CHANGELOG.md
2025-07-28 02:29:13 -07:00
Shelvacu
136cbbb6ee stuff 2025-07-28 02:25:52 -07:00
Shelvacu
4b2f4c99e3 stuff 2025-07-28 02:24:28 -07:00
Shelvacu
9b3a19508b stuff 2025-07-28 02:23:36 -07:00
Shelvacu
93291a1c91 stuff 2025-07-28 01:58:33 -07:00
Shelvacu
e8a1c08e57 stuff 2025-07-25 23:42:38 -07:00
Shelvacu
7b8a5f80d6 stuff 2025-07-25 23:39:55 -07:00
Shelvacu
3722ecc794 stuff 2025-07-25 23:10:32 -07:00
Shelvacu
1f8c6ac294 stuff 2025-07-25 22:13:19 -07:00
Shelvacu
49a0ce04ef stuff 2025-07-25 17:32:37 -07:00
Shelvacu
fcf9b2c964 stuff 2025-07-25 17:29:19 -07:00
Shelvacu
3815658443 stuff 2025-07-25 17:26:43 -07:00
Shelvacu
82f882c750 stuff 2025-07-25 17:18:13 -07:00
Shelvacu
335e9fd264 stuff 2025-07-25 17:15:38 -07:00
Shelvacu
3e5cb92920 stuff 2025-07-25 17:07:49 -07:00
Shelvacu
af5fded923 stuff 2025-07-25 17:04:39 -07:00
Shelvacu
36744eeb45 stuff 2025-07-25 16:00:39 -07:00
Shelvacu
7cdbcaa14c Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-07-25 15:59:26 -07:00
Shelvacu
4b1d95b2bf stuff 2025-07-25 15:59:24 -07:00
Shelvacu
e6667934b0 stuff 2025-07-25 03:33:41 -07:00
Shelvacu
e021ce6f2f stuff 2025-07-23 20:35:23 -07:00
Shelvacu
17e7c71ec1 stuff 2025-07-23 20:28:02 -07:00
Shelvacu
e2e8967cc5 stuff 2025-07-23 20:24:48 -07:00
Shelvacu
13d6c6c8ad transferwee: unstable-2025-01-12 -> 0-unstable-2025-01-12
Diff: ef184d0e12...ef184d0e12
2025-07-23 20:22:22 -07:00
Shelvacu
fa3aa77b1d stuff 2025-07-23 20:22:03 -07:00
Shelvacu
c26dc0f52c stuff 2025-07-23 20:19:43 -07:00
Shelvacu
b651577084 stuff 2025-07-23 19:58:33 -07:00
Shelvacu
13f85b65d6 bandcamp-collection-downloader: foobar -> 2021-12-05-unstable-2024-10-29
Diff: e752af57e6...fe8a98d92d
2025-07-23 19:51:43 -07:00
Shelvacu
08f783d30b nix flake update 2025-07-23 19:50:56 -07:00
Shelvacu
6b286a8af5 stuff 2025-07-23 19:49:45 -07:00
Shelvacu
6e7e20a088 stuff 2025-07-23 19:33:40 -07:00
Shelvacu
6b6afe9654 stuff 2025-07-23 18:42:15 -07:00
Shelvacu
1387c5cbdb wip updateScript for bandcamp-collection-downloader 2025-07-23 16:57:08 -07:00
Shelvacu
7ea03a451f openterface-qt: 0.3.18 -> 0.3.19
Changelog: https://github.com/TechxArtisanStudio/Openterface_QT/releases
2025-07-23 16:52:18 -07:00
Shelvacu
7b82405d22 wip: update script maybe? 2025-07-23 15:59:57 -07:00
Shelvacu
078d1b8682 rename bcd -> bandcamp-collection-downloader 2025-07-23 15:54:11 -07:00
Shelvacu
2878d624a1 update gradle lockfile 2025-07-23 15:48:18 -07:00
Shelvacu
d9102dcc6d wip update bcd 2025-07-23 15:43:34 -07:00
Shelvacu
f353074b64 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-07-22 23:28:48 -07:00
Shelvacu
99c77cb95f nix flake update 2025-07-22 23:21:04 -07:00
Shelvacu
053bf4d7b3 add defaultText for every non-trivial default= in a mkOption 2025-07-21 19:03:13 -07:00
Shelvacu
ca7d074438 optionsDoc is stack limit blegh 2025-07-21 18:24:45 -07:00
Shelvacu
fb9a738483 nix fmt 2025-07-18 19:09:20 -07:00
Shelvacu
dddb0e2ea9 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-07-18 19:02:48 -07:00
Shelvacu
1fc95037b6 stuff 2025-07-18 19:02:24 -07:00
Shelvacu
5300cfa33a stuff 2025-07-18 17:12:32 -07:00
Shelvacu
12606866fd remove some useless cats 2025-07-18 14:13:02 -07:00
Shelvacu
c98ab1b89f fix qcd to be less fatal 2025-07-18 13:11:09 -07:00
Shelvacu
9a3ba1926e wip sshd for nixondroid 2025-07-18 13:06:36 -07:00
Shelvacu
7c7c496df3 stuff 2025-07-18 12:22:45 -07:00
Shelvacu
3ad0d70208 stuff 2025-07-18 12:21:25 -07:00
Shelvacu
9d7d677def Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-07-18 12:19:15 -07:00
Shelvacu
457461f355 stuff 2025-07-18 12:14:59 -07:00
Shelvacu
a0a7c27393 stuff 2025-07-18 12:07:29 -07:00
Shelvacu
400b6a401d stuff 2025-07-18 12:06:27 -07:00
Shelvacu
bfe839ddb3 stuff 2025-07-17 15:57:13 -07:00
Shelvacu
7e2c10790f stuff 2025-07-17 15:01:47 -07:00
Shelvacu
f16ae28a1c Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-07-17 09:51:08 -07:00
Shelvacu
4a0ebb34e5 stuff 2025-07-17 09:51:00 -07:00
Shelvacu
e6f05af090 stuff 2025-07-15 11:57:56 -07:00
Shelvacu
282532b751 nix fmt 2025-07-15 11:24:55 -07:00
Shelvacu
557af17336 stuff 2025-07-15 11:22:22 -07:00
Shelvacu
68944a18bd stuff 2025-07-15 10:38:46 -07:00
Shelvacu
e3df51ce0d stuff 2025-07-14 01:38:21 -07:00
Shelvacu
6d8b0ba597 stuff 2025-07-13 15:53:37 -07:00
Shelvacu
fbb2d039d8 stuff 2025-07-13 14:05:05 -07:00
Shelvacu
63e2b7000b stuff 2025-07-13 13:48:11 -07:00
Shelvacu
34dd05d062 stuff 2025-07-13 13:32:09 -07:00
Shelvacu
26a2e13071 stuff 2025-07-13 13:12:55 -07:00
Shelvacu
3ef4e70a72 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-07-12 22:11:50 -07:00
Shelvacu
2db5ad3740 stuff 2025-07-12 22:11:01 -07:00
Shelvacu
489abc19da stuff 2025-07-12 18:11:57 -07:00
Shelvacu
c84eeb639d stuff 2025-07-12 18:10:57 -07:00
Shelvacu
4e84635ade stuff 2025-07-12 18:10:13 -07:00
Shelvacu
d9ffbb8845 stuff 2025-07-12 18:09:55 -07:00
Shelvacu
2c867bdd41 stuff 2025-07-12 18:09:40 -07:00
Shelvacu
216d8b00e1 stuff 2025-07-12 18:08:39 -07:00
Shelvacu
587613c269 stuff 2025-07-12 18:07:27 -07:00
Shelvacu
48362668f3 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-07-12 18:06:39 -07:00
Shelvacu
74ff96ab4e migrate vaculib 2025-07-12 18:05:57 -07:00
Shelvacu
6121570b6d fix nur.nix 2025-07-12 16:13:37 -07:00
Shelvacu
fbbd36fbec nix flake update 2025-07-12 15:51:27 -07:00
Shelvacu
342e16372d stuff 2025-07-12 15:08:12 -07:00
Shelvacu
9443c51a69 stuff 2025-07-12 15:08:00 -07:00
Shelvacu
f590f2bae1 stuff 2025-07-12 14:57:14 -07:00
Shelvacu
2e13b0dda4 stuff 2025-07-12 14:09:07 -07:00
Shelvacu
c917247175 fix nur file 2025-07-12 14:02:12 -07:00
Shelvacu
a88a6a5138 z3: 4.13.2 -> 4.15.2 2025-07-12 13:23:52 -07:00
Shelvacu
09e13ceec4 add lots of package meta 2025-07-12 13:17:18 -07:00
Shelvacu
27f693a9f6 remove rpxy, cant get it to build and I dont care 2025-07-12 12:46:13 -07:00
Shelvacu
a0a1410607 attempt to update rpxy (and fail) 2025-07-12 12:45:55 -07:00
Shelvacu
8a6fd7838b add metadata to a bunch of packages 2025-07-12 12:36:48 -07:00
Shelvacu
76d982f9e7 okay so big news, it doesnt have to be called default.nix 2025-07-12 11:51:05 -07:00
Shelvacu
7df20fa6dd add default.nix for NUR 2025-07-12 11:10:21 -07:00
Shelvacu
a286aa5d82 stuff 2025-07-12 10:49:51 -07:00
Shelvacu
8410d323aa stuff 2025-07-11 11:09:03 -07:00
Shelvacu
59d5ef53a4 nix fmt 2025-07-11 11:08:00 -07:00
Shelvacu
4a046013f5 fix shellcheck complaints in ensure-secrets 2025-07-11 11:02:32 -07:00
Shelvacu
d26c36cdb5 stuff 2025-07-11 10:56:14 -07:00
Shelvacu
a2f8be7cd4 stuff 2025-07-11 10:54:00 -07:00
Shelvacu
d713ca87d0 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-07-11 10:50:31 -07:00
Shelvacu
d7608de59d stuff 2025-07-11 10:50:29 -07:00
Shelvacu
324b8681ce Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-07-11 10:50:09 -07:00
Shelvacu
718d7dabbe sops updatekeys on all the files i can remember are sops files... 2025-07-11 10:50:03 -07:00
Shelvacu
9b4fe4d75d stuff 2025-07-11 10:39:26 -07:00
Shelvacu
9800d6860f stuff 2025-07-11 08:54:37 -07:00
Shelvacu
eceeb2fd86 stuff 2025-07-11 08:49:29 -07:00
Shelvacu
52931932b4 stuff 2025-07-11 08:28:10 -07:00
Shelvacu
0e5b5d7358 stuff 2025-07-11 08:06:22 -07:00
Shelvacu
7e14591ef4 stuff 2025-07-11 08:05:23 -07:00
Shelvacu
565675ff71 stuff 2025-07-07 20:57:14 -07:00
Shelvacu
7d82f5323b stuff 2025-07-07 17:55:12 -07:00
Shelvacu
0a9383ce6e some more filters 2025-07-07 14:20:11 -07:00
Shelvacu
025e7ba84a stuff 2025-07-07 13:09:40 -07:00
Shelvacu
add6693aa7 stuff 2025-07-07 12:56:55 -07:00
Shelvacu
35206eda41 fix problematic echos 2025-07-07 01:20:23 -07:00
Shelvacu
929e403f80 nix flake update 2025-07-06 15:40:50 -07:00
Shelvacu
1bbc6763df stuff 2025-07-05 15:16:21 -07:00
Shelvacu
242fa59806 stuff 2025-07-05 14:45:45 -07:00
Shelvacu
77ce1a4479 stuff 2025-07-05 14:03:59 -07:00
Shelvacu
2d58828296 stuff 2025-07-05 13:59:13 -07:00
Shelvacu
7cdfc4a19c add some filters for ebay orders 2025-07-05 13:42:09 -07:00
Shelvacu
4805e37605 stuff 2025-07-05 13:41:58 -07:00
Shelvacu
523e37b319 stuff 2025-07-03 04:27:14 -07:00
Shelvacu
b50e63675c stuff 2025-07-01 16:22:47 -07:00
Shelvacu
60036eaed8 stuff 2025-07-01 16:12:52 -07:00
Shelvacu
2d092244ef stuff 2025-07-01 15:57:30 -07:00
Shelvacu
42d5b3a3a5 stuff 2025-07-01 15:54:27 -07:00
Shelvacu
16c5c8f644 stuff 2025-07-01 15:43:37 -07:00
Shelvacu
808bd5e3b4 stuff 2025-07-01 15:27:27 -07:00
Shelvacu
d751eabb13 stuff 2025-07-01 14:37:41 -07:00
Shelvacu
d2ea55fb1e stuff 2025-07-01 14:18:43 -07:00
Shelvacu
07f6327283 stuff 2025-06-30 01:03:09 -07:00
Shelvacu
9a91778367 stuff 2025-06-30 01:02:53 -07:00
Shelvacu
1f46da4fb2 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-06-30 00:27:53 -07:00
Shelvacu
6368488a06 stuff 2025-06-30 00:25:51 -07:00
Shelvacu
09fc6bab3e nope lol 2025-06-29 20:04:17 -07:00
Shelvacu
1c9a1d0fdf initial tf2 stuff 2025-06-29 19:28:15 -07:00
Shelvacu
32ff2f7138 experiment: can i just emulate *-darwin binaries?? 2025-06-29 19:27:52 -07:00
Shelvacu
3daf951444 quote all my $outs 2025-06-29 01:08:13 -07:00
Shelvacu
bec1131b29 stuff 2025-06-29 00:41:04 -07:00
Shelvacu
8ead3d97aa stuff 2025-06-29 00:34:33 -07:00
Shelvacu
c4b22b1406 stuff 2025-06-28 18:41:17 -07:00
Shelvacu
dbfa763c40 stuff 2025-06-28 17:48:15 -07:00
Shelvacu
fb490e4ecb stuff 2025-06-28 17:39:14 -07:00
Shelvacu
58bd3a9f63 stuff 2025-06-28 17:34:50 -07:00
Shelvacu
45502094b2 stuff 2025-06-28 17:33:50 -07:00
Shelvacu
ed151ac1f4 stuff 2025-06-28 17:20:35 -07:00
Shelvacu
7b7ea923a9 stuff 2025-06-28 15:27:17 -07:00
Shelvacu
06ccd079b5 stuff 2025-06-25 16:24:43 -07:00
Shelvacu
faf4856107 stuff 2025-06-25 16:24:08 -07:00
Shelvacu
e69eb00fe4 nix flake update 2025-06-25 16:02:03 -07:00
Shelvacu
feb1f80895 stuff 2025-06-18 13:45:52 -07:00
Shelvacu
d7fd483796 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-06-16 13:47:01 -07:00
Shelvacu
38e60c5730 stuff 2025-06-16 13:46:53 -07:00
Shelvacu
3395ae83ce stuff 2025-06-13 13:13:12 -07:00
Shelvacu
9da16179a8 stuff 2025-06-13 06:52:18 -07:00
Shelvacu
440cb70d77 stuff 2025-06-13 06:50:37 -07:00
Shelvacu
c78e55673a stuff 2025-06-10 16:52:46 -07:00
Shelvacu
a325abaa8c stuff 2025-06-10 16:51:19 -07:00
Shelvacu
f56ffe01a9 stuff 2025-06-09 15:59:26 -07:00
Shelvacu
142d5ea7b5 stuff 2025-06-09 15:49:55 -07:00
Shelvacu
97317627df stuff 2025-06-09 15:42:55 -07:00
Shelvacu
60b51cc112 stuff 2025-06-09 14:23:47 -07:00
Shelvacu
d52ecc8a7a stuff 2025-06-09 13:54:33 -07:00
Shelvacu
6060103483 upgrade to postgres 17 2025-06-09 13:13:28 -07:00
Shelvacu
c6eb7d2240 upgrade to postgres 17 2025-06-09 13:06:25 -07:00
Shelvacu
723fc9f9a6 stuff 2025-06-09 13:04:37 -07:00
Shelvacu
9b48055ed0 stuff 2025-06-05 20:52:32 -07:00
Shelvacu
fcc914e8bd stuff 2025-06-05 20:42:43 -07:00
Shelvacu
9895775c1f stuff 2025-06-05 20:23:07 -07:00
Shelvacu
f1e539a96f stuff 2025-06-05 20:17:02 -07:00
Shelvacu
2d350bb71b stuff 2025-06-05 18:25:22 -07:00
Shelvacu
97caa99342 stuff 2025-06-05 18:06:44 -07:00
Shelvacu
b9d10fb4c8 stuff 2025-06-05 18:04:05 -07:00
Shelvacu
dbae893b3e stuff 2025-06-05 18:01:21 -07:00
Shelvacu
275a3a447e nix fmt and fixes 2025-06-05 17:21:02 -07:00
Shelvacu
c5eebadff9 stuff 2025-06-05 16:41:50 -07:00
Shelvacu
11043dc0ab stuff 2025-06-05 14:20:15 -07:00
Shelvacu
ad7b87dac1 stuff 2025-06-05 14:17:24 -07:00
Shelvacu
e798c03dab stuff 2025-06-04 20:12:29 -07:00
Shelvacu
97f0d032d2 stuff 2025-06-04 20:06:47 -07:00
Shelvacu
772dbe6763 stuff 2025-06-04 20:00:40 -07:00
Shelvacu
3827c74523 stuff 2025-06-04 19:53:49 -07:00
Shelvacu
e2a1e98bcb stuff 2025-06-04 19:44:04 -07:00
Shelvacu
969cc3bef9 stuff 2025-06-04 19:15:45 -07:00
Shelvacu
9d070e59dd stuff 2025-06-04 16:13:50 -07:00
Shelvacu
95d2e8b2b2 stuff 2025-06-04 16:12:24 -07:00
Shelvacu
8b95bb47e2 stuff 2025-06-04 16:05:14 -07:00
Shelvacu
5af1cd01ab stuff 2025-06-04 15:37:30 -07:00
Shelvacu
75d516ecf4 stuff 2025-06-04 15:12:23 -07:00
Shelvacu
d534257862 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-06-04 01:41:36 -07:00
Shelvacu
90e6c8543c stuff 2025-06-04 01:41:31 -07:00
Shelvacu
73556f25a5 stuff 2025-06-04 01:01:00 -07:00
Shelvacu
cb96f6922e stuff 2025-06-04 01:00:14 -07:00
Shelvacu
5ee781f4e2 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-05-30 12:24:47 -07:00
Shelvacu
8e7f4608ff stuff 2025-05-30 10:30:13 -07:00
Shelvacu
73d1acbaae stuff 2025-05-30 10:26:50 -07:00
Shelvacu
da6b9598a4 stuff 2025-05-30 10:18:40 -07:00
Shelvacu
0d32e90b36 stuff 2025-05-30 10:12:15 -07:00
Shelvacu
12c554a8de stuff 2025-05-30 10:05:28 -07:00
Shelvacu
e656449b2a stuff 2025-05-30 09:13:56 -07:00
Shelvacu
4b6362aab0 stuff 2025-05-30 08:45:01 -07:00
Shelvacu
6fa56d961f nix fmt 2025-05-30 08:29:10 -07:00
Shelvacu
4aed18e013 stuff 2025-05-30 08:28:37 -07:00
Shelvacu
26648cbef2 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-05-29 20:31:22 -07:00
Shelvacu
a023435abb stuff 2025-05-29 20:31:20 -07:00
Shelvacu
b838df9038 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-05-29 20:25:01 -07:00
Shelvacu
379e9cbc7d stuff 2025-05-29 20:23:58 -07:00
Shelvacu
fa42d514be stuff 2025-05-29 19:45:15 -07:00
Shelvacu
457f9b5d03 stuff 2025-05-29 19:31:59 -07:00
Shelvacu
35dc2030d4 stuff 2025-05-29 12:32:49 -07:00
Shelvacu
94c2976e3e stuff 2025-05-29 12:30:17 -07:00
Shelvacu
ce4ac290d0 stuff 2025-05-29 12:22:43 -07:00
Shelvacu
48c22ad4f7 nix flake update 2025-05-29 12:22:14 -07:00
Shelvacu
40892a7725 properly update other inputs to 25.05 2025-05-29 12:20:24 -07:00
Shelvacu
84e48161ca 24.11 -> 25.05 and nix flake update 2025-05-27 18:29:34 -07:00
Shelvacu
6bb851d286 stuff 2025-05-25 13:07:02 -07:00
Shelvacu
91a27769ba stuff 2025-05-23 17:56:46 -07:00
Shelvacu
bd4d27d948 stuff 2025-05-23 17:22:25 -07:00
Shelvacu
909504a29c stuff 2025-05-23 17:09:14 -07:00
Shelvacu
6ad831f85d stuff 2025-05-23 17:08:37 -07:00
Shelvacu
e7f4fa8638 stuff 2025-05-23 16:54:46 -07:00
Shelvacu
040bf5378c stuff 2025-05-23 16:51:32 -07:00
Shelvacu
94f774b76d stuff 2025-05-22 23:15:59 -07:00
Shelvacu
5f080d0693 reorganizing vacu.packages 2025-05-22 18:57:40 -07:00
Shelvacu
ce7346e7ea stuff 2025-05-22 18:48:45 -07:00
Shelvacu
240e73f1f0 stuff 2025-05-22 00:09:32 -07:00
Shelvacu
bbb937322c stuff 2025-05-21 17:18:20 -07:00
Shelvacu
c352ca12a2 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-05-20 18:06:02 -07:00
Shelvacu
59028c4510 stuff 2025-05-20 18:05:57 -07:00
Shelvacu
ece025fd3c stuff 2025-05-20 17:10:01 -07:00
Shelvacu
bbf2d6efe0 prop is green now 2025-05-20 16:32:32 -07:00
Shelvacu
cc73466456 stuff 2025-05-20 16:24:55 -07:00
Shelvacu
bdf490d124 stuff 2025-05-20 13:40:47 -07:00
Shelvacu
30799d7307 stuff 2025-05-19 21:08:09 -07:00
Shelvacu
1ed01527a4 stuff 2025-05-18 16:46:43 -07:00
Shelvacu
85dfda6b4f stuff 2025-05-16 19:09:02 -07:00
Shelvacu
bbedb1ca3b stuff 2025-05-16 19:03:13 -07:00
Shelvacu
95b1cfa046 stuff 2025-05-16 18:44:32 -07:00
Shelvacu
aaa34b6163 stuff 2025-05-16 17:12:36 -07:00
Shelvacu
586e52bbe8 stuff 2025-05-16 16:55:53 -07:00
Shelvacu
9c47bfce48 stuff 2025-05-16 16:51:42 -07:00
Shelvacu
4e79183aa8 stuff 2025-05-16 14:27:43 -07:00
Shelvacu
7bca509944 stuff 2025-05-16 14:25:00 -07:00
Shelvacu
b0013e5cf2 stuff 2025-05-16 14:16:47 -07:00
Shelvacu
dc3a8d060d stuff 2025-05-16 13:32:18 -07:00
Shelvacu
5886229445 stuff 2025-05-16 13:28:07 -07:00
Shelvacu
bbc3176a14 stuff 2025-05-15 16:30:20 -07:00
Shelvacu
2e803b2d5b stuff 2025-05-15 16:28:57 -07:00
Shelvacu
44231f7d4d stuff 2025-05-15 16:27:54 -07:00
Shelvacu
295f1a85cc stuff 2025-05-15 16:26:51 -07:00
Shelvacu
0f94147291 legtop: use Liquorix kernel 2025-05-14 02:44:50 -07:00
Shelvacu
77a114205e stuff 2025-05-12 18:02:50 -07:00
Shelvacu
0c9b436c11 stuff 2025-05-12 13:21:07 -07:00
Shelvacu
8fc0da3fc1 stuff 2025-05-12 12:41:28 -07:00
Shelvacu
57ca875ef9 stuff 2025-05-12 11:58:19 -07:00
Shelvacu
8feea6e608 stuff 2025-05-11 18:10:14 -07:00
Shelvacu
dee008f5ae stuff 2025-05-11 17:37:35 -07:00
Shelvacu
06d00f31d1 stuff 2025-05-11 15:41:34 -07:00
Shelvacu
77ecd55c75 stuff 2025-05-11 15:07:54 -07:00
Shelvacu
6e6f8300ba stuff 2025-05-11 13:32:57 -07:00
Shelvacu
0fbe622e21 stuff 2025-05-11 13:21:55 -07:00
Shelvacu
1a9f99d718 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-05-11 12:32:28 -07:00
Shelvacu
880ac54aa3 stuff 2025-05-11 12:32:25 -07:00
Shelvacu
e9cfa5dca0 stuff 2025-05-11 11:51:35 -07:00
Shelvacu
9d5d48b03c Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-05-11 03:01:57 -07:00
Shelvacu
ed55dd318d stuff 2025-05-11 03:01:51 -07:00
Shelvacu
8a7ae4a71e stuff 2025-05-11 01:50:19 -07:00
Shelvacu
1863577b1d stuff 2025-05-11 01:32:44 -07:00
Shelvacu
daa891c91c stuff 2025-05-11 00:06:20 -07:00
Shelvacu
9b7b04ebd9 stuff 2025-05-10 23:59:19 -07:00
Shelvacu
6a7f44f4a2 stuff 2025-05-10 23:56:33 -07:00
Shelvacu
15c9428134 stuff 2025-05-10 23:55:34 -07:00
Shelvacu
d4d4175626 stuff 2025-05-10 23:48:18 -07:00
Shelvacu
ab61f288d8 stuff 2025-05-10 23:46:04 -07:00
Shelvacu
3473e05a87 stuff 2025-05-10 23:45:52 -07:00
Shelvacu
329b6a20bf stuff 2025-05-10 23:33:26 -07:00
Shelvacu
b53184aaa3 stuff 2025-05-10 23:24:15 -07:00
Shelvacu
1a02597ca0 stuff 2025-05-10 23:21:34 -07:00
Shelvacu
2d14e9b8e3 stuff 2025-05-10 23:17:00 -07:00
Shelvacu
9f8e8cb56c stuff 2025-05-10 23:16:07 -07:00
Shelvacu
d7413a8c05 stuff 2025-05-10 23:15:20 -07:00
Shelvacu
5e923db577 stuff 2025-05-10 23:14:18 -07:00
Shelvacu
52056e6611 stuff 2025-05-10 23:11:06 -07:00
Shelvacu
e3fa417461 stuff 2025-05-10 23:09:55 -07:00
Shelvacu
103bcdfac4 stuff 2025-05-10 23:00:14 -07:00
Shelvacu
c04b7947f7 stuff 2025-05-10 22:58:53 -07:00
Shelvacu
24c96a2a13 stuff 2025-05-10 22:55:05 -07:00
Shelvacu
d4b1144986 stuff 2025-05-10 22:48:05 -07:00
Shelvacu
92379691e0 stuff 2025-05-10 22:46:49 -07:00
Shelvacu
5b102bf562 stuff 2025-05-10 22:45:25 -07:00
Shelvacu
cae29bfd96 stuff 2025-05-10 22:40:50 -07:00
Shelvacu
56a8882fac stuff 2025-05-10 22:40:11 -07:00
Shelvacu
2665071518 stuff 2025-05-10 22:34:03 -07:00
Shelvacu
cdae755642 stuff 2025-05-10 20:56:50 -07:00
Shelvacu
83833aa187 stuff 2025-05-10 20:46:30 -07:00
Shelvacu
37f83a205e stuff 2025-05-10 20:37:46 -07:00
Shelvacu
4fcbf4a688 stuff 2025-05-10 17:32:16 -07:00
Shelvacu
8ab3964096 stuff 2025-05-09 23:36:55 -07:00
Shelvacu
eb015ec676 stuff 2025-05-09 19:34:31 -07:00
Shelvacu
1378dc0902 stuff 2025-05-09 19:28:20 -07:00
Shelvacu
b35cedb4f5 stuff 2025-05-09 19:20:51 -07:00
Shelvacu
c38daa62ad stuff 2025-05-09 19:08:31 -07:00
Shelvacu
e4549d21b8 stuff 2025-05-09 18:41:23 -07:00
Shelvacu
98003e7e54 stuff 2025-05-09 15:19:25 -07:00
Shelvacu
37b3d883d2 stuff 2025-05-09 15:06:50 -07:00
Shelvacu
f2d8b5b39b stuff 2025-05-09 01:18:46 -07:00
Shelvacu
6bb25298b7 stuff 2025-05-09 01:04:21 -07:00
Shelvacu
fe5e5d66c9 stuff 2025-05-08 23:54:11 -07:00
Shelvacu
093bef2e22 stuff 2025-05-08 23:53:05 -07:00
Shelvacu
c83557fd62 stuff 2025-05-08 22:44:44 -07:00
Shelvacu
e8391bb365 stuff 2025-05-08 22:01:51 -07:00
Shelvacu
3823f2ccf9 stuff 2025-05-08 21:39:09 -07:00
Shelvacu
35390f9c16 stuff 2025-05-08 11:30:21 -07:00
Shelvacu
2525058148 stuff 2025-05-07 11:17:23 -07:00
Shelvacu
3e4905665d update leanLatest 2025-05-07 11:17:19 -07:00
Shelvacu
a93e86b2a1 stuff 2025-05-07 09:33:02 -07:00
Shelvacu
b2fff9ef37 stuff 2025-05-07 04:03:16 -07:00
Shelvacu
0f9364141b stuff 2025-05-07 01:38:58 -07:00
Shelvacu
f49bc1cd0c nix flake update 2025-05-07 01:27:21 -07:00
Shelvacu
cf556f2090 stuff 2025-05-07 00:19:40 -07:00
Shelvacu
9f7bc53093 stuff 2025-05-06 23:48:43 -07:00
Shelvacu
178af707cb stuff 2025-05-06 22:07:33 -07:00
Shelvacu
ea6c87c82b stuff 2025-05-06 21:45:13 -07:00
Shelvacu
fad8cd428b stuff 2025-05-06 03:57:53 -07:00
Shelvacu
e7a8586aea stuff 2025-05-05 21:43:21 -07:00
Shelvacu
8159232e8c stuff 2025-05-05 21:10:54 -07:00
Shelvacu
5513487a4a Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-05-05 17:26:56 -07:00
Shelvacu
a476fecd4b stuff 2025-05-05 17:26:27 -07:00
Shelvacu
d6a70e7b9d stuff 2025-05-05 12:36:42 -07:00
Shelvacu
f7830efae9 remove firefox and librewolf 2025-05-03 21:38:12 -07:00
Shelvacu
cd55af03b4 stuff 2025-05-03 21:32:37 -07:00
Shelvacu
48eff680f1 stuff 2025-05-03 21:21:39 -07:00
Shelvacu
7f477f8eab stuff 2025-05-03 19:55:05 -07:00
Shelvacu
f60aa2fbaf stuff 2025-05-03 19:51:06 -07:00
Shelvacu
cc6fbfdefa stuff 2025-05-03 19:47:17 -07:00
Shelvacu
5a9cff6169 stuff 2025-05-03 19:45:06 -07:00
Shelvacu
227072a4b0 nix flake update 2025-05-03 18:34:32 -07:00
Shelvacu
63acaeea37 stuff 2025-05-03 18:31:12 -07:00
Shelvacu
0b49ff6f7c stuff 2025-05-03 17:42:32 -07:00
Shelvacu
b9ffa37b2b stuff 2025-05-02 18:16:09 -07:00
Shelvacu
cf95a01a67 stuff 2025-05-02 17:57:17 -07:00
Shelvacu
c87aab61fa stuff 2025-05-02 17:51:47 -07:00
Shelvacu
09726fb24b stuff 2025-05-02 17:44:19 -07:00
Shelvacu
d38c7f42a0 stuff 2025-05-02 16:07:22 -07:00
Shelvacu
ef67fbed30 stuff 2025-05-02 15:54:24 -07:00
Shelvacu
02ce7d3c2a stuff 2025-05-02 15:37:48 -07:00
Shelvacu
c144eb0e90 stuff 2025-05-02 15:20:09 -07:00
Shelvacu
7859619661 stuff 2025-05-02 15:12:50 -07:00
Shelvacu
ae3d4e9d4c stuff 2025-05-02 15:11:16 -07:00
Shelvacu
55e7b71dd3 stuff 2025-05-02 14:50:11 -07:00
Shelvacu
d8c9cf91f1 stuff 2025-05-02 14:43:00 -07:00
Shelvacu
2c7e3cc9d9 stuff 2025-05-02 14:40:22 -07:00
Shelvacu
61af04b57e remove findKernel 2025-05-02 14:19:46 -07:00
Shelvacu
2f946bdab1 stuff 2025-05-02 14:15:05 -07:00
Shelvacu
0f5b07db50 stuff 2025-05-02 14:10:48 -07:00
Shelvacu
1a4b4fbdae stuff 2025-05-02 13:55:57 -07:00
Shelvacu
64f7c9c5ac stuff 2025-05-01 18:27:46 -07:00
Shelvacu
d07b81b696 stuff 2025-05-01 03:09:43 -07:00
Shelvacu
4f6937f85f stuff 2025-05-01 03:04:00 -07:00
Shelvacu
7d547c401a remove vscode-server 2025-05-01 01:29:53 -07:00
Shelvacu
ebc8589216 alphabetize inputs, except nixpkgs cuz thats special so thats at the top 2025-05-01 01:29:13 -07:00
Shelvacu
78ff444f17 stuff. 2025-05-01 01:25:00 -07:00
Shelvacu
376d05e8ee stuff 2025-04-29 01:05:53 -07:00
Shelvacu
44f7877b70 fixup borg tests 2025-04-29 00:57:01 -07:00
Shelvacu
6e563eedf8 remove nix-search-cli and nix-inspect from inputs, pull them from nixpkgs instead 2025-04-28 21:15:05 -07:00
Shelvacu
4f0f504338 nix flake update 2025-04-28 21:06:54 -07:00
Shelvacu
d413474fc8 stuff 2025-04-28 21:05:44 -07:00
Shelvacu
606f8339d6 stuff 2025-04-28 18:56:15 -07:00
Shelvacu
46f966b7ae add *-ml email for mailing lists i actually want 2025-04-28 16:28:09 -07:00
Shelvacu
b6c4e3370b stuff 2025-04-28 14:28:24 -07:00
Shelvacu
600fc3845c add prophecy key 2025-04-27 22:44:42 -07:00
Shelvacu
e368389c56 stuff 2025-04-27 22:26:26 -07:00
Shelvacu
34e968d079 stuff 2025-04-27 22:19:18 -07:00
Shelvacu
db60d081ce stuff 2025-04-27 21:45:00 -07:00
Shelvacu
1f4821073f stuff 2025-04-27 17:09:20 -07:00
Shelvacu
3d58466456 reorganize installers, minify some more 2025-04-27 16:55:39 -07:00
Shelvacu
7490ee9ba8 stuff 2025-04-26 22:43:30 -07:00
Shelvacu
2987403347 stuff 2025-04-26 22:36:29 -07:00
Shelvacu
1b11e0b79f add prophecy and pxe boot installer thingy 2025-04-26 22:10:09 -07:00
Shelvacu
cfd2828dc2 stuff 2025-04-24 17:08:23 -07:00
Shelvacu
7e042401d8 stuff 2025-04-24 16:16:06 -07:00
Shelvacu
52766f0a7f stuff 2025-04-24 16:04:36 -07:00
Shelvacu
698c480ee2 stuff 2025-04-24 15:40:12 -07:00
Shelvacu
a32cd9a224 stuff 2025-04-24 14:36:12 -07:00
Shelvacu
1cf8fc9c8a enable mosh 2025-04-24 14:34:16 -07:00
Shelvacu
4730d99633 stuff 2025-04-24 03:27:32 -07:00
Shelvacu
ffc86346a4 stuff 2025-04-24 03:19:23 -07:00
Shelvacu
335da9cc6a stuff 2025-04-24 03:18:29 -07:00
Shelvacu
51236f2061 stuff 2025-04-24 02:55:36 -07:00
Shelvacu
c735d4c522 stuff 2025-04-24 01:35:03 -07:00
Shelvacu
be96169d93 stuff 2025-04-24 01:33:15 -07:00
Shelvacu
5eb97d9ff8 stuff 2025-04-24 01:17:11 -07:00
Shelvacu
0181ee0dfa stuff 2025-04-24 00:37:38 -07:00
Shelvacu
cb4660256c stuff 2025-04-23 23:27:10 -07:00
Shelvacu
307d263487 stuff 2025-04-23 17:37:57 -07:00
Shelvacu
fc8fdf8b34 stuff 2025-04-20 19:26:02 -07:00
Shelvacu
5f81a67371 stuff 2025-04-20 19:08:41 -07:00
Shelvacu
1301127306 stuff 2025-04-20 18:59:02 -07:00
Shelvacu
05d2a33422 stuff 2025-04-20 18:43:57 -07:00
Shelvacu
e8dac02b0d stuff 2025-04-20 18:05:18 -07:00
Shelvacu
1b297072cf stuff 2025-04-20 17:10:46 -07:00
Shelvacu
af7394b7e5 stuff 2025-04-20 16:53:35 -07:00
Shelvacu
62214b212b stuff 2025-04-19 14:11:23 -07:00
Shelvacu
d80e14ad72 stuff 2025-04-19 14:10:27 -07:00
Shelvacu
29cfb3ee2d stuff 2025-04-19 14:10:12 -07:00
Shelvacu
1b0912c181 stuff 2025-04-19 14:02:42 -07:00
Shelvacu
92ff5db521 stuff 2025-04-19 14:01:59 -07:00
Shelvacu
9bad53f188 nix fmt 2025-04-19 13:17:36 -07:00
Shelvacu
086a258c92 nix flake update 2025-04-19 13:04:11 -07:00
Shelvacu
24657fcc90 stuff 2025-04-19 12:59:24 -07:00
Shelvacu
28d486ea19 add backup script to liam 2025-04-15 19:03:46 -07:00
Shelvacu
1266ac7e79 add rsync.net 2025-04-15 13:10:01 -07:00
Shelvacu
4c17799790 maybe fix trip test 2025-04-14 17:27:30 -07:00
Shelvacu
bbb599a93d stuff 2025-04-14 17:18:31 -07:00
Shelvacu
c7011fbe9d stuff 2025-04-12 19:16:52 -07:00
Shelvacu
bb4f2880ab stuff 2025-04-12 17:13:34 -07:00
Shelvacu
21f4b385cf stuff 2025-04-12 17:10:00 -07:00
Shelvacu
f73a89c40d stuff 2025-04-12 16:39:47 -07:00
Shelvacu
8f0a663b11 stuff 2025-04-12 16:13:32 -07:00
Shelvacu
1248a6644b Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-04-12 16:02:28 -07:00
Shelvacu
d2a52edee3 stuff 2025-04-12 15:49:01 -07:00
Shelvacu
b1bac0df60 WITNESS MEEEEEE 2025-04-11 20:15:48 -07:00
Shelvacu
b11c5035fe nix flake update 2025-04-10 20:01:18 -07:00
Shelvacu
f44e8019c1 wip 2025-04-09 21:37:29 -07:00
Shelvacu
cfa5049922 wip 2025-04-09 21:37:24 -07:00
Shelvacu
c1c5f39a00 stuff 2025-04-09 20:04:22 -07:00
Shelvacu
8e68fe88c8 stuff 2025-04-09 18:10:51 -07:00
Shelvacu
0b51021daa reorg. ./tliam currently takes ~3m30s 2025-04-09 17:48:40 -07:00
Shelvacu
f86c4228d1 stuff 2025-04-09 17:17:46 -07:00
Shelvacu
198be00dcc stuff 2025-04-09 17:03:52 -07:00
Shelvacu
8c1903df39 stuff 2025-04-09 15:59:15 -07:00
Shelvacu
123178ee8c okayify tf2wiki 2025-04-09 13:07:35 -07:00
Shelvacu
9ae4a620b3 stuff 2025-04-05 18:31:52 -07:00
Shelvacu
b20b24c25d stuff 2025-04-05 18:30:00 -07:00
Shelvacu
cb26103503 stuff 2025-04-02 20:15:21 -07:00
Shelvacu
f64d1c5b52 stuff 2025-04-02 19:49:54 -07:00
Shelvacu
722a6b8a6f Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-04-02 19:49:09 -07:00
Shelvacu
407dcec512 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-03-28 21:53:22 -07:00
Shelvacu
68db03395b stuff 2025-03-28 21:53:18 -07:00
Shelvacu
7d8a4dd79d stuff 2025-03-28 19:09:08 -07:00
Shelvacu
eb853dbdd9 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-03-28 16:11:56 -07:00
Shelvacu
050a855701 stuff 2025-03-28 16:11:50 -07:00
Shelvacu
152d6e5301 stuff 2025-03-26 22:06:39 -07:00
Shelvacu
219e5c5e37 nix flake update & stuff 2025-03-26 21:59:04 -07:00
Shelvacu
3bca6b2ed6 stuff 2025-03-22 20:02:07 -07:00
Shelvacu
003775c380 stuff 2025-03-20 21:49:03 -07:00
Shelvacu
1668d66383 stuff 2025-03-20 18:39:54 -07:00
Shelvacu
cc2e17763d stuff 2025-03-20 17:10:46 -07:00
Shelvacu
af26fb4927 stuff 2025-03-16 21:48:58 -07:00
Shelvacu
807ccda05b Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-03-16 17:08:50 -07:00
Shelvacu
f51a447304 stuff 2025-03-16 17:07:50 -07:00
Shelvacu
b3ee6f7dd1 update units 2025-03-09 21:29:14 -07:00
Shelvacu
b0eb8e0d40 fix compute-deck 2025-03-07 11:15:43 -08:00
Shelvacu
c41c8e7f93 stuff 2025-03-07 10:33:33 -08:00
Shelvacu
1badd6414c move padtype to uninsane 2025-03-07 10:30:02 -08:00
Shelvacu
e4517728ea stuff 2025-03-07 00:12:48 -08:00
Shelvacu
1b065a823e stuff 2025-03-07 00:02:23 -08:00
Shelvacu
2b6c930b33 stuff 2025-03-06 22:47:44 -08:00
Shelvacu
71be7f1858 stuff 2025-03-06 19:40:46 -08:00
Shelvacu
dd4c90abac add determinate nix as "dnix" 2025-03-06 18:39:38 -08:00
Shelvacu
344d93ff4d stuff 2025-03-05 20:17:23 -08:00
Shelvacu
d6336e1481 stuff 2025-03-05 19:36:05 -08:00
Shelvacu
1d022b7c17 stuff 2025-03-05 19:12:31 -08:00
Shelvacu
d2c3481b72 stuff 2025-03-05 19:06:58 -08:00
Shelvacu
dc91897ada stuff 2025-03-05 19:02:43 -08:00
Shelvacu
7cd406accc stuff 2025-03-05 19:02:06 -08:00
Shelvacu
5833df147b betterbird source is actually patched now 2025-03-05 18:04:27 -08:00
Shelvacu
c430b515c3 stuff 2025-03-04 20:55:17 -08:00
Shelvacu
7431510e1a stuff 2025-03-04 16:06:25 -08:00
Shelvacu
a074205671 stuff 2025-03-04 15:48:30 -08:00
Shelvacu
5470dba5b3 stuff 2025-03-04 15:15:42 -08:00
Shelvacu
46b5a7ebaf stuff 2025-03-04 15:03:00 -08:00
Shelvacu
af58991954 stuff 2025-03-04 13:21:43 -08:00
Shelvacu
bf0e4a734f remove razer. it controls lights (dont care) but not macros (do care) and the M1-M5 already map to buttons 2025-02-28 12:30:22 -08:00
Shelvacu
80bb444432 add tpm-fido 2025-02-28 12:29:29 -08:00
Shelvacu
1fd32caddd stuff 2025-02-27 15:00:24 -08:00
Shelvacu
95b8b8470e stuff 2025-02-26 20:57:13 -08:00
Shelvacu
cc82900365 stuff 2025-02-26 20:48:01 -08:00
Shelvacu
6a9460f79c stuff 2025-02-26 20:32:20 -08:00
Shelvacu
346bf77f34 stuff 2025-02-26 20:22:13 -08:00
Shelvacu
8fc940abae stuff 2025-02-26 20:08:58 -08:00
Shelvacu
0d877f5f5c add vaultwarden 2025-02-26 20:03:00 -08:00
Shelvacu
3a8f82788b add wev 2025-02-26 16:47:30 -08:00
Shelvacu
42a83b50ad stuff 2025-02-24 20:56:04 -08:00
Shelvacu
81b67373c2 stuff 2025-02-24 20:38:51 -08:00
Shelvacu
4e571b41cc change negative cache time to 30s. Im inpatient 2025-02-24 20:36:29 -08:00
Shelvacu
41dc651606 stuff 2025-02-24 20:25:22 -08:00
Shelvacu
024b29d1a6 put me in the right group blegh 2025-02-24 20:25:11 -08:00
Shelvacu
87dd6a2116 expose impureBuilds 2025-02-24 19:32:20 -08:00
Shelvacu
e53fe11a23 add razer stuff 2025-02-24 13:47:40 -08:00
Shelvacu
a5d17c0f24 nixvim unstable no longer uses home-manager 2025-02-24 13:33:37 -08:00
Shelvacu
869d39ee22 change compute-deck to plasma6 2025-02-24 13:32:35 -08:00
Shelvacu
659d9ac43c nix flake update 2025-02-24 13:22:10 -08:00
Shelvacu
3766a3dc97 nix fmt 2025-02-24 13:21:00 -08:00
Shelvacu
01c4855184 deadnix --edit --quiet 2025-02-24 13:19:44 -08:00
Shelvacu
a369c59798 custom packages become part of overlays 2025-02-24 13:16:41 -08:00
Shelvacu
a09e6dbed9 add overlay for nheko patch to fix scrolling https://github.com/Nheko-Reborn/nheko/pull/1838 2025-02-24 13:09:21 -08:00
Shelvacu
e4f8943fb6 stuff 2025-02-23 15:50:57 -08:00
Shelvacu
515f981e02 split off a smaller thing to archive 2025-02-21 16:16:55 -08:00
Shelvacu
09a4b06a9e formatters for everything 2025-02-21 16:10:34 -08:00
Shelvacu
4d42ac55e2 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-02-21 15:31:12 -08:00
Shelvacu
f669b77901 update most-winningest 2025-02-21 15:12:29 -08:00
Shelvacu
2ae835992d nix fmt 2025-02-21 14:12:11 -08:00
Shelvacu
109e2d6995 fix triple-dezerts own binary cache url 2025-02-21 14:08:40 -08:00
Shelvacu
dc10a274ae remove unused option 2025-02-21 14:08:21 -08:00
Shelvacu
3ffe3682e4 spelling is hard 2025-02-21 13:49:34 -08:00
Shelvacu
c58cd14fc7 remove cachix caches 2025-02-21 13:12:29 -08:00
Shelvacu
0e095dcf9b reorganize triple-dezert services 2025-02-21 13:12:19 -08:00
Shelvacu
a5e4306f01 no ads >:( 2025-02-21 12:50:13 -08:00
Shelvacu
3b586f27c2 oauth maybe? 2025-02-20 21:52:13 -08:00
Shelvacu
24eedb0590 oauth maybe? 2025-02-20 21:45:39 -08:00
Shelvacu
93df491bc4 stuff 2025-02-20 21:14:26 -08:00
Shelvacu
5b9452e5f5 stuff 2025-02-20 21:03:26 -08:00
Shelvacu
4fb3c6de01 blegh 2025-02-20 20:50:21 -08:00
Shelvacu
c329228af1 so thats how umasks work :grimace: 2025-02-20 20:39:13 -08:00
Shelvacu
2692351b4e Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-02-20 20:27:52 -08:00
Shelvacu
da6557cbd6 stuff 2025-02-20 20:27:48 -08:00
Shelvacu
edd6beb120 stuff 2025-02-20 18:04:31 -08:00
Shelvacu
8c8f8db60c move dns stuff 2025-02-20 18:04:23 -08:00
Shelvacu
78932552d9 update most-winningest 2025-02-20 03:13:41 -08:00
Shelvacu
42ddf52c9c Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-02-15 12:11:22 -08:00
Shelvacu
57a5b16abe wip disko 2025-02-15 12:11:06 -08:00
Shelvacu
10e46744dc add megatools 2025-02-15 11:26:35 -08:00
Shelvacu
4e836ebcf5 remove sm64coopdx (its in nixpkgs unstable) 2025-02-15 10:50:01 -08:00
Shelvacu
3a40b63c6e Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-02-15 03:45:07 -08:00
Shelvacu
ccc1c8d6e1 stuff 2025-02-15 03:44:57 -08:00
Shelvacu
b25b175ab3 stuff 2025-02-14 22:25:43 -08:00
Shelvacu
4d5327d150 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-02-14 22:00:45 -08:00
Shelvacu
b5c0c56288 nix flake update 2025-02-14 18:44:12 -08:00
Shelvacu
35f1922355 stuff 2025-02-14 18:21:28 -08:00
Shelvacu
75ce961756 nix flake update 2025-02-14 18:17:34 -08:00
Shelvacu
6b67eadebe stuff 2025-02-14 18:16:15 -08:00
Shelvacu
aed0b5a7f4 stuff 2025-02-13 13:39:42 -08:00
Shelvacu
c046e7926e stuff 2025-02-12 17:08:43 -08:00
Shelvacu
57d17db9dd stuff 2025-02-12 02:51:37 -08:00
Shelvacu
f41b7867dc stuff 2025-02-12 02:41:56 -08:00
Shelvacu
815996d120 stuff 2025-02-12 02:31:08 -08:00
Shelvacu
00642aaa1a stuff 2025-02-12 01:13:42 -08:00
Shelvacu
3b47257e1f stuff 2025-02-11 18:44:21 -08:00
Shelvacu
bf4630d829 stuff 2025-02-11 01:06:47 -08:00
Shelvacu
58a05869bf stuff 2025-02-11 00:52:25 -08:00
Shelvacu
84bb01cf9f nix flake update 2025-02-11 00:12:53 -08:00
Shelvacu
ed16ea40fa stuff 2025-02-11 00:11:37 -08:00
Shelvacu
17a9b8aaca stuff 2025-02-10 23:04:10 -08:00
Shelvacu
49f19bb96e stuff 2025-02-10 22:07:54 -08:00
Shelvacu
98471f668a stuff 2025-02-10 19:36:54 -08:00
Shelvacu
2dd2cadfba stuff 2025-02-09 00:34:15 -08:00
Shelvacu
9be8572670 stuff 2025-02-08 23:59:58 -08:00
Shelvacu
9bf1fc575e stuff 2025-02-08 21:43:58 -08:00
Shelvacu
4c9070e9b7 stuff 2025-02-08 21:41:51 -08:00
Shelvacu
12253d476a stuff 2025-02-08 21:41:22 -08:00
Shelvacu
d49f279a48 stuff 2025-02-08 21:09:26 -08:00
Shelvacu
7731403496 stuff 2025-02-08 21:08:05 -08:00
Shelvacu
3626ba056b stuff 2025-02-08 20:19:01 -08:00
Shelvacu
08e29e7421 cleanup tliam script 2025-02-08 19:50:17 -08:00
Shelvacu
294aa9f4d7 dns is up and running :D 2025-02-08 19:45:52 -08:00
Shelvacu
2d4bf40891 stuff 2025-02-08 19:02:06 -08:00
Shelvacu
cf20f884ea add wayland-utils 2025-02-08 16:06:13 -08:00
Shelvacu
7fff828978 fix archive deriv 2025-02-08 16:06:03 -08:00
Shelvacu
20cd10d273 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-02-05 17:35:40 -08:00
Shelvacu
0ca314e946 add (possibly broken?) orca-slicer changes 2025-02-05 17:35:34 -08:00
Shelvacu
b4c3f87aaf stuff 2025-02-04 18:08:12 -08:00
Shelvacu
2c99559cb3 stuff 2025-02-01 16:02:42 -08:00
Shelvacu
01f087ee37 stuff 2025-02-01 16:01:24 -08:00
Shelvacu
689d0e3cd8 stuff 2025-02-01 16:00:38 -08:00
Shelvacu
b07213cee5 stuff 2025-02-01 14:35:50 -08:00
Shelvacu
3645c84c83 stuff 2025-01-31 21:28:41 -08:00
Shelvacu
e992fc8637 stuff 2025-01-31 20:58:43 -08:00
Shelvacu
7e8f498348 stuff 2025-01-31 20:13:08 -08:00
Shelvacu
cbfe970ad4 stuff 2025-01-31 16:53:42 -08:00
Shelvacu
4e37f98b4d stuff 2025-01-31 07:04:29 -08:00
Shelvacu
caf804110c stuff 2025-01-31 01:19:39 -08:00
Shelvacu
f0faf5b55d stuff 2025-01-30 19:08:03 -08:00
Shelvacu
e30f4a4772 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-01-30 17:41:11 -08:00
Shelvacu
c14e95e2bd stuff 2025-01-30 17:41:06 -08:00
Shelvacu
7ab75d8db6 stuff 2025-01-25 02:16:21 -08:00
Shelvacu
fed8cac37d Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-01-25 02:13:43 -08:00
Shelvacu
5c4e4d8cf4 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-01-25 02:11:22 -08:00
Shelvacu
2c07e8efc9 add radicle to legtop 2025-01-25 01:46:57 -08:00
Shelvacu
fd992a5870 stuff 2025-01-24 22:48:54 -08:00
Shelvacu
adf895c65e stuff 2025-01-23 21:34:50 -08:00
Shelvacu
03d7d93f56 stuff 2025-01-23 21:09:59 -08:00
Shelvacu
5cab51fd29 stuff 2025-01-23 21:09:05 -08:00
Shelvacu
faf3f3e4fe Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2025-01-22 17:52:26 -08:00
Shelvacu
958ee8eadb radicle 2025-01-22 17:52:18 -08:00
Shelvacu
88f9162ae6 stuff 2025-01-22 17:34:37 -08:00
Shelvacu
59d50f0625 stuff 2025-01-22 17:23:36 -08:00
Shelvacu
9bc6cd1ac2 stuff 2025-01-21 00:03:34 -08:00
Shelvacu
07e5aa940d add netcat-openbsd to default packages 2025-01-19 12:24:50 -08:00
Shelvacu
64a17cc4fe nix flake update 2025-01-17 20:45:46 -08:00
Shelvacu
d580d5d1e4 stuff 2025-01-12 11:40:05 -08:00
Shelvacu
fc6f2f3cd9 stuff 2025-01-06 15:51:15 -08:00
Shelvacu
c7534420f4 nix flake update 2025-01-06 01:53:18 -08:00
Shelvacu
d547c8c7d4 stuff 2025-01-06 01:50:48 -08:00
Shelvacu
8d17f93f17 stuff 2024-12-31 16:57:43 -08:00
Shelvacu
b0cd091f4b stuff 2024-12-31 16:57:04 -08:00
Shelvacu
71e8bca512 add jobs.shelvacu.com 2024-12-31 16:52:13 -08:00
Shelvacu
8f9c1ff9ca stuff 2024-12-31 14:40:05 -08:00
Shelvacu
1f95180835 stuff 2024-12-31 14:31:00 -08:00
Shelvacu
98f0a022bc stuff 2024-12-31 13:52:10 -08:00
Shelvacu
6d75f5c9e7 nix flake update 2024-12-29 19:06:58 -08:00
Shelvacu
c451543b8e stuff 2024-12-29 01:44:17 -08:00
Shelvacu
d446b60b8d firefly 2024-12-27 22:17:08 -08:00
Shelvacu
4731c65bba firefly 2024-12-27 21:50:54 -08:00
Shelvacu
9e15fea0ca stuff 2024-12-27 20:37:24 -08:00
Shelvacu
191f66fc08 stuff 2024-12-27 14:19:50 -08:00
Shelvacu
aebbaefed9 moar firefly 2024-12-27 12:16:59 -08:00
Shelvacu
9da5ff45e1 firefly 2024-12-26 18:35:47 -08:00
Shelvacu
444a3ceaf2 firefly 2024-12-26 18:31:59 -08:00
Shelvacu
cb80855e7c firefly 2024-12-26 18:20:10 -08:00
Shelvacu
f9929e90f4 firefly 2024-12-26 17:15:34 -08:00
Shelvacu
66c2e5c0de firefly 2024-12-26 17:08:23 -08:00
Shelvacu
50716ec39f firefly 2024-12-26 16:05:38 -08:00
Shelvacu
3b77672cb1 firefly 2024-12-26 16:03:07 -08:00
Shelvacu
596263f4e8 firefly 2024-12-26 16:01:46 -08:00
Shelvacu
4684366b70 firefly 2024-12-26 16:00:37 -08:00
Shelvacu
fe1ef23234 firefly 2024-12-26 15:59:51 -08:00
Shelvacu
0bb7cde4d9 firefly 2024-12-26 15:57:19 -08:00
Shelvacu
100bab20f3 stuff 2024-12-26 15:37:38 -08:00
Shelvacu
d7dd41f05c stuff 2024-12-26 15:37:26 -08:00
Shelvacu
0f9adf5644 add a template 2024-12-26 15:08:38 -08:00
Shelvacu
55e28ea62d Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2024-12-24 15:28:26 -08:00
Shelvacu
5683959640 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2024-12-24 15:27:56 -08:00
Shelvacu
929063dcbb stuff 2024-12-24 15:27:49 -08:00
Shelvacu
a9377de947 stuff 2024-12-24 15:26:58 -08:00
Shelvacu
36ecfe018c Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2024-12-23 00:41:46 -08:00
Shelvacu
4ca1d2c433 stuff 2024-12-23 00:41:41 -08:00
Shelvacu
0688aa334b stuff 2024-12-23 00:38:51 -08:00
Shelvacu
7074383536 stuff 2024-12-21 00:22:51 -08:00
Shelvacu
946f9428e3 nix flake update 2024-12-20 12:42:49 -08:00
Shelvacu
023b8c3375 fix nd function 2024-12-19 15:16:17 -08:00
Shelvacu
aff3058af0 stuff 2024-12-18 19:35:04 -08:00
Shelvacu
a2c585a7a7 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2024-12-18 19:28:41 -08:00
Shelvacu
56828f19c0 nofail on all boot partitions 2024-12-17 15:06:07 -08:00
Shelvacu
406cb00913 stuff 2024-12-16 23:48:14 -08:00
Shelvacu
f7effe19c9 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2024-12-16 12:41:42 -08:00
Shelvacu
8185dd46a3 stuff 2024-12-16 12:40:48 -08:00
Shelvacu
c8ee204eb4 stuff 2024-12-16 01:22:29 -08:00
Shelvacu
3a8e57df2d stuff 2024-12-16 01:10:31 -08:00
Shelvacu
ba352cc49b stuff 2024-12-16 01:06:40 -08:00
Shelvacu
f660aecb4c stuff 2024-12-16 00:48:45 -08:00
Shelvacu
734c1634a5 wip 2024-12-16 00:00:11 -08:00
Shelvacu
b5ab4d6fc7 wip 2024-12-15 23:13:24 -08:00
Shelvacu
ee5f299d21 wip 2024-12-15 17:41:22 -08:00
Shelvacu
c90902eeb0 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2024-12-15 14:07:20 -08:00
Shelvacu
ff070d8672 fix versionInfo nixpkgs 2024-12-15 14:07:14 -08:00
Shelvacu
62edd2664d more sum stuff 2024-12-15 13:26:08 -08:00
Shelvacu
3c8e7fbbc0 stuff 2024-12-13 00:20:20 -08:00
Shelvacu
2ada1fb5cd Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2024-12-12 11:41:20 -08:00
Shelvacu
6a2473eb35 auto-seen listening party 2024-12-12 11:41:17 -08:00
Shelvacu
dd85c01d3b fix mail filter 2024-12-11 16:01:31 -08:00
Shelvacu
d0dd3a1592 stuff 2024-12-10 13:02:34 -08:00
Shelvacu
4025b0bab8 long timeouts for nextcloud vacustore 2024-12-10 11:04:35 -08:00
Shelvacu
c25944bf78 upgrade nextcloud 2024-12-09 22:07:58 -08:00
Shelvacu
bf08b85d7a stuff 2024-12-09 13:11:37 -08:00
Shelvacu
26556af344 stuff 2024-12-09 12:40:55 -08:00
Shelvacu
8e32908e12 stuff 2024-12-09 12:28:46 -08:00
Shelvacu
3ce231d1c4 stuff 2024-12-09 12:23:26 -08:00
Shelvacu
8aa7083aac stuff 2024-12-09 12:23:19 -08:00
Shelvacu
f020c2ff6b stuff 2024-12-09 12:22:50 -08:00
Shelvacu
ea027e277d stuff 2024-12-09 12:08:42 -08:00
Shelvacu
8202e74f5a stuff 2024-12-09 12:05:19 -08:00
Shelvacu
c076076746 stuff 2024-12-09 11:23:23 -08:00
Shelvacu
e8f474e7dd Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2024-12-09 11:15:05 -08:00
Shelvacu
d386c7056f stuff 2024-12-09 11:13:48 -08:00
Shelvacu
300b873693 stuff 2024-12-09 11:08:28 -08:00
Shelvacu
c189fe43bf stuff 2024-12-09 10:32:41 -08:00
Shelvacu
547e94ed4f stuff 2024-12-08 17:17:02 -08:00
Shelvacu
6aa0040b24 more sieving 2024-12-08 17:15:31 -08:00
Shelvacu
7491e35ef3 switch to treefmt 2024-12-08 13:25:55 -08:00
Shelvacu
164c402ca0 nix fmt 2024-12-08 13:14:42 -08:00
Shelvacu
8d9b99499c fix nixvim 2024-12-08 13:13:58 -08:00
Shelvacu
44c21a53d3 stuff 2024-12-08 13:03:20 -08:00
Shelvacu
e051d4fdb2 stuff 2024-12-07 19:37:41 -08:00
Shelvacu
5744e9c793 fix postgres 2024-12-05 11:42:36 -08:00
Shelvacu
24f8005f85 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2024-12-03 11:35:12 -08:00
Shelvacu
dad88011c0 disable verifySystem for now (broke with 24.11) 2024-12-03 11:35:06 -08:00
Shelvacu
c3016579c5 failed attempt to add sr.ht support 2024-12-03 11:34:24 -08:00
Shelvacu
08c11b147a upgrades people, upgrades 2024-12-02 22:54:23 -08:00
Shelvacu
9874f2b946 zomg 24.11 update 2024-12-02 17:52:49 -08:00
Shelvacu
f653c8099c Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2024-12-02 16:16:42 -08:00
Shelvacu
99e455899c stuff 2024-12-02 16:16:36 -08:00
Shelvacu
ecae5207e8 nix fmt 2024-12-02 10:37:46 -08:00
Shelvacu
d848f5e442 nix flake update 2024-12-02 10:33:13 -08:00
Shelvacu
7d831c0bce dufs 2024-12-02 10:22:26 -08:00
Shelvacu
b99375503a stuff 2024-12-01 20:44:15 -08:00
Shelvacu
d836c14ab8 stuff 2024-12-01 20:43:13 -08:00
Shelvacu
7e39942f16 stuff 2024-12-01 20:42:05 -08:00
shelvacu
a309300a1b toptop 2024-12-01 20:25:03 -08:00
Shelvacu
d5a2ce78d0 add dufs 2024-12-01 20:24:03 -08:00
Shelvacu
f14481bcc7 stuff 2024-11-30 18:44:01 -08:00
Shelvacu
e7a2a37402 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2024-11-30 13:36:46 -08:00
Shelvacu
74d5b55b17 fuck off bambu 2024-11-30 13:36:40 -08:00
System administrator
5b375fcc09 stuff 2024-11-30 01:28:45 -08:00
System administrator
fc4c3c63c5 stuff 2024-11-30 01:26:39 -08:00
Shelvacu
48c6eb1ca7 stuff 2024-11-30 00:58:37 -08:00
System administrator
0ec1e86168 stuff 2024-11-30 00:53:31 -08:00
Shelvacu
e4746370b3 stuff 2024-11-30 00:25:57 -08:00
Shelvacu
65f23d6b41 add bambu studio to fw 2024-11-29 15:55:42 -08:00
Shelvacu
552a603d90 git (finally) 2024-11-25 11:17:21 -08:00
Shelvacu
89be91c6ec stuff 2024-11-25 11:01:30 -08:00
Shelvacu
8c295dbf4a Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2024-11-25 10:56:15 -08:00
Shelvacu
f13607422d stuff 2024-11-25 10:55:58 -08:00
shelvacu
68ff0b87ca Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2024-11-25 10:52:02 -08:00
Shelvacu
5ab1b76d48 git configs 2024-11-25 10:43:24 -08:00
Shelvacu
ad25aa6a0f git configs 2024-11-25 10:43:01 -08:00
Shelvacu
9cc7291ea1 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2024-11-25 10:42:12 -08:00
Shelvacu
59397af7d3 git configs 2024-11-25 10:42:01 -08:00
shelvacu
d68618bc31 stuff 2024-11-24 12:12:38 -08:00
shelvacu
d7aba29e59 stuff 2024-11-24 12:06:13 -08:00
Shelvacu
456a4878ce nix is dead. long live lix 2024-11-24 11:09:13 -08:00
shelvacu
2b010893cd nix flake update 2024-11-24 00:20:50 -08:00
Shelvacu
33dccc1c8f fix tliam script not exit code failing on fail 2024-11-23 15:35:30 -08:00
Shelvacu
7b019ef9f3 add oscar 2024-11-23 15:31:56 -08:00
Shelvacu
e7b2bff68a add cargo 2024-11-22 18:59:45 -08:00
Shelvacu
24a449e06a add ssh aliases for github gitlab and uninsane 2024-11-22 16:46:52 -08:00
Shelvacu
0a81c1e44e add yt-dlp 2024-11-20 20:45:49 -08:00
Shelvacu
a823567263 stuff 2024-11-15 16:14:30 -08:00
Shelvacu
5e72c629e9 add headsettool 2024-11-15 16:12:08 -08:00
Shelvacu
330d19f304 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2024-11-15 16:05:04 -08:00
Shelvacu
cce255cfaf add ns command 2024-11-15 16:04:28 -08:00
Shelvacu
0c5cac492e superban asuswebstorage 2024-11-14 23:17:12 -08:00
Shelvacu
1335b2ef50 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2024-11-14 17:25:27 -08:00
Shelvacu
6af04f502e unitsunitsunitsunits 2024-11-14 17:25:12 -08:00
Shelvacu
4505509f31 stuff 2024-11-14 15:14:52 -08:00
shelvacu
c221a643cf nix flake update 2024-11-14 11:32:35 -08:00
shelvacu
12303050e3 nix flake update 2024-11-14 11:15:22 -08:00
Shelvacu
4a62fe396b nix flake update 2024-11-14 00:18:15 -08:00
Shelvacu
577c51d592 nixfmt 2024-11-14 00:11:22 -08:00
Shelvacu
6ddb5d1627 stuff 2024-11-14 00:06:11 -08:00
Shelvacu
52cb4636ae stuff 2024-11-13 23:44:13 -08:00
Shelvacu
3d46260ea7 fix awootrip? 2024-11-13 23:15:15 -08:00
Shelvacu
1812ed20d5 fix sourcetree? 2024-11-13 23:15:09 -08:00
Shelvacu
21a15e6116 stuff 2024-11-13 22:19:17 -08:00
Shelvacu
a56ffd9463 stuff 2024-11-13 21:57:36 -08:00
Shelvacu
966de19436 fix vhich 2024-11-13 15:51:08 -08:00
Shelvacu
605bb09688 stuff 2024-11-13 15:02:30 -08:00
Shelvacu
6a72fb45f9 stuff 2024-11-12 15:28:47 -08:00
Shelvacu
af2d73a77c add nr command 2024-11-12 12:16:39 -08:00
Shelvacu
60f55b0b4a add sdf ssh host 2024-11-12 12:00:27 -08:00
Shelvacu
80e57ba1a8 stuff 2024-11-12 12:00:16 -08:00
Shelvacu
6f8c93442b Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2024-11-04 16:25:58 -08:00
Shelvacu
2c0d7046ed applets 2024-11-04 16:25:49 -08:00
Shelvacu
b58980525f add info@rfidlabel.com to spam list 2024-11-04 11:16:42 -08:00
Shelvacu
e672d78794 add upgrade-plans@asuswebstorage.com to spam list 2024-11-04 11:00:13 -08:00
Shelvacu
e89f6ce2de stuff 2024-11-03 01:49:18 -08:00
Shelvacu
6963d29cae remap capslock 2024-11-02 16:07:31 -07:00
shelvacu
398408e380 stuff 2024-11-01 00:30:19 -07:00
Shelvacu
3b8a9060d8 some docs maybe 2024-10-30 15:00:06 -07:00
Shelvacu
4a0066051f wip dns stuff 2024-10-29 18:42:36 -07:00
shelvacu
243e2e2917 it works 2024-10-27 13:13:08 -07:00
shelvacu
d6f3a89a53 stuff 2024-10-26 23:07:14 -07:00
shelvacu
96be980c95 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2024-10-26 23:01:55 -07:00
Shelvacu
5d038447dc stuff 2024-10-26 23:01:21 -07:00
Shelvacu
1916e9512e stuff 2024-10-26 18:39:59 -07:00
Shelvacu
4b2a048ed7 wip 2024-10-26 18:38:25 -07:00
Shelvacu
1400df6df5 stuff 2024-10-25 21:18:35 -07:00
Shelvacu
fcf61aed64 stuff 2024-10-25 19:18:48 -07:00
shelvacu
72f8d2016a utillinux got renamed 2024-10-24 09:18:44 -07:00
Shelvacu
9a44f26952 add gitlab token 2024-10-23 22:45:23 -07:00
Shelvacu
299090e05c it worrrrrks 2024-10-23 22:28:55 -07:00
shelvacu
96e61ef46a fix some keys 2024-10-23 21:41:52 -07:00
Shelvacu
cb3aa29d9a wip-gitea-sops 2024-10-23 21:31:01 -07:00
Shelvacu
aee5440fde nixfmt 2024-10-23 19:12:43 -07:00
Shelvacu
79c4c5ada6 rework sops config and ssh keys config 2024-10-23 19:06:00 -07:00
shelvacu
65cdbd2ce2 stuff 2024-10-23 19:03:54 -07:00
shelvacu
784f418cd0 stuff 2024-10-19 23:35:56 -07:00
shelvacu
94edcb5f9a stuff 2024-10-19 21:21:24 -07:00
Shelvacu
ee36ed3373 stuff 2024-10-19 20:56:30 -07:00
Shelvacu
89b52cf239 disable som stuff 2024-10-19 20:23:45 -07:00
Shelvacu
c3120e5b79 it evaluates 2024-10-19 19:21:59 -07:00
Shelvacu
565bb08be3 wip 2024-10-19 18:18:53 -07:00
Shelvacu
01aa80919e add more filtering 2024-10-18 13:18:49 -07:00
Shelvacu
32878396bf add to dialout for arduino 2024-10-18 13:09:02 -07:00
Shelvacu
d7087fe6d0 arduinooooooo 2024-10-15 19:04:03 -07:00
Shelvacu
d414d72f52 stuff 2024-10-14 15:23:43 -07:00
Shelvacu
9a2285887c stuff 2024-10-14 15:22:29 -07:00
Shelvacu
c484278721 nix fmt 2024-10-13 11:25:12 -07:00
Shelvacu
3b596662c8 stuff 2024-10-13 11:20:39 -07:00
Shelvacu
960e93581a common packages 2024-10-13 11:20:29 -07:00
Shelvacu
aedf149f9d added bandcamp-collection-downloader 2024-10-12 18:40:38 -07:00
shelvacu
7878ae11b5 fix yt-archiver 2024-10-12 18:38:43 -07:00
Shelvacu
c8f322383d wip adding bandcamp-collection-downloader 2024-10-12 16:26:55 -07:00
Shelvacu
76ce28a5c7 update ms* utility commands 2024-10-12 15:41:39 -07:00
shelvacu
b1491643c9 stuff 2024-10-09 01:05:56 -07:00
Shelvacu
35472eeda6 aaa 2024-10-08 23:30:21 -07:00
shelvacu
9fab2f9061 nix flake update 2024-10-04 16:08:03 -07:00
shelvacu
cd66d41ab6 fmt 2024-10-04 16:08:03 -07:00
Shelvacu
5e052d6cc7 add virtualbox to fw; add z3 package 2024-10-04 16:04:58 -07:00
Shelvacu
5d21668904 mmm stuff 2024-09-30 18:07:28 -07:00
Shelvacu
d9ebd32f10 fmt 2024-09-30 17:09:39 -07:00
Shelvacu
d6ef5a81b3 mmm stuff 2024-09-30 15:19:04 -07:00
Shelvacu
490ef4ea1c mmm stuff 2024-09-30 15:17:27 -07:00
Shelvacu
5a8fe39c38 mmm stuff 2024-09-30 14:46:53 -07:00
Shelvacu
4017b53b45 mmm stuff 2024-09-30 14:39:20 -07:00
Shelvacu
8210d58ad2 mmm stuff 2024-09-30 14:17:02 -07:00
Shelvacu
5352b86faa mmm stuff 2024-09-30 14:07:50 -07:00
Shelvacu
1088e31f8e mmm stuff 2024-09-30 14:06:56 -07:00
Shelvacu
5568637178 stuff 2024-09-27 21:09:38 -07:00
Shelvacu
1f3d770761 stuff 2024-09-27 21:06:43 -07:00
Shelvacu
027f105ecd full wine. all the wine. we drunk nao 2024-09-25 15:06:40 -07:00
shelvacu
2bba10703c Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2024-09-25 14:50:18 -07:00
shelvacu
7b30a4cdbe more broken builds 2024-09-25 14:50:11 -07:00
Shelvacu
fa9581e1cb add wine 2024-09-25 14:49:38 -07:00
Shelvacu
c367662b51 requireFile-less coopdx 2024-09-24 16:07:18 -07:00
Shelvacu
e3b49965b9 add installer-bootstrap crossbuild 2024-09-24 16:04:06 -07:00
Shelvacu
0618d2798c Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2024-09-22 20:31:35 -07:00
shelvacu
dec12841b1 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2024-09-22 20:31:21 -07:00
Shelvacu
b62779a491 add steam 2024-09-21 22:40:16 -07:00
Shelvacu
c47ee6f459 auto optimise nix store on trip 2024-09-21 14:11:41 -07:00
shelvacu
d2dcffb8a4 nixos-apple-silicon requires nixpkgs unstable 2024-09-21 13:47:37 -07:00
shelvacu
2103fca349 flake update 2024-09-20 13:53:19 -07:00
Shelvacu
75b75fa621 fix plasma integration 2024-09-20 13:47:31 -07:00
Shelvacu
b9037cff8a stuff 2024-09-19 22:52:48 -07:00
Shelvacu
19f71e106b rename mike1 to mmm 2024-09-19 21:41:01 -07:00
Shelvacu
e710eeab87 better coopdx 2024-09-19 21:28:06 -07:00
shelvacu
6b0333d143 preliminary mike1 config 2024-09-19 19:43:36 -07:00
Shelvacu
b318a9a3bc stufff 2024-09-18 14:03:09 -07:00
Shelvacu
cc10b99461 add legtop keys 2024-09-18 14:03:09 -07:00
Shelvacu
2ff3cbe417 cleanup 2024-09-18 11:17:15 -07:00
Shelvacu
6c2e19d398 stuff 2024-09-18 10:35:46 -07:00
Shelvacu
eda2b3085d fix coopdx 2024-09-17 20:07:26 -07:00
Shelvacu
608c4899ec audio 2024-09-17 18:56:52 -07:00
Shelvacu
b54e90049b default verify expectedMac only 2024-09-17 17:23:07 -07:00
Shelvacu
046252da60 add legtop 2024-09-17 17:07:47 -07:00
Shelvacu
d587f2ae84 stuff 2024-09-17 15:48:53 -07:00
Shelvacu
9935f280c0 fix alias 2024-09-17 15:48:26 -07:00
shelvacu
5e62f70951 stuff 2024-09-15 15:48:27 -07:00
shelvacu
c99528ad0a fix minimal for nod 2024-09-15 15:37:47 -07:00
shelvacu
063869e616 stuff 2024-09-15 15:09:38 -07:00
Shelvacu
d365fe304a stuff 2024-09-15 15:03:23 -07:00
Shelvacu
0bce429ad0 stuff 2024-09-15 15:01:28 -07:00
Shelvacu
bb1c2bbbb8 stuff 2024-09-15 14:20:40 -07:00
Shelvacu
b17125ebaf stuff 2024-09-15 14:19:10 -07:00
Shelvacu
7ca34cf82c updaaaaaate 2024-09-14 19:50:12 -07:00
Shelvacu
bfda13b128 massively shrink liam closure size 2024-09-14 14:40:20 -07:00
shelvacu
04d47744d7 screw snmp 2024-09-14 12:45:28 -07:00
Shelvacu
64c031ed71 waydroid 2024-09-14 11:39:35 -07:00
shelvacu
53141d7be7 mark broken sm64coopdx build 2024-09-14 11:00:01 -07:00
Shelvacu
4a2ad61a8b fmt 2024-09-14 10:47:22 -07:00
Shelvacu
12827583f2 stuff 2024-09-14 10:45:23 -07:00
Shelvacu
e6b5c98bcd nixos-rebuild --use-remote-sudo no more 2024-09-14 10:35:42 -07:00
shelvacu
014961aef8 stuff 2024-09-14 00:51:55 -07:00
Shelvacu
ccba74fb9c stuff 2024-09-13 21:30:56 -07:00
Shelvacu
6bb5486180 i dont care about """"unfree"""" 2024-09-13 21:29:33 -07:00
Shelvacu
9dc0718386 reorganize shell functions 2024-09-13 20:48:59 -07:00
Shelvacu
27bd4077cf fmt run 2024-09-13 20:24:23 -07:00
Shelvacu
54abbe179a stuff 2024-09-13 20:20:18 -07:00
Shelvacu
76036a25b2 stuff 2024-09-13 20:19:56 -07:00
Shelvacu
8b062011ad nixvim 2024-09-13 20:18:24 -07:00
Shelvacu
cfb2b44b77 stuff 2024-09-13 19:42:33 -07:00
shelvacu
332d43e768 stuff 2024-09-13 18:04:15 -07:00
Shelvacu
1f8bd06367 allWithBuildDeps -> archive, try to avoid builing iso every time 2024-09-13 17:52:32 -07:00
shelvacu
c7921cb8ed reorg fwupd 2024-09-13 16:35:18 -07:00
shelvacu
74180f9a41 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2024-09-13 13:43:25 -07:00
Shelvacu
d80f4b3a02 all da tunderbolt 2024-09-13 13:13:42 -07:00
Shelvacu
4c4c4dc675 more thunderbolt 2024-09-12 20:20:21 -07:00
Shelvacu
46dea07a6f add thunderbolt management pkg 2024-09-12 20:12:58 -07:00
Shelvacu
3e1f3b4c97 verify against permaddrs as well 2024-09-12 16:03:21 -07:00
Shelvacu
56fdf9c128 add pixel 9 pro nix-on-droid key 2024-09-12 15:52:48 -07:00
Shelvacu
a459afdad2 verify system, no more oopsies hopefully 2024-09-11 09:32:57 -07:00
Shelvacu
94e08bc6fe wip 2024-09-10 23:46:16 -07:00
Shelvacu
def7296ec7 formatter run 2024-09-10 20:05:01 -07:00
shelvacu
82819646b1 nix flake update + yeet devver 2024-09-09 20:30:09 -07:00
shelvacu
c31446e3cb coopdx: put baserom in the right spot 2024-09-07 17:28:17 -07:00
Shelvacu
b707e6ae8d add sm64coopdx 2024-09-05 15:10:25 -07:00
Shelvacu
420a2d8d02 aaaaaaa 2024-09-04 23:37:53 -07:00
Shelvacu
0c546acefd nixvim initial 2024-09-04 15:59:08 -07:00
Shelvacu
1b13226c50 F O R M A T 2024-09-03 04:29:32 -07:00
Shelvacu
4876654145 fix initial ps1 2024-09-02 22:57:11 -07:00
shelvacu
9ed4e80418 add bootstrap 2024-09-02 22:44:09 -07:00
shelvacu
46ec04a967 update flake inputs 2024-09-02 02:44:28 -07:00
Shelvacu
311fbb0904 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2024-09-02 02:24:35 -07:00
Shelvacu
6453c4cdf0 give all the machines different color shells. yay! 2024-09-02 01:50:35 -07:00
Shelvacu
1a74b58b44 stuff 2024-09-01 10:30:31 -07:00
Shelvacu
4f256663ae reorg 2024-08-29 19:35:53 -07:00
shelvacu
4c6df8c5e5 unify some inputs 2024-08-29 09:18:43 -07:00
shelvacu
7312aab991 update flake 2024-08-28 23:11:43 -07:00
shelvacu
c56a26ff6d all is now all all 2024-08-28 22:43:46 -07:00
Shelvacu
88af0f1e93 add curl 2024-08-28 17:17:27 -07:00
Shelvacu
1b3aa80fe9 Merge branch 'restricted-inputs' 2024-08-28 17:15:01 -07:00
shelvacu
fccda582ef gimp 2024-08-23 10:49:20 -07:00
Shelvacu
8b9e199a23 give all configurations a restricted set of inputs 2024-08-21 19:13:43 -07:00
Shelvacu
addf748d1f wip 2024-08-21 17:11:38 -07:00
Shelvacu
b7b281604b add git version info to all vacu builds 2024-08-21 17:08:41 -07:00
Shelvacu
6782539b4a slash timeouts in haproxy 2024-08-21 16:32:32 -07:00
Shelvacu
0637a617e8 fw: remove librenms 2024-08-18 18:11:09 -07:00
shelvacu
4fc5864466 make into-nix-cache auto-sudo 2024-08-18 18:03:17 -07:00
shelvacu
e6e0fe6e47 Merge branch 'master' of git.uninsane.org:shelvacu/nix-stuff 2024-08-18 17:23:10 -07:00
Shelvacu
3e7bb2d2f8 compute-deck: add some modules to initrd, just in case 2024-08-18 16:08:55 -07:00
Shelvacu
c197b31a5f and fix compute-deck 2024-08-18 15:37:17 -07:00
Shelvacu
a1e4e2aa91 reorganize nix-on-droid config and set nixpkgs & vacu in flake registry 2024-08-18 15:30:39 -07:00
root
94d28b7f57 disable patches 2024-08-17 21:43:39 -07:00
root
03fc273124 stuff 2024-08-17 20:33:13 -07:00
root
8d9de94083 fix compute deck 2024-08-17 20:32:22 -07:00
Shelvacu
359be2b446 stuff 2024-08-17 15:49:54 -07:00
Shelvacu
9c8fdd958f wip home manager 2024-08-12 14:58:38 -07:00
Shelvacu
f248b0cb52 add root cert for vnopn router 2024-08-12 14:38:53 -07:00
Shelvacu
2740141b2b lets package a bunch of useless shit whaddya say 2024-08-12 14:20:40 -07:00
Shelvacu
7665e92138 add snmpb for some reason 2024-08-11 17:34:50 -07:00
root
0a4350f191 fix jl-stats 2024-08-11 11:55:40 -07:00
root
b0d9d1a987 add git-lfs 2024-08-06 11:11:40 -07:00
root
e5a12a1f17 wip jellyfin 2024-08-06 10:33:21 -07:00
root
9d8a096916 stuff 2024-08-04 16:26:35 -07:00
root
2f498e49c7 stuff 2024-07-29 17:29:28 -07:00
root
a351665606 stuff 2024-07-29 17:29:15 -07:00
Shelvacu
cd1865dbc5 update flake inputs 2024-07-27 23:29:45 -07:00
root
2458df3d17 add allWithBuildDeps to flake 2024-07-27 20:48:37 -07:00
Shelvacu
daaa70e148 stuff 2024-07-25 17:45:02 -07:00
Shelvacu
0d20e797ba stuff 2024-07-25 17:40:04 -07:00
Shelvacu
0354a47c12 mess with apex stuff some more 2024-07-21 18:49:17 -07:00
root
797ec7dd07 reorganize packages 2024-07-21 15:53:12 -07:00
root
09561eca09 add opencl stuff 2024-07-21 12:39:12 -07:00
Shelvacu
d5d28c940e stuff 2024-07-21 12:31:50 -07:00
Shelvacu
0d2d0688f7 try to integrate vacufuncs (didnt work) 2024-07-20 15:48:37 -07:00
Shelvacu
e8d2b3aa63 stuff 2024-07-20 15:48:37 -07:00
Shelvacu
7cab530d40 add inkscape and libreoffice 2024-07-17 18:10:24 -07:00
Shelvacu
c79ca06af3 add opencl support 2024-07-17 18:10:24 -07:00
Shelvacu
876dbb2dc9 add work laptop to known hosts 2024-07-16 13:08:06 -07:00
Shelvacu
3c77d14e9b workaround for too-small efi partitions :( 2024-07-15 01:02:33 -07:00
Shelvacu
546247a569 stuff 2024-07-15 00:29:54 -07:00
Shelvacu
e6ff9373dd add ostiary known host 2024-07-15 00:07:04 -07:00
Shelvacu
4d66f3d9a2 halfway add vacufuncs to nix-on-droid config 2024-07-14 23:31:36 -07:00
Shelvacu
86bf3807bc enable commands for nixos 2024-07-14 18:41:18 -07:00
Shelvacu
332f6aeb76 stuff 2024-07-13 11:01:49 -07:00
Shelvacu
4eeaa337b9 stuff 2024-07-11 15:55:27 -07:00
Shelvacu
22f6270a06 stuff 2024-07-11 15:53:56 -07:00
Shelvacu
18387da12a stuff 2024-07-11 15:53:17 -07:00
Shelvacu
3e8df621c7 stuff 2024-07-11 15:49:59 -07:00
Shelvacu
78ffdde588 move common into a folder 2024-07-11 13:59:23 -07:00
Shelvacu
16fc9d93ad stuff 2024-07-10 16:47:25 -07:00
Shelvacu
500ab33b1b mar is no longer working here 2024-07-10 13:47:34 -07:00
Shelvacu
7920bacadd stuff 2024-07-05 23:59:03 -07:00
Shelvacu
61149ff1dd stuff 2024-07-05 23:22:23 -07:00
Shelvacu
be44048523 stuff 2024-07-05 23:09:25 -07:00
Shelvacu
e9e0c87752 stuff 2024-07-05 23:07:39 -07:00
Shelvacu
ee29b1a997 stuff 2024-07-05 23:05:57 -07:00
Shelvacu
20b5803eb9 stuff 2024-07-05 23:04:48 -07:00
Shelvacu
d03709f9d2 stuff 2024-07-05 23:02:56 -07:00
Shelvacu
265c0abd68 stuff 2024-07-05 22:31:29 -07:00
Shelvacu
582ac9ec34 stuff 2024-07-05 22:30:00 -07:00
Shelvacu
7b554988b8 stuff 2024-07-05 22:29:05 -07:00
Shelvacu
4e333b948e stuff 2024-07-05 22:28:13 -07:00
Shelvacu
543f7dec34 stuff 2024-07-05 22:25:50 -07:00
Shelvacu
568bbc1d89 stuff 2024-07-05 22:22:38 -07:00
Shelvacu
8be73f95d0 stuff 2024-07-05 22:15:49 -07:00
Shelvacu
17b63089e6 move postgres data dir 2024-07-05 21:34:06 -07:00
Shelvacu
a4b195c389 stuff 2024-07-04 19:55:55 -07:00
root
d77d0d720a stuff 2024-07-04 15:10:22 -07:00
root
6807f5c960 agpl3 doesnt exist anymore?? 2024-07-04 15:07:17 -07:00
Shelvacu
7e6cf686bb stuff 2024-07-03 19:08:22 -07:00
Shelvacu
f37b6a4a46 stuff 2024-07-03 18:52:11 -07:00
Shelvacu
7211ffb30a stuff 2024-07-03 18:49:48 -07:00
Shelvacu
4ced20fb2d stuff 2024-07-03 18:35:12 -07:00
Shelvacu
f5af9886f5 stuff 2024-07-03 18:24:40 -07:00
Shelvacu
383b57bace stuff 2024-07-03 18:21:40 -07:00
Shelvacu
4eb20970b6 stuff 2024-07-03 18:08:05 -07:00
Shelvacu
0288181706 add migadu creds 2024-07-03 17:57:23 -07:00
Shelvacu
a0f11550c5 stuff 2024-07-03 17:51:25 -07:00
Shelvacu
80b2ff8951 stuff 2024-07-03 17:47:37 -07:00
Shelvacu
d7b37b0353 stuff 2024-07-03 17:42:04 -07:00
Shelvacu
ab5168632e stuff 2024-07-03 17:39:55 -07:00
Shelvacu
569043b6ca stuff 2024-07-03 17:36:30 -07:00
Shelvacu
620fec48ea give up and update everything to 24.05 2024-07-03 17:35:22 -07:00
Shelvacu
3d734769cd stuff 2024-07-03 17:32:34 -07:00
Shelvacu
14fce1d271 stuff 2024-07-03 17:30:11 -07:00
Shelvacu
d09117418f stuff 2024-07-03 17:29:05 -07:00
Shelvacu
0c4c590dc3 stuff 2024-07-03 17:28:17 -07:00
Shelvacu
06d40673dd stuff 2024-07-03 17:23:48 -07:00
Shelvacu
63e44f4766 stuff 2024-07-03 17:19:03 -07:00
Shelvacu
4b54a38998 stuff 2024-07-03 16:54:59 -07:00
Shelvacu
e9c0ba445c stuff 2024-07-03 16:51:57 -07:00
Shelvacu
13564a3655 stuff 2024-07-03 16:50:35 -07:00
Shelvacu
c30b275bb7 stuff 2024-07-03 16:48:37 -07:00
Shelvacu
f809262290 stuff 2024-07-03 16:41:37 -07:00
Shelvacu
789dc5397d stuff 2024-07-03 16:39:50 -07:00
Shelvacu
5464a052ed Merge branch 'liam-relay' of git.uninsane.org:shelvacu/nix-stuff into liam-relay 2024-07-03 16:19:35 -07:00
Shelvacu
7d0c463de1 stuff 2024-07-03 16:17:11 -07:00
Shelvacu
ce37f30c39 stuff 2024-07-03 16:02:57 -07:00
Shelvacu
52a54f1b50 stuff 2024-07-03 15:52:46 -07:00
Shelvacu
a5585d8bb7 stuff 2024-07-01 21:46:35 -07:00
Shelvacu
4f31ae0727 stuff 2024-07-01 21:45:34 -07:00
Shelvacu
08a778a4d5 stuff 2024-07-01 21:43:31 -07:00
Shelvacu
26194a2994 stuff 2024-07-01 21:39:14 -07:00
Shelvacu
7055fe0678 stuff 2024-07-01 21:34:31 -07:00
Shelvacu
a0cd2fb6a2 stuff 2024-07-01 21:34:13 -07:00
Shelvacu
cba177bc03 stuff 2024-07-01 21:31:52 -07:00
Shelvacu
18f1c074de stuff 2024-07-01 21:20:22 -07:00
Shelvacu
c08442e624 stuff 2024-07-01 21:18:53 -07:00
Shelvacu
540531634b stuff 2024-07-01 21:14:16 -07:00
Shelvacu
e39fe28776 stuff 2024-07-01 21:13:33 -07:00
Shelvacu
5bbf66e323 stuff 2024-07-01 21:12:13 -07:00
Shelvacu
992c0301e3 stuff 2024-07-01 21:07:04 -07:00
Shelvacu
603cb25f95 stuff 2024-07-01 21:04:52 -07:00
Shelvacu
be2071785d stuff 2024-07-01 21:01:10 -07:00
Shelvacu
2977a455db stuff 2024-07-01 20:59:46 -07:00
Shelvacu
b3d3ff1c96 stuff 2024-07-01 20:50:37 -07:00
Shelvacu
9a79e42184 stuff 2024-07-01 20:48:08 -07:00
Shelvacu
4fbbbaad24 stuff 2024-07-01 20:41:47 -07:00
Shelvacu
f363261a26 stuff 2024-07-01 20:40:10 -07:00
Shelvacu
9b62f51b4e stuff 2024-07-01 20:36:49 -07:00
Shelvacu
52d81bc607 stuff 2024-07-01 20:34:50 -07:00
Shelvacu
4624dbea90 stuff 2024-07-01 20:33:10 -07:00
Shelvacu
df117c4eed stuff 2024-07-01 20:30:38 -07:00
Shelvacu
35edf8667b stuff 2024-07-01 20:28:47 -07:00
Shelvacu
7d773121c4 stuff 2024-07-01 20:28:32 -07:00
Shelvacu
b544246cf0 stuff 2024-07-01 19:43:34 -07:00
Shelvacu
a39ee64db6 stuff 2024-07-01 19:42:57 -07:00
Shelvacu
e54d387104 stuff 2024-07-01 19:42:14 -07:00
Shelvacu
56dee4d47c stuff 2024-07-01 19:41:15 -07:00
Shelvacu
044359ac25 this is my first official try 2024-07-01 19:39:02 -07:00
Shelvacu
3f5200b574 wip 2024-07-01 16:43:20 -07:00
Shelvacu
702d48e825 stuff 2024-07-01 16:38:01 -07:00
Shelvacu
6d6ab0baf4 wip 2024-07-01 16:36:59 -07:00
Shelvacu
e304d4d20b stuff 2024-06-29 15:47:06 -07:00
Shelvacu
95d8f3b836 stuff 2024-06-29 15:45:51 -07:00
Shelvacu
aadbf8e874 stuff 2024-06-29 15:43:54 -07:00
Shelvacu
9d9ee9b083 stuff 2024-06-29 15:41:11 -07:00
Shelvacu
b918fff3dd stuff 2024-06-29 14:47:17 -07:00
Shelvacu
0e15d716f0 stuff 2024-06-29 14:33:52 -07:00
Shelvacu
b45f539fb1 stuff 2024-06-29 14:33:24 -07:00
Shelvacu
0b63217f7b stuff 2024-06-29 14:06:54 -07:00
Shelvacu
73b465bd30 stuff 2024-06-29 14:06:44 -07:00
Shelvacu
55338e81ac stuff 2024-06-29 14:02:56 -07:00
Shelvacu
6e005ff10f stuff 2024-06-29 13:35:19 -07:00
Shelvacu
2f5cc60b00 stuff 2024-06-29 13:28:18 -07:00
Shelvacu
a6f8543ac9 stuff 2024-06-29 13:22:58 -07:00
Shelvacu
d7cff14bae stuff 2024-06-29 13:05:36 -07:00
Shelvacu
9049153ff4 stuff 2024-06-29 13:04:17 -07:00
shelvacu
0756e0d8bf stuff 2024-06-28 17:15:30 -07:00
shelvacu
691a54cbfc stuff 2024-06-28 16:36:24 -07:00
shelvacu
2434e6693f stuff 2024-06-28 16:26:14 -07:00
shelvacu
77e3232ad7 stuff 2024-06-28 16:19:28 -07:00
shelvacu
782aea9f1a stuff 2024-06-28 16:18:54 -07:00
shelvacu
64c6bcbe7a stuff 2024-06-28 16:18:38 -07:00
shelvacu
4d4a6c13cc stuff 2024-06-28 16:16:05 -07:00
shelvacu
217fba6035 stuff 2024-06-28 16:07:34 -07:00
shelvacu
e7a60417a2 stuff 2024-06-28 16:07:16 -07:00
shelvacu
e3196b48ca stuff 2024-06-28 15:50:36 -07:00
shelvacu
d69fffef05 add mar to passdb 2024-06-28 15:47:06 -07:00
Shelvacu
eff8c52c91 *actually* re-encrypt 2024-06-28 15:42:31 -07:00
Shelvacu
378d98b277 reencrypt secrets with new keys 2024-06-28 15:34:24 -07:00
shelvacu
3773e5abf5 stuff 2024-06-28 15:27:50 -07:00
shelvacu
31a661f9b9 stuff 2024-06-28 15:15:16 -07:00
shelvacu
862ecfd4b6 stuff 2024-06-28 15:11:37 -07:00
Shelvacu
89373871ac stuff 2024-06-27 13:48:46 -07:00
Shelvacu
452120fa68 stuff 2024-06-27 12:31:52 -07:00
Shelvacu
7c6325a22a stuff 2024-06-27 12:30:22 -07:00
Shelvacu
afbd1ee645 stuff 2024-06-27 12:29:13 -07:00
Shelvacu
4584200632 stuff 2024-06-27 12:28:49 -07:00
Shelvacu
90fc0c3f5b stuff 2024-06-27 12:27:25 -07:00
Shelvacu
b69d831569 stuff 2024-06-27 12:26:24 -07:00
Shelvacu
b288aa824d stuff 2024-06-26 20:02:05 -07:00
Shelvacu
b4a5e9515d stuff 2024-06-26 19:58:00 -07:00
Shelvacu
ea3e3e3ef3 stuff 2024-06-24 17:55:30 -07:00
Shelvacu
3a774033ee stuff 2024-06-23 20:41:06 -07:00
Shelvacu
71a27e50f4 stuff 2024-06-23 01:59:55 -07:00
310 changed files with 20974 additions and 2614 deletions

6
.gitignore vendored
View File

@@ -1,2 +1,6 @@
/result result
result-*
/.generated
.nixos-test-history .nixos-test-history
/packages/vacu-history/target/
/packages/altcaps/target/

View File

@@ -1,26 +0,0 @@
shel_keys: &shel_keys
- &pixel-termux age1y4zp4ddq6xyffd8fgmn2jkl78qfh4m94gcls2cu6vvjnwwznx5uqywjekm
- &t460s age1g9sh8u6s344569d3cg8h30g9h7thld5pexcwzc4549jc84jvceqqjt9cfh
- &pixel-nix age1t5s3txyj403rfecdhq5q2z3cnavy6m543gzyhkl2nu5t8fz0zctqtvm2tj
- &compute-deck-user age1dzdf4rgep3ctk3dnrmrqtdgrchaa8nszfc4dp29gqwsst3z6jyrq57vfsj
machine_host_keys:
- &trip age10lv32k2guszr5y69sez3z5xj92wzmdxvfejd6hm8xr0pmclw2cvq0hk6pe
- &compute-deck-host age1hcqem868xhjdj3lzsvgf0duylwrdp9nqs06a9d0043cpsuhms4as7cqnv4
- &liam age1hkve3khk7fthyrwxjqdf4r37lrqpmnkz6mke7psuphvu2ykynqaq9g6ja5
the_test_key: &test_key age1eqv5759uknu7d46rqyyzsmgt43qumsge33yp2xygapprnt8zu3sqx6kt8w
creation_rules:
- path_regex: secrets/[^/]+$
key_groups:
- age: *shel_keys
- path_regex: ^secrets/liam/
key_groups:
- age:
- *pixel-termux
- *t460s
- *pixel-nix
- *compute-deck-user
- *liam
- path_regex: ^tests/test_secrets/
key_groups:
- age:
- *test_key

View File

@@ -1,13 +1,31 @@
more just notes for now more just notes for now
---
deploy: deploy:
```sh ```sh
nixos-rebuild switch --flake .#triple-dezert --target-host trip.shelvacu.com --use-remote-sudo nixos-rebuild switch --flake .#triple-dezert --target-host trip.shelvacu.com --use-remote-sudo
``` ```
---
build flake on remote machine, including eval: build flake on remote machine, including eval:
```sh ```sh
git add . && ssh trip nix flake check $(nix flake archive --to ssh://trip --json | jq .path -r) git add . && ssh trip nix flake check $(nix flake archive --to ssh://trip --json | jq .path -r)
``` ```
---
search for string in closure
```sh
rg search_str $(nix path-info --recursive ./result)
```
or
```sh
rg search_str $(nix path-info --recursive .#qb.trip)
```

42
archive.nix Normal file
View File

@@ -0,0 +1,42 @@
{
self,
lib,
pkgs,
...
}:
let
ignoreList = [
"iso"
"host-pxe-installer"
"host-pxe-installer-aarch64"
"pxe-initrd"
];
# We don't want iso/img derivations here because they de-dupe terribly. Any change anywhere requires generating a new iso/img file.
isoContentsStr = lib.concatStringsSep "\n" (
map (
c: "${c.source} => ${c.target}"
) self.nixosConfigurations.shel-installer-iso.config.isoImage.contents
);
isoContents = pkgs.writeText "iso-contents" isoContentsStr;
pxeConfig = self.nixosConfigurations.shel-installer-pxe.config;
pxeContents = pkgs.linkFarm "pxe-initrd-contents" {
inherit (pxeConfig.boot.initrd) compressor;
inherit (pxeConfig.system.build) initialRamdisk;
storeContents = pkgs.linkFarmFromDrvs "store-contents" pxeConfig.netboot.storeContents;
};
extraBuilds = { inherit isoContents pxeContents; };
buildListWithout = builtins.filter (v: !builtins.elem v ignoreList) (
builtins.attrNames self.buildList
);
allBuilds = self.buildList // extraBuilds;
in
rec {
archiveList = map (name: {
inherit name;
broken = builtins.elem name self.brokenBuilds;
impure = builtins.elem name self.impureBuilds;
}) (buildListWithout ++ builtins.attrNames extraBuilds);
drvs = allBuilds;
buildDepsDrvs = builtins.mapAttrs (_: v: pkgs.closureInfo { rootPaths = [ v.drvPath ]; }) drvs;
}

30
check-eval.sh Executable file
View File

@@ -0,0 +1,30 @@
#!/usr/bin/env bash
source shellvaculib.bash
svl_exact_args $# 0
svl_assert_probably_in_script_dir
declare -a nix_eval=(
nix eval
--show-trace
)
declare -a hosts=(
triple-dezert
compute-deck
liam
lp0
#skip shel-installer-*
fw
legtop
mmm
prophecy
)
set -x
"${nix_eval[@]}" --impure ".#.nixOnDroidConfigurations.default.activationPackage"
for host in "${hosts[@]}"; do
"${nix_eval[@]}" ".#.nixosConfigurations.${host}.config.system.build.toplevel"
done

View File

@@ -0,0 +1,31 @@
{
config,
lib,
utils,
vacuModuleType,
...
}:
let
for-systemd-services = lib.concatMapAttrs (cert: units: {
"acme-selfsigned-${cert}" = {
wantedBy = units;
before = units;
};
}) config.vacu.acmeCertDependencies;
for-security-acme-certs = lib.concatMapAttrs (cert: units: {
${cert}.reloadServices = units;
}) config.vacu.acmeCertDependencies;
in
lib.optionalAttrs (vacuModuleType == "nixos") {
options.vacu.acmeCertDependencies = lib.mkOption {
default = { };
example = ''
vacu.acmeCertDependencies."mail.example.com" = [ "postfix.service" ];
'';
type = lib.types.attrsOf (lib.types.listOf utils.systemdUtils.lib.unitNameType);
};
config = {
systemd.services = for-systemd-services;
security.acme.certs = for-security-acme-certs;
};
}

51
common/assertions.nix Normal file
View File

@@ -0,0 +1,51 @@
{
lib,
vacuModuleType,
config,
...
}:
let
inherit (lib) mkOption types filter;
fatalAssertions = map (x: x.message) (filter (x: !x.assertion && x.fatal) config.vacu.assertions);
triggeredWarnings = map (x: x.message) (
filter (x: !x.assertion && !x.fatal) config.vacu.assertions
);
withAsserts =
x:
if fatalAssertions != [ ] then
throw ''
Failed assertions:
${lib.concatStringsSep "\n" (map (x: "- ${x}") fatalAssertions)}''
else
lib.showWarnings triggeredWarnings x;
adapter = {
config = {
assertions = map (x: { inherit (x) assertion message; }) (
filter (x: x.fatal) config.vacu.assertions
);
warnings = triggeredWarnings;
};
};
in
{
imports = lib.optional (vacuModuleType != "plain") adapter;
options.vacu.assertions = mkOption {
default = [ ];
type = types.listOf (
types.submodule {
options.assertion = mkOption { type = types.bool; };
options.message = mkOption { type = types.str; };
options.fatal = mkOption {
type = types.bool;
default = true;
};
}
);
};
options.vacu.withAsserts = mkOption {
readOnly = true;
default = withAsserts;
};
}

29
common/checks.nix Normal file
View File

@@ -0,0 +1,29 @@
{
lib,
pkgs,
config,
...
}:
let
inherit (lib) types;
in
{
options.vacu.checks = lib.mkOption {
type = types.attrsOf types.package;
default = { };
};
options.vacu.textChecks = lib.mkOption {
type = types.attrsOf types.lines;
default = { };
};
config.vacu.checks = lib.mapAttrs (
name: lines:
pkgs.runCommand "vacu-textChecks-${name}" { } ''
(
set -xev
${lines}
touch "$out"
)
''
) config.vacu.textChecks;
}

17
common/common-but-not.nix Normal file
View File

@@ -0,0 +1,17 @@
# todo: rename this module
# stuff that does actual configuring (so can't be in ./module.nix) but works in nixos module, home-manager modules, and nix-on-droid modules
{
inputs,
vacuModuleType,
config,
lib,
...
}:
lib.optionalAttrs (vacuModuleType != "plain") {
nix.registry = lib.mkIf (!config.vacu.isMinimal) {
vacu.to = {
type = "path";
path = inputs.self.outPath;
};
};
}

125
common/default.nix Normal file
View File

@@ -0,0 +1,125 @@
{
config,
lib,
inputs,
vacuModuleType,
vacuModules,
...
}:
let
inherit (lib) mkOption types;
inherit (inputs) self;
expectedModuleTypes = [
"nixos"
"nix-on-droid"
"plain"
];
anyRev = attrs: toString (attrs.rev or attrs.dirtyRev or "unk");
anyShortRev = attrs: toString (attrs.shortRev or attrs.dirtyShortRev or "unk");
in
if !builtins.elem vacuModuleType expectedModuleTypes then
builtins.throw "error: unrecognized vacuModuleType ${builtins.toString vacuModuleType}"
else
{
imports = [
vacuModules.packageSet
vacuModules.systemKind
../dns
./acmeDependencies.nix
./assertions.nix
./checks.nix
./common-but-not.nix
./git.nix
./hosts.nix
./hpn.nix
./lix.nix
./minimal-nixos.nix
./nixos.nix
./nixos-rebuild.nix
./nixvim.nix
./nix.nix
./nix-on-droid.nix
./packages.nix
./remapCapsLock.nix
./shell
./sops.nix
./sourceTree.nix
./staticNames.nix
./units-config.nix
./units-impl.nix
./verify-system
./thunderbird.nix
];
options = {
vacu.rootCAs = mkOption { type = types.listOf types.str; };
vacu.versionId = mkOption {
type = types.str;
readOnly = true;
};
vacu.versionInfo = mkOption { readOnly = true; };
vacu.hostName = mkOption {
type = types.nullOr types.str;
default = null;
};
vacu.shortHostName = mkOption {
type = types.nullOr types.str;
default = config.vacu.hostName;
defaultText = "{option}`vacu.hostName`";
};
vacu.vnopnCA = mkOption {
readOnly = true;
type = types.str;
};
};
config = {
vacu.versionId = "${anyShortRev self}-${self.lastModifiedDate or "unk"}";
vacu.versionInfo =
{
rev = anyRev self;
inherit (self) lastModified lastModifiedDate;
inherit (config.vacu) versionId;
inherit vacuModuleType;
inputRevs = lib.mapAttrs (_: v: anyRev v) inputs;
}
// lib.optionalAttrs (!config.vacu.isMinimal) {
flakePath = self.outPath;
inherit inputs;
};
vacu.nix.caches.vacu = {
url = "https://nixcache.shelvacu.com/";
keys = [ "nixcache.shelvacu.com:73u5ZGBpPRoVZfgNJQKYYBt9K9Io/jPwgUfuOLsJbsM=" ];
};
vacu.nix.caches.nix-community = {
url = "https://nix-community.cachix.org/";
keys = [ "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" ];
enable = false;
};
vacu.nix.caches.nix-on-droid = {
url = "https://nix-on-droid.cachix.org/";
keys = [ "nix-on-droid.cachix.org-1:56snoMJTXmDRC1Ei24CmKoUqvHJ9XCp+nidK7qkMQrU=" ];
enable = false;
};
vacu.nix.caches.nixos = {
url = "https://cache.nixos.org/";
keys = [ "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" ];
};
vacu.vnopnCA = ''
-----BEGIN CERTIFICATE-----
MIIBnjCCAUWgAwIBAgIBBTAKBggqhkjOPQQDAjAgMQswCQYDVQQGEwJVUzERMA8G
A1UEAxMIdm5vcG4gQ0EwHhcNMjQwODEyMjExNTQwWhcNMzQwODEwMjExNTQwWjAg
MQswCQYDVQQGEwJVUzERMA8GA1UEAxMIdm5vcG4gQ0EwWTATBgcqhkjOPQIBBggq
hkjOPQMBBwNCAARqRbSeq00FfYUGeCHVkzwrjrydI56T12xy+iut0c4PemSuhyxC
AgfdKYtDqMNZmSqMaLihzkBenD0bN5i0ndjho3AwbjAPBgNVHRMBAf8EBTADAQH/
MCwGA1UdHgEB/wQiMCCgGDAKhwgKTkwA///8ADAKgggudDJkLmxhbqEEMAKBADAO
BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFAjSkbJQCQc1WP6nIP5iLDIKGFrdMAoG
CCqGSM49BAMCA0cAMEQCIFtyawkZqFhvzgmqG/mYNNO6DdsQTPQ46x/08yrEiiF4
AiA+FwAPqX+CBkaSdIhuhv1kIecmvacnDL5kpyB+9nDodw==
-----END CERTIFICATE-----
'';
vacu.rootCAs = [ config.vacu.vnopnCA ];
vacu.ssh.authorizedKeys = import inputs.vacu-keys;
};
}

5
common/desktopApps.nix Normal file
View File

@@ -0,0 +1,5 @@
{ lib, vacuModuleType, ... }:
lib.optionalAttrs (vacuModuleType == "nixos") {
options.vacu.desktopApps = lib.mkEnableOption "asdf";
#todo
}

58
common/git.nix Normal file
View File

@@ -0,0 +1,58 @@
{ lib, config, vacuModules, ... }:
{
imports = [ vacuModules.git ];
vacu.git.enable = lib.mkDefault config.vacu.isDev;
vacu.git.config = {
init.defaultBranch = "master";
pull.rebase = false;
user.name = "Shelvacu";
user.email = "git@shelvacu.com";
author.name = "Shelvacu";
author.email = "git@shelvacu.com";
committer.name = "Shelvacu on ${config.vacu.hostName}";
committer.email = "git@shelvacu.com";
user.useConfigOnly = true;
checkout.workers = 0;
# "We *could* use atomic writes, but those are slowwwwww! Are you sure?????" - git, still living in the 90s
# Yes git, I'm sure
core.fsync = "all";
diff.mnemonicPrefix = true;
gc.reflogExpire = "never";
gc.reflogExpireUnreachable = "never";
url."https://github.com/".insteadOf = [
"hgh:"
"github-http:"
"github-https:"
];
url."git@github.com:".insteadOf = [
"sgh:"
"gh:"
"github-ssh:"
];
url."git@github.com:shelvacu/".insteadOf = [ "vgh:" ];
url."https://gitlab.com/".insteadOf = [
"hgl:"
"gitlab-http:"
"gitlab-https:"
];
url."git@gitlab.com:".insteadOf = [
"sgl:"
"gl:"
"gitlab-ssh:"
];
url."git@gitlab.com:shelvacu/".insteadOf = [ "vgl:" ];
url."https://git.uninsane.org/".insteadOf = [
"hu:"
"uninsane-http:"
"uninsane-https:"
];
url."git@git.uninsane.org:".insteadOf = [
"u:"
"su:"
"uninsane-ssh"
];
url."git@git.uninsane.org:shelvacu/".insteadOf = [ "vu:" ];
};
}

4
common/home.nix Normal file
View File

@@ -0,0 +1,4 @@
{ ... }:
{
imports = [ ./common-but-not.nix ];
}

155
common/hosts.nix Normal file
View File

@@ -0,0 +1,155 @@
{ lib, vacuModules, ... }:
{
imports = [
vacuModules.knownHosts
vacuModules.ssh
];
vacu.hosts = {
#public hosts
"github.com".sshKeys =
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl";
"gitlab.com".sshKeys =
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAfuCHKVTjquxvt6CM6tdG4SLp1Btn/nOeHHE5UOzRdf";
"git.sr.ht".sshKeys =
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMZvRd4EtM7R+IHVMWmDkVU3VLQTSwQDSAvW0t2Tkj60";
"sdf.org" = {
sshHostname = "tty.sdf.org";
sshKeys = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJJk3a190w/1TZkzVKORvz/kwyKmFY144lVeDFm80p17";
};
"rsn" = {
altNames = [
"rsyncnet"
"rsync.net"
];
sshUsername = "fm2382";
sshHostname = "fm2382.rsync.net";
sshKeys = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINdUkGe6kKn5ssz4WRZKjcws0InbQqZayenzk9obmP1z";
};
#colin's stuff
"servo" = {
altNames = [
"git.uninsane.org"
"uninsane.org"
];
isLan = true;
sshKeys = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOfdSmFkrVT6DhpgvFeQKm3Fh9VKZ9DbLYOPOJWYQ0E8";
};
"desko" = {
isLan = true;
sshKeys = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFw9NoRaYrM6LbDd3aFBc4yyBlxGQn8HjeHd/dZ3CfHk";
};
#daymocker's stuff
"pluto" = {
sshHostname = "pluto.somevideogam.es";
primaryIp = "74.208.184.137";
sshKeys = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICpHY4fLZ1hNuB2oRQM7R3b4eQyIHbFB45ZYp3XCELLg";
};
#powerhouse hosts
"ostiary" = {
isLan = true;
sshKeys = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBSYyd1DGPXGaV4mD34tUbXvbtIi/Uv2otoMUsCkxRse";
};
"habitat" = {
# previously known as zigbee-hub
primaryIp = "10.78.79.114";
sshKeys = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBJxwUYddOxgViJDOiokfaQ6CsCx/Sw+b3IisdJv8zFN";
};
"vnopn" = {
primaryIp = "10.78.79.1";
isLan = true;
sshKeys = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEMgJE8shlTYF3nxKR/aILd1SzwDwhtCrjz9yHL7lgSZ";
};
#personal hosts
triple-dezert = {
altNames = [
"trip"
"trip.shelvacu.com"
"triple-dezert.shelvacu.com"
];
sshAliases = [ "trip" ];
primaryIp = "172.83.159.53";
altIps = [ "10.78.79.237" ];
isLan = true;
sshPort = 6922;
sshKeys = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGUQux9V0mSF5IauoO1z311NXR7ymEbwRMzT+OaaNQr+";
};
prophecy = {
altNames = [
"prop"
"prop.shelvacu.com"
"prophecy.shelvacu.com"
];
sshAliases = [ "prop" ];
primaryIp = "205.201.63.13";
altIps = [ "10.78.79.22" ];
isLan = true;
sshKeys = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFPmy1+1CL6mLbp0IfRTLwsVdjKmw5u0kbQqHin8oXMq";
};
servacu = {
altNames = [
"mail.dis8.net"
"servacu.shelvacu.com"
];
sshKeys = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE+E6na7np0HnBV2X7owno+Fg+bNNRSHLxO6n1JzdUTV";
};
finaltask = {
altNames = [
"rsb"
"finaltask.xyz"
];
sshAliases = [ "rsb" ];
primaryIp = "45.87.250.193";
sshPort = 2222;
sshUsername = "user";
sshKeys = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPTx8WBNNKBVRV98HgDChpd59SHbreJ87SXU+zOKan6y";
};
compute-deck = {
sshKeys = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGt43GmXCxkl5QjgPQ/QimW11lKfXmV4GFWvlxQSf4TQ";
};
"2esrever" = {
altIps = [
"10.4.5.218"
"10.244.46.71"
];
sshKeys = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH0LnPrJxAdffZ//uRe3NBiIfFCBNMLqKVylkyU0llvT";
};
awoo = {
primaryIp = "45.142.157.71";
sshKeys = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOQaDjjfSK8jnk9aFIiYH9LZO4nLY/oeAc7BKIPUXMh1";
};
deckvacu = {
sshUsername = "deck";
sshKeys = "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEa8qpFkIlLLJkH8rmEAn6/MZ9ilCGmEQWC3CeFae7r1kOqfwRk0nq0oyOGJ50uIh+PpwEh3rbgq6mLfpRfsFmM=";
};
liam = {
altNames = [ "liam.dis8.net" ];
primaryIp = "178.128.79.152";
sshKeys = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHOqJYVHOIFmEA5uRbbirIupWvyBLAFwic/8EZQRdN/c";
};
fw = {
isLan = true;
sshKeys = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA6lX25mCy35tf1NpcHMAdeRgvT7l0Dw0FWBH3eX4TE2";
};
legtop = {
altNames = [ "lt" ];
isLan = true;
sshKeys = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKvunOGsmHg8igMGo0FpoXaegYI20wZylG8nsMFY4+JL";
};
mmm = {
primaryIp = "10.78.79.11";
isLan = true;
sshKeys = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFsorkZ3rIZ2lLigwQWfA64xZRlt5lk6QPzypg55eLlD";
};
solis = {
altNames = [ "solis.dis8.net" ];
primaryIp = "89.213.174.171";
# altIps = [ "2a0f:9400:7e11:cd44:0000:0000:0000:0001" ];
sshKeys = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPhFKmRMfk+4Xx96Jwt6S9/ikC0cm4ukeO8hjpZDj+9n";
};
};
}

15
common/hpn.nix Normal file
View File

@@ -0,0 +1,15 @@
{
config,
lib,
vacuModuleType,
...
}:
{
# options.vacu.ssh-hpn.enable = lib.mkEnableOption "openssh hpn";
}
// lib.optionalAttrs (vacuModuleType == "nixos") {
# config.nixpkgs.overlays = [ (old: new: {
# openssh-without-hpn = old.openssh;
# openssh = if config.vacu.ssh-hpn.enable then new.openssh_hpn else new.openssh-without-hpn;
# }) ];
}

7
common/lix.nix Normal file
View File

@@ -0,0 +1,7 @@
{ vacuModuleType, ... }:
if vacuModuleType == "nixos" then
{
# imports = [ inputs.lix-module.nixosModules.default ];
}
else
{ }

53
common/minimal-nixos.nix Normal file
View File

@@ -0,0 +1,53 @@
{
config,
pkgs,
lib,
vacuModuleType,
inputs,
...
}:
let
inherit (lib) mkIf mkDefault;
in
lib.optionalAttrs (vacuModuleType == "nixos") {
config = mkIf config.vacu.isMinimal {
programs.git.lfs.enable = false;
programs.git.package = pkgs.gitMinimal;
nix.registry.nixpkgs.to = lib.mkForce {
type = "github";
owner = "NixOS";
repo = "nixpkgs";
rev = inputs.nixpkgs.rev;
};
# mostly copied from nixos's /profiles/minimal.nix
documentation.enable = mkDefault false;
documentation.doc.enable = mkDefault false;
documentation.info.enable = mkDefault false;
documentation.man.enable = mkDefault false;
documentation.nixos.enable = mkDefault false;
# Perl is a default package.
environment.defaultPackages = mkDefault [ ];
environment.stub-ld.enable = false;
# The lessopen package pulls in Perl.
programs.less.lessopen = mkDefault null;
programs.command-not-found.enable = mkDefault false;
services.logrotate.enable = mkDefault false;
services.udisks2.enable = mkDefault false;
xdg.autostart.enable = mkDefault false;
xdg.icons.enable = mkDefault false;
xdg.mime.enable = mkDefault false;
xdg.sounds.enable = mkDefault false;
};
}

View File

@@ -0,0 +1,4 @@
{ ... }:
{
}

View File

@@ -0,0 +1,71 @@
#!/bin/bash
# replaceme START
declare -A cache_to_url
cache_to_url["foo"]="https://example.com/some-nix-cache"
declare -a caches_to_use=("foo")
declare nixCmd="foo"
# replaceme END
declare -a preArgs
declare -a passThruArgs
cache_name=""
function valid_cache_name() {
cache_name="$1"
if [[ $cache_name == -* ]]; then
echo "invalid cache name" >&2
exit 1
fi
}
while [[ -n $1 ]]; do
arg="$1"
shift
case "$arg" in
"--without-cache")
cache_name="$1"
shift
valid_cache_name "$cache_name"
caches_to_use=("${caches_to_use[@]/$cache_name/}")
;;
"--with-cache")
cache_name="$1"
shift
valid_cache_name "$cache_name"
caches_to_use+=("$cache_name")
;;
"--only-cache")
cache_name="$1"
shift
valid_cache_name "$cache_name"
caches_to_use=("$cache_name")
;;
"--on-trip")
if [[ $HOSTNAME == "triple-dezert" ]]; then
echo "Warn: skipping --on-trip: already on trip" >&2
else
passThruArgs+=("--builders" "ssh://trip x86_64-linux,aarch64-linux" "--max-jobs" "0" "--option" "builders-use-substitutes" "true")
fi
;;
"--")
passThruArgs+=("$arg" "$@")
break
;;
*)
passThruArgs+=("$arg")
;;
esac
done
declare -a substituters
for c in "${caches_to_use[@]}"; do
url="${cache_to_url["$c"]}"
substituters+=("$url")
done
substituters_together="${substituters[*]}"
preArgs+=("--option" "substituters" "$substituters_together")
exec "$nixCmd" "${preArgs[@]}" "${passThruArgs[@]}"

20
common/nix-on-droid.nix Normal file
View File

@@ -0,0 +1,20 @@
{
config,
lib,
vacuModuleType,
...
}:
let
inherit (lib) mkDefault;
in
lib.optionalAttrs (vacuModuleType == "nix-on-droid") {
nix.substituters = lib.mkForce config.vacu.nix.substituterUrls;
nix.trustedPublicKeys = lib.mkForce config.vacu.nix.trustedKeys;
vacu.shell.functionsDir = "${config.user.home}/.nix-profile/share/vacufuncs";
environment.etc.bashrc.text = config.vacu.shell.interactiveLines;
environment.etc.profile.text = config.vacu.shell.interactiveLines;
environment.etc."vacu/info.json".text = builtins.toJSON config.vacu.versionInfo;
vacu.hostName = mkDefault "nix-on-droid";
vacu.shortHostName = mkDefault "nod";
}

34
common/nix.nix Normal file
View File

@@ -0,0 +1,34 @@
{ lib, config, ... }:
let
inherit (lib) mkOption types;
caches = builtins.attrValues config.vacu.nix.caches;
enabledCaches = builtins.filter (c: c.enable) caches;
in
{
options = {
vacu.nix.caches = mkOption {
type = types.attrsOf (
types.submodule (
{ ... }:
{
options = {
url = mkOption { type = types.str; };
keys = mkOption {
type = types.listOf types.str;
default = [ ];
};
enable = mkOption {
default = true;
type = types.bool;
};
};
}
)
);
};
vacu.nix.substituterUrls = mkOption { readOnly = true; };
vacu.nix.trustedKeys = mkOption { readOnly = true; };
};
config.vacu.nix.substituterUrls = map (c: c.url) enabledCaches;
config.vacu.nix.trustedKeys = builtins.concatMap (c: c.keys) enabledCaches;
}

23
common/nixos-rebuild.nix Normal file
View File

@@ -0,0 +1,23 @@
{
pkgs,
config,
lib,
vacuModuleType,
...
}:
let
nixos-rebuild = pkgs.nixos-rebuild.override { nix = config.nix.package; };
in
lib.optionalAttrs (vacuModuleType == "nixos") {
system.build.nixos-rebuild = lib.mkForce (
pkgs.runCommandLocal "nixos-rebuild-wrapped"
{
nativeBuildInputs = [ pkgs.makeShellWrapper ];
meta.mainProgram = "nixos-rebuild";
}
''
mkdir -p "$out"/bin
makeShellWrapper ${lib.getExe nixos-rebuild} "$out"/bin/nixos-rebuild --add-flags "--use-remote-sudo --use-substitutes"
''
);
}

91
common/nixos.nix Normal file
View File

@@ -0,0 +1,91 @@
{
lib,
pkgs,
config,
vacuModuleType,
...
}:
lib.optionalAttrs (vacuModuleType == "nixos") {
imports = [ ../nixos-modules ];
options.vacu.underTest = lib.mkOption {
default = false;
type = lib.types.bool;
};
config = {
programs.mosh.enable = true;
console = {
keyMap = lib.mkDefault "us";
};
networking = lib.mkIf (config.vacu.hostName != null) { inherit (config.vacu) hostName; };
vacu.packages."xorg-xev" = {
enable = config.services.xserver.enable;
package = pkgs.xorg.xev;
};
programs.nix-ld.enable = true;
system.nixos.tags = [
"vacu${config.vacu.versionId}"
config.vacu.hostName
];
environment.etc."vacu/info.json".text = builtins.toJSON config.vacu.versionInfo;
environment.etc."chromium" = lib.mkIf config.vacu.isGui {
source = "/run/current-system/sw/etc/chromium";
};
i18n.defaultLocale = lib.mkDefault "en_US.UTF-8";
time.timeZone = "America/Los_Angeles";
users.users.shelvacu = lib.mkIf (!config.vacu.isContainer) {
openssh.authorizedKeys.keys = lib.attrValues config.vacu.ssh.authorizedKeys;
isNormalUser = true;
extraGroups = [ "wheel" ];
};
services.openssh = {
# require public key authentication for better security
settings.PasswordAuthentication = false;
settings.KbdInteractiveAuthentication = false;
settings.PermitRootLogin = "prohibit-password";
};
nix.settings.trusted-users = lib.mkIf (!config.vacu.isContainer) [ "shelvacu" ];
security.sudo.wheelNeedsPassword = lib.mkDefault false;
programs.screen = {
enable = true;
screenrc = ''
defscrollback 10000
termcapinfo xterm* ti@:te@
maptimeout 5
'';
};
programs.tmux = lib.mkIf (!config.vacu.isContainer) {
enable = true;
extraConfig = "setw mouse";
clock24 = true;
};
nix.settings = {
experimental-features = [
"nix-command"
"flakes"
];
substituters = lib.mkForce config.vacu.nix.substituterUrls;
extra-substituters = lib.mkForce [ ];
trusted-public-keys = lib.mkForce config.vacu.nix.trustedKeys;
extra-trusted-public-keys = lib.mkForce [ ];
};
security.pki.certificates = config.vacu.rootCAs;
# commands.nix
environment.pathsToLink = [
"/share/vacufuncs"
"/etc/chromium"
];
programs.bash.interactiveShellInit = config.vacu.shell.interactiveLines;
programs.bash.promptInit = lib.mkForce "";
systemd.services.nix-daemon.serviceConfig.Nice = "10";
};
}

31
common/nixvim.nix Normal file
View File

@@ -0,0 +1,31 @@
{
pkgs,
config,
inputs,
lib,
...
}:
let
inherit (lib) mkOption types;
nixvim-name = if config.vacu.nixvim.minimal then "nixvim-minimal" else "nixvim";
in
{
options = {
vacu.nixvim.minimal = mkOption {
type = types.bool;
default = config.vacu.isMinimal;
};
vacu.nixvimPkg = mkOption {
type = types.package;
readOnly = true;
};
};
config = {
vacu.nixvimPkg = inputs.self.packages.${pkgs.system}.${nixvim-name};
vacu.shell.functions = lib.mkIf (!config.vacu.isMinimal) {
nvim-plain = ''${pkgs.neovim}/bin/nvim "$@"'';
nvim-nixvim = ''${config.vacu.nixvimPkg}/bin/nvim "$@"'';
nvim = ''nvim-nixvim "$@"'';
};
};
}

263
common/packages.nix Normal file
View File

@@ -0,0 +1,263 @@
{
pkgs,
config,
lib,
vacuModuleType,
...
}:
let
enableFfmpeg = !config.vacu.isMinimal;
enableFfmpegFull = enableFfmpeg && config.vacu.isGui;
enableFfmpegHeadless = enableFfmpeg && !config.vacu.isGui;
winePkgs = pkgs.wineWow64Packages;
in
{
vacu.packages = lib.mkMerge [
{
borgbackup.enable = config.vacu.isDev && (pkgs.system != "aarch64-linux"); # borgbackup build is borken on aarch64
ffmpeg-vacu-full = {
enable = enableFfmpegFull;
package = pkgs.ffmpeg-full;
overrides.libbluray = config.vacu.packages.libbluray-all.finalPackage;
};
ffmpeg-vacu-headless = {
enable = enableFfmpegHeadless;
package = pkgs.ffmpeg-headless;
overrides.libbluray = config.vacu.packages.libbluray-all.finalPackage;
};
libbluray-all = {
package = pkgs.libbluray;
overrides = {
withJava = true;
withAACS = true;
withBDplus = true;
};
};
inkscape-all = {
package = pkgs.inkscape-with-extensions;
# null actually means everything https://github.com/NixOS/nixpkgs/commit/5efd65b2d94b0ac0cf155e013b6747fa22bc04c3
overrides.inkscapeExtensions = null;
};
p7zip-unfree = {
package = pkgs.p7zip;
overrides.enableUnfree = true;
};
wine.package = winePkgs.waylandFull;
wine-fonts.package = winePkgs.fonts;
vacu-units.package = config.vacu.units.finalPackage;
}
(lib.mkIf config.vacu.isGui
# just do all the matrix clients, surely one of them will work enough
''
cinny-desktop
element-call
element-desktop
fluffychat
fractal
gomuks
gomuks-web
# hydrogen has no -desktop version
iamb
kazv
matrix-commander
matrix-commander-rs
matrix-dl
mm
neosay
nheko
pinecone
# quaternion # build is borked
''
)
(lib.mkIf config.vacu.isGui
# pkgs for systems with a desktop GUI
''
acpi
anki
audacity
arduino-ide
bitwarden-desktop
brave
dino
filezilla
gamemode
gnome-maps
gparted
ghidra
gimp
haruna
iio-sensor-proxy
inkscape-all
jellyfin-media-player
josm
kdePackages.elisa
kdePackages.kdenlive
libreoffice-qt6-fresh
# librewolf
linphone
merkaartor
nextcloud-client
obsidian
openscad
openshot-qt
orca-slicer
OSCAR
prismlauncher
shotcut
signal-desktop
svp
# thunderbird #managed thru vacu.programs.thunderbird
tremotesf
ungoogled-chromium
vlc
wayland-utils
wev
wine
wine-fonts
wireshark
wl-clipboard
''
)
# pkgs for development-ish
(lib.mkIf config.vacu.isDev ''
cargo
clippy
gnumake
man-pages
patchelf
python3
ruby
rustc
rust-script
shellcheck
stdenv.cc
'')
(lib.mkIf (!config.vacu.isMinimal)
# big pkgs for non-minimal systems
''
aircrack-ng
android-tools
bitwarden-cli
dmidecode
fido2-manage
flac
hdparm
home-manager
imagemagickBig
kanidm_1_6
libsmi
man
mdadm
megatools
mercurial #aka hg
minicom
mkvtoolnix-cli
# neovim => see common/nixvim.nix
net-snmp
nix-index
nix-inspect
nix-search-cli
nix-tree
nmap
nvme-cli
proxmark3
rclone
ripgrep-all
smartmontools
tcpdump
termscp
tshark
yt-dlp
''
)
# pkgs included everywhere
''
_7zip
altcaps
ddrescue
dig
dnsutils
ethtool
file
# git is handled by common/git.nix
gnutls
gptfdisk
hostname
htop
inetutils
iperf3
iputils
jq
jujutsu
killall
libossp_uuid # provides `uuid` binary
linuxquota
lshw
lsof
mosh
nano
ncdu
netcat-openbsd
nixos-rebuild
openssl
# p7zip-unfree
pciutils
progress
psutils
pv
ripgrep
rsync
screen
# sed => gnused
shellvaculib
# sops => should use `nr vacu#sops` instead
sshfs
ssh-to-age
# tar => gnutar
tmux
tree
tzdata
# units => vacu-units
unzip
usbutils
vacu-units
vim
wget
zip
''
# packages that are in [`requiredPackages`][1] in nixos, but maybe not included in nix-on-droid
# [1]: https://github.com/NixOS/nixpkgs/blob/26d499fc9f1d567283d5d56fcf367edd815dba1d/nixos/modules/config/system-path.nix#L11
(lib.optionalAttrs (vacuModuleType == "nix-on-droid") ''
#stdenv.cc.libc shouldn't be needed right?
acl
attr
bashInteractive
bzip2
cpio
curl
diffutils
findutils
gawk
getent
getconf
gnugrep
gnupatch
gnused
gnutar
gzip
less
libcap
mkpasswd
ncurses
#netcat is replaced by netcat-openbsd
openssh
procps
su
time
util-linux
which
xz
zstd
'')
];
}

36
common/remapCapsLock.nix Normal file
View File

@@ -0,0 +1,36 @@
{
pkgs,
lib,
config,
vacuModuleType,
...
}:
let
inherit (lib) mkOption types;
in
lib.optionalAttrs (vacuModuleType == "nixos") {
options.vacu.enableCapsLockRemap = mkOption {
type = types.bool;
default = config.vacu.isGui;
defaultText = "{option}`vacu.isGui`";
};
config = lib.mkIf config.vacu.enableCapsLockRemap {
# https://discourse.nixos.org/t/best-way-to-remap-caps-lock-to-esc-with-wayland/39707/6
services.interception-tools =
let
itools = pkgs.interception-tools;
itools-caps = pkgs.interception-tools-plugins.caps2esc;
in
{
enable = true;
plugins = [ itools-caps ];
# requires explicit paths: https://github.com/NixOS/nixpkgs/issues/126681
udevmonConfig = pkgs.lib.mkDefault ''
- JOB: "${itools}/bin/intercept -g $DEVNODE | ${itools-caps}/bin/caps2esc -m 1 | ${itools}/bin/uinput -d $DEVNODE"
DEVICE:
EVENTS:
EV_KEY: [KEY_CAPSLOCK, KEY_ESC]
'';
};
};
}

View File

@@ -0,0 +1,29 @@
{
pkgs,
lib,
config,
vaculib,
...
}:
let
inherit (vaculib) script;
in
{
options.vacu.shell.containerAliases = lib.mkEnableOption "container aliases";
config = lib.mkIf config.vacu.shell.containerAliases {
vacu.packages = [
(script "ncrun" ''
svl_min_args $# 2
svl_auto_sudo
container="$1"
shift
exec ${lib.getExe pkgs.nixos-container} run "$container" -- "$@"
'')
(script "ncrl" ''
svl_exact_args $# 1
svl_auto_sudo
exec ${lib.getExe pkgs.nixos-container} root-login "$1"
'')
];
};
}

192
common/shell/default.nix Normal file
View File

@@ -0,0 +1,192 @@
{
config,
lib,
pkgs,
vaculib,
...
}:
let
inherit (lib) mkOption types;
cfg = config.vacu.shell;
writeShellFunction =
name: text:
pkgs.writeTextFile {
inherit name;
executable = false;
destination = "/share/vacufuncs/${name}";
text = ''
${text}
'';
checkPhase = ''
${pkgs.stdenv.shellDryRun} "$target"
'';
};
functionPackages = lib.mapAttrsToList writeShellFunction cfg.functions;
vacuInitFile = pkgs.writeText "vacu.shell.interactiveLines.sh" cfg.interactiveLines;
wrappedBashPkg = vaculib.makeWrapper {
original = pkgs.bash;
new = "vacuinit-bash";
prepend_flags = [
"--init-file"
vacuInitFile
];
};
wrappedBash = lib.getExe wrappedBashPkg;
in
{
imports = [
./not-aliases.nix
./ps1.nix
./container-aliases.nix
./vacuhistory.nix
./qcd.nix
];
options = {
vacu.shell.functionsDir = mkOption {
type = types.path;
default = "/run/current-system/sw/share/vacufuncs";
};
vacu.shell.interactiveLines = mkOption {
type = types.lines;
readOnly = true;
};
vacu.shell.wrappedBash = mkOption { readOnly = true; };
vacu.shell.idempotentShellLines = mkOption {
type = types.lines;
default = "";
};
vacu.shell.color = mkOption {
type = types.enum (builtins.attrNames vaculib.shellColors);
default = "white";
};
vacu.shell.functions = mkOption { type = types.attrsOf types.str; };
};
config.vacu = {
shell.interactiveLines = ''
if [[ $- == *i* ]]; then
SHELLVACULIB_COMPAT=1 source ${lib.escapeShellArg pkgs.shellvaculib.file}
if [[ -f ${cfg.functionsDir}/vacureload ]]; then
function __vacushell_load() { eval "$(<${cfg.functionsDir}/vacureload)"; }
__vacushell_load
unset __vacushell_load
fi
fi
'';
shell.wrappedBash = wrappedBash;
shell.idempotentShellLines = lib.mkBefore ''
PROMPT_COMMAND=()
PS0=""
'';
shell.functions = {
"vacureload" = ''
declare -gA vacuShellFunctionsLoaded
if ! [[ -f ${cfg.functionsDir}/vacureload ]]; then
echo "vacureload: I think that's my cue to leave (${cfg.functionsDir}/vacureload not found, assuming vacureload-less config has been loaded and unloading myself)" 1>&2
for funcname in "''${!vacuShellFunctionsLoaded[@]}"; do
unset -f $funcname
done
return
fi
for funcname in "''${!vacuShellFunctionsLoaded[@]}"; do
if ! [[ -f ${cfg.functionsDir}/$funcname ]]; then
unset -f $funcname
fi
done
for fullPath in ${cfg.functionsDir}/*; do
local funcname="$(basename "$fullPath")"
local followedPath="$(readlink -f "$fullPath")"
if [[ "''${vacuShellFunctionsLoaded[$funcname]-}" != "$followedPath" ]]; then
unset -f $funcname
eval "function ''${funcname}() { if [[ -f '$fullPath' ]]; then eval "'"$'"(<'$fullPath')"'"'"; else echo '$funcname is no longer there, kindly removing myself.' 1>&2; unset $funcname; return 1; fi }"
vacuShellFunctionsLoaded[$funcname]=$followedPath
fi
unset followedPath
unset funcname
done
__run_idempotents
# your idempotent shell lines are idempotent, right?
__run_idempotents
'';
"__run_idempotents" = cfg.idempotentShellLines;
vhich = ''
if [[ $# != 1 ]]; then
echo "expected exactly one arg" 1>&2
return 1
fi
declare query="$1"
declare quote='`'"$query'"
declare kind="$(type -t -- "$query")"
if [[ "$kind" == "" ]]; then
echo "could not find any command $quote" 1>&2
return 1
fi
echo "$quote is a $kind"
case "$kind" in
"alias")
alias "$query"
return 0
;;
"keyword")
echo "See https://www.gnu.org/software/bash/manual/html_node/Reserved-Word-Index.html"
return 0
;;
"function")
if [[ -v vacuShellFunctionsLoaded["$query"] ]]; then
echo "$quote is a vacufunc"
path="''${vacuShellFunctionsLoaded[$query]}"
# continue to below
else
declare -f "$query"
return 0
fi
;;
"builtin")
echo "Docs: https://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html#index-$query"
return 0
;;
"file")
path="$(type -p "$query")"
# continue to below
;;
*)
echo 'ERR: unexpected return from `type -t`: '"$kind" 1>&2
return 1
esac
echo "path:"
while [[ -L "$path" ]]; do
declare dest="$(readlink -- "$path")"
echo " $path is a symlink to $dest"
if [[ "$dest" != /* ]]; then
dest="$(dirname -- "$path")/$dest"
fi
path="$dest"
done
echo " $path"
if ! [[ -e "$path" ]]; then
echo "$path does not exist!"
return 1
fi
if ! [[ -x "$path" ]]; then
echo "$path is not executable!"
return 1
fi
canon="$(readlink -f -- "$path")"
if [[ "$path" != "$canon" ]]; then
echo " $path canonicalizes to $canon"
path="$canon"
fi
magic_parse="$(file --brief --mime -- "$path")"
echo "magic: $magic_parse"
case "$magic_parse" in
'text/x-shellscript;'* | 'text/plain;'*)
echo "initial contents:"
echo
head --lines=10 "$path" | head --bytes=2000
echo "..."
;;
esac
'';
};
packages = functionPackages;
};
}

View File

@@ -0,0 +1,226 @@
# These are the things that might in a simpler time go in ~/.bashrc as aliases. But they're not aliases, cuz aliases are bad
{
pkgs,
lib,
config,
vaculib,
...
}:
let
inherit (vaculib) script;
simple =
name: args:
let
binContents = ''
#!${lib.getExe pkgs.bash}
exec ${lib.escapeShellArgs args} "$@"'';
funcContents = ''
declare aliasName=${lib.escapeShellArg name}
declare -a replacementWords=(${lib.escapeShellArgs args})
declare replacementStr
declare oldIFS="$IFS"
IFS=' '
replacementStr="''${replacementWords[*]}"
IFS="$oldIFS"
COMP_LINE="''${COMP_LINE/#$aliasName/$replacementStr}"
COMP_POINT=$(( COMP_POINT + ''${#replacementStr} - ''${#aliasName} ))
COMP_CWORD=$(( COMP_CWORD + ''${#replacementWords[@]} - 1 ))
COMP_WORDS=("''${replacementWords[@]}" "''${COMP_WORDS[@]:1}")
_comp_command_offset 0
'';
in
pkgs.runCommandLocal "vacu-notalias-simple-${name}"
{
pname = name;
meta.mainProgram = name;
}
''
mkdir -p "$out"/bin
printf '%s' ${lib.escapeShellArg binContents} > "$out"/bin/${name}
chmod a+x "$out"/bin/${name}
out_base="$(basename -- "$out")"
LC_ALL=C
completion_function_name="_completion_''${out_base//[^a-zA-Z0-9_]/_}"
completion_file="$out"/share/bash-completion/completions/${name}
mkdir -p "$(dirname -- "$completion_file")"
printf '%s() {\n%s\n}\n' "$completion_function_name" ${lib.escapeShellArg funcContents} > "$completion_file"
printf 'complete -F %s %s\n' "$completion_function_name" ${lib.escapeShellArg name} >> "$completion_file"
'';
ms_text = with_sudo: ''
svl_minmax_args $# 1 2
host="$1"
session_name="''${2:-main}"
set -x
mosh -- "$host" ${lib.optionalString with_sudo "sudo"} screen -RdS "$session_name"
'';
systemctl = "${pkgs.systemd}/bin/systemctl";
journalctl = "${pkgs.systemd}/bin/journalctl";
in
{
imports = [ { vacu.packages.copy-altcaps.enable = config.vacu.isGui; } ];
vacu.packages = [
(script "ms" (ms_text false))
(script "mss" (ms_text true))
(script "msl" ''
svl_exact_args $# 1
host="$1"
echo 'echo "user:"; screen -ls; echo; echo "root:"; sudo screen -ls' | ssh -T "$host"
'')
(script "rmln" ''
svl_min_args $# 1
for arg in "$@"; do
if [[ "$arg" != -* ]] && [[ ! -L "$arg" ]]; then
svl_die "$arg is not a symlink"
fi
done
rm "$@"
'')
(script "copy-altcaps" ''
result="$(altcaps "$@")"
printf '%s' "$result" | wl-copy
echo "Copied to clipboard: $result"
'')
(script "nr" ''
# nix run nixpkgs#<thing> -- <args>
svl_min_args $# 1
installable="$1"
shift
if [[ "$installable" != *'#'* ]]; then
installable="nixpkgs#$installable"
fi
nix run "$installable" -- "$@"
'')
(script "nb" ''
# nix build nixpkgs#<thing> <args>
svl_min_args $# 1
installable="$1"
shift
if [[ "$installable" != *'#'* ]]; then
installable="nixpkgs#$installable"
fi
nix build "$installable" "$@"
'')
(script "ns" ''
# nix shell nixpkgs#<thing>
svl_min_args $# 1
new_args=( )
for arg in "$@"; do
if [[ "$arg" != *'#'* ]] && [[ "$arg" != -* ]]; then
arg="nixpkgs#$arg"
fi
new_args+=("$arg")
done
nix shell "''${new_args[@]}"
'')
(script "nixview" ''
svl_min_args $# 1
view_cmd="$1"
shift
d="$(mktemp -d --suffix=vacu-nixview)"
l="$d/out"
nix build --out-link "$l" "$@"
"$view_cmd" "$l"
rm -r "$d"
'')
(simple "nixcat" [
"nixview"
"cat"
])
(simple "nixless" [
"nixview"
"less"
])
(simple "sc" [ systemctl ])
(simple "scs" [
systemctl
"status"
"--lines=20"
"--full"
])
(simple "scc" [
systemctl
"cat"
])
(simple "scr" [
systemctl
"restart"
])
(simple "jc" [
journalctl
"--pager-end"
])
(simple "jcu" [
journalctl
"--pager-end"
"-u"
])
(simple "gs" [
"git"
"status"
])
(script "list-auto-roots" ''
auto_roots="/nix/var/nix/gcroots/auto"
svl_exact_args $# 0
echo "List of auto-added nix gcroots, excluding system profiles:"
echo
for fn in "$auto_roots/"*; do
if ! [[ -L "$fn" ]]; then
die "fn is not a symlink!?: $fn"
fi
pointed="$(readlink -v -- "$fn")"
if ! [[ -e "$pointed" ]]; then
continue
fi
if [[ "$pointed" == /nix/var/nix/profiles/system-* ]]; then
continue
fi
printf '%s\n' "$pointed"
done
'')
];
vacu.shell.functions = {
nd = ''
svl_min_args $# 1
declare -a args=("$@")
lastarg="''${args[-1]}"
if [[ "$lastarg" == "-"* ]]; then
echo "nd: last argument must be the directory" 1>&2
return 1
fi
for arg in "''${args[@]::''${#args[@]}-1}"; do
if [[ "$arg" != "-"* ]]; then
echo "nd: last argument must be the directory" 1>&2
return 1
fi
done
mkdir "''${args[@]}" && cd "''${args[-1]}"
'';
nt = ''pushd "$(mktemp -d "$@")"'';
};
vacu.textChecks."vacu-shell-functions-nd" = ''
source ${lib.escapeShellArg pkgs.shellvaculib.file}
function nd() {
${config.vacu.shell.functions.nd}
}
start=/tmp/test-place
mkdir -p $start
cd $start
nd a
[[ "$PWD" == "$start/a" ]]
cd $start
nd -p b/c
[[ "$PWD" == "$start/b/c" ]]
'';
vacu.textChecks."vacu-shell-functions-nt" = ''
source ${lib.escapeShellArg pkgs.shellvaculib.file}
function nt() {
${config.vacu.shell.functions.nt}
}
start=$PWD
nt
[[ "$PWD" != "$start" ]]
popd
[[ "$PWD" == "$start" ]]
'';
}

57
common/shell/ps1.nix Normal file
View File

@@ -0,0 +1,57 @@
{
config,
lib,
vaculib,
vacuModuleType,
...
}:
let
cfg = config.vacu.shell;
# https://en.wikipedia.org/wiki/ANSI_escape_code#Colors
colors = vaculib.shellColors;
# TODO: reset_without_clear doesn't fully work
# thanks colin https://git.uninsane.org/colin/nix-files/src/commit/7f5b2628016c8ca1beec417766157c7676a9c5e5/hosts/common/programs/zsh/starship.nix#L24
# https://man.archlinux.org/man/bash.1#PROMPTING
# \[ and \] begins and ends "a sequence of non-printing characters"
set_color = colornum: ''\[\e[1;${toString colornum}m\]'';
set_inverted_color = colornum: ''\[\e[1;37;${toString (colornum + 10)}m\]'';
reset_color = ''\[\e[0m\]'';
colornum = colors.${cfg.color};
root_text = root: lib.optionalString root "ROOT@";
final = root: if root then (set_inverted_color colors.red) + "!!" else "$";
hostName = if vacuModuleType == "plain" then ''\h'' else config.vacu.shortHostName;
default_ps1 =
root:
""
+ ''\n''
# + ''\[${reset_without_clear}\]''
+ (set_color colornum)
+ "${root_text root}${hostName}:\\w"
+ " "
+ ''$(vacu_shell_show_return_code)''
+ ''\n''
+ (set_color colornum)
+ (final root)
+ reset_color
+ " ";
in
{
vacu.shell.idempotentShellLines = ''
function vacu_shell_show_return_code() {
local ret=$?
local color=${toString colors.green}
if [[ "$ret" != 0 ]]; then
color=${toString colors.red}
fi
printf '\e[1;%dm' $color
printf "%d" "$ret"
return "$ret"
}
if [[ $EUID == 0 ]]; then
PS1=${lib.escapeShellArg (default_ps1 true)}
else
PS1=${lib.escapeShellArg (default_ps1 false)}
fi
'';
}

50
common/shell/qcd.nix Normal file
View File

@@ -0,0 +1,50 @@
{
lib,
config,
vacuModuleType,
vaculib,
...
}:
let
inherit (lib) mkOption types;
home =
if vacuModuleType == "nix-on-droid" then
"/data/data/com.termux.nix/files/home"
else
"/home/shelvacu";
in
{
options.vacu.qcd = mkOption {
default = { };
type = types.attrsOf types.path;
};
config.vacu.shell.functions.qcd = ''
svl_exact_args $# 1
declare the_arg="$1"
declare base="''${the_arg%%/*}"
declare rest="''${the_arg:''${#base}}"
declare path
if false; then :
${lib.pipe config.vacu.qcd [
(lib.mapAttrsToList (
alias: path:
''elif [[ $base == ${lib.escapeShellArg alias} ]]; then path=${lib.escapeShellArg path}''
))
(lib.concatStringsSep "\n")
]}
fi
if ! [[ -v path ]]; then
svl_eprintln "unrecognized alias $base"
return 1
fi
cd -- "$path$rest"
'';
config.vacu.qcd = {
ns = "${home}/dev/nix-stuff";
np = "${home}/dev/nixpkgs";
dev = "${home}/dev";
};
}

11
common/shell/tweaks.nix Normal file
View File

@@ -0,0 +1,11 @@
{ ... }:
{
config.vacu.shell.idempotentShellLines = ''
if [[ $- == *i* ]]; then
# don't overwrite files by default when using > redirection
set -o noclobber
# disable ! history expansion
set +o histexpand
fi
'';
}

View File

@@ -0,0 +1,15 @@
{ pkgs, ... }:
{
config.vacu = {
shell.idempotentShellLines = ''
if [[ -z "''${VACU_HISTORY_SESSION_ID-}" ]]; then
VACU_HISTORY_SESSION_ID="$(${pkgs.libossp_uuid}/bin/uuid)"
fi
VACU_HISTORY_DB_PATH="$HOME/vacu-shell-history.sqlite"
function vacu_history_record() {
LC_ALL=C HISTTIMEFORMAT='%S|%M|%H|%d|%m|%Y|%w|%j|%z|' history 1 | VACU_HISTORY_SESSION_ID="$VACU_HISTORY_SESSION_ID" VACU_HISTORY_DB_PATH="$VACU_HISTORY_DB_PATH" ${pkgs.vacu-history}/bin/vacu-history
}
PS0='$(vacu_history_record >/dev/null)'"$PS0"
'';
};
}

82
common/sops.nix Normal file
View File

@@ -0,0 +1,82 @@
{
lib,
pkgs,
config,
vaculib,
...
}:
let
ssh-to-age = lib.getExe pkgs.ssh-to-age;
sshToAge =
sshPubText:
vaculib.outputOf {
name = "age-from-ssh.txt";
cmd = ''printf '%s' ${lib.escapeShellArg sshPubText} | ${ssh-to-age} > "$out"'';
};
userKeys = lib.attrValues config.vacu.ssh.authorizedKeys;
userKeysAge = map sshToAge userKeys;
agesOf = hostname: map sshToAge config.vacu.hosts.${hostname}.sshKeys;
singleGroup = keys: [ { age = keys; } ];
testAgeSecret = "AGE-SECRET-KEY-1QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQPQQ94XCHF";
testAgePublic = vaculib.outputOf {
name = "test-age-public-key.txt";
cmd = ''printf '%s' ${lib.escapeShellArg testAgeSecret} | ${pkgs.age}/bin/age-keygen -y > "$out"'';
};
sopsConfig = {
creation_rules = [
{
path_regex = "/secrets/misc/[^/]+$";
key_groups = singleGroup userKeysAge;
}
{
path_regex = "/secrets/hosts/liam\\.yaml$";
key_groups = singleGroup (userKeysAge ++ agesOf "liam");
}
{
path_regex = "/secrets/hosts/triple-dezert\\.yaml$";
key_groups = singleGroup (userKeysAge ++ agesOf "triple-dezert");
}
{
path_regex = "/secrets/hosts/prophecy\\.yaml$";
key_groups = singleGroup (userKeysAge ++ agesOf "prophecy");
}
{
path_regex = "/secrets/hosts/solis\\.yaml$";
key_groups = singleGroup (userKeysAge ++ agesOf "solis");
}
{
path_regex = "/secrets/radicle-private\\.key$";
key_groups = singleGroup (userKeysAge ++ agesOf "fw");
}
{
path_regex = "/secrets/garage-rpc\\.key$";
key_groups = singleGroup (userKeysAge ++ agesOf "triple-dezert" ++ agesOf "prophecy" ++ agesOf "solis");
}
{
path_regex = "/tests/triple-dezert/test_secrets/";
key_groups = singleGroup [ testAgePublic ];
}
];
};
sopsConfigFile = pkgs.writers.writeYAML "sops.yaml" sopsConfig;
wrappedSops = vaculib.makeWrapper {
original = lib.getExe pkgs.sops;
new = "vacu-nix-stuff-sops";
add_flags = [
"--config"
sopsConfigFile
];
run = lib.singleton ''
set -e
age_keys=("${testAgeSecret}" "$(cat $HOME/.ssh/id_ed25519 | ${lib.getExe pkgs.ssh-to-age} -private-key)")
export SOPS_AGE_KEY
printf -v SOPS_AGE_KEY "%s\n" "''${age_keys[@]}"
# declare -p SOPS_AGE_KEY
'';
};
in
{
options.vacu.sopsConfigFile = vaculib.mkOutOption sopsConfigFile;
options.vacu.wrappedSops = vaculib.mkOutOption wrappedSops;
}

26
common/sourceTree.nix Normal file
View File

@@ -0,0 +1,26 @@
{
inputs,
pkgs,
lib,
config,
vacuModuleType,
...
}:
let
inherit (lib) mkOption types;
in
{
options.vacu.sourceTree = mkOption {
readOnly = true;
type = types.package;
};
config =
{
vacu.sourceTree = pkgs.linkFarm "simple-inputs-tree" inputs;
}
// (lib.optionalAttrs (vacuModuleType == "nixos" || vacuModuleType == "nix-on-droid") {
environment.etc = lib.optionalAttrs (!config.vacu.isMinimal) {
"vacu/sources".source = "${config.vacu.sourceTree}";
};
});
}

89
common/staticNames.nix Normal file
View File

@@ -0,0 +1,89 @@
{
lib,
vacuModuleType,
config,
...
}:
let
inherit (lib) mkOption types;
domainPartRegex = "[[:alnum:]]([[:alnum:]-]{0,61}[[:alnum:]])?";
domainRegex = ''^${domainPartRegex}(\.${domainPartRegex})*$'';
domainType = types.strMatching domainRegex;
hostsLines = lib.pipe config.vacu.staticNames [
(lib.mapAttrsToList (k: v: [ k ] ++ v))
(lib.filter (v: (builtins.length v) > 1))
(map (lib.concatStringsSep " "))
(lib.concatStringsSep "\n")
];
ip4Seg = ''[0-9]{1,3}'';
ip4Regex = lib.concatStringsSep ''\.'' [
ip4Seg
ip4Seg
ip4Seg
ip4Seg
];
ip6Regex = ''[0-9a-fA-F:]+'';
ipRegex = ''(${ip4Regex})|(${ip6Regex})'';
in
{
imports =
[
{
vacu.assertions = map (ip: {
assertion = (builtins.match ipRegex ip) != null;
message = ''config.vacu.staticNames: attr name "${ip}" is invalid'';
}) (builtins.attrNames config.vacu.staticNames);
}
]
++ lib.optional (vacuModuleType == "nixos") { networking.hosts = config.vacu.staticNames; }
++ lib.optional (vacuModuleType == "nix-on-droid") {
environment.etc.hosts.text = ''
127.0.0.1 localhost
::1 localhost
${hostsLines}
'';
};
options.vacu.staticNames = mkOption {
type = types.attrsOf (types.listOf domainType);
default = { };
};
config.vacu.staticNames = {
"205.201.63.13" = [
"prop"
"prophecy"
"prophecy.shelvacu-static"
];
"10.78.79.22" = [ "prophecy.t2d.lan.shelvacu-static" ];
"178.128.79.152" = [
"liam"
"liam.shelvacu-static"
];
"172.83.159.53" = [
"trip"
"triple-dezert"
"triple-dezert.shelvacu-static"
];
"10.78.79.237" = [ "triple-dezert.t2d.lan.shelvacu-static" ];
"205.201.63.12" = [
"servo"
"uninsane-servo.shelvacu-static"
];
"10.78.79.1" = [
"vnopn"
"vnopn.shelvacu-static"
"vnopn.t2d.lan.shelvacu-static"
];
"10.78.79.11" = [
"mmm"
"mmm.shelvacu-static"
"mmm.t2d.lan.shelvacu-static"
];
"10.78.79.69" = [
"oeto"
"oeto.shelvacu-static"
"oeto.t2d.lan.shelvacu-static"
];
};
}

100
common/thunderbird.nix Normal file
View File

@@ -0,0 +1,100 @@
{
lib,
config,
vacuModuleType,
vaculib,
...
}:
let
inherit (lib) mkOption types;
vacustoreCalUUID = "dd9a924e-57d9-4ea1-b7ec-22d1f0ff3d51";
vacustoreCalConfig = {
"cache.enabled" = true;
calendar-main-in-composite = true;
color = "#33d17a";
disabled = false;
"imip.identity.key" = "id1"; #what is this
name = "Personal";
readOnly = false;
type = "caldav";
uri = "https://vacu.store/remote.php/dav/calendars/shelvacu/personal/";
username = "shelvacu";
};
in
{
options.vacu.programs.thunderbird = {
enable = mkOption {
default = false;
type = types.bool;
};
};
config = lib.optionalAttrs (vacuModuleType == "nixos") (lib.mkIf config.vacu.programs.thunderbird.enable {
programs.thunderbird = {
enable = true;
policies = {
DisableTelemetry = true;
DNSOverHTTPS.Enabled = false;
ExtensionSettings = {
#*cloud - FileLink for Nextcloud and ownCloud
"cloud@johannes-endres.de".installation_mode = "normal_installed";
#NTFNTF: Notify on This Folder Not That Folder
"ntfntf@dan-sullivan.co.uk".installation_mode = "normal_installed";
};
SSLVersionMin = "tls1.3";
SearchEngines.Remove = [
"Amazon.com"
"Bing"
"DuckDuckGo"
"Google"
"Wikipedia (en)"
];
};
preferences = {
"accessibility.typeaheadfind.flashBar" = 0; #what is this
"app.donation.eoy.version.viewed" = -1; #dunno if this actually works
"browser.search.region" = "US";
"calendar.alarms.playsound" = false;
"calendar.alarms.show" = false;
"calendar.ui.version" = 3;
"intl.date_time.pattern_override.date_full" = "MMMM d, yyyy G z";
"intl.date_time.pattern_override.date_short" = "yyyy-MM-dd";
"intl.date_time.pattern_override.time_medium" = "HH:mm:ss z";
"intl.date_time.pattern_override.time_short" = "HH:mm";
# "ldap_2.servers.Contacts.carddav.url" = "https://vacu.store/remote.php/dav/addressbooks/users/shelvacu/contacts/";
# "ldap_2.servers.Contacts.carddav.username" = "shelvacu";
# "ldap_2.servers.Contacts.description" = "vacu.store Contacts";
# "ldap_2.servers.Contacts.dirType" = 102; #no idea what this does
"mail.account.account1.identities" = "id1,id2,id3";
"mail.account.account1.server" = "server1";
"mail.compose.other.header" = "X-Shelvacu-Custom-Header";
"mail.compose.warned_about_customize_from" = true;
"mail.identity.id1.fullName" = "Shelvacu";
"mail.identity.id1.useremail" = "shelvacu@shelvacu.com";
"mail.identity.id1.catchAll" = true;
"mail.server.server1.hostname" = "imap.shelvacu.com";
"mail.server.server1.login_at_startup" = true;
"mail.server.server1.name" = "shelvacu@shelvacu.com";
"mail.server.server1.port" = 993;
"mail.server.server1.type" = "imap";
"mail.server.server1.socketType" = 3; #TLS (as opposed to plaintext or STARTTLS)
"mail.server.server1.userName" = "shelvacu";
"mail.shell.checkDefaultClient" = false;
"mail.showCondensedAddresses" = false;
"mail.smtp.defaultserver" = "smtp1";
"mail.smtpserver.smtp1.authMethod" = 3;
"mail.smtpserver.smtp1.hostname" = "smtp.shelvacu.com";
"mail.smtpserver.smtp1.port" = 465;
"mail.smtpserver.smtp1.try_ssl" = 3;
"mail.smtpserver.smtp1.type" = "smtp";
"mail.smtpserver.smtp1.username" = "shelvacu";
"mail.startup.enabledMailCheckOnce" = true;
"mail.threadpane.listview" = 1;
"mailnews.customHeaders" = "X-Vacu-Action";
"mailnews.default_sort_type" = 27;
"mailnews.mark_message_read.auto" = false;
"mailnews.start_page.enabled" = false;
# "searchintegration.enable" = false;
} // vaculib.mapAttrNames (n: "calendar.registry.${vacustoreCalUUID}.${n}") vacustoreCalConfig;
};
});
}

35
common/units-config.nix Normal file
View File

@@ -0,0 +1,35 @@
{
vacu.units.extraUnits = {
b = "bit";
B = "byte";
kibi- = "1024";
Ki- = "kibi";
mebi- = "1024 kibi";
Mi- = "mebi";
gibi- = "1024 mebi";
Gi- = "gibi";
tebi- = "1024 gibi";
Ti- = "tebi";
pebi- = "1024 tebi";
Pi- = "pebi";
baud = "bit/s";
kbps = "kilobit/s";
kibps = "kibibit/s";
mbps = "megabit/s";
mibps = "mebibit/s";
gbps = "gigabit/s";
gibps = "gibibit/s";
tbps = "terabit/s";
tibps = "tebibit/s";
pbps = "petabit/s";
pibps = "pebibit/s";
month = "year/12";
mo = "month";
usd = "USD";
dollar = "USD";
cent = "0.01 USD";
"$" = "USD";
BTC = "bitcoin";
};
}

127
common/units-impl.nix Normal file
View File

@@ -0,0 +1,127 @@
{
config,
lib,
pkgs,
vaculib,
...
}:
let
inherit (lib) mkOption types;
unitNameRegex =
let
# Unit names cannot begin or end with an underscore (_), a comma (,) or a decimal point (.). Names must not contain any of the operator characters +, -, *, /, |, ^, ;, ~, the comment character #, or parentheses. To facilitate copying and pasting from documents, several typographical characters are converted to operators: the figure dash (U+2012), minus (-; U+2212), and en dash (; U+2013) are converted to the operator -; the multiplication sign (×; U+00D7), N-ary times operator (U+2A09), dot operator (‘⋅’; U+22C5), and middle dot (‘·’; U+00B7) are converted to the operator *; the division sign (‘÷’; U+00F7) is converted to the operator /; and the fraction slash (U+2044) is converted to the operator |; accordingly, none of these characters can appear in unit names.
disallowedAnywhere =
"+*/|^;~#()" + (builtins.fromJSON ''"\u2012\u2212\u2013\u00d7\u2a09\u22c5\u00b7\u00f7\u2044"'');
disallowedMiddle = "-" + disallowedAnywhere;
disallowedAtEnd = "23456789_,." + disallowedAnywhere;
disallowedAtBegin = "-01" + disallowedAtEnd;
anyExcept = chars: "[^${lib.escapeRegex chars}]";
singleChar = anyExcept disallowedAtBegin;
multiChar = "${anyExcept disallowedAtBegin}${anyExcept disallowedMiddle}*${anyExcept disallowedAtEnd}";
numberSuffix = regex: "${regex}_[0-9\\.,]+";
fullRegex = "${singleChar}|${multiChar}|${numberSuffix singleChar}|${numberSuffix multiChar}";
in
fullRegex;
unitsAttrsType = types.addCheck (types.attrsOf types.str) (
attrs: builtins.all (name: (builtins.match unitNameRegex name) != null) (builtins.attrNames attrs)
);
unitsDir = pkgs.stdenvNoCC.mkDerivation {
name = "vacu-units-files";
src = pkgs.units.src;
phases = [
"unpackPhase"
"installPhase"
];
installPhase = ''
mkdir -p "$out"
cp {definitions,elements}.units "$out"
ln -s ${../units/currency.units} "$out"/currency.units
ln -s ${../units/cpi.units} "$out"/cpi.units
printf '%s' ${lib.escapeShellArg config.vacu.units.lines} > "$out"/vacu.units
'';
};
in
{
options.vacu.units = {
originalPackage = mkOption {
type = types.package;
default = pkgs.units.override { enableCurrenciesUpdater = false; };
defaultText = "pkgs.units.override { ... }";
};
finalPackage = mkOption {
type = types.package;
readOnly = true;
};
check = mkOption {
type = types.package;
readOnly = true;
};
generatedConfigDir = mkOption {
readOnly = true;
type = types.package;
};
generatedConfigFile = mkOption {
readOnly = true;
type = types.pathInStore;
};
lines = mkOption {
default = "";
type = types.lines;
};
extraUnits = mkOption {
type = unitsAttrsType;
default = { };
};
};
config = lib.mkMerge [
{
vacu.units = {
finalPackage = vaculib.makeWrapper {
original = config.vacu.units.originalPackage;
new = "units";
prepend_flags = [
"--file"
config.vacu.units.generatedConfigFile
];
};
generatedConfigDir = unitsDir;
generatedConfigFile = "${unitsDir}/vacu.units";
lines = lib.mkOrder 750 ''
# default units file, includes elements.units, currency.units, cpi.units
!include definitions.units
'';
};
vacu.textChecks.units-config = ''
# `units --check` returns success (exit code 0) regardless of success >:(
# example output:
# $ result/bin/units --check
# Currency exchange rates from exchangerate-api.com (USD base) on 2024-11-14
# Consumer price index data from US BLS, 2024-02-18
# 7247 units, 125 prefixes, 134 nonlinear units
#
output="$(${lib.getExe config.vacu.units.finalPackage} --check)"
printf '%s' "$output"
filteredLines="$(printf '%s' "$output" \
| grep -v '^\s*$' \
| grep -v 'Currency exchange rates from' \
| grep -v 'Consumer price index data from' \
| grep -vE '[0-9]+ units, [0-9]+ prefixes, [0-9]+ nonlinear units' || true
)"
if [[ -n "$filteredLines" ]]; then
exit 1
fi
touch "$out"
'';
}
{
vacu.units.lines = lib.concatStringsSep "\n" (
lib.mapAttrsToList (name: value: "+${name} ${value}") config.vacu.units.extraUnits
);
}
];
}

View File

@@ -0,0 +1,63 @@
{
pkgs,
lib,
config,
...
}:
let
inherit (lib) mkOption mkEnableOption types;
cfg = config.vacu.verifySystem;
in
{
imports = [ ./nixos.nix ];
options.vacu.verifySystem = {
enable = (mkEnableOption "verify system is what is expected") // {
default = false;
};
verifiers = mkOption {
default = { };
type = types.attrsOf (
types.submodule (
{ name, config, ... }:
{
options = {
enable = mkEnableOption "Enable system ident check ${name}";
name = mkOption {
type = types.str;
default = name;
};
script = mkOption {
type = types.lines;
default = "## system ident check ${config.name}";
defaultText = lib.literalText ''## system ident check ${name}'';
};
};
}
)
);
};
verifyAllScript =
let
verifiers = (builtins.attrValues cfg.verifiers);
enabled = builtins.filter (s: s.enable) verifiers;
files = map (s: pkgs.writeText "vacu-verify-system-${s.name}.sh" s.script) enabled;
script = ''
## vacu verify-system
for f in ${lib.concatStringsSep " " files}; do
echo "verifying system with $f"
if ! source $f; then
echo "ERR: $f failed" >&2
return 1
fi
done
'';
scriptFile = pkgs.writeText "vacu-verify-system-all.sh" script;
in
mkOption {
readOnly = true;
default = scriptFile;
defaultText = "vacu-verify-system-all.sh package";
};
};
}

View File

@@ -0,0 +1,69 @@
{
lib,
config,
pkgs,
vacuModuleType,
...
}:
let
inherit (lib) mkOption types;
in
lib.optionalAttrs (vacuModuleType == "nixos") {
options.vacu.verifySystem.expectedMac = mkOption {
# lowercase only
type = types.nullOr (types.strMatching "[a-f0-9]{2}(:[a-f0-9]{2}){5}");
default = null;
};
config = lib.mkIf config.vacu.verifySystem.enable {
# system.activationScripts."00-verify-system" = {
# text = "if ! source ${config.vacu.verifySystem.verifyAllScript}; then exit $?; fi";
# supportsDryActivation = true;
# };
system.extraSystemBuilderCmds = ''
mv "$out"/bin/switch-to-configuration "$out"/bin/.switch-to-configuration-unverified
echo '#!${pkgs.bash}/bin/bash
(
PATH="${pkgs.coreutils}/bin"
if ! source ${config.vacu.verifySystem.verifyAllScript}; then
exit $?
fi
)
' > "$out"/bin/switch-to-configuration
echo "exec $out/bin/.switch-to-configuration-unverified" '"$@"' >> "$out"/bin/switch-to-configuration
${pkgs.coreutils}/bin/chmod a+x "$out"/bin/switch-to-configuration
'';
vacu.verifySystem.verifiers = {
hostname = {
enable = lib.mkDefault config.vacu.verifySystem.expectedMac == null;
script = ''
expected=${lib.escapeShellArg config.networking.hostName}
actual="$(</proc/sys/kernel/hostname)"
if [[ "$expected" != "$actual" ]]; then
echo "ERR: unexpected hostname; Trying to deploy to $expected but this is $actual" >&2
return 1
fi
'';
};
expectedMac = {
enable = config.vacu.verifySystem.expectedMac != null;
script = ''
declare expected=${lib.escapeShellArg (lib.toUpper config.vacu.verifySystem.expectedMac)}
declare -a actualMacs
mapfile -d"" -t actualMacs < <(${pkgs.iproute2}/bin/ip -j link | ${pkgs.jq}/bin/jq 'map([.permaddr, .address] | map(strings | ascii_upcase)) | flatten[]' --raw-output0)
for ifMac in "''${actualMacs[@]}"; do
if [[ "$ifMac" == "$expected" ]]; then
# all is well
return 0
fi
done
echo "ERR: Interface MAC address $expected not present, this may not be the system you intend to deploy to." >&2
echo " Found MAC addresses: ''${actualMacs[*]}" >&2
return 1
'';
};
};
};
}

View File

@@ -1,6 +0,0 @@
{ ... }: {
hardware.bluetooth.enable = true;
hardware.bluetooth.powerOnBoot = true;
services.blueman.enable = true;
}

View File

@@ -1,76 +0,0 @@
{ config, pkgs, lib, jovian, inputs, ... }:
{
imports = [
inputs.jovian.nixosModules.jovian
inputs.disko.nixosModules.default
inputs.homeManager.nixosModules.default
./hardware.nix
./partitioning.nix
./home.nix
./bluetooth.nix
./padtype.nix
../common-nixos-config.nix
];
system.nixos.tags = [ "host-${config.networking.hostName}" ];
boot.loader.systemd-boot.enable = false;
boot.loader.efi.efiSysMountPoint = "/boot/EFI";
boot.loader.grub.efiSupport = true;
boot.loader.grub.device = "nodev";
boot.loader.efi.canTouchEfiVariables = false;
boot.loader.grub.efiInstallAsRemovable = true;
boot.binfmt.emulatedSystems = [ "aarch64-linux" ];
networking.hostName = "compute-deck";
networking.hostId = "e595d9b0";
boot.supportedFilesystems = [ "zfs" ];
boot.zfs.forceImportRoot = false;
system.stateVersion = "23.11";
jovian.devices.steamdeck.enable = true;
networking.networkmanager.enable = true;
services.xserver.enable = true;
services.displayManager.sddm.enable = true;
services.xserver.desktopManager.plasma5.enable = true;
services.openssh.enable = true;
environment.systemPackages = with pkgs; [
audacity
librewolf
jupiter-hw-support
steamdeck-firmware
steamdeck-bios-fwupd
cargo
clippy
rust-analyzer
rustc
rustfmt
rustup
];
boot.kernelPatches = [
{
name = "gadget";
patch = null;
extraStructuredConfig = with lib.kernel; {
USB_ETH=module;
USB_GADGET=yes;
USB_LIBCOMPOSITE=yes;
USB_CONFIGFS=yes;
USB_DWC3=module;
USB_DWC3_PCI=module;
USB_DWC3_DUAL_ROLE=yes;
USB_DWC3_HOST=no;
USB_DWC3_GADGET=no;
USB_ROLE_SWITCH=yes;
};
}
];
}

View File

@@ -1,62 +0,0 @@
{ config, lib, pkgs, modulesPath, ... }:
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "nvme" "usbhid" "sdhci_pci" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
/*
fileSystems."/" =
{ device = "/dev/disk/by-uuid/63f25199-ee0b-4991-8861-c3ba3b464ef2";
fsType = "btrfs";
options = [ "subvol=root" ];
};
fileSystems."/home" =
{ device = "/dev/disk/by-uuid/63f25199-ee0b-4991-8861-c3ba3b464ef2";
fsType = "btrfs";
options = [ "subvol=home" ];
};
fileSystems."/nix" =
{ device = "/dev/disk/by-uuid/63f25199-ee0b-4991-8861-c3ba3b464ef2";
fsType = "btrfs";
options = [ "subvol=nix" ];
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/63f25199-ee0b-4991-8861-c3ba3b464ef2";
fsType = "btrfs";
options = [ "subvol=boot" ];
};
*/
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/2aad8cab-7b97-47de-8608-fe9f12e211a4";
fsType = "ext4";
};
fileSystems."/boot/EFI" =
{ device = "/dev/disk/by-uuid/C268-79C8";
fsType = "vfat";
};
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.interfaces.wlo1.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
powerManagement.cpuFreqGovernor = lib.mkDefault "ondemand";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

2
dcd
View File

@@ -1,3 +1,3 @@
#!/bin/sh #!/bin/sh
git add . && nixos-rebuild --flake .#compute-deck --build-host trip --target-host shelvacu@compute-deck --use-remote-sudo $@ git add . && nixos-rebuild --flake .#compute-deck --build-host trip --target-host shelvacu@compute-deck --use-remote-sudo "$@"

29
default.nix Normal file
View File

@@ -0,0 +1,29 @@
{
system ? builtins.currentSystem,
}:
let
flakeCompat = (import
(
let
lock = builtins.fromJSON (builtins.readFile ./flake.lock);
nodeName = lock.nodes.root.inputs.flake-compat;
in
fetchTarball {
url = lock.nodes.${nodeName}.locked.url or "https://github.com/edolstra/flake-compat/archive/${lock.nodes.${nodeName}.locked.rev}.tar.gz";
sha256 = lock.nodes.${nodeName}.locked.narHash;
}
)
{
inherit system;
src = ./.;
}
);
flake = flakeCompat.outputs;
overlays = import ./overlays;
pkgs = import flake.inputs.nixpkgs {
inherit system overlays;
};
in
pkgs // {
nixpkgs-update = { ... }@args: import "${flake.inputs.nixpkgs}/maintainers/scripts/update.nix" ({ include-overlays = overlays; } // args);
}

View File

@@ -1,57 +0,0 @@
{ config, pkgs, lib, inputs, modulesPath, ... }:
{
imports = [
inputs.homeManager.nixosModules.default
../common-nixos-config.nix
(modulesPath + "/profiles/qemu-guest.nix")
];
boot.initrd.availableKernelModules = [ "virtio_pci" "usbhid" "virtio_blk" "9pnet_virtio" "9p" "autofs4" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" "9pnet_virtio" "9p" "autofs4" ];
boot.extraModulePackages = [ ];
system.nixos.tags = [ "host-${config.networking.hostName}" ];
networking.hostName = "devver";
boot.loader.external.enable = true;
boot.loader.external.installHook = pkgs.writeShellScript "vacuDirectBootInstaller" ''
PATH="$PATH:${pkgs.coreutils}/bin:${pkgs.gnused}/bin"
set -xev
mkdir -p /boot
cp $1/kernel /boot/kernel
cp $1/initrd /boot/initrd
cp $1/kernel-params /boot/kernel-params
sed -i "1 s|$| init=$1/sw/bin/init|" /boot/kernel-params
'';
users.users.root.shell = pkgs.bashInteractive;
fileSystems."/boot" = {
fsType = "9p";
device = "boot";
options = [
"trans=virtio"
"access=any"
"version=9p2000.L"
"posixacl"
"cache=mmap"
"nofail"
"noauto"
];
};
fileSystems."/" = {
device = "/dev/disk/by-uuid/a373835d-b942-4232-85fe-922cb1880af3";
fsType = "ext4";
};
#boot.binfmt.emulatedSystems = [ "aarch64-linux" ];
services.openssh.enable = true;
vacu.packages.nix-inspect.enable = false; #its broken for some reason I don't understand
system.stateVersion = "23.11";
}

2
dliam
View File

@@ -1,3 +1,3 @@
#!/bin/sh #!/bin/sh
git add . && nixos-rebuild --flake .#liam --build-host trip --target-host shelvacu@liam --use-remote-sudo $@ git add . && nixos-rebuild --flake .#liam --build-host trip --target-host shelvacu@liam --use-remote-sudo "$@"

3
dmmm Executable file
View File

@@ -0,0 +1,3 @@
#!/bin/sh
git add . && nixos-rebuild --flake .#mmm --build-host trip --target-host mmm --use-remote-sudo "$@"

137
dns/default.nix Normal file
View File

@@ -0,0 +1,137 @@
{
dns,
lib,
vaculib,
config,
...
}:
let
inherit (lib) mkOption types singleton;
inherit (dns.lib.combinators)
ns
ttl
spf
mx
;
inherit (config.vacu) hosts;
cloudnsNameServers = [
"pns51.cloudns.net."
"pns52.cloudns.net."
"pns53.cloudns.net."
"pns54.cloudns.net."
];
cloudnsSoa = (
ttl (60 * 60) {
nameServer = lib.head cloudnsNameServers;
adminEmail = "support@cloudns.net";
serial = 1970010101; # cloudns takes care of updating the serial
refresh = 7200;
retry = 1800;
expire = 1209600;
minimum = 3600;
}
);
dkimKeyLiam = {
name = "2024-03-liam";
content = "v=DKIM1; k=rsa; s=email; p=MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAqoFR9cwOb+IpvaqrI55zlouWMUk5hjKHQARajqeOev2I6Gc3QIvU8btyhKCJu7pwxr+DxK/9HeqTmweCSXZmLlVZ6LjW80aAg+8l2DyMKZPaTowSQcExfNMwHqI1ByUPx49LQQEzvwv8Lx3To2+JghZNXHUx7gcraoCUQnRNzCMoMsGF25Yyt4piW6SXKWsbWHVXaL2i953PtT6agJYqssnBqPx6wqibrkeB9MbtSw97L5oQDaDLmJzEK54vRjFFV4X6/Q1d3D6M5PH0XGm6WEhrNEPgMAAZ6rBqi+AoXUz9E9B+kE/Zc6krCTiV0Y1uL83RCILaEJIjRsHqgrGRYEIBUb4Z5d4CgB3szixzaFTmG+XAgDLGnAHRNGeOn0bUmj35miLUopzGJgHCUQYjaaXMH4FSQMYBFPVqZ1aSiZO0EC/mbLlFbBy51RYPJQK0IusN4IqaBYw6jZYMEVlLWkNb34bfNtPKwoG4T3UjxmSRpfiNCFjYd4DaOz/FBAvUL9bx+qU7O6EZRtslROaWN18uSt20hBH0SpvEovj7vBgWWqXG/chNS7YSSaf3Tlb3I5NbqbmvwFF0t8uuEtN0Wh26qMuOKx70K90B9FpJBpfIk/w8FQ80kP6spbMN1v1T5fA7oZMV1fOn1IezH4wE5Yk/3dS+OXJ4YiLH/hWfjecCAwEAAQ==";
};
dmarc = lib.pipe [
# see https://www.rfc-editor.org/rfc/rfc7489.html#section-6.3
"v=DMARC1"
"p=reject" # policy = reject all mail that fails DKIM or SPF
# no need for sp=, policy applies to subdomains by default
"adkim=s" # match dkim domains strictly (foo.shelvacu.com != shelvacu.com)
"aspf=s" # match spf domains strictly
"fo=1" # failure reporting: report a failure if any of dkim or spf fails
"rua=mailto:dmarc-rua@shelvacu.com!25m"
"ruf=mailto:dmarc-ruf@shelvacu.com!25m"
] [
(map (s: s + ";"))
(lib.concatStringsSep " ")
];
vacuZoneExtModule = { config, ... }: {
imports = [ vacuDomainExtModule ];
options.vacu.cloudns = mkOption {
default = true;
type = types.bool;
};
config = lib.mkIf config.vacu.cloudns {
SOA = cloudnsSoa;
NS = map (server: ttl (60 * 60) (ns server)) cloudnsNameServers;
TTL = lib.mkDefault 300;
};
};
vacuDomainExtModule = { config, ... }: {
options.vacu = {
liamMail = mkOption {
default = false;
type = types.bool;
};
_ancestorHasDMARC = mkOption {
type = types.bool;
default = false;
internal = true;
};
};
options.subdomains = mkOption {
type = types.attrsOf (types.submodule [
{
config.vacu._ancestorHasDMARC = config.vacu.liamMail || config.vacu._ancestorHasDMARC;
}
vacuDomainExtModule
]);
};
config = lib.mkMerge [
(lib.mkIf config.vacu.liamMail {
MX = singleton (mx.mx 0 "liam.dis8.net.");
TXT = singleton (
spf.strict [
"mx"
"include:outbound.mailhop.org"
"include:_spf.mailersend.net"
"a:relay.dynu.com"
]
);
subdomains."${dkimKeyLiam.name}._domainkey".TXT = singleton dkimKeyLiam.content;
})
(lib.mkIf (config.vacu.liamMail && !config.vacu._ancestorHasDMARC) {
subdomains._dmarc.TXT = singleton dmarc;
})
];
};
# vacuZone = lib.mkMerge [
# dns.lib.types.zone
# (types.submodule vacuZoneExtModule)
# ];
in
{
imports = [
./jean-luc.org.nix
./pwrhs.win.nix
./shelvacu.miras.pet.nix
./for.miras.pet.nix
./shelvacu.com.nix
./dis8.net.nix
./sv.mt.nix
({ dns, ... }: {
options.vacu.dns = mkOption {
default = { };
type = types.attrsOf dns.lib.types.zone;
};
})
];
options.vacu.dns = mkOption {
type = types.attrsOf (types.submodule vacuZoneExtModule);
};
options.vacu.dnsData = vaculib.mkOutOptions rec {
tripPublicV4 = hosts.triple-dezert.primaryIp;
propPublicV4 = hosts.prophecy.primaryIp;
digitalOcean = {
reservedV4 = "138.197.233.105";
liamPublicV4 = "178.128.79.152";
mailPublicV4 = "167.99.161.174";
};
doV4 = digitalOcean.reservedV4;
awooV4 = hosts.awoo.primaryIp;
};
}

28
dns/dis8.net.nix Normal file
View File

@@ -0,0 +1,28 @@
{
lib,
config,
...
}:
let
inherit (lib) singleton;
inherit (config.vacu) dnsData;
inherit (config.vacu.dnsData.digitalOcean) liamPublicV4 mailPublicV4 reservedV4;
in
{
vacu.dns."dis8.net" = { ... }: {
vacu.liamMail = true;
A = singleton mailPublicV4;
subdomains = {
do-a.A = singleton reservedV4;
liam.A = singleton reservedV4;
mail.A = singleton liamPublicV4;
auwwth = {
subdomains.ns.A = singleton dnsData.awooV4;
NS = singleton "ns.auwwth.dis8.net.";
};
solis.A = singleton config.vacu.hosts.solis.primaryIp;
"_acme-challenge".CNAME = singleton "a55a31f9-74ac-44fc-bf97-c8c9f2498d3a.auth.dis8.net.";
};
};
}

26
dns/for.miras.pet.nix Normal file
View File

@@ -0,0 +1,26 @@
{ lib, config, ... }:
let
inherit (lib) singleton;
inherit (config.vacu) dnsData;
in
{
vacu.dns."for.miras.pet" =
{ ... }:
{
subdomains = {
"git".A = singleton dnsData.tripPublicV4;
"auth".A = singleton dnsData.tripPublicV4;
"wisdom".A = singleton dnsData.tripPublicV4;
"chat" =
{ ... }:
{
config.vacu.liamMail = true;
config.A = singleton dnsData.tripPublicV4;
config.subdomains."duo-1745490301302-14f65157._domainkey".TXT =
singleton "v=DKIM1; k=rsa; s=email; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDA/94Rh5eMPsKwGGolkleY1Rhh2Q6H22bfdGVu0lXpoHP1K7JxloWu/Ice2vVN/udztmPY+BK1x+5qubcGZKpPt1bC9amsXnyTXfKIMGD2CNd0tnaO54hmMOfv+lTA9YjF0X93tcQP3yUxJgJ9yPZcalFl/bBAqv4/lUVLYFeIVQIDAQAB";
};
"gabriel-dropout".A = singleton dnsData.tripPublicV4;
"_acme-challenge".CNAME = singleton "199b8aa4-bc9f-4f43-88bf-3f613f62b663.auwwth.dis8.net.";
};
};
}

24
dns/jean-luc.org.nix Normal file
View File

@@ -0,0 +1,24 @@
{ lib, config, ... }:
let
inherit (lib) singleton;
inherit (config.vacu) dnsData;
main_ips = singleton dnsData.tripPublicV4;
in
{
vacu.dns."jean-luc.org" =
{ ... }:
{
vacu.liamMail = true;
A = main_ips;
NS = lib.mkAfter [ "ns2.afraid.org." ]; # note: appends to NS records from modules.cloudns
subdomains = {
"in".vacu.liamMail = true;
"*".A = main_ips;
"_acme-challenge".CNAME = singleton "8cc7a174-c4a6-40f5-9fff-dfb271c5ce0b.auwwth.dis8.net.";
"stats".A = main_ips;
"tdi-readings".CNAME = singleton "d20l6bh1gp7s8.cloudfront.net.";
"_a908498ee692a9729bf12e161ae1887d.tdi-readings".CNAME =
singleton "_1f055e4fc0f439e67304a33945d09002.hkvuiqjoua.acm-validations.aws.";
};
};
}

14
dns/pwrhs.win.nix Normal file
View File

@@ -0,0 +1,14 @@
{ lib, config, ... }:
let
inherit (lib) singleton;
inherit (config.vacu) dnsData;
in
{
vacu.dns."pwrhs.win" =
{ ... }:
{
A = singleton dnsData.tripPublicV4;
subdomains.habitat.A = singleton dnsData.tripPublicV4;
subdomains._acme-challenge.CNAME = singleton "73697955-1c51-48ba-ba1e-b3398850f59f.auwwth.dis8.net.";
};
}

99
dns/shelvacu.com.nix Normal file
View File

@@ -0,0 +1,99 @@
{
config,
lib,
vaculib,
...
}:
let
s = v: [ v ];
inherit (config.vacu) dnsData;
trip_ips = s dnsData.tripPublicV4;
prop_ips = s dnsData.propPublicV4;
solis_ips = s config.vacu.hosts.solis.primaryIp;
mail_thing = s "178.128.79.152";
# which domains to allow dmarc reports.
# ex: _dmarc.dis8.net TXT has "rua=rua-reports@shelvacu.com", reports will only be sent if shelvacu.com allows them
# allow all domains configured in this repo, and one level of subdomain (ideally all but thats hard, this should be good enough)
allow_report_domains = lib.pipe config.vacu.dns [
lib.attrNames
(list: list ++ [ "theviolincase.com" "violingifts.com" ])
(lib.concatMap (domain: [domain "*.${domain}"]))
];
in
{
vacu.dns."shelvacu.com" =
{ ... }:
{
vacu.liamMail = true;
A = trip_ips;
CAA = [
{
issuerCritical = true;
tag = "issue";
value = "letsencrypt.org";
}
{
issuerCritical = true;
tag = "issue";
value = "sectigo.com";
}
{
issuerCritical = true;
tag = "issuewild";
value = "letsencrypt.org";
}
{
issuerCritical = false;
tag = "iodef";
value = "mailto:caa-violation@shelvacu.com";
}
];
subdomains = {
_acme-challenge.CNAME = s "5cb20bf7-5203-417f-b729-fa3a3ad3b775.auwwth.dis8.net.";
_atproto.TXT = s "did=did:plc:oqenurzqeji6ulii3myxls64";
"_report._dmarc".subdomains = vaculib.mapNamesToAttrsConst { TXT = s "v=DMARC1"; } allow_report_domains;
admin-garage-trip.A = trip_ips;
auth.A = trip_ips;
autoconfig.A = mail_thing;
awoo.A = s "45.142.157.71";
dav.A = trip_ips;
dav-experiment.A = prop_ips;
ft.subdomains = {
"*".A = s "45.87.250.193";
_acme-challenge.CNAME = s "17aa43aa-9295-4522-8cf2-b94ba537753d.auth.acme-dns.io.";
};
# hzo3bcydh5khtpeio6zrzb7kwcwiccnh.subdomains._domainkey.CNAME = s "hzo3bcydh5khtpeio6zrzb7kwcwiccnh.dkim.amazonses.com.";
id.A = trip_ips;
imap.A = mail_thing;
jobs.A = trip_ips;
llm.A = trip_ips;
mail.A = mail_thing;
# mlsend2.subdomains._domainkey.CNAME = s "mlsend2._domainkey.mailersend.net.";
mumble.A = prop_ips;
nixcache.A = trip_ips;
ns1.CNAME = s "pns51.cloudns.net.";
ns2.CNAME = s "pns52.cloudns.net.";
ns3.CNAME = s "pns53.cloudns.net.";
ns4.CNAME = s "pns54.cloudns.net.";
prop.CNAME = s "prophecy";
prophecy.A = prop_ips;
prophecy.subdomains.garage.subdomains = {
s3.A = prop_ips;
admin.A = prop_ips;
};
rad.A = trip_ips;
s3-garage-trip.A = trip_ips;
servacu.A = s "167.99.161.174";
smtp.A = mail_thing;
sol.CNAME = s "solis";
solis.A = solis_ips;
solis.subdomains.garage.subdomains = {
s3.A = solis_ips;
admin.A = solis_ips;
};
trip.A = trip_ips;
vaultwarden.A = trip_ips;
www.A = trip_ips;
};
};
}

View File

@@ -0,0 +1,15 @@
{ lib, config, ... }:
let
inherit (lib) singleton;
inherit (config.vacu) dnsData;
in
{
vacu.dns."shelvacu.miras.pet" =
{ ... }:
{
vacu.liamMail = true;
A = singleton dnsData.tripPublicV4;
subdomains."_acme-challenge".CNAME =
singleton "65e44f64-3c65-46f6-b15f-4ad6363b21eb.auwwth.dis8.net.";
};
}

24
dns/sv.mt.nix Normal file
View File

@@ -0,0 +1,24 @@
{ lib, config, ... }:
let
inherit (lib) singleton;
inherit (config.vacu) dnsData;
in
{
vacu.dns."sv.mt" =
{ ... }:
{
vacu.liamMail = true;
A = singleton dnsData.propPublicV4;
subdomains.www.A = singleton dnsData.propPublicV4;
subdomains.thisthirdlevelisownedbyshelandwasnotmadeavailabletoemily = {
NS = [
"thisns1isonlyusedbyshelandisnotusedforthirdlevelregistrationfor.emilygeil.com."
"thisns2isonlyusedbyshelandisnotusedforthirdlevelregistrationfor.emilygeil.com."
"thisns3isonlyusedbyshelandisnotusedforthirdlevelregistrationfor.emilygeil.com."
"thisns4isonlyusedbyshelandisnotusedforthirdlevelregistrationfor.emilygeil.com."
"thisns5isonlyusedbyshelandisnotusedforthirdlevelregistrationfor.emilygeil.com."
];
# TXT = singleton "ha5d5dc3ca7b34574bc60929e3910ba8a";
};
};
}

3
dprop Executable file
View File

@@ -0,0 +1,3 @@
#!/bin/sh
git add . && nixos-rebuild --flake .#prophecy --build-host prop --target-host prop --use-remote-sudo "$@"

2
dtrip
View File

@@ -1,3 +1,3 @@
#!/bin/sh #!/bin/sh
git add . && nixos-rebuild --flake .#triple-dezert --build-host trip --target-host trip --use-remote-sudo $@ git add . && nixos-rebuild --flake .#triple-dezert --build-host trip --target-host trip --use-remote-sudo "$@"

1054
flake.lock generated

File diff suppressed because it is too large Load Diff

568
flake.nix
View File

@@ -1,141 +1,497 @@
{ {
description = "Config for triple-dezert server"; description = "Configs for shelvacu's nix things";
inputs = { inputs = {
nixpkgs-unstable.url = "nixpkgs/nixos-unstable"; #todo: put this back to -small once jovian-nixos is fixed nixpkgs.url = "nixpkgs/nixos-25.05-small";
nixpkgs.url = "nixpkgs/nixos-23.11-small"; nixpkgs-unstable.url = "nixpkgs/nixos-unstable-small";
nixpkgs2405.url = "nixpkgs/nixos-24.05-small";
nix-inspect = { disko = {
url = "github:bluskript/nix-inspect"; url = "git+https://git.uninsane.org/shelvacu/disko.git";
#inputs.nixpkgs.follows = "nixpkgs";
};
vscode-server = {
url = "github:nix-community/nixos-vscode-server";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
nix-on-droid = { disko-unstable = {
url = "github:nix-community/nix-on-droid/release-23.05"; url = "git+https://git.uninsane.org/shelvacu/disko.git";
inputs.nixpkgs.follows = "nixpkgs-unstable";
};
dns = {
url = "github:nix-community/dns.nix";
inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-utils.follows = "flake-utils";
};
flake-compat.url = "github:edolstra/flake-compat";
flake-utils.url = "github:numtide/flake-utils";
home-manager = {
url = "github:nix-community/home-manager/release-25.05";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
jovian = { home-manager-unstable = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs-unstable";
};
impermanence.url = "github:nix-community/impermanence";
jovian-unstable = {
# there is no stable jovian :cry:
url = "github:Jovian-Experiments/Jovian-NixOS"; url = "github:Jovian-Experiments/Jovian-NixOS";
inputs.nixpkgs.follows = "nixpkgs-unstable"; inputs.nixpkgs.follows = "nixpkgs-unstable";
}; };
disko = { most-winningest = {
url = "github:nix-community/disko"; url = "github:captain-jean-luc/most-winningest";
inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-utils.follows = "flake-utils";
};
nixos-hardware.url = "github:nixos/nixos-hardware";
nixos-apple-silicon-unstable = {
url = "github:tpwrules/nixos-apple-silicon";
inputs.nixpkgs.follows = "nixpkgs-unstable"; inputs.nixpkgs.follows = "nixpkgs-unstable";
}; };
homeManager = { nixvim = {
url = "github:nix-community/home-manager/master"; url = "github:nix-community/nixvim/nixos-25.05";
inputs.nixpkgs.follows = "nixpkgs";
};
nixvim-unstable = {
url = "github:nix-community/nixvim";
inputs.nixpkgs.follows = "nixpkgs-unstable"; inputs.nixpkgs.follows = "nixpkgs-unstable";
}; };
nix-search-cli = { nix-colors = {
url = "github:peterldowns/nix-search-cli"; url = "github:Misterio77/nix-colors";
inputs.nixpkgs.follows = "nixpkgs";
}; };
padtype = { nix-on-droid = {
url = "gitlab:shelvacu/padtype"; url = "github:nix-community/nix-on-droid";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
inputs.home-manager.follows = "home-manager";
}; };
padtype-unstable = {
url = "git+https://git.uninsane.org/shelvacu/padtype.git";
inputs.nixpkgs.follows = "nixpkgs-unstable";
};
sm64baserom.url = "git+https://git.uninsane.org/shelvacu/sm64baserom.git";
sops-nix = { sops-nix = {
url = "github:Mic92/sops-nix"; url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
microvm = { tf2-nix = {
url = "github:astro/microvm.nix"; url = "gitlab:shelvacu-forks/tf2-nix/with-my-patches";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
treefmt-nix = {
url = "github:numtide/treefmt-nix";
inputs.nixpkgs.follows = "nixpkgs-unstable";
};
vacu-keys = {
url = "git+https://git.uninsane.org/shelvacu/keys.nix.git";
flake = false;
};
}; };
outputs = { self, nixpkgs, nix-on-droid, ... }@inputs: { outputs =
debug.isoDeriv = (import "${inputs.nixpkgs}/nixos/release-small.nix" { nixpkgs = ({ revCount = 0; } // inputs.nixpkgs); }); {
nixosConfigurations.triple-dezert = nixpkgs.lib.nixosSystem { self,
system = "x86_64-linux"; nixpkgs,
modules = [ ./triple-dezert ]; nix-on-droid,
specialArgs = { inherit inputs; }; ...
}; }@allInputs:
nixosConfigurations.compute-deck = inputs.nixpkgs-unstable.lib.nixosSystem {
system = "x86_64-linux";
modules = [ ./compute-deck ];
specialArgs = { inherit inputs; };
};
nixosConfigurations.liam = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [ ./liam ];
specialArgs = { inherit inputs; };
};
nixosConfigurations.lp0 = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [ ./lp0 ];
specialArgs = { inherit inputs; };
};
nixosConfigurations.shel-installer = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [ ./installer.nix ];
specialArgs = { inherit inputs; };
};
nixosConfigurations.devver = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [ ./devver ];
specialArgs = { inherit inputs; };
};
nixosConfigurations.fw = inputs.nixpkgs2405.lib.nixosSystem {
system = "x86_64-linux";
modules = [ ./fw ];
specialArgs = { inherit inputs; };
};
nixOnDroidConfigurations.default = nix-on-droid.lib.nixOnDroidConfiguration {
modules = [ ./nix-on-droid.nix ];
extraSpecialArgs = { inherit inputs; };
};
diskoConfigurations.compute-deck = import ./compute-deck/partitioning.nix;
checks = nixpkgs.lib.genAttrs [ "x86_64-linux" ] (system:
let let
pkgs = nixpkgs.legacyPackages.${system}; x86 = "x86_64-linux";
arm = "aarch64-linux";
lib = import "${nixpkgs}/lib";
overlays = import ./overlays;
vacuModules = import ./modules;
mkVaculib = { pkgs }: import ./vaculib { inherit pkgs; nix-colors-lib = allInputs.nix-colors.lib; };
vaculib = mkVaculib { inherit pkgs; };
defaultSuffixedInputNames = [
"nixvim"
"nixpkgs"
];
defaultInputs = { inherit (allInputs) self vacu-keys; };
mkInputs =
{
unstable ? false,
inp ? [ ],
}:
let
suffix = if unstable then "-unstable" else "";
inputNames = inp ++ defaultSuffixedInputNames;
thisInputsA = vaculib.mapNamesToAttrs (name: allInputs.${name + suffix}) inputNames;
in
if inp == "all" then allInputs else thisInputsA // defaultInputs;
mkPkgs =
arg:
let
argAttrAll = if builtins.isString arg then { system = arg; } else arg;
unstable = argAttrAll.unstable or false;
whichpkgs = if unstable then allInputs.nixpkgs-unstable else allInputs.nixpkgs;
argAttr = lib.removeAttrs argAttrAll [ "unstable" ];
config = { config = {
node.pkgs = pkgs; allowUnfree = true;
node.pkgsReadOnly = false; # the security warning might as well have said "its insecure maybe but there's nothing you can do about it"
node.specialArgs.selfPackages = self.packages.${system}; # presumably needed by nheko
node.specialArgs.inputs = inputs; permittedInsecurePackages = [
"olm-3.2.16"
"fluffychat-linux-1.27.0"
];
} // (argAttr.config or { });
in
import whichpkgs (
argAttr // { inherit config; } // { overlays = (argAttr.overlays or [ ]) ++ overlays; }
);
mkCommon =
{
unstable ? false,
inp ? [ ],
system ? x86,
vacuModuleType,
}:
let
pkgsStable = mkPkgs { unstable = false; inherit system; };
pkgsUnstable = mkPkgs { unstable = true; inherit system; };
pkgs = if unstable then pkgsUnstable else pkgsStable;
inputs = mkInputs { inherit unstable inp; };
vaculib = mkVaculib { inherit pkgs; };
in
{
inherit pkgs pkgsStable pkgsUnstable inputs vaculib;
specialArgs = {
inherit inputs vacuModules vacuModuleType vaculib pkgsStable pkgsUnstable;
inherit (allInputs) dns;
};
};
mkPlain =
{
unstable ? false,
system ? x86,
}@args:
let
common = mkCommon (args // {
vacuModuleType = "plain";
inp = "all";
});
inner = lib.evalModules {
modules = [
./common
{ vacu.systemKind = "server"; }
];
specialArgs = common.specialArgs // {
inherit (common) pkgs;
inherit (common.pkgs) lib;
};
};
in
inner.config.vacu.withAsserts inner;
pkgs = mkPkgs x86;
mkNixosConfig =
{
unstable ? false,
module,
system ? "x86_64-linux",
inp ? [ ],
}:
let
common = mkCommon { inherit unstable inp system; vacuModuleType = "nixos"; };
in
allInputs.nixpkgs.lib.nixosSystem {
inherit (common) specialArgs;
inherit system;
modules = [
{ nixpkgs.pkgs = common.pkgs; }
./common
module
];
}; };
in in
{ {
liam = nixpkgs.lib.nixos.runTest { debug.isoDeriv = (
hostPkgs = pkgs; import "${allInputs.nixpkgs}/nixos/release-small.nix" {
imports = [ config ./tests/liam.nix ]; nixpkgs = ({ revCount = 0; } // allInputs.nixpkgs);
};
trip = nixpkgs.lib.nixos.runTest {
hostPkgs = pkgs;
imports = [ config ./tests/triple-dezert.nix ];
};
# trip_haproxy_config = let
# hacfg = self.nixosConfigurations.triple-dezert.config.containers.frontproxy.config.services.haproxy;
# in pkgs.stdenvNoCC.mkDerivation {
# name = "trip-haproxy-config-check";
# script = ''
# mkdir -p certs/shelvacu.com/
# touch certs/shelvacu.com/full.pem
# ${hacfg.package}/bin/haproxy \
# -f ${pkgs.writeText "haproxy-config" hacfg.config} \
# -c \
# -dW \
# -dD \
# -C $PWD
# '';
# };
} }
); );
nixosModules.common = import ./common-config.nix; lib = {
packages.x86_64-linux.digitalOceanImage = import ./generic-digitalocean-nixos.nix { inherit inputs; }; inherit
mkPlain
mkPkgs
mkInputs
mkNixosConfig
vaculib
;
}; };
nixosConfigurations = {
triple-dezert = mkNixosConfig {
module = ./hosts/triple-dezert;
inp = [
"most-winningest"
"sops-nix"
];
};
compute-deck = mkNixosConfig {
module = ./hosts/compute-deck;
inp = [
"jovian"
"home-manager"
"disko"
"padtype"
];
unstable = true;
};
liam = mkNixosConfig {
module = ./hosts/liam;
inp = [ "sops-nix" ];
};
lp0 = mkNixosConfig { module = ./hosts/lp0; };
shel-installer-iso = mkNixosConfig { module = ./hosts/installer/iso.nix; };
shel-installer-pxe = mkNixosConfig { module = ./hosts/installer/pxe.nix; };
fw = mkNixosConfig {
module = ./hosts/fw;
inp = [
"nixos-hardware"
"sops-nix"
"tf2-nix"
];
};
legtop = mkNixosConfig {
module = ./hosts/legtop;
inp = [ "nixos-hardware" ];
};
mmm = mkNixosConfig {
module = ./hosts/mmm;
inp = [ "nixos-apple-silicon" ];
system = "aarch64-linux";
unstable = true;
};
prophecy = mkNixosConfig {
module = ./hosts/prophecy;
system = "x86_64-linux";
inp = [
"impermanence"
"sops-nix"
"disko"
];
};
solis = mkNixosConfig {
module = ./hosts/solis;
system = "x86_64-linux";
inp = [
"disko"
"impermanence"
"sops-nix"
];
};
};
nixOnDroidConfigurations.default =
let
common = mkCommon { system = arm; vacuModuleType = "nix-on-droid"; };
in
nix-on-droid.lib.nixOnDroidConfiguration {
modules = [
./common
./hosts/nix-on-droid
];
extraSpecialArgs = common.specialArgs;
inherit (common) pkgs;
};
checks = nixpkgs.lib.genAttrs [ x86 ] (
system:
let
common = mkCommon { inherit system; vacuModuleType = "nixos"; };
inherit (common) pkgs;
plain = mkPlain { inherit system; };
commonTestModule = {
hostPkgs = pkgs;
_module.args.inputs = { inherit (allInputs) self; };
node.pkgs = pkgs;
node.pkgsReadOnly = true;
node.specialArgs = (lib.removeAttrs common.specialArgs [ "inputs" ]) // { selfPackages = self.packages.${system}; };
};
mkTest =
name:
nixpkgs.lib.nixos.runTest {
imports = [
commonTestModule
./tests/${name}
{ node.specialArgs.inputs = self.nixosConfigurations.${name}._module.specialArgs.inputs; }
];
};
checksFromConfig = plain.config.vacu.checks;
in
assert !(checksFromConfig ? liam) && !(checksFromConfig ? trip);
checksFromConfig
// {
liam = mkTest "liam";
triple-dezert = mkTest "triple-dezert";
}
);
buildList =
let
toplevelOf = name: self.nixosConfigurations.${name}.config.system.build.toplevel;
deterministicCerts = import ./deterministic-certs.nix { nixpkgs = mkPkgs x86; };
renamedAarchPackages = lib.mapAttrs' (
name: value: lib.nameValuePair (name + "-aarch64") value
) self.packages.aarch64-linux;
packages = self.packages.x86_64-linux // renamedAarchPackages;
pxe-build = self.nixosConfigurations.shel-installer-pxe.config.system.build;
in
{
fw = toplevelOf "fw";
triple-dezert = toplevelOf "triple-dezert";
compute-deck = toplevelOf "compute-deck";
liam = toplevelOf "liam";
lp0 = toplevelOf "lp0";
legtop = toplevelOf "legtop";
mmm = toplevelOf "mmm";
shel-installer-iso = toplevelOf "shel-installer-iso";
shel-installer-pxe = toplevelOf "shel-installer-pxe";
prophecy = toplevelOf "prophecy";
iso = self.nixosConfigurations.shel-installer-iso.config.system.build.isoImage;
pxe-toplevel = toplevelOf "shel-installer-pxe";
pxe-kernel = pxe-build.kernel;
pxe-initrd = pxe-build.netbootRamdisk;
check-triple-dezert = self.checks.x86_64-linux.triple-dezert.driver;
check-liam = self.checks.x86_64-linux.liam.driver;
liam-sieve = self.nixosConfigurations.liam.config.vacu.liam-sieve-script;
nix-on-droid = self.nixOnDroidConfigurations.default.activationPackage;
nod-bootstrap-x86_64 = allInputs.nix-on-droid.packages.x86_64-linux.bootstrapZip-x86_64;
nod-bootstrap-aarch64 = allInputs.nix-on-droid.packages.x86_64-linux.bootstrapZip-aarch64;
dc-priv = deterministicCerts.privKeyFile "test";
dc-cert = deterministicCerts.selfSigned "test" { };
inherit (allInputs.nixos-apple-silicon-unstable.packages.aarch64-linux)
m1n1
uboot-asahi
installer-bootstrap
;
installer-bootstrap-cross =
allInputs.nixos-apple-silicon-unstable.packages.x86_64-linux.installer-bootstrap;
}
// packages;
qb = self.buildList // {
trip = self.buildList.triple-dezert;
cd = self.buildList.compute-deck;
lt = self.buildList.legtop;
prop = self.buildList.prophecy;
check-trip = self.buildList.check-triple-dezert;
nod = self.buildList.nix-on-droid;
ak = self.buildList.authorizedKeys;
my-sops = self.buildList.wrappedSops;
};
brokenBuilds = [
"sm64coopdx-aarch64"
"installer-bootstrap"
];
impureBuilds = [
"nix-on-droid"
"nod"
"nod-bootstrap-x86_64"
"nod-bootstrap-aarch64"
];
archival = import ./archive.nix { inherit self pkgs lib; };
}
// (allInputs.flake-utils.lib.eachDefaultSystem (
system:
let
mkNixvim =
{ unstable, minimal }:
let
common = mkCommon { inherit unstable; vacuModuleType = "nixvim"; };
nixvim-input = if unstable then allInputs.nixvim-unstable else allInputs.nixvim;
in
nixvim-input.legacyPackages.${system}.makeNixvimWithModule {
module = {
imports = [ ./nixvim ];
};
extraSpecialArgs = common.specialArgs // { inherit minimal; };
};
common = mkCommon { unstable = true; vacuModuleType = "plain"; };
inherit (common) pkgs pkgsStable pkgsUnstable;
plain = mkPlain { unstable = true; };
treefmtEval = allInputs.treefmt-nix.lib.evalModule pkgsUnstable ./treefmt.nix;
formatter = treefmtEval.config.build.wrapper;
vacuPackagePaths = import ./packages;
vacuPackages = builtins.intersectAttrs vacuPackagePaths pkgsStable;
in
{
inherit formatter;
inherit (common) vaculib;
apps.sops = {
type = "app";
program = lib.getExe self.packages.${system}.wrappedSops;
};
vacuConfig = plain.config;
inherit vacuPackages;
legacyPackages = {
unstable = pkgsUnstable;
stable = pkgsStable;
nixpkgs-update = { ... }@args: import "${allInputs.nixpkgs}/maintainers/scripts/update.nix" ({ include-overlays = [ (import ./overlays/newPackages.nix) ]; } // args);
};
packages = rec {
archive = pkgsStable.callPackage ./scripts/archive { };
authorizedKeys = pkgsStable.writeText "authorizedKeys" (
lib.concatStringsSep "\n" (
lib.mapAttrsToList (k: v: "${v} ${k}") plain.config.vacu.ssh.authorizedKeys
)
);
dns = import ./scripts/dns {
inherit pkgs lib;
inputs = allInputs;
inherit (plain) config;
};
inherit formatter;
generated = pkgsStable.linkFarm "generated" {
nixpkgs = "${allInputs.nixpkgs}";
"liam-test/hints.py" = pkgs.writeText "hints.py" (
import ./typesForTest.nix {
name = "liam";
inherit (pkgsStable) lib;
inherit self;
inherit (allInputs) nixpkgs;
}
);
"dns/python-env" = builtins.dirOf (builtins.dirOf dns.interpreter);
"mailtest/python-env" = builtins.dirOf (
builtins.dirOf self.checks.x86_64-linux.liam.nodes.checker.vacu.mailtest.smtp.interpreter
);
};
host-pxe-installer = pkgs.callPackage ./host-pxe-installer.nix {
nixosInstaller = self.nixosConfigurations.shel-installer-pxe;
};
liam-sieve-script = self.nixosConfigurations.liam.config.vacu.liam-sieve-script;
nixvim = mkNixvim {
unstable = false;
minimal = false;
};
nixvim-unstable = mkNixvim {
unstable = true;
minimal = false;
};
nixvim-minimal = mkNixvim {
unstable = false;
minimal = true;
};
nixvim-unstable-minimal = mkNixvim {
unstable = true;
minimal = true;
};
# optionsDocNixOnDroid = (pkgs.nixosOptionsDoc {
# inherit (self.nixOnDroidConfigurations.default) options;
# }).optionsCommonMark;
openterface-qt-eudev = vacuPackages.openterface-qt.override { useSystemd = false; };
openterface-qt-systemd = vacuPackages.openterface-qt.override { useSystemd = true; };
sopsConfig = plain.config.vacu.sopsConfigFile;
sourceTree = plain.config.vacu.sourceTree;
units = plain.config.vacu.units.finalPackage;
update-git-keys = pkgsStable.callPackage ./scripts/update-git-keys.nix { inherit (plain) config; inputs = allInputs; };
vnopnCA = pkgsStable.writeText "vnopnCA.cert" plain.config.vacu.vnopnCA;
wrappedSops = plain.config.vacu.wrappedSops;
} // vacuPackages;
}
));
} }

View File

@@ -1,94 +0,0 @@
{ config, inputs, pkgs, lib, ... }: {
imports = [
../common-nixos-config.nix
];
system.nixos.tags = [ "host-${config.networking.hostName}" ];
boot.binfmt.emulatedSystems = [ "aarch64-linux" ];
networking.networkmanager.enable = true;
vacu.packages.bitwarden-desktop.enable = true;
vacu.packages.nheko.enable = true;
vacu.packages.librewolf.enable = true;
vacu.packages.brave.enable = true;
vacu.packages.thunderbird.enable = true;
vacu.packages.wl-clipboard.enable = true;
vacu.packages.nextcloud-client.enable = true;
vacu.packages.signal-desktop.enable = true;
vacu.packages.fw-ectool.enable = true;
vacu.packages.framework-tool.enable = true;
vacu.packages.iio-sensor-proxy.enable = true;
vacu.packages.power-profiles-daemon.enable = true;
vacu.packages.acpi.enable = true;
services.xserver.enable = true;
services.displayManager.sddm.enable = true;
services.desktopManager.plasma6.enable = true;
boot.loader.grub.enable = true;
boot.loader.grub.efiSupport = true;
boot.loader.grub.efiInstallAsRemovable = true;
boot.loader.grub.memtest86.enable = true;
boot.loader.grub.mirroredBoots = [
{
devices = [ "nodev" ];
path = "/boot0";
}
{
devices = [ "nodev" ];
path = "/boot1";
}
];
networking.hostName = "fw"; # Define your hostname.
networking.hostId = "c6e309d5";
boot.zfs.extraPools = [ "fw" ];
boot.kernelPackages = config.boot.zfs.package.latestCompatibleLinuxPackages;
systemd.services.zfs-mount.enable = false;
services.openssh.enable = true;
system.stateVersion = "23.11"; # Did you read the comment?
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "thunderbolt" "usb_storage" "usbhid" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "fw/root";
fsType = "zfs";
};
fileSystems."/boot0" =
{ device = "/dev/disk/by-label/BOOT0";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ];
};
fileSystems."/boot1" =
{ device = "/dev/disk/by-label/BOOT1";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ];
};
hardware.cpu.amd.updateMicrocode = true;
hardware.enableAllFirmware = true;
hardware.opengl = {
driSupport = true;
driSupport32Bit = true;
};
programs.nix-ld.enable = true;
programs.steam = {
enable = true;
remotePlay.openFirewall = true;
};
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
};
hardware.bluetooth.enable = true;
hardware.bluetooth.powerOnBoot = true;
services.blueman.enable = true;
}

View File

@@ -1,10 +0,0 @@
{ inputs, system ? "x86_64-linux" }:
let
pkgs = inputs.nixpkgs.legacyPackages.${system};
config = { config, ... }: {
imports = [ "${inputs.nixpkgs}/nixos/modules/virtualisation/digital-ocean-image.nix" ];
system.stateVersion = config.system.nixos.release;
};
in
(pkgs.nixos config).digitalOceanImage

7
home/nix-on-droid.nix Normal file
View File

@@ -0,0 +1,7 @@
{ ... }:
{
imports = [ ../common/home.nix ];
home.stateVersion = "24.05";
home.homeDirectory = "/data/data/com.termux.nix/files/home";
home.username = "nix-on-droid";
}

View File

@@ -0,0 +1,7 @@
{ ... }:
{
hardware.bluetooth.enable = true;
hardware.bluetooth.powerOnBoot = true;
services.blueman.enable = true;
}

View File

@@ -0,0 +1,74 @@
{ pkgs, inputs, ... }:
{
imports = [
inputs.jovian.nixosModules.jovian
# inputs.disko.nixosModules.default
inputs.home-manager.nixosModules.default
./hardware.nix
./home.nix
./bluetooth.nix
./partitioning.nix
./padtype.nix
];
boot.loader = {
systemd-boot.enable = false;
efi = {
efiSysMountPoint = "/boot/EFI";
canTouchEfiVariables = false;
};
grub = {
efiSupport = true;
device = "nodev";
efiInstallAsRemovable = true;
};
};
boot.binfmt.emulatedSystems = [ "aarch64-linux" ];
vacu.hostName = "compute-deck";
vacu.shortHostName = "cd";
vacu.shell.color = "blue";
vacu.systemKind = "desktop";
networking.hostId = "e595d9b0";
boot.supportedFilesystems = [ "zfs" ];
boot.zfs.forceImportRoot = false;
system.stateVersion = "23.11";
jovian.devices.steamdeck.enable = true;
networking.networkmanager.enable = true;
services.xserver.enable = true;
services.displayManager.sddm.enable = true;
services.desktopManager.plasma6.enable = true;
services.openssh.enable = true;
vacu.packages = ''
jupiter-hw-support
steamdeck-firmware
steamdeck-bios-fwupd
'';
# boot.kernelPatches = [
# {
# name = "gadget";
# patch = null;
# extraStructuredConfig = with lib.kernel; {
# USB_ETH=module;
# USB_GADGET=yes;
# USB_LIBCOMPOSITE=yes;
# USB_CONFIGFS=yes;
# USB_DWC3=module;
# USB_DWC3_PCI=module;
# USB_DWC3_DUAL_ROLE=yes;
# USB_DWC3_HOST=no;
# USB_DWC3_GADGET=no;
# USB_ROLE_SWITCH=yes;
# };
# }
# ];
}

View File

@@ -0,0 +1,72 @@
{
config,
lib,
modulesPath,
...
}:
{
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
boot.initrd.availableKernelModules = [
"nvme"
"xhci_pci"
"usbhid"
"sdhci_pci"
"dwc3_pci"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
/*
fileSystems."/" =
{ device = "/dev/disk/by-uuid/63f25199-ee0b-4991-8861-c3ba3b464ef2";
fsType = "btrfs";
options = [ "subvol=root" ];
};
fileSystems."/home" =
{ device = "/dev/disk/by-uuid/63f25199-ee0b-4991-8861-c3ba3b464ef2";
fsType = "btrfs";
options = [ "subvol=home" ];
};
fileSystems."/nix" =
{ device = "/dev/disk/by-uuid/63f25199-ee0b-4991-8861-c3ba3b464ef2";
fsType = "btrfs";
options = [ "subvol=nix" ];
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/63f25199-ee0b-4991-8861-c3ba3b464ef2";
fsType = "btrfs";
options = [ "subvol=boot" ];
};
*/
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/2aad8cab-7b97-47de-8608-fe9f12e211a4";
fsType = "ext4";
options = [ "nofail" ];
};
fileSystems."/boot/EFI" = {
device = "/dev/disk/by-uuid/C268-79C8";
fsType = "vfat";
options = [ "nofail" ];
};
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.interfaces.wlo1.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
powerManagement.cpuFreqGovernor = lib.mkDefault "ondemand";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View File

@@ -1,18 +1,7 @@
{ inputs, ... }: { ... }:
{ {
home-manager.users.shelvacu = { home-manager.users.shelvacu = {
# these make vscode-remote work
imports = [
inputs.vscode-server.homeModules.default
];
services.vscode-server.enable = true;
home.stateVersion = "23.11"; home.stateVersion = "23.11";
programs.git = {
enable = true;
userName = "Shelvacu";
userEmail = "git@shelvacu.com";
};
programs.librewolf = { programs.librewolf = {
enable = true; enable = true;

View File

@@ -1,6 +1,8 @@
{ inputs, ... }: let { inputs, ... }:
let
padtype-pkg = inputs.padtype.packages."x86_64-linux".default; padtype-pkg = inputs.padtype.packages."x86_64-linux".default;
in { in
{
environment.systemPackages = [ padtype-pkg ]; environment.systemPackages = [ padtype-pkg ];
systemd.services."padtype" = { systemd.services."padtype" = {
@@ -9,4 +11,12 @@ in {
}; };
boot.initrd.preLVMCommands = "${padtype-pkg}/bin/padtype &"; boot.initrd.preLVMCommands = "${padtype-pkg}/bin/padtype &";
boot.initrd.kernelModules = [
"uhid"
"i2c_hid_acpi"
"usbhid"
"mac_hid"
"evdev"
"uinput"
];
} }

View File

@@ -1,5 +1,6 @@
{ ... }: { inputs, ... }:
{ {
imports = [ inputs.disko.nixosModules.default ];
disko.devices.disk.blarg = { disko.devices.disk.blarg = {
device = "/dev/disk/by-id/nvme-Micron_2400_MTFDKBK2T0QFM_230341951668_1-part11"; device = "/dev/disk/by-id/nvme-Micron_2400_MTFDKBK2T0QFM_230341951668_1-part11";
content = { content = {
@@ -13,15 +14,24 @@
subvolumes = { subvolumes = {
"/root" = { "/root" = {
mountpoint = "/"; mountpoint = "/";
mountOptions = [ "compress=zstd" "noatime" ]; mountOptions = [
"compress=zstd"
"noatime"
];
}; };
"/home" = { "/home" = {
mountpoint = "/home"; mountpoint = "/home";
mountOptions = [ "compress=zstd" "noatime" ]; mountOptions = [
"compress=zstd"
"noatime"
];
}; };
"/nix" = { "/nix" = {
mountpoint = "/nix"; mountpoint = "/nix";
mountOptions = [ "compress=zstd" "noatime" ]; mountOptions = [
"compress=zstd"
"noatime"
];
}; };
# "/swap" = { # "/swap" = {
# mountpoint = "/.swapvol"; # mountpoint = "/.swapvol";

5
hosts/fw/android.nix Normal file
View File

@@ -0,0 +1,5 @@
{ pkgs, ... }:
{
vacu.packages = pkgs.androidStudioPackages.stable.all;
users.users.shelvacu.extraGroups = [ "kvm" ];
}

76
hosts/fw/apex.nix Normal file
View File

@@ -0,0 +1,76 @@
# everything to interact with my apex flex, pcsc stuff, fido2 stuff, etc
{
pkgs,
lib,
config,
...
}:
let
# to match package used in config.services.pcscd, unfortunately not exposed like usual
pcsclite-pkg = if config.security.polkit.enable then pkgs.pcscliteWithPolkit else pkgs.pcsclite;
in
{
# apparently this is already enabled??
# nixpkgs.overlays = [ ( final: prev: {
# libfido2 = prev.libfido2.override { withPcsclite = true; };
# } ) ];
vacu.packages = lib.mkMerge [
''
libfido2
pcsc-tools
scmccid
opensc
pcsclite
''
{ pcsclite.package = pcsclite-pkg; }
];
services.pcscd.enable = true;
# conflicts with pcscd, see https://stackoverflow.com/questions/55144458/unable-to-claim-usb-interface-device-or-resource-busy-stuck
boot.blacklistedKernelModules = [
"pn533_usb"
"pn533"
"nfc"
];
# bunch of stuff from https://wiki.nixos.org/wiki/Web_eID
# Tell p11-kit to load/proxy opensc-pkcs11.so, providing all available slots
# (PIN1 for authentication/decryption, PIN2 for signing).
# environment.etc."pkcs11/modules/opensc-pkcs11".text = ''
# module: ${pkgs.opensc}/lib/opensc-pkcs11.so
# '';
# environment.etc."opensc.conf".text = ''
# app default {
# reader_driver pcsc {
# enable_pinpad = false;
# }
# }
# '';
environment.systemPackages = [
# Wrapper script to tell to Chrome/Chromium to use p11-kit-proxy to load
# security devices, so they can be used for TLS client auth.
# Each user needs to run this themselves, it does not work on a system level
# due to a bug in Chromium:
#
# https://bugs.chromium.org/p/chromium/issues/detail?id=16387
(pkgs.writeShellScriptBin "setup-browser-eid" ''
NSSDB="''${HOME}/.pki/nssdb"
mkdir -p ''${NSSDB}
${pkgs.nssTools}/bin/modutil -force -dbdir sql:$NSSDB -add p11-kit-proxy \
-libfile ${pkgs.p11-kit}/lib/p11-kit-proxy.so
'')
];
# programs.firefox.enable = true;
# programs.firefox.policies.SecurityDevices.p11-kit-proxy = "${pkgs.p11-kit}/lib/p11-kit-proxy.so";
# trying CTAP-bridge
services.udev.extraRules = ''
KERNEL=="hidg[0-9]", SUBSYSTEM=="hidg", SYMLINK+="ctaphid", MODE="0666", TAG+="uaccess"
KERNEL=="ccidg[0-9]", SUBSYSTEM=="ccidg", SYMLINK+="ccidsc", MODE="0666", TAG+="uaccess"
'';
}

158
hosts/fw/default.nix Normal file
View File

@@ -0,0 +1,158 @@
{ inputs, pkgs, lib, vacuModules, ... }:
{
imports = [
inputs.nixos-hardware.nixosModules.framework-16-7040-amd
"${inputs.self}/tf2"
vacuModules.sops
./apex.nix
./android.nix
./thunderbolt.nix
./fwupd.nix
./zfs.nix
./virtualbox.nix
./radicle.nix
./tpm-fido.nix
./podman.nix
./waydroid.nix
];
boot.supportedFilesystems = [ "bcachefs" ];
vacu.hostName = "fw";
vacu.shell.color = "magenta";
vacu.verifySystem.expectedMac = "e8:65:38:52:5c:59";
vacu.systemKind = "laptop";
boot.binfmt.emulatedSystems = [ "aarch64-linux" ];
# standard kernel: waydroid works
# lqx kernel: games run with less stutters
boot.kernelPackages = pkgs.linuxKernel.packages.linux_lqx;
# boot.kernelPackages = pkgs.linuxKernel.packages.linux_6_15;
networking.networkmanager.enable = true;
services.irqbalance.enable = true;
# boot.kernelParams = [ "nvme.noacpi=1" ]; # DONT DO IT: breaks shit even more
services.fprintd.enable = false; # kinda broken
users.users.shelvacu.extraGroups = [ "dialout" ];
programs.steam.extraCompatPackages = [ pkgs.proton-ge-bin ];
vacu.packages = ''
android-studio
framework-tool
fw-ectool
headsetcontrol
openterface-qt
intiface-central
osu-lazer
mumble
obs-studio
'';
services.power-profiles-daemon.enable = true;
networking.firewall.enable = false;
services.xserver.enable = true;
services.displayManager.sddm.enable = true;
services.desktopManager.plasma6.enable = true;
services.printing.enable = true;
programs.system-config-printer.enable = true;
boot.loader.grub.enable = true;
boot.loader.grub.efiSupport = true;
boot.loader.grub.efiInstallAsRemovable = true;
boot.loader.grub.memtest86.enable = true;
boot.loader.grub.mirroredBoots = [
{
devices = [ "nodev" ];
path = "/boot0";
}
{
devices = [ "nodev" ];
path = "/boot1";
}
];
networking.hostId = "c6e309d5";
services.openssh.enable = true;
system.stateVersion = "23.11"; # Did you read the comment?
boot.initrd.availableKernelModules = [
"nvme"
"xhci_pci"
"thunderbolt"
"usb_storage"
"usbhid"
"sd_mod"
];
#boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
#boot.extraModulePackages = [ ];
fileSystems."/" = {
device = "fw/root";
fsType = "zfs";
};
fileSystems."/cache" = {
device = "fw/cache";
fsType = "zfs";
};
fileSystems."/home/shelvacu/cache" = {
device = "/cache/shelvacu";
options = [ "bind" ];
};
fileSystems."/boot0" = {
device = "/dev/disk/by-label/BOOT0";
fsType = "vfat";
options = [
"fmask=0022"
"dmask=0022"
"nofail"
];
};
fileSystems."/boot1" = {
device = "/dev/disk/by-label/BOOT1";
fsType = "vfat";
options = [
"fmask=0022"
"dmask=0022"
"nofail"
];
};
hardware.cpu.amd.updateMicrocode = true;
hardware.enableAllFirmware = true;
hardware.graphics = {
extraPackages = [
pkgs.rocmPackages.clr.icd
pkgs.amdvlk
];
};
programs.nix-ld.enable = true;
programs.steam = {
enable = true;
remotePlay.openFirewall = true;
};
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
};
hardware.bluetooth.enable = true;
hardware.bluetooth.powerOnBoot = true;
services.blueman.enable = true;
services.postgresql.enable = true; # for development
vacu.programs.thunderbird.enable = true;
}

8
hosts/fw/fwupd.nix Normal file
View File

@@ -0,0 +1,8 @@
{ config, lib, ... }:
{
vacu.packages = [ config.services.fwupd.package ];
services.fwupd.enable = true;
#fwupd gets confused by the multiple EFI partitions, I think I just have to pick one
#update: it didn't work, I dunno why. Leaving this here anyways
services.fwupd.daemonSettings.EspLocation = lib.mkForce "/boot0";
}

13
hosts/fw/podman.nix Normal file
View File

@@ -0,0 +1,13 @@
{ ... }:
{
virtualisation.containers.enable = true;
virtualisation.podman = {
enable = true;
# Create a `docker` alias for podman, to use it as a drop-in replacement
dockerCompat = true;
# Required for containers under podman-compose to be able to talk to each other.
defaultNetwork.settings.dns_enabled = true;
};
users.users.shelvacu.extraGroups = [ "podman" ];
}

20
hosts/fw/radicle.nix Normal file
View File

@@ -0,0 +1,20 @@
{ config, ... }:
{
sops.secrets.radicle-key = {
sopsFile = "${config.vacu.sops.secretsPath}/radicle-private.key";
format = "binary"; # its actually an openssh private key which is kinda plaintext, but there is no plaintext option and treating it as opaque binary works fine
};
services.radicle = {
enable = true;
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC2HqXfjT4vPEqqM5Pty7EuswzeO80IgG6MtCvDAqOkD";
privateKeyFile = config.sops.secrets.radicle-key.path;
settings = {
node.alias = "shelvacu-fw";
seedingPolicy.default = "block";
};
};
vacu.packages.radicle-node = {
enable = true;
package = config.services.radicle.package;
};
}

13
hosts/fw/thunderbolt.nix Normal file
View File

@@ -0,0 +1,13 @@
{ lib, config, ... }:
{
services.hardware.bolt.enable = true;
vacu.packages = lib.mkMerge [
''
thunderbolt
bolt
kdePackages.plasma-thunderbolt
''
{ bolt.package = config.services.hardware.bolt.package; }
];
}

14
hosts/fw/tpm-fido.nix Normal file
View File

@@ -0,0 +1,14 @@
{ config, ... }:
{
vacu.packages = [ "tpm-fido" ];
users.groups.uhid = { };
users.users.shelvacu.extraGroups = [
config.security.tpm2.tssGroup
config.users.groups.uhid.name
];
security.tpm2.enable = true;
security.tpm2.applyUdevRules = true;
services.udev.extraRules = ''
KERNEL=="uhid", SUBSYSTEM=="misc", GROUP="${config.users.groups.uhid.name}", MODE="0660"
'';
}

8
hosts/fw/virtualbox.nix Normal file
View File

@@ -0,0 +1,8 @@
{ ... }:
{
virtualisation.virtualbox.host = {
enable = true;
enableExtensionPack = true;
};
users.extraGroups.vboxusers.members = [ "shelvacu" ];
}

5
hosts/fw/waydroid.nix Normal file
View File

@@ -0,0 +1,5 @@
{ ... }:
{
boot.kernelParams = [ "psi=1" ];
virtualisation.waydroid.enable = true;
}

7
hosts/fw/zfs.nix Normal file
View File

@@ -0,0 +1,7 @@
{ pkgs, ... }:
{
boot.zfs.extraPools = [ "fw" ];
systemd.services.zfs-mount.enable = false;
# see also fileSystems."/"
}

View File

@@ -0,0 +1,30 @@
{ config, lib, ... }:
{
# this is an installer image, created anew every time. There's no state we need to worry about messing up
system.stateVersion = config.system.nixos.release;
services.openssh.settings.PermitRootLogin = lib.mkForce "yes";
vacu.hostName = "vacuInstaller";
vacu.shell.color = "red";
vacu.systemKind = "minimal";
vacu.packages = ''
acpi
iio-sensor-proxy
aircrack-ng
# bitwarden-cli # 800MB closure size!
borgbackup
dmidecode
home-manager
man
mercurial
nix-index
nix-inspect
nix-search-cli
nmap
nvme-cli
rclone
smartmontools
tcpdump
termscp
'';
}

8
hosts/installer/iso.nix Normal file
View File

@@ -0,0 +1,8 @@
{ modulesPath, ... }:
{
imports = [
./common
"${modulesPath}/installer/cd-dvd/installation-cd-minimal.nix"
];
isoImage.isoBaseName = "nixos-shel-installer";
}

7
hosts/installer/pxe.nix Normal file
View File

@@ -0,0 +1,7 @@
{ modulesPath, ... }:
{
imports = [
./common
"${modulesPath}/installer/netboot/netboot-minimal.nix"
];
}

View File

@@ -0,0 +1,7 @@
{ ... }:
{
hardware.bluetooth.enable = true;
hardware.bluetooth.powerOnBoot = true;
# services.blueman.enable = true;
}

48
hosts/legtop/default.nix Normal file
View File

@@ -0,0 +1,48 @@
{ pkgs, inputs, ... }:
{
imports = [
../common/nixos.nix
inputs.nixos-hardware.nixosModules.gpd-micropc
./hardware.nix
./bluetooth.nix
];
vacu.hostName = "legtop";
vacu.shortHostName = "lt";
vacu.shell.color = "blue";
vacu.verifySystem.expectedMac = "30:9e:90:33:01:07";
vacu.systemKind = "laptop";
system.stateVersion = "24.05";
boot.binfmt.emulatedSystems = [ "aarch64-linux" ];
services.power-profiles-daemon.enable = true;
networking.networkmanager.enable = true;
services.openssh.enable = true;
services.xserver.enable = true;
services.displayManager.sddm.enable = true;
services.displayManager.sddm.wayland.enable = true;
services.desktopManager.plasma6.enable = true;
boot.loader.grub.enable = true;
boot.loader.grub.efiSupport = true;
boot.loader.grub.device = "nodev";
boot.loader.efi.canTouchEfiVariables = true;
hardware.cpu.intel.updateMicrocode = true;
hardware.enableAllFirmware = true;
services.fwupd.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
};
programs.steam.enable = true;
boot.kernelPackages = pkgs.linuxPackages_lqx;
}

33
hosts/legtop/hardware.nix Normal file
View File

@@ -0,0 +1,33 @@
{ ... }:
{
boot.initrd.availableKernelModules = [
"ahci"
"xhci_pci"
"usbhid"
"usb_storage"
"sd_mod"
"sdhci_pci"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
fileSystems."/" = {
device = "/dev/disk/by-uuid/e3aebf24-be76-4064-a9f5-3930c8cd1382";
fsType = "ext4";
};
boot.initrd.luks.devices."root".device = "/dev/disk/by-uuid/7fd2ca2d-7faf-4d40-8cde-ce531fa679b5";
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/4C47-D9A3";
fsType = "vfat";
options = [
"fmask=0022"
"dmask=0022"
"nofail"
];
};
nixpkgs.hostPlatform = "x86_64-linux";
hardware.cpu.intel.updateMicrocode = true;
}

156
hosts/liam/backup.nix Normal file
View File

@@ -0,0 +1,156 @@
{
config,
vaculib,
pkgs,
lib,
...
}:
let
inherit (lib) mkOption;
cfg = config.vacu.liam.backup;
commonServiceConfig = {
Type = "oneshot";
StateDirectory = "auto-borg";
CacheDirectory = "auto-borg";
ReadOnlyPaths = cfg.paths ++ [ cfg.keyPath ];
User = cfg.user;
Group = cfg.user;
LockPersonality = true;
MemoryDenyWriteExecute = true;
PrivateDevices = true;
# PrivateUsers = true;
ProcSubset = "pid";
PrivateTmp = true;
ProtectClock = true;
ProtectControlGroups = true;
ProtectHome = true;
ProtectHostname = true;
ProtectKernelLogs = true;
ProtectKernelModules = true;
ProtectKernelTunables = true;
ProtectProc = "invisible";
ProtectSystem = "strict";
RestrictAddressFamilies = [
"AF_INET"
"AF_INET6"
];
RestrictNamespaces = true;
RestrictRealtime = true;
RestrictSUIDSGID = true;
SystemCallArchitectures = "native";
SystemCallFilter = [
"@system-service"
"~@privileged"
];
UMask = "0077";
AmbientCapabilities = [ "CAP_DAC_READ_SEARCH" ];
CapabilityBoundingSet = [ "CAP_DAC_READ_SEARCH" ];
};
in
{
options.vacu.liam.backup = {
user = mkOption { default = "autoborger"; };
rsyncUser = mkOption { default = "fm2382"; };
rsyncHost = mkOption {
default = "${cfg.rsyncUser}.rsync.net";
defaultText = "(output)";
};
repo = mkOption {
default = "${cfg.rsyncUser}@${cfg.rsyncHost}:borg-repos/liam-backup";
defaultText = "(output)";
};
package = mkOption {
default = pkgs.borgbackup;
defaultText = "pkgs.borgbackup";
};
cmd = mkOption {
default = lib.getExe cfg.package;
defaultText = "lib.getExe cfg.package";
};
paths = mkOption {
default = [
"/var/lib/mail"
"/var/lib/dovecot"
"/var/log"
];
};
keyPath = mkOption {
default = config.sops.secrets.liam-borg-key.path;
defaultText = "TODO";
};
};
config = {
vacu.assertions = lib.singleton {
assertion =
(lib.versionAtLeast cfg.package.version "1.4.0")
&& !(lib.versionAtLeast cfg.package.version "1.5.0");
message = "Only for version 1.4.x";
fatal = true;
};
sops.secrets.liam-borg-key = {
owner = cfg.user;
};
# systemd.tmpfiles.settings."10-auto-borg" = lib.genAttrs cfg.paths (_:
# {
# # A+ = append to ACLs recursively
# "A+" = {
# argument = "u:${cfg.user}:r-x";
# };
# }
# );
users.users.${cfg.user} = {
isSystemUser = true;
group = cfg.user;
home = "/var/lib/auto-borg";
};
users.groups.${cfg.user} = { };
systemd.services.auto-borg-gen-key = {
script = ''
set -euo pipefail
${lib.optionalString config.vacu.underTest "${pkgs.openssh}/bin/ssh -oBatchMode=yes -oStrictHostKeyChecking=accept-new ${cfg.rsyncHost} || true"}
${pkgs.openssh}/bin/ssh-keygen -t ed25519 -f "$STATE_DIRECTORY"/id_ed25519 -N ""
'';
serviceConfig = commonServiceConfig;
};
systemd.services.auto-borg = {
script = ''
set -euo pipefail
# makes a date like 2025-04-15_21-24-29_UTC
dashed_date="$(date -u '+%F_%H-%M-%S_%Z')"
archive_name="liam-auto-backup--$dashed_date"
export BORG_PASSPHRASE="$(cat ${lib.escapeShellArg cfg.keyPath})"
export BORG_REMOTE_PATH="borg14"
export BORG_RSH="ssh -i $STATE_DIRECTORY/id_ed25519"
export BORG_REPO=${lib.escapeShellArg cfg.repo}
export BORG_CACHE_DIR="$CACHE_DIRECTORY/borg"
export BORG_CONFIG_DIR="$STATE_DIRECTORY/borg"
cmd=(
${lib.escapeShellArg cfg.cmd}
create
--show-rc
--verbose
--show-version
--stats
--atime
"::$archive_name"
${lib.escapeShellArgs cfg.paths}
)
"''${cmd[@]}"
'';
serviceConfig = commonServiceConfig;
};
systemd.timers.auto-borg = {
enable = !config.vacu.underTest;
wantedBy = [ "timers.target" ];
# run every day at a random time between 3am and 4am, los angeles time
timerConfig = {
OnCalendar = "*-*-* 03:00:00 America/Los_Angeles";
RandomizedDelaySec = 3600;
};
};
};
}

74
hosts/liam/default.nix Normal file
View File

@@ -0,0 +1,74 @@
{
modulesPath,
config,
vaculib,
...
}:
let
inherit (vaculib) mkOutOption;
in
{
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
(modulesPath + "/virtualisation/digital-ocean-config.nix")
./nginx.nix
./sops.nix
./dovecot.nix
./mail.nix
./dkim.nix
./sieve.nix
./network.nix
./backup.nix
];
options = {
vacu.liam = {
shel_domains = mkOutOption [
"shelvacu.com"
"dis8.net"
"mail.dis8.net"
"jean-luc.org"
"in.jean-luc.org"
"vacu.store"
"shelvacu.miras.pet"
"chat.for.miras.pet"
"sv.mt"
];
julie_domains = mkOutOption [
"violingifts.com"
"theviolincase.com"
"shop.theviolincase.com"
];
domains = mkOutOption (config.vacu.liam.shel_domains ++ config.vacu.liam.julie_domains);
relayhosts = {
allDomains = (mkOutOption "[outbound.mailhop.org]:587") // {
readOnly = false;
};
shelvacuAlt = (mkOutOption "[relay.dynu.com]:587") // {
readOnly = false;
};
};
reservedIpLocal = mkOutOption "10.46.0.7";
};
};
config = {
vacu.hostName = "liam";
vacu.shell.color = "cyan";
networking.domain = "dis8.net";
vacu.systemKind = "minimal";
hardware.enableAllFirmware = false;
hardware.enableRedistributableFirmware = false;
# networking.interfaces."ens3".useDHCP = false;
services.openssh.enable = true;
virtualisation.digitalOcean.setSshKeys = false;
users.users.root.openssh.authorizedKeys.keys =
config.users.users.shelvacu.openssh.authorizedKeys.keys;
system.stateVersion = "23.11";
};
}

View File

@@ -1,7 +1,13 @@
{ config, pkgs, lib, ... }: {
config,
pkgs,
lib,
...
}:
let let
inherit (config.vacu.liam) domains; inherit (config.vacu.liam) domains;
in { in
{
services.opendkim = { services.opendkim = {
enable = true; enable = true;
keyPath = "/run/secrets/dkimkeys"; keyPath = "/run/secrets/dkimkeys";

View File

@@ -1,4 +1,4 @@
{ config, pkgs, lib, ... }: { config, lib, ... }:
{ {
networking.firewall.allowedTCPPorts = [ 993 ]; networking.firewall.allowedTCPPorts = [ 993 ];
systemd.tmpfiles.settings.whatever."/var/lib/mail".d = { systemd.tmpfiles.settings.whatever."/var/lib/mail".d = {
@@ -17,14 +17,18 @@
sslServerKey = config.security.acme.certs."liam.dis8.net".directory + "/key.pem"; sslServerKey = config.security.acme.certs."liam.dis8.net".directory + "/key.pem";
sslServerCert = config.security.acme.certs."liam.dis8.net".directory + "/full.pem"; sslServerCert = config.security.acme.certs."liam.dis8.net".directory + "/full.pem";
enablePAM = false; enablePAM = false;
protocols = lib.mkForce [ "imap" "lmtp" "sieve" ]; protocols = lib.mkForce [
modules = [ pkgs.dovecot_pigeonhole ]; "imap"
"lmtp"
"sieve"
];
mailUser = "vmail"; mailUser = "vmail";
mailGroup = "vmail"; mailGroup = "vmail";
createMailUser = true; createMailUser = true;
mailLocation = "mdbox:~/mail"; mailLocation = "mdbox:~/mail";
extraConfig = '' extraConfig = ''
mail_home = /var/lib/mail/%n mail_home = /var/lib/mail/%n
mail_max_userip_connections = 100
service auth { service auth {
unix_listener /var/lib/postfix/queue/private/dovecot-auth { unix_listener /var/lib/postfix/queue/private/dovecot-auth {
group = ${config.services.postfix.group} group = ${config.services.postfix.group}
@@ -75,22 +79,33 @@
userdb { userdb {
driver = passwd-file driver = passwd-file
args = username_format=%n /run/secrets/dovecot-passwd args = username_format=%n ${config.sops.secrets."dovecot-passwd".path}
override_fields = uid=${config.services.dovecot2.mailUser} gid=${config.services.dovecot2.mailGroup} user=%n override_fields = uid=${config.services.dovecot2.mailUser} gid=${config.services.dovecot2.mailGroup} user=%n
} }
passdb { passdb {
driver = passwd-file driver = passwd-file
args = username_format=%n /run/secrets/dovecot-passwd args = username_format=%n ${config.sops.secrets."dovecot-passwd".path}
override_fields = user=%n override_fields = user=%n
} }
namespace { namespace {
separator = . separator = .
inbox = yes inbox = yes
mailbox MagicRefilter {
auto = create
}
} }
# mail_debug = yes # mail_debug = yes
mail_plugins = $mail_plugins notify mail_log
plugin {
# sieve_trace_debug = yes
mail_log_events = delete undelete expunge save copy mailbox_create mailbox_delete mailbox_rename flag_change
mail_log_fields = uid box msgid size from
}
''; '';
}; };
} }

208
hosts/liam/mail.nix Normal file
View File

@@ -0,0 +1,208 @@
{
config,
lib,
pkgs,
...
}:
let
inherit (config.vacu.liam)
shel_domains
julie_domains
domains
relayhosts
;
mapLines = f: lis: lib.concatStringsSep "\n" (map f lis);
debug = false;
fqdn = config.networking.fqdn;
relayable_domains = [
"shelvacu.com"
"vacu.store"
"chat.for.miras.pet"
];
dovecot_transport = "lmtp:unix:private/dovecot-lmtp";
reject_spam_sources = [
"reject-spam-test@example.com"
"buyerservice@made-in-china.com"
"upgrade-plans@asuswebstorage.com"
"info@rfidlabel.com"
"made-in-china.com"
"*.made-in-china.com"
"hotels.com"
"*.hotels.com"
];
banned_ips = [
"45.192.103.243/32"
"165.154.207.0/24"
"165.154.226.0/24"
"210.242.134.0/26"
"137.220.198.0/24"
"122.96.0.0/15"
];
# must be bigger than gmail's 25MB "attachment limit" which after base64 encoding (x 1.33) is ~33MB
mailSizeLimit = 35 * 1024 * 1024;
in
{
networking.firewall.allowedTCPPorts = [
25
465
];
vacu.acmeCertDependencies."liam.dis8.net" = [ "postfix.service" ];
services.postfix = {
enable = true;
hostname = fqdn;
# this goes into virtual_alias_maps
# "Note: for historical reasons, virtual_alias_maps apply to recipients in all domain classes, not only the virtual alias domain class."
virtual =
''
julie@shelvacu.com julie
mom@shelvacu.com julie
psv@shelvacu.com psv
''
+ (mapLines (d: "@${d} shelvacu") shel_domains)
+ "\n"
+ (mapLines (d: "@${d} julie") julie_domains);
transport = ''
shelvacu@${fqdn} ${dovecot_transport}
julie@${fqdn} ${dovecot_transport}
psv@${fqdn} ${dovecot_transport}
backup@${fqdn} ${dovecot_transport}
'';
sslKey = config.security.acme.certs."liam.dis8.net".directory + "/key.pem";
sslCert = config.security.acme.certs."liam.dis8.net".directory + "/full.pem";
postmasterAlias = "shelvacu";
rootAlias = "shelvacu";
enableSubmission = false;
enableSubmissions = true;
mapFiles.header_checks = pkgs.writeText "header-checks" (
''
/./ INFO checker headers
''
+ (mapLines (
d: "/^(from|x-original-from|return-path|mail-?from):.*@${lib.escape [ "." ] d}\\s*>?\\s*$/ REJECT"
) domains)
);
mapFiles.sender_access = pkgs.writeText "sender-access" (
mapLines (pattern: "${pattern} REJECT spam") (domains ++ reject_spam_sources)
);
mapFiles.banned_ips = pkgs.writeText "banned-ips" (mapLines (ip: "${ip} REJECT spam") banned_ips);
# hack to get postfix to add a X-Original-To header
mapFiles.add_envelope_to = pkgs.writeText "addenvelopeto" "/(.+)/ PREPEND X-Envelope-To: $1";
# mapFiles.sender_transport = pkgs.writeText "sender-transport" "@shelvacu.com relayservice";
mapFiles.sender_transport = pkgs.writeText "sender-transport" (
mapLines (d: "@${d} relayservice") relayable_domains
);
mapFiles.sender_relay = pkgs.writeText "sender-relay" (
''
@shelvacu.com ${relayhosts.allDomains} ${relayhosts.shelvacuAlt}
''
+ (mapLines (d: "@${d} ${relayhosts.allDomains}") relayable_domains)
);
mapFiles.extra_login_maps = pkgs.writeText "extra-login-maps" (
''
robot@vacu.store vacustore
zulip-notify@chat.for.miras.pet miracult-zulip
idrac-62pn9z1@shelvacu.com idrac-62pn9z1
''
+ config.services.postfix.virtual
);
# verbatim appended to main.cf
extraConfig = ''
smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt
inet_protocols = ipv4
virtual_alias_domains =
${lib.concatStringsSep ",\n " domains}
message_size_limit = ${toString mailSizeLimit}
sender_dependent_default_transport_maps = hash:/etc/postfix/sender_transport
sender_dependent_relayhost_maps = hash:/etc/postfix/sender_relay
header_checks = pcre:/etc/postfix/header_checks
smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/sender_access permit
smtpd_client_restrictions = check_client_access cidr:/etc/postfix/banned_ips permit
smtpd_recipient_restrictions = check_recipient_access pcre:/etc/postfix/add_envelope_to permit
recipient_delimiter = +
#we should never use these transport methods unless thru transport map
# RFC3463:
# 5.X.X = permanent error
# X.3.X = mail system failure
# X.3.5 = System incorrectly configured
# I would've never thought there'd be a standard way to specifically say "you found an error in my config"
local_transport = error:5.3.5 how did this even happen?? (e-local)
virtual_transport = error:5.3.5 how did this even happen?? (e-virtual)
# X.7.1 = Delivery not authorized, message refused
relay_transport = error:5.7.1 relay is so very disabled
lmtp_destination_recipient_limit = 1
always_bcc = backup@${fqdn}
# not actually 1024 bits, this applies to all DHE >= 1024 bits
smtpd_tls_dh1024_param_file = ${lib.optionalString config.services.dovecot2.enableDHE config.security.dhparams.params.dovecot2.path}
# smtp_bind_address = 10.46.0.7
# inet_interfaces = all
# inet_protocols = ipv4
${lib.optionalString config.services.opendkim.enable (
assert (config.services.opendkim.socket == "local:/run/opendkim/opendkim.sock");
''
smtpd_milters = unix:/run/opendkim/opendkim.sock
non_smtpd_milters = unix:/run/opendkim/opendkim.sock
''
)}
'';
masterConfig."relayservice" = {
command = "smtp";
type = "unix";
args = [
"-o"
"smtp_sasl_auth_enable=yes"
"-o"
"smtp_sasl_security_options=noanonymous"
"-o"
"smtp_tls_security_level=secure"
"-o"
"smtp_sasl_password_maps=texthash:${config.sops.secrets.relay_creds.path}"
"-o"
"smtp_tls_wrappermode=no"
] ++ (if debug then [ "-v" ] else [ ]);
};
masterConfig.qmgr = lib.mkIf debug { args = [ "-v" ]; };
masterConfig.cleanup = lib.mkIf debug { args = [ "-v" ]; };
masterConfig.smtpd = lib.mkIf debug { args = [ "-v" ]; };
submissionsOptions = {
smtpd_tls_key_file = config.security.acme.certs."liam.dis8.net".directory + "/key.pem";
smtpd_tls_cert_file = config.security.acme.certs."liam.dis8.net".directory + "/full.pem";
smtpd_tls_security_level = "encrypt";
smtpd_sasl_auth_enable = "yes";
smtpd_tls_auth_only = "yes";
smtpd_reject_unlisted_recipient = "no";
smtpd_client_restrictions = "permit_sasl_authenticated,reject";
milter_macro_daemon_name = "ORIGINATING";
smtpd_sasl_security_options = "noanonymous";
smtpd_sasl_type = "dovecot";
smtpd_sasl_path = "private/dovecot-auth";
message_size_limit = "100000000";
smtpd_sender_login_maps = "hash:/etc/postfix/extra_login_maps";
smtpd_sender_restrictions = "reject_authenticated_sender_login_mismatch";
header_checks = "";
# mozilla intermediate config
smtpd_tls_mandatory_protocols = "!SSLv2,!SSLv3,!TLSv1,!TLSv1.1";
smtpd_tls_protocols = "!SSLv2,!SSLv3,!TLSv1,!TLSv1.1";
smtpd_tls_mandatory_ciphers = "medium";
tls_medium_cipherlist = "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305";
tls_preempt_cipherlist = "no";
};
};
}

32
hosts/liam/network.nix Normal file
View File

@@ -0,0 +1,32 @@
{ lib, config, ... }:
let
# from `curl -fsSL http://169.254.169.254/metadata/v1.json | jq '.interfaces.public[0].anchor_ipv4'`
# {
# "ip_address": "10.46.0.7",
# "netmask": "255.255.0.0",
# "gateway": "10.46.0.1"
# }
interface_conf = {
useDHCP = true;
ipv4.addresses = [
{
address = "10.46.0.7";
prefixLength = 24;
}
];
ipv4.routes = [
{
address = "0.0.0.0";
prefixLength = 0;
via = "10.46.0.1";
options.scope = "global";
options.src = "10.46.0.7";
options.metric = "1200";
}
];
};
in
{
networking.interfaces."ens3" = lib.mkIf (!config.vacu.underTest) interface_conf;
networking.interfaces."eth0" = lib.mkIf (config.vacu.underTest) interface_conf;
}

View File

@@ -1,4 +1,4 @@
{ config, ... }: { ... }:
let let
domains = [ domains = [
"smtp.shelvacu.com" "smtp.shelvacu.com"
@@ -10,7 +10,10 @@ domains = [
]; ];
in in
{ {
networking.firewall.allowedTCPPorts = [ 80 443 ]; networking.firewall.allowedTCPPorts = [
80
443
];
security.acme.acceptTerms = true; security.acme.acceptTerms = true;
security.acme.defaults.webroot = "/var/lib/acme/acme-challenge"; security.acme.defaults.webroot = "/var/lib/acme/acme-challenge";
security.acme.defaults.email = "shelvacu@gmail.com"; security.acme.defaults.email = "shelvacu@gmail.com";

21
hosts/liam/notes.txt Normal file
View File

@@ -0,0 +1,21 @@
I think I can sort my email into these categories:
- A Top priority: should be a notification
- personal emails
- here is a code to login (except ms, ugh)
- B Normal priority: should be reviewed regularly, at least once every couple days
- (some) purchase receipts
- your credit card was used for <amount>
- money stuff
- patreons
- C Low priority: should be skimmed occaisionally to make sure nothing got caught that shouldn't have
- C1 good emails:
- your statement is available to view
-
- C2 spam
- D Shit-tier: never reviewed, except if I'm missing an email I was otherwise expecting
- unsolicited job offers
- anything definitely spam
- M Mailing lists
searches should generally search A,B,C but not D or M

960
hosts/liam/sieve.nix Normal file
View File

@@ -0,0 +1,960 @@
{
pkgs,
lib,
config,
vaculib,
...
}:
let
inherit (builtins)
isString
isList
length
head
all
isInt
isAttrs
isFloat
isBool
;
inherit (lib)
concatStrings
concatStringsSep
splitString
match
replaceStrings
reverseList
elemAt
mapAttrsToList
;
mapConcat = f: xs: concatStrings (map f xs);
mapConcatSep =
sep: f: xs:
concatStringsSep sep (map f xs);
mapConcatLines = f: xs: mapConcatSep "\n" f xs;
isListWhere = xs: f: (isList xs) && (all f xs);
stringOrList = val: (isString val) || ((isListWhere val isString) && (length val) > 0);
listify = val: if isList val then val else [ val ];
is_match = regex: s: (match regex s) != null;
is_not_match = regex: s: !(is_match regex s);
only_printable_ascii = s: is_match "[ -~\r\n]*" s;
has_vars = s: lib.hasInfix ("$" + "{") s;
sieve_raw_escape_string =
s:
if !only_printable_ascii s then
builtins.trace s throw "s failed only_printable_ascii check"
else
replaceStrings [ ''"'' ''\'' "\n" "\r" ] [ ''\"'' ''\\'' ''\n'' ''\r'' ] s;
sieve_encode_string =
{
allow_vars,
for_debug_comment,
with_quotes,
}:
s:
assert isString s;
assert allow_vars || for_debug_comment || (!has_vars s);
let
a = sieve_raw_escape_string s;
b = if for_debug_comment then replaceStrings [ ''*/'' ] [ ''*\/'' ] a else a;
res = if with_quotes then ''"${b}"'' else b;
in
res;
sieve_quote_string = sieve_encode_string {
allow_vars = false;
for_debug_comment = false;
with_quotes = true;
};
sieve_quote_string_with_interp = sieve_encode_string {
allow_vars = true;
for_debug_comment = false;
with_quotes = true;
};
is_valid_long_ident = is_match "[a-z_][a-z0-9_]*";
is_number_ident = is_match "[0-9]*";
is_valid_ident = s: (is_valid_long_ident s) || (is_number_ident s);
interp =
ident:
assert isString ident;
assert is_valid_ident ident;
"$" + "{${ident}}";
dest = "envelope_to";
dest_domain = "envelope_to_domain";
set_envelope = ''
#set_envelope START
if header :index 1 :matches "X-Envelope-To" "*" {
set ${sieve_quote_string dest} "''${1}";
}
if header :index 1 :matches "X-Envelope-To" "*@*" {
set ${sieve_quote_string dest_domain} "''${2}";
}
#set_envelope END
'';
envelope_is =
key:
assert stringOrList key;
''string :is "${interp dest}" ${sieve_encode key}'';
envelope_matches =
key:
assert stringOrList key;
''string :matches "${interp dest}" ${sieve_encode key}'';
envelope_domain_is = key: ''string :is "${interp dest_domain}" ${sieve_quote_string key}'';
sieve_encode_list =
xs:
assert isListWhere xs isString;
"[ ${mapConcatSep ", " sieve_encode xs} ]";
sieve_encode =
val:
if isString val then
sieve_quote_string val
else if isList val then
sieve_encode_list val
else
assert "dunno what to do with this";
null;
sieve_debug_list = xs: "[ ${mapConcat (s: (sieve_debug s) + " ") xs}]";
sieve_debug_attrs =
attrs:
let
toPairStr = name: val: "${sieve_debug name} = ${sieve_debug val}; ";
pairStrs = mapAttrsToList toPairStr attrs;
pairsStr = concatStrings pairStrs;
in
"{ ${pairsStr}}";
sieve_debug =
val:
if isString val then
sieve_encode_string {
allow_vars = true;
for_debug_comment = true;
with_quotes = true;
} val
else if (isInt val) || (isFloat val) then
toString val
else if (isBool val) then
(if val then "true" else "false")
else if isNull val then
"null"
else if isList val then
sieve_debug_list val
else if isAttrs val then
sieve_debug_attrs val
else
assert "dunno what to do with this";
null;
is_flagish =
flag_name:
let
# escape_all = map lib.escapeRegex;
# all from https://datatracker.ietf.org/doc/html/rfc9051#name-formal-syntax
# resp-specials = escape_all [ "]" ];
# DQUOTE = ''"'';
# quoted-specials = escape_all [ DQUOTE "\\" ];
# list-wildcards = escape_all [ "%" "*" ];
# CTL = something; # 0x00 thru 0x1F, and 0x7F
# SP = escape_all [ " " ];
# atom-specials = (escape_all [ "(" ")" "{" ]) ++ [ SP CTL list-wildcards quoted-specials resp-specials ];
# " " 0x20 !allowed
# "!" 0x21 ok
# "\"" 0x22 !allowed
# "#" 0x23 ok
# "$" 0x24 ok
# "%" 0x25 !allowed
# "&" 0x26 ok
# "'" 0x27 ok
# "(" 0x28 !allowed
# ")" 0x29 !allowed
# "*" 0x2a !allowed
# "+" 0x2b ok
# ...
# "Z" 0x5a ok
# "[" 0x5b !allowed
# "\\" 0x5c !allowed
# "]" 0x5d ok
# "^" 0x5e ok
# ...
# "z" 0x7a ok
# "{" 0x7b !allowed
# "|" 0x7c ok
# "}" 0x7d ok
# "~" 0x7e ok
# DEL 0x7f !allowed
# ATOM-CHAR = something; # "any CHAR except atom-specials"
ATOM-CHAR = ''[]!#$&'+-Z^-z|}~]'';
atom = "${ATOM-CHAR}+";
flag-keyword = ''\$MDNSent|\$Forwarded|\$Junk|\$NotJunk|\$Phishing|(${atom})'';
flag-extension = ''\\(${atom})'';
flag = ''\\Answered|\\Flagged|\\Deleted|\\Seen|\\Draft|(${flag-keyword})|(${flag-extension})'';
in
(isString flag_name) && ((builtins.match flag flag_name) != null);
known_flags = rec {
seen = ''\Seen'';
read = seen;
};
pure_flags_impl =
flags: conditions:
assert isListWhere flags isString;
assert isListWhere conditions isString;
assert (length flags) > 0;
assert (length conditions) > 0;
let
argAttrs = { inherit flags conditions; };
firstFlag = head flags;
combined_condition = if (length conditions) == 1 then head conditions else (allof conditions);
in
''
# pure_flags ${sieve_debug argAttrs};
removeflag ${sieve_quote_string firstFlag};
if ${combined_condition} {
${record_action "pure_flags ${concatStringsSep " " flags}"}
${concatStringsSep "\n" (map (flag: ''addflag ${sieve_quote_string flag};'') flags)}
}
# pure_flags end
'';
pure_flags =
flags: conditions:
assert stringOrList flags;
assert stringOrList conditions;
pure_flags_impl (listify flags) (listify conditions);
exists_impl =
headers:
assert isListWhere headers isString;
if headers == [ ] then
"/* exists START: called with empty array */ false /* exists END */"
else
"/* exists START */ exists ${sieve_encode_list headers} /* exists END */";
exists =
headers:
assert stringOrList headers;
exists_impl (listify headers);
header_generic =
match_kind: header_s: match_es:
assert stringOrList header_s;
assert stringOrList match_es;
''/* header_generic START */ header ${match_kind} ${sieve_encode header_s} ${sieve_encode match_es} /* header_generic END */'';
header_matches = header_generic ":matches";
header_is = header_generic ":is";
subject_generic = match_kind: match_es: header_generic match_kind "Subject" match_es;
subject_matches = subject_generic ":matches";
subject_is = subject_generic ":is";
environment_generic =
match_kind: environment_name_s: match_es:
assert stringOrList environment_name_s;
assert stringOrList match_es;
"environment ${match_kind} ${sieve_encode environment_name_s} ${sieve_encode match_es}";
environment_matches = environment_generic ":matches";
environment_is = environment_generic ":is";
from_is =
addr_list:
assert stringOrList addr_list;
''/* from_is START */ address :is :all "From" ${sieve_encode addr_list} /* from_is END */'';
from_matches =
addr_list:
assert stringOrList addr_list;
''/* from_is START */ address :matches :all "From" ${sieve_encode addr_list} /* from_is END */'';
var_is =
var_name: rhs:
assert isString var_name;
assert stringOrList rhs;
''string :is "''${${var_name}}" ${sieve_encode rhs}'';
var_is_true = var_name: var_is var_name "1";
var_is_false = var_name: not (var_is_true var_name);
has_flag =
flag_name:
assert isString flag_name;
assert is_flagish flag_name; # no spaces allowed in flag names
''hasflag :is ${sieve_encode flag_name}'';
set_with_interp =
var_name: new_val:
assert isString var_name;
assert is_valid_ident var_name;
assert isString new_val;
"set ${sieve_encode var_name} ${sieve_quote_string_with_interp new_val};";
set =
var_name: new_val:
assert isString var_name;
assert is_valid_ident var_name;
assert isString new_val;
"set ${sieve_encode var_name} ${sieve_encode new_val};";
set_bool_var =
var_name: bool_val:
assert isBool bool_val;
set var_name (if bool_val then "1" else "0");
over_test_list =
name: test_list:
assert isListWhere test_list isString;
''
${name}(
${concatStringsSep ",\n" test_list}
)
'';
anyof = over_test_list "anyof";
allof = over_test_list "allof";
not = test: "not ${test}";
record_action =
action_desc:
assert isString action_desc;
''addheader "X-Vacu-Action" ${sieve_encode action_desc};'';
fileinto =
folder:
assert isString folder;
''
${record_action "fileinto ${folder}"}
fileinto :create ${sieve_encode folder};
'';
ihave =
extension_name_s:
assert stringOrList extension_name_s;
"ihave ${sieve_encode extension_name_s}";
# email_filters = map (e: ''
# elsif ${envelope_is e} { # item of email_filters
# ${record_action "email_filters fileinto ${mk_email_folder_name e}"}
# fileinto :create ${sieve_quote_string (mk_email_folder_name e)};
# }
# '') email_folders;
# domain_filters = map (d: ''
# elsif ${envelope_domain_is d} { # item of domain_filters
# ${record_action "domain_filters fileinto ${mk_domain_folder_name d}"}
# fileinto :create ${sieve_quote_string (mk_domain_folder_name d)};
# }
# '') domain_folders;
set_from =
{
condition,
var,
default ? "-",
warn_if_unset ? false,
}@args:
''
# set_from ${sieve_debug args}
if ${condition} {
${set_with_interp var (interp "1")}
}
else {
${lib.optionalString warn_if_unset (
maybe_debug "info: Could not set ${var} from condition ${condition}, setting to default(${default})"
)}
${set var default}
}
# set_from END
'';
set_var_from_environment =
item: var:
''
# set_var_from_environment
''
+ set_from {
condition = ''environment :matches ${sieve_quote_string item} "*"'';
inherit var;
};
maybe_debug = msg: ''
if ${ihave "vnd.dovecot.debug"} {
debug_log ${sieve_quote_string_with_interp msg};
}
'';
# trimmed down from https://pages.ebay.com/securitycenter/security_researchers_eligible_domains.html
ebay_domains = vaculib.listOfLines { } ''
ebay.com
ebay.co.uk
ebay.com.au
ebay.de
ebay.ca
ebay.fr
ebay.it
ebay.es
ebay.at
ebay.ch
ebay.com.hk
ebay.com.sg
ebay.com.my
ebay.in
ebay.ph
ebay.ie
ebay.pl
ebay.be
ebay.nl
ebay.cn
ebay.com.tw
ebay.co.jp
ebaythailand.co.th
'';
sieve_text = ''
require [
"fileinto",
"mailbox",
"imap4flags",
"editheader",
"environment",
"variables",
"date",
"index",
"ihave"
];
if ${
allof [
(ihave "imapsieve")
(environment_matches "imap.user" "*")
(environment_matches "location" "MS")
(environment_matches "phase" "post")
]
} {
${set_bool_var "in_imap" true}
} else {
${set_bool_var "in_imap" false}
}
if ${var_is_true "in_imap"} {
if ${
not (allof [
(environment_is "imap.cause" [
"APPEND"
"COPY"
""
])
(environment_is "imap.mailbox" [
"MagicRefilter"
""
])
])
} {
${maybe_debug "NOT doing anything cuz imap.cause and/or imap.mailbox isn't right"}
stop;
}
}
${set_envelope}
${set_var_from_environment "location" "env_location"}
${set_var_from_environment "phase" "env_phase"}
${set_var_from_environment "imap.user" "env_imap_user"}
${set_var_from_environment "imap.email" "env_imap_email"}
${set_var_from_environment "imap.cause" "env_imap_cause"}
${set_var_from_environment "imap.mailbox" "env_imap_mailbox"}
${set_var_from_environment "imap.changedflags" "env_imap_changedflags"}
${set_from {
condition = ''currentdate :matches "iso8601" "*"'';
var = "datetime";
}}
${set_with_interp "sieved_message" ''at ''${datetime} by ${config.vacu.versionId} loc ''${env_location} phase ''${env_phase} user ''${env_imap_user} email ''${env_imap_email} cause ''${env_imap_cause} mailbox ''${env_imap_mailbox} changedflags ''${env_imap_changedflags} envelope ''${dest}''}
${maybe_debug ''X-Vacu-Sieved: ''${sieved_message}''}
if ${ihave "envelope"} {
if envelope :all :matches "to" "*@*" {
${set_with_interp "userfor" (interp "1")}
} else {
error "i dunno what to do, theres no envelope";
}
}
elsif ${var_is_true "in_imap"} {
${set_with_interp "userfor" (interp "env_imap_user")}
}
else {
error "dont have envelope or imapsieve, dunno what to do";
}
if ${var_is "userfor" "shelvacu"} {
addheader "X-Vacu-Sieved" "''${sieved_message}";
removeflag "not-spamish";
removeflag "orders";
removeflag "banking";
removeflag "banking-statements";
removeflag "banking-transactions";
removeflag "A";
removeflag "B";
removeflag "B.subscriptions";
removeflag "C";
removeflag "D";
${pure_flags [ "wells-fargo" "banking" ] (envelope_is "wf-primary@shelvacu.com")}
${pure_flags
[ "wells-fargo-transactions" "banking-transactions" "B" ]
[
(has_flag "wells-fargo")
(subject_matches [
"You just got paid!"
"Wells Fargo card purchase exceeded preset amount"
"You made a payment"
"You made a credit card purchase of *"
"Your card wasn't present for a purchase"
"Account update"
"You've earned cash back from My Wells Fargo Deals"
"Confirmation of your Wells Fargo Rewards redemption"
"You sent money with Zelle(R)"
])
]
}
${pure_flags
[ "wells-fargo-statements" "banking-statements" "C" ]
[
(has_flag "wells-fargo")
(subject_matches [
"Your statement for credit card account *"
"Your statement for account *"
])
]
}
${pure_flags
[ "wells-fargo-action-required" "A" ]
[
# wf is actually careful about saying action required
(has_flag "wells-fargo")
(subject_matches "Action Required: *")
]
}
${pure_flags
[ "wells-fargo-misc" "A" ]
[
(has_flag "wells-fargo")
(not (has_flag "wells-fargo-transactions"))
(not (has_flag "wells-fargo-statements"))
(not (has_flag "wells-fargo-action-required"))
]
}
${pure_flags [ "chase" "banking" ] (envelope_is "chase@shelvacu.com")}
${pure_flags
[ "chase-transactions" "banking-transactions" "B" ]
[
(has_flag "chase")
(subject_matches [
"Your * payment is scheduled"
"You made a * transaction with *"
"Your * transaction with *"
"Chase security alert: You signed in with a new device"
])
]
}
${pure_flags
[ "chase-statements" "banking-statements" "C" ]
[
(has_flag "chase")
(subject_matches [
"Your credit card statement is available"
])
]
}
${pure_flags
[ "chase-spam" "D" ]
[
(has_flag "chase")
(anyof [
(header_is "From" "Chase Credit Journey <no.reply.alerts@chase.com>")
(subject_is [
"Review your recent activity"
"Good news: You may qualify for a credit line increase!"
"Your Chase card is available to use with Paze - Activate now!"
])
])
]
}
${pure_flags [ "experian" ] (envelope_is "fbyjemby@shelvacu.com")}
${pure_flags
[ "experian-spam" "D" ]
[
(has_flag "experian")
(subject_matches [
"*, your FICO* Score has been updated"
"Your monthly account statement is here, *"
])
]
}
${pure_flags
[ "paypal" "banking" ]
[
# can't go purely on envelope, because paypal loves to give my email to every merchant I interact with
(envelope_is "paypal@shelvacu.com")
(from_matches [
"*@paypal.com"
"*@*.paypal.com"
])
]
}
${pure_flags
[ "paypal-transactions" "banking-transactions" "B" ]
[
(has_flag "paypal")
(subject_matches [
"Receipt for your payment to *"
"*: $* USD"
"*: $* CAD"
"*: kr * SEK"
"You authorized a payment to *"
"You sent an automatic payment to *"
"Review your new automatic payment setup for *"
"You have a refund from *"
])
]
}
${pure_flags
[ "paypal-statements" "banking-statements" "C" ]
[
(has_flag "paypal")
(subject_matches [
"*, your * account statement is available."
])
]
}
${pure_flags [ "usps-id" ] (envelope_is "usps-id@shelvacu.com")}
${pure_flags
[ "usps-expected-delivery" "C" ]
[
(has_flag "usps-id")
(subject_matches "USPS* Expected Delivery *")
]
}
${pure_flags
[ "amazon-ignore" "C" ]
[
(envelope_is "amznbsns@shelvacu.com")
(subject_matches [
"Your Amazon.com order has shipped*"
"Your Amazon.com order of * has shipped!"
])
]
}
${pure_flags
[ "bandcamp-ignore" "C" ]
[
(envelope_is "bandcamp@shelvacu.com")
(subject_matches [
"* just announced a listening party on Bandcamp"
"New items from *"
"Starting in *"
"New from *"
])
]
}
${pure_flags
[ "bandcamp-not-ignore" "B.subscriptions" ]
[
(envelope_is "bandcamp@shelvacu.com")
''not hasflag "bandcamp-ignore"''
]
}
${pure_flags [ "ika-ignore" "D" ] (envelope_is "ika@dis8.net")}
${pure_flags
[ "ally-statement" "C" ]
[
(envelope_is "ally@shelvacu.com")
(subject_is "Your latest statement is ready to view.")
]
}
${pure_flags "bloomberg" (envelope_is "bloomberg@shelvacu.com")}
${pure_flags
[ "money-stuff" "not-spamish" ]
[
(envelope_is "bloomberg@shelvacu.com")
''header :matches "From" "\"Matt Levine\" *"''
]
}
${pure_flags
[ "money-stuff-podcast" "D" known_flags.read ]
[
(has_flag "money-stuff")
(subject_matches "Money Stuff: The Podcast:*")
]
}
${pure_flags
[ "money-stuff-not-podcast" "B.subscriptions" ]
[
(has_flag "money-stuff")
(not (has_flag "money-stuff-podcast"))
]
}
${pure_flags [ "git" "not-spamish" "B" ] (exists [
"X-GitHub-Reason"
"X-GitLab-Project"
])}
${pure_flags [ "git-uninsane" "git" "not-spamish" "B" ] (envelope_is "git-uninsane@shelvacu.com")}
${pure_flags [ "github" "git" "not-spamish" "B" ] (header_matches "List-Id" "*<*.github.com>")}
${pure_flags [ "mailing-list-by-envelope" "not-spamish" "B" ] (
envelope_matches "*-ml@shelvacu.com"
)}
${pure_flags [ "discourse" "not-spamish" "B" ] (exists "X-Discourse-Post-Id")}
${pure_flags [ "agora" "not-spamish" ] (envelope_is "agora@shelvacu.com")}
${pure_flags [ "postgres-list" "not-spamish" ] (
header_matches "List-Id" "<*.lists.postgresql.org>"
)}
${pure_flags [ "secureaccesswa" "not-spamish" "A" ] (from_is "help@secureaccess.wa.gov")}
${pure_flags [ "letsencrypt-mailing-list" "not-spamish" "B" ] (
envelope_is "lets-encrypt-mailing-list@shelvacu.com"
)}
${pure_flags [ "jmp-news" "not-spamish" "B" ] (header_matches "List-Id" "*<jmp-news.soprani.ca>")}
${pure_flags
[ "tf2wiki" "not-spamish" "B" ]
[
(envelope_is "tf2wiki@shelvacu.com")
(from_is "noreply@wiki.teamfortress.com")
]
}
${pure_flags "gmail-fwd" (envelope_is "gmailfwd-fc2e10bec8b2@shelvacu.com")}
${pure_flags [ "ebay" "orders" ] (envelope_is "ebay@shelvacu.com")}
${pure_flags
[ "ebay-delivered" "B" ]
[
(has_flag "ebay")
(subject_matches [
"*ORDER DELIVERED: *"
])
]
}
${pure_flags
[ "ebay-message" "B" ]
[
(has_flag "ebay")
(from_matches (map (domain: "*@members.${domain}") ebay_domains))
]
}
${pure_flags
[ "ebay-offer" "B" ]
[
(has_flag "ebay")
(subject_matches [
"You have an offer from the seller, *"
"You saw it at *, but the seller is now offering *"
])
]
}
${pure_flags
[ "ebay-order-update" "C" ]
[
(has_flag "ebay")
(subject_matches [
"Out for delivery: *"
"*DELIVERY UPDATE: *"
"*Order update: *"
"EARLY DELIVERY UPDATE: *"
"Important information regarding your Global Shipping Program transaction *" # ebay: "important information! your order is being shipped." why did you say this was ""important""???
"Your package is now with *"
"*Order confirmed: *"
"Your order is confirmed"
"Your order is in!"
"*An update on your order"
])
]
}
${pure_flags
[ "ebay-bid-ongoing-notification" "C" ]
[
(has_flag "ebay")
(subject_matches [
"Michael, your bid for * is winning"
"* just got a new bid."
])
]
}
${pure_flags
[ "ebay-feedback" "D" ]
[
(has_flag "ebay")
(subject_matches "Please provide feedback for your eBay items")
]
}
${pure_flags [ "royal-mail" "orders" ] (from_is "no-reply@royalmail.com")}
${pure_flags
[ "royal-mail-delivered" "B" ]
[
(has_flag "royal-mail")
(subject_matches "Your Royal Mail parcel has been delivered")
]
}
${pure_flags
[ "royal-mail-on-the-way" "D" ]
[
(has_flag "royal-mail")
(subject_matches "Your Royal Mail parcel is on its way")
]
}
${pure_flags [ "aliexpress" "orders" ] (from_is [
"transaction@notice.aliexpress.com"
"aliexpress@notice.aliexpress.com"
])}
${pure_flags
[ "aliexpress-delivered" "B" ]
[
(has_flag "aliexpress")
(from_is "transaction@notice.aliexpress.com")
(subject_matches "Order * has been signed for")
]
}
${pure_flags
[ "aliexpress" "orders" "C" ]
[
(has_flag "aliexpress")
(not (has_flag "aliexpress-delivered"))
]
}
${pure_flags [ "brandcrowd" "D" ] (envelope_is "brandcrowd@shelvacu.com")}
${pure_flags [ "cpapsupplies" "D" ] (envelope_is "cpapsupplies@shelvacu.com")}
${pure_flags [ "genshin" "D" ] (envelope_is "genshin@shelvacu.com")}
${pure_flags [ "jork" "B" ] (envelope_is "jork@shelvacu.com")}
${pure_flags [ "patreon" "not-spamish" ] (envelope_is "patreon@shelvacu.com")}
${pure_flags
[ "patreon-post" "B.subscriptions" ]
[
(has_flag "patreon")
(header_is "X-Mailgun-Tag" "template_newsletterpostcontrol")
]
}
${pure_flags
[ "patreon-free-member-digest" "D" ]
[
(has_flag "patreon")
(header_is "X-Mailgun-Tag" "template_freememberdigest")
]
}
${pure_flags
[ "patreon-other" "B" ]
[
(has_flag "patreon")
(not (has_flag "patreon-post"))
(not (has_flag "patreon-free-member-digest"))
]
}
${pure_flags [ "rsb" "B" ] (from_is "support@rapidseedbox.com")}
${pure_flags [ "fresh-avocado-dis8" "D" ] (envelope_is "fresh.avocado@dis8.net")}
${pure_flags [ "discord" "A" ] (envelope_matches "discord@*")}
${pure_flags [ "za-sa" "D" ] (from_matches [
"*@*.sa.com"
"*@*.za.com"
])}
${pure_flags [ "localdomain" "D" ] (from_matches [
"*@*.local"
"*@*.localdomain"
])}
${pure_flags [ "helium" "D" ] (envelope_is "creepyface@dis8.net")}
${pure_flags [ "sharkmood" "C" ] (envelope_is "sharkmood@dis8.net")}
${pure_flags [ "im-not-district-158" "D" ] (envelope_is [
"khamar.anderson@dis8.net"
"pbooth@dis8.net"
"sgaylor@dis8.net"
])}
${pure_flags [ "next-level-burger" "D" ] (header_matches "From" "*Next Level Burger*")}
${pure_flags [ "lyft" "D" ] (envelope_is "lyft@shelvacu.com")}
${pure_flags [ "coursera" "D" ] (from_matches "*.*.coursera.org")}
${pure_flags [ "taskrabbit" "D" ] (envelope_is "taskrabbit@shelvacu.com")}
${pure_flags [ "subscribestar_code" "A" ] (allof [
(envelope_is "subscribestar@shelvacu.com")
(subject_is "Your authentication code")
])}
${pure_flags "itch-io" (from_is "postmaster@itch.io")}
${pure_flags
[ "itch-io-update" "B.subscriptions" ]
[
(has_flag "itch-io")
(subject_matches "[itch.io] * update *")
]
}
${pure_flags
[ "lowering-the-bar" "B.subscriptions" ]
[
(envelope_is "ltb@shelvacu.com")
]
}
${pure_flags [ "hotels-com" "D" ] (from_matches [
"hotels.com"
"*.hotels.com"
])}
${pure_flags
[ "spamish-by-headers" "C" ]
[
(anyof [
(header_is "Precedence" "bulk")
(exists "List-Unsubscribe")
(exists "List-Unsubscribe-Post")
])
(not (has_flag "not-spamish"))
]
}
if hasflag "agora" {
${fileinto "M.agora"}
} elsif hasflag "postgres-list" {
${fileinto "M.postgres"}
} elsif hasflag "D" {
${fileinto "D"}
} elsif hasflag "C" {
${fileinto "C"}
} elsif hasflag "A" {
${fileinto "A"}
} elsif hasflag "B.subscriptions" {
${fileinto "B.subscriptions"}
} else {
${fileinto "B"}
}
}
# disable any sieve scripts that might want to run after this one
stop;
'';
pigeonhole_pkg = pkgs.dovecot_pigeonhole;
in
{
imports = [
# Allow running a sieve filter when a message gets moved to another folder in imap
# see https://doc.dovecot.org/2.3/configuration_manual/sieve/plugins/imapsieve/
{
services.dovecot2 = {
sieve.plugins = [ "sieve_imapsieve" ];
mailPlugins.perProtocol.imap.enable = [ "imap_sieve" ];
};
}
];
options.vacu.checkSieve = lib.mkOption {
readOnly = true;
default = pkgs.writeScriptBin "check-liam-sieve" ''
set -xev
${lib.escapeShellArgs [
(lib.getExe' pigeonhole_pkg "sieve-test")
"-c"
config.services.dovecot2.configFile
"-C" # force compilation
"-D" # enable sieve debugging
"-f"
"some-rando@example.com"
"-a"
"shelvacu@liam.dis8.net"
config.services.dovecot2.sieve.scripts.before
"/dev/null"
]}
'';
defaultText = "check-liam-sieve package";
};
options.vacu.liam-sieve-script = lib.mkOption {
readOnly = true;
default = pkgs.writeText "mainsieve" sieve_text;
defaultText = "mainsieve text package";
};
config = {
vacu.packages = [ pigeonhole_pkg ];
services.dovecot2.sieve = {
extensions = [
"fileinto"
"mailbox"
"editheader"
"vnd.dovecot.debug"
];
scripts.before = config.vacu.liam-sieve-script;
};
services.dovecot2.imapsieve.mailbox = [
{
name = "*";
causes = [
"APPEND"
"COPY"
"FLAG"
];
before = config.vacu.liam-sieve-script;
}
];
# services.dovecot2.mailboxes."magic-refilter".auto = "create";
};
}

23
hosts/liam/sops.nix Normal file
View File

@@ -0,0 +1,23 @@
{
config,
vacuModules,
...
}:
{
imports = [ vacuModules.sops ];
config.sops = {
secrets.dovecot-passwd = {
restartUnits = [ "dovecot2.service" ];
};
secrets.dkim_key = {
name = "dkimkeys/2024-03-liam.private";
restartUnits = [ "opendkim.service" ];
owner = config.services.opendkim.user;
};
secrets.relay_creds = {
restartUnits = [ "postfix.service" ];
owner = config.services.postfix.user;
};
};
}

View File

@@ -1,15 +1,15 @@
{ config, pkgs, ... }: { config, pkgs, ... }:
{ {
imports = [ imports = [ ./hardware-config.nix ];
../common-nixos-config.nix
./hardware-config.nix
];
# Use the systemd-boot EFI boot loader. # Use the systemd-boot EFI boot loader.
boot.loader.systemd-boot.enable = true; boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true; boot.loader.efi.canTouchEfiVariables = true;
networking.hostName = "lp0onfire"; # Define your hostname. vacu.hostName = "lp0onfire"; # Define your hostname.
vacu.shortHostName = "lp0";
vacu.shell.color = "green";
vacu.systemKind = "server";
# Set your time zone. # Set your time zone.
time.timeZone = "America/Los_Angeles"; time.timeZone = "America/Los_Angeles";
@@ -37,7 +37,6 @@
pciutils pciutils
ncdu ncdu
nix-index nix-index
git
]; ];
# This value determines the NixOS release from which the default # This value determines the NixOS release from which the default
@@ -50,11 +49,6 @@
services.openssh.enable = true; services.openssh.enable = true;
# system.autoUpgrade.enable = true;
# system.autoUpgrade.allowReboot = true;
# system.autoUpgrade.channel = https://nixos.org/channels/nixos-22.05-small;
nixpkgs.config.allowUnfree = true;
services.zerotierone = { services.zerotierone = {
enable = true; enable = true;
joinNetworks = [ "1d719394047b32ae" ]; joinNetworks = [ "1d719394047b32ae" ];
@@ -65,12 +59,4 @@
# Disable wifi card; This is sitting directly under a router and I don't want to cause interference. # Disable wifi card; This is sitting directly under a router and I don't want to cause interference.
boot.blacklistedKernelModules = [ "iwlwifi" ]; boot.blacklistedKernelModules = [ "iwlwifi" ];
# networking.nat = {
# enable = true;
# externalInterface = "enp2s0";
# internalIPs = [ "192.168.192.0/24" ];
# internalInterfaces = [ "ztrf26rjvk" ];
# };
} }

View File

@@ -1,26 +1,31 @@
# Do not modify this file! It was generated by nixos-generate-config # Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes # and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead. # to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }: { lib, modulesPath, ... }:
{ {
imports = imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" ]; boot.initrd.availableKernelModules = [
"xhci_pci"
"ahci"
"usb_storage"
"usbhid"
"sd_mod"
];
boot.initrd.kernelModules = [ ]; boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ]; boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ]; boot.extraModulePackages = [ ];
fileSystems."/" = fileSystems."/" = {
{ device = "/dev/disk/by-uuid/51a9c6de-3231-469f-a292-ada7d2531d63"; device = "/dev/disk/by-uuid/51a9c6de-3231-469f-a292-ada7d2531d63";
fsType = "ext4"; fsType = "ext4";
}; };
fileSystems."/boot" = fileSystems."/boot" = {
{ device = "/dev/disk/by-uuid/36B4-78A2"; device = "/dev/disk/by-uuid/36B4-78A2";
fsType = "vfat"; fsType = "vfat";
options = [ "nofail" ];
}; };
swapDevices = [ ]; swapDevices = [ ];

23
hosts/mmm/default.nix Normal file
View File

@@ -0,0 +1,23 @@
{ inputs, ... }:
{
imports = [
../common/nixos.nix
inputs.nixos-apple-silicon.nixosModules.default
./hardware.nix
];
vacu.hostName = "mmm";
vacu.shell.color = "red";
vacu.verifySystem.enable = false;
vacu.verifySystem.expectedMac = "14:98:77:3f:b8:2e";
vacu.systemKind = "server";
# asahi recommends systemd-boot
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = false;
hardware.asahi.peripheralFirmwareDirectory = ./firmware;
services.openssh.enable = true;
system.stateVersion = "24.05";
}

Some files were not shown because too many files have changed in this diff Show More