997 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
82819646b1 nix flake update + yeet devver 2024-09-09 20:30:09 -07:00
300 changed files with 19087 additions and 4218 deletions

6
.gitignore vendored
View File

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

View File

@@ -1,40 +0,0 @@
shel_keys: &shel_keys
- &a age1y4zp4ddq6xyffd8fgmn2jkl78qfh4m94gcls2cu6vvjnwwznx5uqywjekm
- &b age1g9sh8u6s344569d3cg8h30g9h7thld5pexcwzc4549jc84jvceqqjt9cfh
- &c age1t5s3txyj403rfecdhq5q2z3cnavy6m543gzyhkl2nu5t8fz0zctqtvm2tj
- &d age1dzdf4rgep3ctk3dnrmrqtdgrchaa8nszfc4dp29gqwsst3z6jyrq57vfsj
- &e age197a33mlf5294amjx59hycctu6wm4l3cu3w7n9rv3fs9340ql64rqjzpr7s
- &f age1sqj8z3feqm2dk3gj8mxpfn5dpqnsmus862e8ayd0d4cdresqffdswcf9ru
- &g age1rz75dqzfd6gulwh270ukmt5amcau6j8dpxgzx8fm6u8sjkyx9usq69y4s2
- &h age148huz6rc3q9xx5t873ncx75sja2sazlescwspxl7lsmxsqkz0apsy8cldp
- &i age1ck6lhd8thjcrdcnkn2epc8npztg0sfswahunjkwcf57rr0xaevys8fh0x6
- &j age13j6l33g0ghk4vezn0qwfal2qmcgqwkv89ejwezpe3n47mw8yxyuslj6y7d
- &k age13x0f3glnz4jvqty2v92cxrrnjcna6ed4qegrhulw9jjy08zuy3aqzvrfc6
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:
- *a
- *b
- *c
- *d
- *e
- *f
- *g
- *h
- *i
- *j
- *k
- *liam
- path_regex: ^tests/test_secrets/
key_groups:
- age:
- *test_key

View File

@@ -1,31 +1,31 @@
more just notes for now
---
deploy:
```sh
nixos-rebuild switch --flake .#triple-dezert --target-host trip.shelvacu.com --use-remote-sudo
```
---
build flake on remote machine, including eval:
```sh
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)
```
more just notes for now
---
deploy:
```sh
nixos-rebuild switch --flake .#triple-dezert --target-host trip.shelvacu.com --use-remote-sudo
```
---
build flake on remote machine, including eval:
```sh
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;
}

View File

@@ -1,9 +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, ... }:
{
nix.registry.vacu.to = {
type = "path";
path = inputs.self.outPath;
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:" ];
};
}

View File

@@ -1,7 +1,4 @@
{ ... }:
let
in
{
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

@@ -1,292 +0,0 @@
{
config,
pkgs,
lib,
inputs,
...
}:
let
inherit (lib) mkOption types;
inherit (inputs) self;
in
{
imports = [
./package-set.nix
./shell
./ssh.nix
./nix.nix
./verify-system
];
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.str; };
vacu.shortHostName = mkOption {
type = types.str;
default = config.vacu.hostName;
};
vacu.nixvimPkg = mkOption { readOnly = true; };
};
config = {
vacu.packages =
(with pkgs; [
home-manager
nixos-rebuild
which
nano
vim
wget
screen
tmux
lsof
htop
mosh
dnsutils
iperf3
nmap
rsync
ethtool
sshfs
ddrescue
pciutils
ncdu
nix-index
git
pv
unzip
file
ripgrep
jq
units
tree
rclone
iputils
ssh-to-age
sops
inetutils
neovim
diffutils
findutils
utillinux
tzdata
hostname
man
gnugrep
gnused
gnutar
bzip2
gzip
xz
zip
unzip
openssh
dig
bash
termscp
usbutils
ruby
psutils
killall
git
curl
])
++ [
inputs.nix-search-cli.packages.${pkgs.system}.default
inputs.nix-inspect.packages.${pkgs.system}.default
];
vacu.nixvimPkg = inputs.nixvim.legacyPackages.${pkgs.system}.makeNixvimWithModule {
extraSpecialArgs = {
inherit inputs;
};
module = {
imports = [ ../nixvim ];
};
};
vacu.versionId = toString (self.shortRev or self.dirtyShortRev);
vacu.versionInfo = {
id = self.rev or self.dirtyRev;
flakePath = self.outPath;
inherit inputs; # inputs = lib.mapAttrs (i: i.outPath) inputs;
};
vacu.nix.caches.nixcache-shelvacu = {
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=" ];
};
vacu.nix.caches.nix-on-droid = {
url = "https://nix-on-droid.cachix.org/";
keys = [ "nix-on-droid.cachix.org-1:56snoMJTXmDRC1Ei24CmKoUqvHJ9XCp+nidK7qkMQrU=" ];
};
vacu.nix.caches.nixos = {
url = "https://cache.nixos.org/";
keys = [ "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" ];
};
vacu.rootCAs = [
''
-----BEGIN CERTIFICATE-----
MIIBnjCCAUWgAwIBAgIBBTAKBggqhkjOPQQDAjAgMQswCQYDVQQGEwJVUzERMA8G
A1UEAxMIdm5vcG4gQ0EwHhcNMjQwODEyMjExNTQwWhcNMzQwODEwMjExNTQwWjAg
MQswCQYDVQQGEwJVUzERMA8GA1UEAxMIdm5vcG4gQ0EwWTATBgcqhkjOPQIBBggq
hkjOPQMBBwNCAARqRbSeq00FfYUGeCHVkzwrjrydI56T12xy+iut0c4PemSuhyxC
AgfdKYtDqMNZmSqMaLihzkBenD0bN5i0ndjho3AwbjAPBgNVHRMBAf8EBTADAQH/
MCwGA1UdHgEB/wQiMCCgGDAKhwgKTkwA///8ADAKgggudDJkLmxhbqEEMAKBADAO
BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFAjSkbJQCQc1WP6nIP5iLDIKGFrdMAoG
CCqGSM49BAMCA0cAMEQCIFtyawkZqFhvzgmqG/mYNNO6DdsQTPQ46x/08yrEiiF4
AiA+FwAPqX+CBkaSdIhuhv1kIecmvacnDL5kpyB+9nDodw==
-----END CERTIFICATE-----
''
];
vacu.ssh.authorizedKeys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC4LYvUe9dsQb9OaTDFI4QKPtMmOHOGLwWsXsEmcJW86" # Termux on pixel6pro
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHcYwYy9/0Gu/GsqS72Nkz6OkId+zevqXA/aTIcvqflp" # t460s windows
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFsErA6M9LSHj2hPlLuHD8Lpei7WjMup1JxI1vxA6B8W" # pixel6pro nix-on-droid
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKoy1TrmfhBGWtVedgOM1FB1oD2UdodN3LkBnnLx6Tug" # compute-deck
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICVeSzDkGTueZijB0xUa08e06ovAEwwZK/D+Cc7bo91g" # triple-dezert
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOtwtao/TXbiuQOYJbousRPVesVcb/2nP0PCFUec0Nv8" # triple-dezert (root)
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAxAFFxQMXAgi+0cmGaNE/eAkVfEl91wafUqFIuAkI5I" # compute-deck (root)
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDcRDekd8ZOYfQS5X95/yNof3wFYIbHqWeq4jY0+ywQX" # pro1x nix-on-droid
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExSObd1lZprdqAFLqFhtxDEckV0q/vZZIYqrYFKfkoC" # devver
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGHLPOxRd68+DJ/bYmqn0wsgwwIcMSMyuU1Ya16hCb/m" # fw (root)
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINQ2c0GzlVMjV06CS7bWbCaAbzG2+7g5FCg/vClJPe0C" # fw
];
vacu.ssh.config = ''
Host deckvacu
User deck
Host rsb
User user
HostName finaltask.xyz
Port 2222
Host awoo
HostName 45.142.157.71
Host trip
HostName trip.shelvacu.com
Port 6922
Host liam
HostName 178.128.79.152
Host pluto
HostName pluto.somevideogam.es
Host *
User shelvacu
GlobalKnownHostsFile ${pkgs.writeText "known_hosts" config.vacu.ssh.knownHostsText}
'';
vacu.ssh.knownHosts = {
#public hosts
"github.com".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl";
"gitlab.com".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAfuCHKVTjquxvt6CM6tdG4SLp1Btn/nOeHHE5UOzRdf";
"git.sr.ht".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMZvRd4EtM7R+IHVMWmDkVU3VLQTSwQDSAvW0t2Tkj60";
#colin's stuff
"uninsane.org" = {
extraHostNames = [ "git.uninsane.org" ];
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOfdSmFkrVT6DhpgvFeQKm3Fh9VKZ9DbLYOPOJWYQ0E8";
};
"desko" = {
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFw9NoRaYrM6LbDd3aFBc4yyBlxGQn8HjeHd/dZ3CfHk";
};
#daymocker's stuff
"pluto" = {
extraHostNames = [ "74.208.184.137" ];
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICpHY4fLZ1hNuB2oRQM7R3b4eQyIHbFB45ZYp3XCELLg";
};
#powerhouse hosts
"ostiary" = {
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBSYyd1DGPXGaV4mD34tUbXvbtIi/Uv2otoMUsCkxRse";
};
"habitat" = {
# previously known as zigbee-hub
extraHostNames = [ "10.78.79.114" ];
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBJxwUYddOxgViJDOiokfaQ6CsCx/Sw+b3IisdJv8zFN";
};
"vnopn" = {
extraHostNames = [
"10.78.79.1"
"vnopn.t2d.lan"
];
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEMgJE8shlTYF3nxKR/aILd1SzwDwhtCrjz9yHL7lgSZ";
};
#work laptop
"tebbs-MBP" = {
extraHostNames = [ "10.244.10.3" ];
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKO/ks07zSByDH/qmDrghtBSFwWnze2s62zEmtXwaMJe";
};
#personal hosts
trip = {
extraHostNames = [
"triple-dezert"
"trip.shelvacu.com"
"[trip.shelvacu.com]:6922"
];
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGUQux9V0mSF5IauoO1z311NXR7ymEbwRMzT+OaaNQr+";
};
servacu = {
extraHostNames = [
"mail.dis8.net"
"servacu.shelvacu.com"
];
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE+E6na7np0HnBV2X7owno+Fg+bNNRSHLxO6n1JzdUTV";
};
finaltask = {
extraHostNames = [
"rsb"
"finaltask.xyz"
"[finaltask.xyz]:2222"
];
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPTx8WBNNKBVRV98HgDChpd59SHbreJ87SXU+zOKan6y";
};
compute-deck = {
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGt43GmXCxkl5QjgPQ/QimW11lKfXmV4GFWvlxQSf4TQ";
};
"2esrever" = {
extraHostNames = [
"10.4.5.218"
"10.244.46.71"
];
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH0LnPrJxAdffZ//uRe3NBiIfFCBNMLqKVylkyU0llvT";
};
awoo = {
extraHostNames = [ "45.142.157.71" ];
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOQaDjjfSK8jnk9aFIiYH9LZO4nLY/oeAc7BKIPUXMh1";
};
deckvacu = {
publicKey = "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEa8qpFkIlLLJkH8rmEAn6/MZ9ilCGmEQWC3CeFae7r1kOqfwRk0nq0oyOGJ50uIh+PpwEh3rbgq6mLfpRfsFmM=";
};
liam = {
extraHostNames = [
"liam.dis8.net"
"178.128.79.152"
];
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHOqJYVHOIFmEA5uRbbirIupWvyBLAFwic/8EZQRdN/c";
};
devver = {
extraHostNames = [
"devver.t2d.lan"
"10.78.79.10"
];
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFeFaH2tzWIiCPdKNmxl3NqCnPTdmVIOBinauUAEl+UU";
};
fw = {
extraHostNames = [ "fw.t2d.lan" ];
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA6lX25mCy35tf1NpcHMAdeRgvT7l0Dw0FWBH3eX4TE2";
};
};
};
}

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[@]}"

View File

@@ -1,20 +1,19 @@
{ config, lib, ... }:
{
config,
lib,
vacuModuleType,
...
}:
let
inherit (lib) mkDefault;
in
{
imports = [
./module.nix
./common-but-not.nix
];
environment.packages = config.vacu.packageList;
environment.etc."ssh/ssh_config".text = config.vacu.ssh.config;
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.json".text = builtins.toJSON config.vacu.versionInfo;
environment.etc."vacu/info.json".text = builtins.toJSON config.vacu.versionInfo;
vacu.hostName = mkDefault "nix-on-droid";
vacu.shortHostName = mkDefault "nod";

View File

@@ -9,7 +9,7 @@ in
vacu.nix.caches = mkOption {
type = types.attrsOf (
types.submodule (
{ name, ... }:
{ ... }:
{
options = {
url = mkOption { type = types.str; };
@@ -28,9 +28,7 @@ in
};
vacu.nix.substituterUrls = mkOption { readOnly = true; };
vacu.nix.trustedKeys = mkOption { readOnly = true; };
vacu.nix.plainOptions = mkOption { };
};
config.vacu.nix.substituterUrls = map (c: c.url) enabledCaches;
config.vacu.nix.trustedKeys = builtins.concatMap (c: c.keys) enabledCaches;
config.vacu.nix.plainOptions.allowUnfree = true;
}

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"
''
);
}

View File

@@ -2,113 +2,90 @@
lib,
pkgs,
config,
inputs,
utils,
vacuModuleType,
...
}:
{
imports = [
./module.nix
./common-but-not.nix
./verify-system/nixos.nix
];
lib.optionalAttrs (vacuModuleType == "nixos") {
imports = [ ../nixos-modules ];
options.vacu.underTest = lib.mkOption {
default = false;
type = lib.types.bool;
};
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 =
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
{
console = {
keyMap = lib.mkDefault "us";
};
networking.hostName = config.vacu.hostName;
vacu.packages."xorg-xev" = {
enable = config.services.xserver.enable;
package = pkgs.xorg.xev;
};
environment.systemPackages = config.vacu.packageList;
programs.git = {
enable = true;
lfs.enable = true;
};
system.nixos.tags = [
"vacu${config.vacu.versionId}"
config.vacu.hostName
];
environment.etc."vacu.json".text = builtins.toJSON config.vacu.versionInfo;
config = {
programs.mosh.enable = true;
i18n.defaultLocale = lib.mkDefault "en_US.UTF-8";
time.timeZone = "America/Los_Angeles";
users.users.shelvacu = {
openssh.authorizedKeys.keys = config.vacu.ssh.authorizedKeys;
isNormalUser = true;
extraGroups = [ "wheel" ];
};
systemd.services = for-systemd-services;
security.acme.certs = for-security-acme-certs;
services.openssh = {
# require public key authentication for better security
settings.PasswordAuthentication = false;
settings.KbdInteractiveAuthentication = false;
settings.PermitRootLogin = "prohibit-password";
};
nix.settings.trusted-users = [ "shelvacu" ];
security.sudo.wheelNeedsPassword = lib.mkDefault false;
programs.screen = {
screenrc = ''
defscrollback 10000
termcapinfo xterm* ti@:te@
maptimeout 5
'';
} // (if config.system.nixos.release == "23.11" then { } else { enable = true; });
programs.tmux.enable = true;
programs.tmux.extraConfig = "setw mouse";
programs.tmux.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 [ ];
};
nixpkgs.config.allowUnfree = lib.mkDefault true;
programs.mosh.enable = lib.mkDefault true;
programs.ssh.extraConfig = config.vacu.ssh.config;
security.pki.certificates = config.vacu.rootCAs;
# commands.nix
environment.pathsToLink = [ "/share/vacufuncs" ];
vacu.shell.functionsDir = "/run/current-system/sw/share/vacufuncs";
programs.bash.interactiveShellInit = config.vacu.shell.interactiveLines;
programs.bash.promptInit = lib.mkForce "";
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 "$@"'';
};
};
}

View File

@@ -1,76 +0,0 @@
{
config,
pkgs,
lib,
...
}:
let
inherit (lib) mkOption types;
pkgOptions = builtins.attrValues config.vacu.packages;
enabledOptions = builtins.filter (o: o.enable) pkgOptions;
enabledPkgs = builtins.map (o: o.package) enabledOptions;
packagesSetType = types.attrsOf (
types.submodule (
{
name,
config,
options,
...
}:
{
options = {
enable = mkOption {
type = types.bool;
description = "Will this package be installed (included in environment.systemPackages)";
};
package = mkOption {
type = types.package;
default = pkgs.${name};
defaultText = "pkgs.${name}";
};
};
}
)
);
packageListToSet = (
from:
let
keyvals = map (
val:
if builtins.isString val then
{
name = val;
value = {
package = pkgs."${val}";
enable = lib.mkDefault true;
};
}
else
{
name = val.name;
value = {
package = val;
enable = lib.mkDefault true;
};
}
) from;
in
builtins.listToAttrs keyvals
);
in
{
options = {
vacu.packages = mkOption {
default = { };
type = types.coercedTo (types.listOf (
types.either types.str types.package
)) packageListToSet packagesSetType;
};
vacu.packageList = mkOption {
type = types.listOf types.package;
readOnly = true;
};
};
config.vacu.packageList = enabledPkgs;
}

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"
'')
];
};
}

View File

@@ -21,77 +21,172 @@ let
${pkgs.stdenv.shellDryRun} "$target"
'';
};
vacureload = writeShellFunction "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 "'"$'"(cat '$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
__set_idempotents
'';
set_idempotents = writeShellFunction "__set_idempotents" cfg.idempotentShellLines;
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; };
vacu.shell.functionsDir = mkOption {
type = types.path;
default = "/run/current-system/sw/share/vacufuncs";
};
vacu.shell.interactiveLines = mkOption {
type = types.lines;
default = "";
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); };
};
config = {
_module.args.vaculib = {
writeShellFunction = writeShellFunction;
# https://en.wikipedia.org/wiki/ANSI_escape_code#Colors
shellColors = {
black = 30;
red = 31;
green = 32;
yellow = 33;
blue = 34;
magenta = 35;
cyan = 36;
white = 37;
};
vacu.shell.color = mkOption {
type = types.enum (builtins.attrNames vaculib.shellColors);
default = "white";
};
vacu.shell.interactiveLines = ''
if [[ $- == *i* ]] && [[ -f ${cfg.functionsDir}/vacureload ]]; then
function __vacushell_load() { eval "$(cat ${cfg.functionsDir}/vacureload)"; }
__vacushell_load
unset __vacushell_load
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
'';
vacu.packages = [
vacureload
set_idempotents
];
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

@@ -1,52 +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,
vaculib,
lib,
config,
vaculib,
...
}:
let
inherit (pkgs) writeScriptBin;
inherit (vaculib) writeShellFunction;
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 = [
(writeScriptBin "ms" ''
set -e
if [[ $# != 1 ]]; then
echo "wrong number of args" 1>&2
exit 1
fi
set -x
mosh -- $1 screen -Rd
(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"
'')
(writeScriptBin "mss" ''
set -e
if [[ $# != 1 ]]; then
echo "wrong number of args" 1>&2
exit 1
fi
set -x
mosh -- $1 sudo screen -Rd
'')
(writeScriptBin "rmln" ''
set -eo pipefail
(script "rmln" ''
svl_min_args $# 1
for arg in "$@"; do
if [[ "$arg" != "-*" ]] && [[ ! -L "$arg" ]]; then
echo "$0: $arg is not a symlink" 1>&2
exit 1
if [[ "$arg" != -* ]] && [[ ! -L "$arg" ]]; then
svl_die "$arg is not a symlink"
fi
done
rm "$@"
'')
(writeShellFunction "nd" ''
declare -a args
args=("$@")
mkdir "''${args[@]}" && cd "''${args[-1]}"
(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
'')
(writeShellFunction "td" ''pushd $(mktemp "$@")'')
(writeShellFunction "nvim-plain" ''${pkgs.neovim}/bin/nvim "$@"'')
(writeShellFunction "nvim-nixvim" ''${config.vacu.nixvimPkg}/bin/nvim "$@"'')
(writeShellFunction "nvim" ''nvim-plain "$@"'')
];
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" ]]
'';
}

View File

@@ -2,12 +2,16 @@
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\]'';
@@ -16,21 +20,38 @@ let
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''
""
+ ''\n''
# + ''\[${reset_without_clear}\]''
+ (set_color colornum)
+ "${root_text root}${hostName}:\\w"
+ " "
+ ''$(vacu_shell_show_return_code)''
+ ''\n''
+ (set_color colornum)
+ ''${root_text root}${config.vacu.shortHostName}:\w''
+ (final root)
+ reset_color
+ " ";
in
{
vacu.shell.idempotentShellLines = ''
if [ $UID = 0 ]; then
export PS1=${lib.escapeShellArg (default_ps1 true)}
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
export PS1=${lib.escapeShellArg (default_ps1 false)}
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}";
};
});
}

View File

@@ -1,147 +0,0 @@
{
pkgs,
lib,
config,
...
}:
let
inherit (lib)
mkOption
types
flip
concatMapStringsSep
optionalString
concatStringsSep
readFile
mapAttrsToList
literalExpression
;
inherit (builtins) attrValues;
cfg = config.vacu;
knownHosts = attrValues cfg.ssh.knownHosts;
knownHostsText =
(flip (concatMapStringsSep "\n") knownHosts (
h:
assert h.hostNames != [ ];
optionalString h.certAuthority "@cert-authority "
+ concatStringsSep "," h.hostNames
+ " "
+ (if h.publicKey != null then h.publicKey else readFile h.publicKeyFile)
))
+ "\n";
in
{
options = {
vacu.ssh.knownHostsText = mkOption {
type = types.str;
readOnly = true;
default = knownHostsText;
};
vacu.ssh.authorizedKeys = mkOption { type = types.listOf types.str; };
vacu.ssh.config = mkOption { type = types.lines; };
# Straight copied from nixpkgs
# https://github.com/NixOS/nixpkgs/blob/46397778ef1f73414b03ed553a3368f0e7e33c2f/nixos/modules/programs/ssh.nix
vacu.ssh.knownHosts = mkOption {
default = { };
type = types.attrsOf (
types.submodule (
{
name,
config,
options,
...
}:
{
options = {
certAuthority = mkOption {
type = types.bool;
default = false;
description = ''
This public key is an SSH certificate authority, rather than an
individual host's key.
'';
};
hostNames = mkOption {
type = types.listOf types.str;
default = [ name ] ++ config.extraHostNames;
defaultText = literalExpression "[ ${name} ] ++ config.${options.extraHostNames}";
description = ''
A list of host names and/or IP numbers used for accessing
the host's ssh service. This list includes the name of the
containing `knownHosts` attribute by default
for convenience. If you wish to configure multiple host keys
for the same host use multiple `knownHosts`
entries with different attribute names and the same
`hostNames` list.
'';
};
extraHostNames = mkOption {
type = types.listOf types.str;
default = [ ];
description = ''
A list of additional host names and/or IP numbers used for
accessing the host's ssh service. This list is ignored if
`hostNames` is set explicitly.
'';
};
publicKey = mkOption {
default = null;
type = types.nullOr types.str;
example = "ecdsa-sha2-nistp521 AAAAE2VjZHN...UEPg==";
description = ''
The public key data for the host. You can fetch a public key
from a running SSH server with the {command}`ssh-keyscan`
command. The public key should not include any host names, only
the key type and the key itself.
'';
};
publicKeyFile = mkOption {
default = null;
type = types.nullOr types.path;
description = ''
The path to the public key file for the host. The public
key file is read at build time and saved in the Nix store.
You can fetch a public key file from a running SSH server
with the {command}`ssh-keyscan` command. The content
of the file should follow the same format as described for
the `publicKey` option. Only a single key
is supported. If a host has multiple keys, use
{option}`programs.ssh.knownHostsFiles` instead.
'';
};
};
}
)
);
description = ''
The set of system-wide known SSH hosts. To make simple setups more
convenient the name of an attribute in this set is used as a host name
for the entry. This behaviour can be disabled by setting
`hostNames` explicitly. You can use
`extraHostNames` to add additional host names without
disabling this default.
'';
example = literalExpression ''
{
myhost = {
extraHostNames = [ "myhost.mydomain.com" "10.10.1.4" ];
publicKeyFile = ./pubkeys/myhost_ssh_host_dsa_key.pub;
};
"myhost2.net".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILIRuJ8p1Fi+m6WkHV0KWnRfpM1WxoW8XAS+XvsSKsTK";
"myhost2.net/dsa" = {
hostNames = [ "myhost2.net" ];
publicKeyFile = ./pubkeys/myhost2_ssh_host_dsa_key.pub;
};
}
'';
};
config.assertions = lib.flip lib.mapAttrsToList config.vacu.ssh.knownHosts (
name: data: {
assertion =
(data.publicKey == null && data.publicKeyFile != null)
|| (data.publicKey != null && data.publicKeyFile == null);
message = "knownHost ${name} must contain either a publicKey or publicKeyFile";
}
);
};
}

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

@@ -1,35 +1,63 @@
{ pkgs, lib, config, ... }: let
{
pkgs,
lib,
config,
...
}:
let
inherit (lib) mkOption mkEnableOption types;
cfg = config.vacu.verifySystem;
in {
in
{
imports = [ ./nixos.nix ];
options.vacu.verifySystem = {
enable = (mkEnableOption "verify system is what is expected") // { default = true; };
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}"; };
};
}));
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; };
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

@@ -1,7 +1,19 @@
{ lib, config, pkgs, ... }: let
{
lib,
config,
pkgs,
vacuModuleType,
...
}:
let
inherit (lib) mkOption types;
in {
options.vacu.verifySystem.expectedMac = mkOption { type = types.nullOr (types.strMatching "[A-Fa-f0-9]{2}(:[A-Fa-f0-9]{2}){5}"); default = null; };
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";
@@ -9,47 +21,49 @@ in {
# };
system.extraSystemBuilderCmds = ''
mv $out/bin/switch-to-configuration $out/bin/.switch-to-configuration-unverified
cat <<EOF > $out/bin/switch-to-configuration
#!${pkgs.bash}/bin/bash
oldpath="$PATH"
export PATH="${pkgs.coreutils}/bin"
if ! source ${config.vacu.verifySystem.verifyAllScript}; then exit \$?; fi
export PATH="$oldpath"
exec $out/bin/.switch-to-configuration-unverified "\$@"
EOF
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
${pkgs.coreutils}/bin/chmod a+x "$out"/bin/switch-to-configuration
'';
vacu.verifySystem.verifiers = {
hostname = {
enable = lib.mkDefault true;
script = ''
expected=${config.networking.hostName}
actual=$(cat /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 = ''
expected=${lib.toUpper config.vacu.verifySystem.expectedMac}
declare -a actual=($(${pkgs.iproute2}/bin/ip -j link | ${pkgs.jq}/bin/jq 'map(.address | ascii_upcase) | join("\n")' -r))
for ifMac in "''${actual[@]}"; 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: ''${actual[*]}" >&2
return 1
'';
};
};
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,103 +0,0 @@
{
callPackage,
fetchFromGitHub,
autoPatchelfHook,
zlib,
curl,
libcxx,
stdenvNoCC,
nixpkgs ? <nixpkgs>,
writeTextFile,
lib,
bash,
enableTextureFix ? true,
enableDiscord ? false,
}:
let
libc_hack = writeTextFile {
name = "libc-hack";
# https://stackoverflow.com/questions/21768542/libc-h-no-such-file-or-directory-when-compiling-nanomsg-pipeline-sample
text = ''
#include <unistd.h>
#include <string.h>
#include <pthread.h>
'';
destination = "/include/libc.h";
};
target = stdenvNoCC.targetPlatform;
bits =
if target.is64bit then
"64"
else if target.is32bit then
"32"
else
throw "unspported bits";
pname = "sm64coopdx";
version = "1.0.3";
region = "us"; # dx removed support for other regions
in
(callPackage "${nixpkgs}/pkgs/games/sm64ex/generic.nix" {
inherit pname version region;
src = fetchFromGitHub {
owner = "coop-deluxe";
repo = pname;
rev = "v${version}";
hash = "sha256-cIH3escLFMcHgtFxeSKIo5nZXvaknti+EVt72uB4XXc=";
};
extraNativeBuildInputs = [ autoPatchelfHook ];
extraBuildInputs = [
zlib
curl
libcxx
libc_hack
];
# Normally there's no need to set TARGET_ARCH, but if we don't it adds -march=native which is impure
compileFlags = [
"BREW_PREFIX=/not-exist"
"TARGET_ARCH=generic"
"TARGET_BITS=${bits}"
"DISCORD_SDK=${if enableDiscord then "1" else "0"}"
"TEXTURE_FIX=${if enableTextureFix then "1" else "0"}"
];
extraMeta = {
mainProgram = pname;
homepage = "https://sm64coopdx.com/";
description = "Super Mario 64 online co-op mod, forked from sm64ex";
};
}).overrideAttrs
{
installPhase =
let
sharedLib = target.extensions.sharedLibrary;
in
''
runHook preInstall
local built=$PWD/build/${region}_pc
mkdir -p $out/share/${pname}
cp $built/${pname} $out/share/${pname}/${pname}-unwrapped
cp -r $built/{dynos,lang,mods,palettes} $out/share/${pname}
cp ./baserom.*.z64 $out/share/
${lib.optionalString enableDiscord ''
cp $built/libdiscord_game_sdk${sharedLib} $out/share/${pname}
''}
mkdir -p $out/bin
(
echo '#!${bash}/bin/bash'
echo "cd $out/share/${pname}"
echo 'exec ./${pname}-unwrapped "$@"'
) > $out/bin/${pname}
chmod a+x $out/bin/${pname}
runHook postInstall
'';
}

2
dcd
View File

@@ -1,3 +1,3 @@
#!/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,76 +0,0 @@
{
config,
pkgs,
lib,
inputs,
modulesPath,
...
}:
{
imports = [
inputs.home-manager.nixosModules.default
../common/nixos.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 = [ ];
vacu.hostName = "devver";
vacu.shortHostName = "dvr";
vacu.shell.color = "green";
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
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
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 "$@"

1383
flake.lock generated

File diff suppressed because it is too large Load Diff

681
flake.nix
View File

@@ -1,88 +1,86 @@
{
description = "Config for triple-dezert server";
description = "Configs for shelvacu's nix things";
inputs = {
nixpkgs.url = "nixpkgs/nixos-24.05-small";
nixpkgs-unstable.url = "nixpkgs/nixos-unstable";
nixpkgs.url = "nixpkgs/nixos-25.05-small";
nixpkgs-unstable.url = "nixpkgs/nixos-unstable-small";
flake-utils.url = "github:numtide/flake-utils";
nixvim = {
url = "github:nix-community/nixvim/nixos-24.05";
disko = {
url = "git+https://git.uninsane.org/shelvacu/disko.git";
inputs.nixpkgs.follows = "nixpkgs";
};
nixvim-unstable = {
url = "github:nix-community/nixvim";
inputs.nixpkgs.follows = "nixpkgs-unstable";
};
nix-inspect = {
url = "github:bluskript/nix-inspect";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-inspect-unstable = {
url = "github:bluskript/nix-inspect";
inputs.nixpkgs.follows = "nixpkgs-unstable";
};
vscode-server-unstable = {
url = "github:nix-community/nixos-vscode-server";
inputs.nixpkgs.follows = "nixpkgs-unstable";
inputs.flake-utils.follows = "flake-utils";
};
vscode-server = {
url = "github:nix-community/nixos-vscode-server";
inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-utils.follows = "flake-utils";
};
nix-on-droid = {
url = "github:nix-community/nix-on-droid";
inputs.nixpkgs.follows = "nixpkgs";
inputs.home-manager.follows = "home-manager";
};
jovian-unstable = {
# there is no stable jovian :cry:
url = "github:Jovian-Experiments/Jovian-NixOS";
inputs.nixpkgs.follows = "nixpkgs-unstable";
};
disko-unstable = {
url = "github:nix-community/disko";
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-24.05";
url = "github:nix-community/home-manager/release-25.05";
inputs.nixpkgs.follows = "nixpkgs";
};
home-manager-unstable = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs-unstable";
};
nix-search-cli-unstable = {
url = "github:peterldowns/nix-search-cli";
inputs.nixpkgs.follows = "nixpkgs-unstable";
inputs.flake-utils.follows = "flake-utils";
};
nix-search-cli = {
url = "github:peterldowns/nix-search-cli";
inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-utils.follows = "flake-utils";
};
padtype-unstable = {
url = "gitlab:shelvacu/padtype";
impermanence.url = "github:nix-community/impermanence";
jovian-unstable = {
# there is no stable jovian :cry:
url = "github:Jovian-Experiments/Jovian-NixOS";
inputs.nixpkgs.follows = "nixpkgs-unstable";
};
sops-nix = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
microvm = {
url = "github:astro/microvm.nix";
inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-utils.follows = "flake-utils";
};
nixos-hardware.url = "github:nixos/nixos-hardware";
most-winningest = {
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";
};
nixvim = {
url = "github:nix-community/nixvim/nixos-25.05";
inputs.nixpkgs.follows = "nixpkgs";
};
nixvim-unstable = {
url = "github:nix-community/nixvim";
inputs.nixpkgs.follows = "nixpkgs-unstable";
};
nix-colors = {
url = "github:Misterio77/nix-colors";
};
nix-on-droid = {
url = "github:nix-community/nix-on-droid";
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 = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
tf2-nix = {
url = "gitlab:shelvacu-forks/tf2-nix/with-my-patches";
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 =
@@ -90,247 +88,410 @@
self,
nixpkgs,
nix-on-droid,
home-manager,
...
}@inputs:
}@allInputs:
let
blarg = {
config.allowUnfree = true;
};
pkgs = import nixpkgs ({ system = "x86_64-linux"; } // blarg);
aarchpkgs = import nixpkgs ({ system = "aarch64-linux"; } // blarg);
defaultInputs = {
inherit (inputs)
self
nix-search-cli
nix-inspect
nixvim
;
};
defaultArgs = {
inputs = defaultInputs;
};
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 = {
allowUnfree = true;
# the security warning might as well have said "its insecure maybe but there's nothing you can do about it"
# presumably needed by nheko
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
{
debug.isoDeriv = (
import "${inputs.nixpkgs}/nixos/release-small.nix" {
nixpkgs = ({ revCount = 0; } // inputs.nixpkgs);
import "${allInputs.nixpkgs}/nixos/release-small.nix" {
nixpkgs = ({ revCount = 0; } // allInputs.nixpkgs);
}
);
nixosConfigurations.triple-dezert = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [ ./triple-dezert ];
specialArgs = {
inputs = defaultInputs // {
inherit (inputs) most-winningest;
};
lib = {
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"
];
};
};
nixosConfigurations.compute-deck = inputs.nixpkgs-unstable.lib.nixosSystem {
system = "x86_64-linux";
modules = [ ./compute-deck ];
specialArgs = {
inputs = {
jovian = inputs.jovian-unstable;
home-manager = inputs.home-manager-unstable;
vscode-server = inputs.vscode-server-unstable;
disko = inputs.disko-unstable;
padtype = inputs.padtype-unstable;
nix-search-cli = inputs.nix-search-cli-unstable;
nix-inspect = inputs.nix-inspect-unstable;
nixvim = inputs.nixvim-unstable;
self = inputs.self;
};
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;
};
};
nixosConfigurations.liam = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [ ./liam ];
specialArgs = {
inputs = defaultInputs // {
inherit (inputs) sops-nix;
};
};
};
nixosConfigurations.lp0 = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [ ./lp0 ];
specialArgs = defaultArgs;
};
nixosConfigurations.shel-installer = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [ ./installer.nix ];
specialArgs = defaultArgs;
};
nixosConfigurations.devver = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [ ./devver ];
specialArgs = {
inputs = defaultInputs // {
inherit (inputs) home-manager;
};
};
};
nixosConfigurations.fw = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [ ./fw ];
specialArgs = {
inputs = defaultInputs // {
inherit (inputs) nixos-hardware;
};
};
};
nixOnDroidConfigurations.default = nix-on-droid.lib.nixOnDroidConfiguration {
modules = [ ./nix-on-droid ];
extraSpecialArgs = {
inputs = defaultInputs // {
inherit (inputs) nixpkgs;
};
};
pkgs = import nixpkgs { system = "aarch64-linux"; };
};
homeConfigurations."nix-on-droid" = home-manager.lib.homeManagerConfiguration {
modules = [
./home/nix-on-droid.nix
{ _module.args.inputs = defaultInputs; }
];
pkgs = import nixpkgs { system = "aarch64-linux"; };
};
checks = nixpkgs.lib.genAttrs [ "x86_64-linux" ] (
checks = nixpkgs.lib.genAttrs [ x86 ] (
system:
let
pkgs = import nixpkgs { inherit system; };
config = {
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 = false;
node.specialArgs.selfPackages = self.packages.${system};
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
{
liam = nixpkgs.lib.nixos.runTest {
hostPkgs = pkgs;
imports = [
config
./tests/liam.nix
{ node.specialArgs.inputs = self.nixosConfigurations.liam._module.specialArgs.inputs; }
];
};
trip = nixpkgs.lib.nixos.runTest {
hostPkgs = pkgs;
imports = [
config
./tests/triple-dezert.nix
{ node.specialArgs.inputs = self.nixosConfigurations.triple-dezert._module.specialArgs.inputs; }
];
};
assert !(checksFromConfig ? liam) && !(checksFromConfig ? trip);
checksFromConfig
// {
liam = mkTest "liam";
triple-dezert = mkTest "triple-dezert";
}
);
nixosModules.common = import ./common/module.nix;
packages.x86_64-linux.sm64coopdx = pkgs.callPackage ./coopdx.nix { inherit nixpkgs; };
packages.x86_64-linux.snmpb = pkgs.libsForQt5.callPackage ./packages/snmpb/package.nix { };
packages.x86_64-linux.snmp-mibs-downloader =
pkgs.callPackage ./packages/snmp-mibs-downloader.nix
{ };
packages.x86_64-linux.digitalOceanImage = import ./generic-digitalocean-nixos.nix {
inherit inputs;
};
packages.x86_64-linux.authorizedKeys = pkgs.writeText "authorizedKeys" (
pkgs.lib.concatStringsSep "\n" self.nixosConfigurations.fw.config.vacu.ssh.authorizedKeys
);
packages.aarch64-linux.authorizedKeys =
let
pkgs = aarchpkgs;
in
pkgs.writeText "authorizedKeys" (
pkgs.lib.concatStringsSep "\n" self.nixOnDroidConfigurations.default.config.vacu.ssh.authorizedKeys
);
qb = # qb is "quick build"
buildList =
let
toplevelOf = name: self.nixosConfigurations.${name}.config.system.build.toplevel;
deterministicCerts = import ./deterministic-certs.nix { nixpkgs = pkgs; };
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
rec {
{
fw = toplevelOf "fw";
triple-dezert = toplevelOf "triple-dezert";
trip = triple-dezert;
compute-deck = toplevelOf "compute-deck";
cd = compute-deck;
liam = toplevelOf "liam";
lp0 = toplevelOf "lp0";
devver = toplevelOf "devver";
shel-installer = toplevelOf "shel-installer";
iso = self.nixosConfigurations.shel-installer.config.system.build.isoImage;
do = self.packages.x86_64-linux.digitalOceanImage;
snmpb = self.packages.x86_64-linux.snmpb;
check-triple-dezert = self.checks.x86_64-linux.trip.driver;
check-trip = check-triple-dezert;
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 = nix-on-droid;
nod-bootstrap-x86_64 = inputs.nix-on-droid.packages.x86_64-linux.bootstrapZip-x86_64;
nod-bootstrap-aarch64 = inputs.nix-on-droid.packages.x86_64-linux.bootstrapZip-aarch64;
inherit (self.packages.x86_64-linux) authorizedKeys sm64coopdx;
authorizedKeysAarch = self.packages.aarch64-linux.authorizedKeys;
ak = authorizedKeys;
coopdx = sm64coopdx;
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" { };
};
all =
pkgs.runCommand "nix-stuff-all"
{
__structuredAttrs = true;
links = self.qb;
}
''
mkdir $out
cd $out
eval "$(${pkgs.jq}/bin/jq '.links | to_entries | map("ln -s "+.value+" "+.key) | join("\n")' /build/.attrs.json -r)"
'';
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;
allPure = self.all.overrideAttrs (prev: {
links = removeAttrs prev.links [
"nix-on-droid"
"nod"
"nod-bootstrap-x86_64"
"nod-bootstrap-aarch64"
];
});
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;
};
allWithBuildDeps =
let
info = pkgs.closureInfo { rootPaths = [ self.all.drvPath ]; };
in
self.all.overrideAttrs (prev: {
links = prev.links // {
build-deps = info;
};
});
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; };
}
// (inputs.flake-utils.lib.eachDefaultSystem (
// (allInputs.flake-utils.lib.eachDefaultSystem (
system:
let
pkgs = import nixpkgs { inherit system; };
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
{
formatter = pkgs.nixfmt-rfc-style;
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,15 +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

View File

@@ -1,12 +1,4 @@
{
config,
pkgs,
lib,
jovian,
inputs,
...
}:
{ pkgs, inputs, ... }:
{
imports = [
inputs.jovian.nixosModules.jovian
@@ -17,21 +9,27 @@
./bluetooth.nix
./partitioning.nix
./padtype.nix
../common/nixos.nix
];
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.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" ];
@@ -45,23 +43,15 @@
services.xserver.enable = true;
services.displayManager.sddm.enable = true;
services.xserver.desktopManager.plasma5.enable = true;
services.desktopManager.plasma6.enable = true;
services.openssh.enable = true;
environment.systemPackages = with pkgs; [
audacity
librewolf
vacu.packages = ''
jupiter-hw-support
steamdeck-firmware
steamdeck-bios-fwupd
cargo
clippy
rust-analyzer
rustc
rustfmt
rustup
];
'';
# boot.kernelPatches = [
# {

View File

@@ -1,7 +1,6 @@
{
config,
lib,
pkgs,
modulesPath,
...
}:
@@ -49,11 +48,13 @@
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 = [ ];

View File

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

View File

@@ -11,4 +11,12 @@ in
};
boot.initrd.preLVMCommands = "${padtype-pkg}/bin/padtype &";
boot.initrd.kernelModules = [
"uhid"
"i2c_hid_acpi"
"usbhid"
"mac_hid"
"evdev"
"uinput"
];
}

View File

@@ -1,16 +1,28 @@
# everything to interact with my apex flex, pcsc stuff, fido2 stuff, etc
{ pkgs, ... }:
{
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 = with pkgs; [
libfido2
pcsclite
pcsc-tools
scmccid
opensc
vacu.packages = lib.mkMerge [
''
libfido2
pcsc-tools
scmccid
opensc
pcsclite
''
{ pcsclite.package = pcsclite-pkg; }
];
services.pcscd.enable = true;
@@ -53,12 +65,12 @@
'')
];
programs.firefox.enable = true;
#programs.firefox.policies.SecurityDevices.p11-kit-proxy = "${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"
KERNEL=="hidg[0-9]", SUBSYSTEM=="hidg", SYMLINK+="ctaphid", MODE="0666", TAG+="uaccess"
KERNEL=="ccidg[0-9]", SUBSYSTEM=="ccidg", SYMLINK+="ccidsc", MODE="0666", TAG+="uaccess"
'';
}

View File

@@ -1,69 +1,65 @@
{
config,
inputs,
pkgs,
lib,
...
}:
{ inputs, pkgs, lib, vacuModules, ... }:
{
imports = [
../common/nixos.nix
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
];
vacu.hostName = "fw"; # Define your hostname.
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
vacu.packages = with pkgs; [
bitwarden-desktop
nheko
librewolf
brave
thunderbird
wl-clipboard
nextcloud-client
signal-desktop
fw-ectool
framework-tool
iio-sensor-proxy
power-profiles-daemon
acpi
jellyfin-media-player
vlc
dmidecode
prismlauncher
ffmpeg_7-full
wireshark
obsidian
dino
aircrack-ng
libreoffice-qt6-fresh
gimp
# null actually means everything https://github.com/NixOS/nixpkgs/commit/5efd65b2d94b0ac0cf155e013b6747fa22bc04c3
(inkscape-with-extensions.override { inkscapeExtensions = null; })
libsmi
net-snmp
];
users.users.shelvacu.extraGroups = [ "dialout" ];
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";
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;
@@ -82,9 +78,6 @@
];
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?
@@ -96,21 +89,32 @@
"usbhid"
"sd_mod"
];
boot.initrd.kernelModules = [ ];
#boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
#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"
];
};
@@ -120,14 +124,13 @@
options = [
"fmask=0022"
"dmask=0022"
"nofail"
];
};
hardware.cpu.amd.updateMicrocode = true;
hardware.enableAllFirmware = true;
hardware.opengl = {
driSupport = true;
driSupport32Bit = true;
hardware.graphics = {
extraPackages = [
pkgs.rocmPackages.clr.icd
pkgs.amdvlk
@@ -150,4 +153,6 @@
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,9 +1,4 @@
{
config,
pkgs,
lib,
...
}:
{ config, lib, ... }:
{
networking.firewall.allowedTCPPorts = [ 993 ];
systemd.tmpfiles.settings.whatever."/var/lib/mail".d = {
@@ -27,13 +22,13 @@
"lmtp"
"sieve"
];
modules = [ pkgs.dovecot_pigeonhole ];
mailUser = "vmail";
mailGroup = "vmail";
createMailUser = true;
mailLocation = "mdbox:~/mail";
extraConfig = ''
mail_home = /var/lib/mail/%n
mail_max_userip_connections = 100
service auth {
unix_listener /var/lib/postfix/queue/private/dovecot-auth {
group = ${config.services.postfix.group}
@@ -97,9 +92,20 @@
namespace {
separator = .
inbox = yes
mailbox MagicRefilter {
auto = create
}
}
# 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
}
'';
};
}

View File

@@ -9,11 +9,37 @@ let
shel_domains
julie_domains
domains
relayhost
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 = [
@@ -34,9 +60,9 @@ in
mom@shelvacu.com julie
psv@shelvacu.com psv
''
+ (lib.concatMapStringsSep "\n" (d: "@${d} shelvacu") shel_domains)
+ (mapLines (d: "@${d} shelvacu") shel_domains)
+ "\n"
+ (lib.concatMapStringsSep "\n" (d: "@${d} julie") julie_domains);
+ (mapLines (d: "@${d} julie") julie_domains);
transport = ''
shelvacu@${fqdn} ${dovecot_transport}
@@ -52,18 +78,37 @@ in
enableSubmission = false;
enableSubmissions = true;
mapFiles.header_checks = pkgs.writeText "header-checks" (
"/./ INFO checker headers\n"
+ (lib.concatMapStringsSep "\n" (
''
/./ 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" (
lib.concatMapStringsSep "\n" (d: "${d} REJECT") domains
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_relay = pkgs.writeText "sender-relay" "@shelvacu.com ${relayhost}";
# 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 = ''
@@ -72,12 +117,15 @@ in
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
smtpd_recipient_restrictions = check_recipient_access pcre:/etc/postfix/add_envelope_to
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
@@ -86,8 +134,8 @@ in
# 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 hapenn??
virtual_transport = error:5.3.5 how did this even happenn??
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
@@ -124,7 +172,6 @@ in
"smtp_sasl_password_maps=texthash:${config.sops.secrets.relay_creds.path}"
"-o"
"smtp_tls_wrappermode=no"
#"-o" "relayhost=${relayhost}"
] ++ (if debug then [ "-v" ] else [ ]);
};
@@ -144,7 +191,7 @@ in
smtpd_sasl_type = "dovecot";
smtpd_sasl_path = "private/dovecot-auth";
message_size_limit = "100000000";
smtpd_sender_login_maps = "hash:/etc/postfix/virtual";
smtpd_sender_login_maps = "hash:/etc/postfix/extra_login_maps";
smtpd_sender_restrictions = "reject_authenticated_sender_login_mismatch";
header_checks = "";

View File

@@ -1,4 +1,4 @@
{ config, ... }:
{ ... }:
let
domains = [
"smtp.shelvacu.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,9 +1,6 @@
{ config, pkgs, ... }:
{
imports = [
../common/nixos.nix
./hardware-config.nix
];
imports = [ ./hardware-config.nix ];
# Use the systemd-boot EFI boot loader.
boot.loader.systemd-boot.enable = true;
@@ -12,6 +9,7 @@
vacu.hostName = "lp0onfire"; # Define your hostname.
vacu.shortHostName = "lp0";
vacu.shell.color = "green";
vacu.systemKind = "server";
# Set your time zone.
time.timeZone = "America/Los_Angeles";
@@ -39,7 +37,6 @@
pciutils
ncdu
nix-index
git
];
# This value determines the NixOS release from which the default
@@ -52,11 +49,6 @@
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 = {
enable = true;
joinNetworks = [ "1d719394047b32ae" ];
@@ -67,11 +59,4 @@
# Disable wifi card; This is sitting directly under a router and I don't want to cause interference.
boot.blacklistedKernelModules = [ "iwlwifi" ];
# networking.nat = {
# enable = true;
# externalInterface = "enp2s0";
# internalIPs = [ "192.168.192.0/24" ];
# internalInterfaces = [ "ztrf26rjvk" ];
# };
}

View File

@@ -1,13 +1,7 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
pkgs,
modulesPath,
...
}:
{ lib, modulesPath, ... }:
{
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
@@ -31,6 +25,7 @@
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/36B4-78A2";
fsType = "vfat";
options = [ "nofail" ];
};
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";
}

Binary file not shown.

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