Compare commits

...

1502 Commits

Author SHA1 Message Date
1c5c9b80eb nixpkgs: 2025-08-27 -> 2025-08-28; remove upstreamed newsflash cross code 2025-08-28 16:01:56 +00:00
94289c2253 nixpkgs-wayland: 2025-08-27 -> 2025-08-28 2025-08-28 16:00:27 +00:00
0c443fae25 uassets: 2025-08-26 -> 2025-08-28 2025-08-28 16:00:14 +00:00
a490a74390 cross: open PRs for all my rust cross patches 2025-08-28 01:57:17 +00:00
2e71e06c05 lemoa: inline the cross compilation fix 2025-08-27 18:43:49 +00:00
203832b5a8 envelope: 2024-09-13 -> 2025-05-17; inline the cross fixes 2025-08-27 18:37:55 +00:00
1204f4db69 cross: rewrite newsflash patch as a nixpkgs commit 2025-08-27 17:04:05 +00:00
a4b114fce2 nixpkgs: bump; rewrite snapshot patch as nixpkgs commit 2025-08-27 16:29:58 +00:00
7e17eb4056 nixpkgs-wayland: 2025-08-26 -> 2025-08-27 2025-08-27 15:52:50 +00:00
259d980a60 nixpkgs: 2025-08-26 0> 2025-08-27 2025-08-27 15:52:40 +00:00
5488486944 firefox: fix browserpass/native-messaging-hosts integration 2025-08-27 08:32:35 +00:00
969717b1fe firefox: disable safebrowsing and restrict app auto-updates even more aggressively
i don't think any auto-updating bit me, i'm just being pre-emptive
2025-08-27 07:55:45 +00:00
7391e34f77 cross: factor spot,video-trimmer build fixes into nixpkgs commits 2025-08-27 02:25:28 +00:00
7f45077485 cross: split delfin fix into nixpkgs patch 2025-08-27 01:12:25 +00:00
ceb7ccbc6d todo.md: task for migrating spot -> riff 2025-08-27 01:06:14 +00:00
9d63ec5dd2 hosts: remove references to lappy remote fs
this was causing mount timeouts on _every_ deploy
2025-08-27 00:00:21 +00:00
7ce93eae96 cross: fix papers via upstreamable patch 2025-08-26 23:52:58 +00:00
1277c73304 nixpkgs: update, drop upstreamed loupe/pwvucontrol cross patches 2025-08-26 18:14:55 +00:00
0550498cd1 nixpkgs/patches: remove redundant qemu patch, push coincurve upstream 2025-08-26 17:02:45 +00:00
023396a41e nixpkgs-bootstrap.staging: 2025-08-25 -> 2025-08-26 2025-08-26 15:44:27 +00:00
ebb335ef4c nixpkgs-wayland: 2025-08-25 -> 2025-08-26 2025-08-26 15:44:27 +00:00
fbb0046dda uvtools: 5.1.7 -> 5.2.0 2025-08-26 15:44:27 +00:00
59d4197bf5 uassets: 2025-08-25 -> 2025-08-26 2025-08-26 15:44:27 +00:00
90e4e20274 zimPackages.wikipedia_en_all_maxi: 2024-01 -> 2025-08 2025-08-26 15:44:27 +00:00
7ecd368e20 zimPackages.alpinelinux: 2025-07 -> 2025-08 2025-08-26 15:44:27 +00:00
79fc30da0e cross: push fractal/pwvucontrol/loupe patches upstream & update tracking statuses 2025-08-26 15:44:27 +00:00
23f3647cc5 nixpkgs-wayland: 2025-08-20 -> 2025-08-25 2025-08-26 15:44:27 +00:00
ad4910366d zimPackages.archlinux_en_all_maxi: 2025-07 -> 2025-08 2025-08-26 15:44:27 +00:00
609becadfe nixpkgs: 2025-08-18 -> 2025-08-26 2025-08-26 15:44:27 +00:00
3acabe60b6 uassets: 2025-08-20 -> 2025-08-25 2025-08-26 15:44:27 +00:00
87ec095b8a programs: typescript-language-server: link cache files into ephemeral storage 2025-08-26 15:44:27 +00:00
8831d8d1ac image: fix initrd path to be the /boot path instead of the /nix/store path 2025-08-22 02:58:09 +00:00
8b333a8887 doc/migrating-storage-device: show how to resize the fs 2025-08-22 02:58:09 +00:00
028d903e9c boot: package "mlabel", for changing FAT UUIDs 2025-08-22 02:20:05 +00:00
dfed5f070b servo: update fs UUIDs 2025-08-22 02:19:47 +00:00
b29ee5ac03 desko: gate ollama behind sane.maxBuildCost option 2025-08-21 02:43:35 +00:00
e700ff392f servo: gate costly services behind sane.maxBuildCost option 2025-08-21 02:42:58 +00:00
91578c0b78 snippets: add new links 2025-08-20 17:31:19 +00:00
b35656c9ae nixpkgs-wayland: 2025-08-19 -> 2025-08-20 2025-08-20 17:24:48 +00:00
726281a6dd uassets: 2025-08-19 -> 2025-08-20 2025-08-20 17:24:09 +00:00
f305027678 nvimpager: allow access to vimrc 2025-08-20 01:17:37 +00:00
2b69c07d12 nixpkgs-wayland: 2025-08-18 -> 2025-08-19 2025-08-19 08:35:30 +00:00
544b1e58e0 uassets: 2025-08-18 -> 2025-08-19 2025-08-19 08:35:18 +00:00
34c2d4f66f neovim: ship RC file as ~/.config/nvim/
this allows easier editing at runtime
2025-08-18 21:22:21 +00:00
4addf857b7 firefox: redirect "maps" search URL to Kagi by default 2025-08-18 19:39:31 +00:00
a3f6c148d3 nixpkgs: 2025-08-17 -> 2025-08-18 2025-08-18 15:25:24 +00:00
43a0abd68f nixpkgs-wayland: 2025-08-17 -> 2025-08-18 2025-08-18 15:25:15 +00:00
b3c4e96d6e syshud: 2025-07-26 -> 2025-08-18 2025-08-18 15:24:56 +00:00
ade5ce5339 uassets: 2025-08-17 -> 2025-08-18 2025-08-18 15:24:40 +00:00
e543034fcb overlays/cross: update upstreaming status 2025-08-17 21:25:15 +00:00
b5d96ed17b nixpkgs: 2026-08-16 -> 2025-08-17 2025-08-17 17:32:26 +00:00
003ce70cd7 nixpkgs-wayland: 2025-08-15 -> 2025-08-17 2025-08-17 17:32:16 +00:00
04f6964711 uassets: 2025-08-16 -> 2025-08-17 2025-08-17 17:31:59 +00:00
63cf19f839 nixpkgs: 2025-08-15 -> 2025-08-16 2025-08-16 21:05:35 +00:00
806a1aa294 nixpkgs-wayland: 2025-08-14 -> 2025-08-15 2025-08-16 20:13:28 +00:00
35a023f449 lpac: 2.2.1 -> 2.3.0 2025-08-16 17:06:56 +00:00
f0aec4416c uassets: 2025-08-15 -> 2025-08-16 2025-08-16 16:53:29 +00:00
e0bb1b7c62 servo: gitea: place only the most expensive repos behind Anubis 2025-08-16 08:15:47 +00:00
9847e0171c flowy: avoid invoking no-op efibootmgr operations 2025-08-16 08:05:55 +00:00
03a1638628 flowy: set nixos as default EFI boot entry, always 2025-08-16 07:55:35 +00:00
f7327bef3e servo: document the anubis openGraph setting 2025-08-16 07:04:56 +00:00
47fb8296db flowy: add bootloader entry to boot into Windows (but i still need to do more config to get Bitlocker to work w/o secure boot) 2025-08-16 07:02:37 +00:00
b409fbb5f7 systemd-boot: enable memtest and edk2 UEFI shell 2025-08-16 07:00:47 +00:00
84092395f4 Merge pull request 'patch-gitea-anubis-opengraph' (#6) from shelvacu/colins-nix-files:patch-gitea-anubis-opengraph into master
Reviewed-on: #6
2025-08-16 07:00:22 +00:00
Shelvacu
ffcdf08b20 git.uninsane.org: passthru page metadata in Anubis
Inspired by adding a link to a post on discuss.nixos.org and having it show up as "Making sure you're not a bot!"

Anubis docs: https://anubis.techaro.lol/docs/admin/configuration/open-graph/
2025-08-15 23:41:55 -07:00
faa0fd006a nixpkgs: 2025-08-14 -> 2025-08-15 2025-08-15 18:03:14 +00:00
7c7780183a nixpkgs-wayland: bump 2025-08-15 17:24:52 +00:00
78be0fbd11 euicc-manual: 2025-08-10 -> 2025-08-14 2025-08-15 17:24:35 +00:00
9a42a08910 uassets: 2025-08-14 -> 2025-08-15 2025-08-15 17:24:14 +00:00
09a027ef3f snippets: add nixpkgs cross compilation PRs 2025-08-14 15:28:48 +00:00
a54b476b12 nix: ship debug info 2025-08-14 07:50:55 +00:00
98df75a449 waka.laka.osaka: fix autoplay, add tap-to-unmute 2025-08-14 07:50:38 +00:00
d62788108b nixpkgs: 2025-08-13 -> 2025-08-14 2025-08-14 07:01:28 +00:00
0b8807fb9e nixpkgs-wayland: 2025-08-13 -> 2025-08-14 2025-08-14 07:00:17 +00:00
8588fc0ad0 uassets: 2025-08-13 -> 2025-08-14 2025-08-14 06:53:45 +00:00
7e671285ca nfs-utils: ship 2025-08-13 23:40:04 +00:00
844a838016 hosts/x86_64: replace syslinux with systemd-boot inside the image 2025-08-13 20:06:49 +00:00
85ac4241d3 bootpart-systemd-boot: init 2025-08-13 20:05:34 +00:00
e515bf10c4 bootpart-uefi-x86_64 -> bootpart-syslinux 2025-08-13 19:50:43 +00:00
3e35c4ae85 fix hosts.rescue.img build 2025-08-13 19:48:43 +00:00
10e005d8c8 modules/image: distribute systemd-boot loader configs 2025-08-13 19:48:26 +00:00
61b30678c4 all: switch bootloader from syslinux -> systemd-boot (except for moby -- TODO) 2025-08-13 17:53:46 +00:00
a1ba78c69f nixpkgs: 2025-08-12 -> 2025-08-13 2025-08-13 16:10:09 +00:00
7ca9cd116f nixpkgs-wayland: 2025-08-11 -> 2025-08-13 2025-08-13 15:46:36 +00:00
41e534fc66 sops-nix: bump 2025-08-13 15:46:25 +00:00
e52e30990b uassets: 2025-08-12 -> 2025-08-13 2025-08-13 15:46:16 +00:00
190f50748a modules/image: move extlinux population into extraBootFiles hook 2025-08-13 15:45:59 +00:00
326b5ac98d all: remove extlinux 10-entry limit 2025-08-13 07:29:29 +00:00
0498ca9be3 tailscale: support "MagicDNS" (mdns) 2025-08-13 01:52:42 +00:00
9a0efcb8c2 nixpkgs: 2025-08-11 -> 2025-08-12 2025-08-13 01:52:42 +00:00
4442fca519 sops-nix: 2025-08-04 -> 2025-08-12 2025-08-13 01:52:42 +00:00
fb0b7796b4 uassets: 2025-08-11 -> 2025-08-12 2025-08-13 01:52:42 +00:00
9060a426c2 image: fix "nixos.img" -> "disk.img" typo 2025-08-13 01:52:42 +00:00
4b5368d47e easylpac: 0.7.6.5 -> 0.7.8.4; define an updateScript 2025-08-11 22:58:45 +00:00
f659c358d9 euicc-manual: fix swapped ci/eum manifests
omg, i hope i didn't delay easylpac packaging half a year just because of a typo this dumb
2025-08-11 22:58:12 +00:00
7a0760440d euicc-manual: dont skipp build/install hooks 2025-08-11 22:56:56 +00:00
bc89969a2c nixpkgs: 2025-08-10 -> 2025-08-11 2025-08-11 16:24:44 +00:00
c767769b61 nixpkgs-wayland: 2025-08-07 -> 2025-08-10 2025-08-11 16:03:09 +00:00
26acb7c4a7 zimPackages.wikipedia_en_100: 2025-07 -> 2025-08 2025-08-11 16:02:57 +00:00
9e7af6625e uassets: 2025-08-10 -> 2025-08-11 2025-08-11 16:02:41 +00:00
2ec26e9534 nixpkgs: 2025-08-09 -> 2025-08-10 2025-08-10 19:11:45 +00:00
4dac9900b4 euicc-manual: 2025-08-07 -> 2025-08-10 2025-08-10 19:11:36 +00:00
0f91fbe1ae uassets: 2025-08-09 -> 2025-08-10 2025-08-10 19:11:24 +00:00
38899ce392 bootpart-uefi-x86_64: clean up the package and config 2025-08-10 05:17:59 +00:00
f8eec18429 bootpart-uefi-x86_64: refactor 2025-08-10 04:18:33 +00:00
baabd39cb7 bootpart-uefi-x86_64: FIX so that it auto-boots 2025-08-10 04:16:52 +00:00
ca26af0278 bootpart-uefi-x86_64: remove unnecessary /EFI/BOOT/ entries 2025-08-09 19:18:42 +00:00
7fd2c38ff1 bootpart-uefi-x86_64: split the configs into their own files in src 2025-08-09 17:47:11 +00:00
df8b8eeb40 update links 2025-08-09 16:48:58 +00:00
8a5443e50d nixpkgs: 2025-08-08 -> 2025-08-09 2025-08-09 16:40:52 +00:00
464ec33aec uassets: 2025-08-08 -> 2025-08-09 2025-08-09 16:40:40 +00:00
7608534b25 animatch: simplify cross compilation override 2025-08-08 16:04:43 +00:00
2f7a7026c4 nixpkgs: 2025-08-06 -> 2025-08-08 2025-08-08 04:58:39 +00:00
3b7d6d34c4 tor-browser: disable dbus ownership (speculatively) 2025-08-08 04:57:52 +00:00
87f30b8fef nixpkgs-wayland: 2025-08-06 -> 2025-08-07 2025-08-08 04:57:31 +00:00
ff13331fe6 uvtools: 5.1.6 -> 5.1.7 2025-08-08 04:57:11 +00:00
981b79a00f uassets: 2025-08-06 -> 2025-08-08 2025-08-08 04:56:51 +00:00
b8d8a382d0 euicc-manual: 0-unstable-2025-07-20 -> 0-unstable-2025-08-07 2025-08-08 04:56:32 +00:00
4eef8330e7 megapixels-next: 2.0.0-alpha2-unstable-2025-06-12 -> 2.0.0-alpha2-unstable-2025-08-06 2025-08-08 04:56:12 +00:00
8b5284811d servo: bitcoind: update docs 2025-08-07 06:30:37 +00:00
2184c17677 refactor: firefox: move security.ssl.require_safe_negotiation docs to user.js 2025-08-06 22:14:08 +00:00
d64e955206 cross: dont disable gui in v4l-utils: its build is fixed in staging; can pull that patch if i want v4l-utils 2025-08-06 22:12:33 +00:00
c4ae9d9e25 nixpkgs: 2025-08-05 -> 2025-08-06 2025-08-06 22:11:52 +00:00
8dbb2fdbe3 nixpkgs-wayland: 2025-08-05 -> 2025-08-06 2025-08-06 22:10:46 +00:00
8908394493 opencellid: 0-unstable-2025-08-05 -> 0-unstable-2025-08-06 2025-08-06 18:25:25 +00:00
fb825b4630 uassets: 0-unstable-2025-08-05 -> 0-unstable-2025-08-06 2025-08-06 18:25:09 +00:00
d504e9216b firefox: allow it to own mpris dbus endpoints 2025-08-05 21:06:52 +00:00
c9261d1438 epiphany: statically configure the default search provider 2025-08-05 21:00:50 +00:00
e3152da68c nixpkgs-bootstrap: remove upstreamed bind cross compilation patch 2025-08-05 15:57:27 +00:00
44da59ebee 2025-08-04 -> 2025-08-05 2025-08-05 15:21:37 +00:00
64a86d202c sops-nix: 2025-07-15 -> 2025-08-04 2025-08-05 15:21:25 +00:00
a4cb3ce359 nixpkgs-wayland: 2025-08-04 -> 2025-08-05 2025-08-05 15:21:07 +00:00
3ff3d6b135 opencellid: 2025-08-04 -> 2025-08-05 2025-08-05 15:20:53 +00:00
7ca476af97 uassets: 2025-08-04 -> 2025-08-05 2025-08-05 15:20:40 +00:00
a9091151e8 feeds: unsubscribe from Quorators 2025-08-05 15:20:19 +00:00
9641ffecbc nixpkgs: 2025-08-03 -> 2025-08-04 2025-08-04 15:01:15 +00:00
d2d80d548b nixpkgs-wayland: 2025-08-03 -> 2025-08-04 2025-08-04 15:01:04 +00:00
418f0dedeb opencellid: 2025-08-03 -> 2025-08-04 2025-08-04 15:00:49 +00:00
59f45e3fc0 uassets: 2025-08-03 -> 2025-08-04 2025-08-04 15:00:35 +00:00
fcd479e35d tor-browser: persist settings dir 2025-08-04 01:54:09 +00:00
225cbd1280 feeds: youtube: subscribe to @theodd1sout 2025-08-03 23:21:08 +00:00
97e9d77add yt-dlp: document plugins 2025-08-03 22:21:23 +00:00
07bc8be439 yt-dlp: tune the low-quality profile 2025-08-03 22:13:19 +00:00
f494698373 nixpkgs: 2025-08-02 -> 2025-08-03 2025-08-03 19:51:46 +00:00
727f5fc8e6 nixpkgs-wayland: 2025-08-01 -> 2025-08-03 2025-08-03 19:51:34 +00:00
1052649f5b podcastindex-db: 2025-07-27 -> 2025-08-03 2025-08-03 19:51:20 +00:00
ea624269c4 opencellid: 2025-08-01 -> 2025-08-03 2025-08-03 19:51:03 +00:00
851b7fde8c uassets: 2025-08-02 -> 2025-08-03 2025-08-03 19:50:44 +00:00
a4630c21e0 feeds: unsubscribe @CasuallyExplained
oops, not my type of political content
2025-08-03 09:32:08 +00:00
55f06128ee yt-dlp: moby: lower bandwidth preference
unlikely to be hit in practice, for the default low-res videos
2025-08-03 09:28:47 +00:00
da2c808194 yt-dlp: tune resolution preferences 2025-08-03 09:27:25 +00:00
cb2f1faafd yt-dlp: dont strip the extension when saving files 2025-08-03 07:45:10 +00:00
22d3029c7c feeds: youtube: subscribe to @jaketran 2025-08-03 07:44:27 +00:00
faeb311090 feeds: youtube: subscribe to @CasuallyExplained 2025-08-03 07:39:52 +00:00
e1c85f111a feeds: youtube: subscribe to Veritasium 2025-08-03 07:36:36 +00:00
2c8a9c4877 feeds: youtube: subscribe to @kurzgesagt 2025-08-03 07:30:24 +00:00
5d87480e60 feedsearch-crawler: fix build 2025-08-03 07:03:43 +00:00
8966c365cc feeds: subscribe to youtube @scenesbyben 2025-08-03 07:03:32 +00:00
3bc5a8f6c4 nixpkgs: 2025-08-01 -> 2025-08-02 2025-08-02 19:10:49 +00:00
7cb342b1ab nixpkgs-wayland: bump 2025-08-02 19:10:27 +00:00
45fdb7badf uassets: 2025-08-01 -> 2025-08-02 2025-08-02 19:09:58 +00:00
29ee5efe24 yt-dlp: cleanup config 2025-08-02 10:05:51 +00:00
a52f1f0f6a yt-dlp: save sponsorblock tags
TODO: i can probably remove the mpv sponsorblock plugin now?
2025-08-02 09:46:59 +00:00
2d00c141e5 yt-dlp: fix to prefer english language videos 2025-08-02 09:27:24 +00:00
643b1ae661 nixpkgs: 2025-07-31 -> 2025-08-01 2025-08-01 18:11:25 +00:00
23f13c24b7 nixpkgs-wayland: 2025-07-30 -> 2025-08-01 2025-08-01 18:11:08 +00:00
a03ed72ea4 uassets: 2025-07-31 -> 2025-08-01 2025-08-01 18:10:53 +00:00
0f4854944c opencellid: 2025-07-30 -> 2025-08-01 2025-08-01 18:10:39 +00:00
5b10ff1e1e sway: allow select Zoom windows to float 2025-08-01 02:31:55 +00:00
1085978f99 slack: force it to use Wayland 2025-08-01 01:53:31 +00:00
62cf79e60d zoom: switch to Wayland & support webrtc screen sharing
i set this XDG_SESSION_TYPE=wayland system-wide because it's also needed for EVERY screensharing client. sad
2025-08-01 01:47:04 +00:00
fb64d1ad50 nixpkgs: 2025-07-30 -> 2025-07-31 2025-07-31 15:49:09 +00:00
a9301055a4 nixpkgs-wayland: bump 2025-07-31 15:48:57 +00:00
522365d498 uassets: 2025-07-30 -> 2025-07-31 2025-07-31 15:48:48 +00:00
3805f3f72d gpodder: dont use yt-dlp for channel management 2025-07-30 19:42:21 +00:00
c5a574fe6a nixpkgs: 2025-07-28 -> 2025-07-30 2025-07-30 18:16:15 +00:00
0b54c31b0c nixpkgs-wayland: 2025-07-28 -> 2025-07-30 2025-07-30 18:15:54 +00:00
a69ff986cd opencellid: 2025-07-28 -> 2025-07-30 2025-07-30 18:15:39 +00:00
2ba194e0a4 uassets: 2025-07-28 -> 2025-07-30 2025-07-30 18:15:26 +00:00
68889c364c tcpdump: enable dbus, bluetooth, rdma packet captures 2025-07-29 00:41:33 +00:00
5aafbb0dcb programs/tcpdump: move to own file 2025-07-29 00:17:53 +00:00
40fc2f9b9b ollama: document how good/bad more of these models are 2025-07-29 00:12:57 +00:00
e2932f1364 xdg-desktop-portal-nautilus: better co-existence with nautilus
don't install .desktop files for the portal (else i get two 'Files' app entries); rename to ensure we actually launch the portal instead of normal nautilus.
2025-07-28 21:22:04 +00:00
9afeeb62fa gpodder: fix config typos 2025-07-28 20:03:41 +00:00
1157215198 animatch: docs: link to upstream allegro5 + SDL patch 2025-07-28 19:51:45 +00:00
709d70a4d9 gpodder: configure settings (e.g. yt-dlp enablement) statically 2025-07-28 19:49:29 +00:00
9a1fcf8038 programs/gpodder: move to own directory 2025-07-28 18:52:48 +00:00
5edc6ba067 nixpkgs: 2025-07-27 -> 2025-07-28 2025-07-28 17:24:59 +00:00
394e4c42b4 2025-07-27 -> 2025-07-28 2025-07-28 17:24:33 +00:00
162953b004 uvtools: 5.1.5 -> 5.1.6 2025-07-28 17:24:06 +00:00
6c37bc38fa opencellid: 2025-07-27 -> 2025-07-28 2025-07-28 17:23:14 +00:00
ae08bfc496 uassets: 2025-07-27 -> 2025-07-28 2025-07-28 17:22:41 +00:00
713a85b3d3 fix bad --add-flags invocations
makeBinaryWrapper was updated some months ago to apply shell-style parsing to --add-flags; thats not what you want most of the time
2025-07-28 07:18:32 +00:00
49d4a79d87 animatch: switch SDL2 -> sdl2-compat, for clarity (theyre aliases) 2025-07-28 07:18:32 +00:00
3e09196687 dtrx: enable rpm; it builds on cross 2025-07-28 07:18:32 +00:00
1730ecc98f cross: update upstreaming statuses 2025-07-28 07:18:32 +00:00
755dc417ba nixpkgs: 2025-07-26 -> 2025-07-27 2025-07-28 07:18:32 +00:00
74f59eb596 audacity: switch to tenacity because audacity is broken on master 2025-07-28 07:18:32 +00:00
b08ab26ea1 git: alias "pul" to "pull" 2025-07-28 07:18:32 +00:00
afe4857a58 nixpkgs-wayland: 2025-07-25 -> 2025-07-27 2025-07-28 07:18:32 +00:00
8f74778955 syshud: 2025-03-11 -> 2025-07-26
only change is to README.md
2025-07-28 07:18:32 +00:00
557adce795 podcastindex-db: 2025-07-20 -> 2025-07-27 2025-07-28 07:18:32 +00:00
7e704ce55d opencellid: 2025-07-26 -> 2025-07-27 2025-07-28 07:18:32 +00:00
2dbe1df67e uassets: 2025-07-25 -> 2025-07-27 2025-07-28 07:18:32 +00:00
890cb72b58 hosts: grant servo ssh access to my other machines
it's nice to have a backup when desko is offline; servo is already privileged
2025-07-27 20:49:44 +00:00
d8cb9a3370 WiFi: add new nets 2025-07-27 20:26:32 +00:00
4c504dcdd6 nixpkgs: 2025-07-25 -> 2025-07-26 2025-07-26 21:20:47 +00:00
e87bbdf6cd nixpkgs-wayland: bump 2025-07-26 21:20:39 +00:00
f7a08ae2a0 opencellid: 2025-07-25 -> 2025-07-26 2025-07-26 21:20:30 +00:00
c7fc738c85 zimPackages.archlinux: 2025-06 -> 2025-07 2025-07-26 21:20:18 +00:00
385da61255 zimPackages.openstreetmap-wiki_en_all_maxi: 2023-05 -> 2025-07 2025-07-26 21:19:59 +00:00
bfbd5624fc ollama: ~ship kimi-k2~ don't ship it: it needs 3x the RAM any of my machines have :| 2025-07-26 08:16:13 +00:00
5a6dbada11 ollamaPackages.kimi-k2-1026b: init 2025-07-26 08:04:08 +00:00
e9e9c044bf gitignore: ignore build/ files 2025-07-26 04:54:27 +00:00
709edab85d nixpkgs: 2025-07-23 -> 2025-07-25 2025-07-25 17:12:21 +00:00
05d46ad870 nixpkgs-wayland: 2025-07-22 -> 2025-07-25 2025-07-25 17:12:02 +00:00
3eefd4ced1 opencellid: 2025-07-23 -> 2025-07-25 2025-07-25 17:11:41 +00:00
a42c5362bf uassets: 2025-07-23 -> 2025-07-25 2025-07-25 17:11:08 +00:00
c2cd4dd71c ollama: ship llama4-16x17b 2025-07-25 04:03:33 +00:00
4ec5eb1e88 fractal: docs: mention sane-wipe for how to restore a fractal db 2025-07-24 23:44:55 +00:00
0244242991 snapper: document how to manually delete snapshots 2025-07-24 23:33:46 +00:00
f9c72b6c58 servo: jellyfin: remove dead "lib" import 2025-07-24 23:23:27 +00:00
1ae307c8f4 servo: add recommendedProxySettings to all nginx services which were missing it 2025-07-24 23:10:34 +00:00
97dfb58bbb servo: gitea: place behind anubis
somebody was aggressively crawling it again, even with robots.txt :(
2025-07-24 22:42:24 +00:00
00acccb9c9 scripts/deploy: save a gc ref after building a host
this way i don't lose a shit ton of still-relevant builds when nix-gc'ing
2025-07-24 22:41:36 +00:00
181578384d nixpkgs: patches: update hash for zelda64recomp patch 2025-07-24 22:40:46 +00:00
011c428c08 ollamaPackages: docs: link to some mixture-of-experts models id like to try 2025-07-24 21:33:42 +00:00
e2a183e8d3 ollama: ship a bunch of new models 2025-07-24 19:53:17 +00:00
7b66e2f0e2 ollamaPackages: reintroduce docs from the deleted scope-level package.nix, as README.md 2025-07-24 17:50:16 +00:00
45d98d4517 ollamaPackages: use packagesFromDirectoryRecursive 2025-07-24 17:47:55 +00:00
7cb91731be nixpkgs: update hash for signal-desktop cross patch 2025-07-24 17:35:20 +00:00
47ce18fbfb newelle: docs: leave a note about the font cache building 2025-07-24 08:28:22 +00:00
0758697534 newelle: configure the ollama endpoint statically 2025-07-24 08:02:16 +00:00
5552decca6 alpaca: persist settings to disk 2025-07-24 07:39:02 +00:00
42546baadc mkOllamaModel: docs: link to nixpkgs PR for ollama-model-direct-download 2025-07-24 07:30:56 +00:00
11ada7d35d alpaca: ship on moby; fix cross 2025-07-24 07:29:43 +00:00
32946c35d9 newelle: ship on moby, hack in cross compilation 2025-07-24 07:03:40 +00:00
c2ab6748c4 ship alpaca, newelle LLM tools, to desktop devices
unfortunately they don't cross compile (yet)

newelle is my favored app atm, will likely remove one or the other after daily driving a bit
2025-07-24 03:30:28 +00:00
d54eff32a7 desko: ollama: fix/re-enable GPU acceleration 2025-07-24 02:12:20 +00:00
4d20be490a htop: enable GPU field (sorta, see note) 2025-07-24 01:47:31 +00:00
91771b7bef desko: make ollama visible to my wireguard devices 2025-07-24 01:20:14 +00:00
55d23c92c0 socat: ship it 2025-07-23 22:56:14 +00:00
0066b11754 linkBinIntoOwnPackage: guard against the empty-bin/ case 2025-07-23 22:55:59 +00:00
96373e7eaf nixpkgs: 2025-07-22 -> 2025-07-23 2025-07-23 17:32:12 +00:00
1afe5c3ba7 nixpkgs-wayland: bump 2025-07-23 17:31:59 +00:00
eeb2248831 uassets: 2025-07-22 -> 2025-07-23 2025-07-23 17:31:48 +00:00
d887e86c18 opencellid: 2025-07-22 -> 2025-07-23 2025-07-23 17:31:33 +00:00
fff1488761 zimPackages.alpinelinux_en_all_maxi: 2025-06 -> 2025-07 2025-07-23 17:31:20 +00:00
005dddfb8f static-nix-shell: only generate preambles when theyre needed
the previous logic would append : to PATH when the binary did not require PATH additions, however that's not a no-op. i think it causes PATH lookups in PWD. guard against that by only outputting preambles when we would expect them to have a side effect
2025-07-23 07:59:01 +00:00
30b0ba1a52 programs: ship sshpass 2025-07-23 00:41:36 +00:00
b41e29ac30 linkBinIntoOwnPackage: dont link man sections 0/2/3/9: i dont expect these to be associated with binaries 2025-07-23 00:36:13 +00:00
4dcc565c6c linkBinIntoOwnPackage: avoid linking extraneous man1 or man8 manpages 2025-07-23 00:32:30 +00:00
76c16deae1 linkBinIntoOwnPackage: protect against empty doc/man outputs 2025-07-22 23:40:39 +00:00
457beaca20 sane-bt-search: actually fix --h265 flag... 2025-07-22 23:39:51 +00:00
179c3a7ad7 linkIntoOwnPackage: handle share/man, share/doc consistently with nixpkgs
i.e. let stdenv move these to man/doc outputs, as appropriate
2025-07-22 23:28:26 +00:00
509208e305 sane-bt-search: better --h265 filtering 2025-07-22 22:51:40 +00:00
9c4f6f5bd8 linkIntoOwnPackage: refactor 2025-07-22 22:51:10 +00:00
a40a9dcfcc linkIntoOwnPackage: make pathsToLink introspectable/injectable by consumers 2025-07-22 22:29:16 +00:00
26469d5a11 runCommandLocalOverridable: dont invoke hooks more than once 2025-07-22 22:15:55 +00:00
ae2f2c47a4 fftest: simplify
upstream SDL cross compiles now, so the original comment doesn't apply
2025-07-22 22:11:20 +00:00
91133e096a formatting 2025-07-22 22:10:52 +00:00
a5223320af runCommandLocalOverridable: respect the env argument 2025-07-22 22:10:22 +00:00
e32c9d42d9 linkIntoOwnPackage: allow passing extra named arguments 2025-07-22 21:47:35 +00:00
52261d5bc3 programs: ship expect 2025-07-22 21:38:04 +00:00
99c4c4d043 nixpkgs: 2025-07-21 -> 2025-07-22 2025-07-22 18:23:39 +00:00
de95f45cb9 nixpkgs-wayland: 2025-07-21 -> 2025-07-22 2025-07-22 18:23:26 +00:00
ed311f902b opencellid: 2025-07-21 -> 2025-07-22 2025-07-22 18:23:03 +00:00
f2a0dd4e8f uassets: 2025-07-21 -> 2025-07-22 2025-07-22 18:22:51 +00:00
fcd92407d7 nixpkgs/patches.nix: remove some no-longer-relevant patches 2025-07-22 18:07:22 +00:00
5b7c93b490 mercurial: fix coloring for "hg qseries" command 2025-07-22 00:57:05 +00:00
1b4a6a53e6 mercurial: disable color for q alias 2025-07-22 00:35:40 +00:00
b1cdf9b63e sane-profile: init 2025-07-22 00:07:31 +00:00
1411add8ba git: ship difftastic as a standalone program 2025-07-21 23:49:23 +00:00
58b87e32e3 mercurial: have "qcat" use "colordiff" for syntax higlighting 2025-07-21 23:39:22 +00:00
eb304c6b61 programs: mercurial: add "qcat" alias 2025-07-21 23:20:20 +00:00
2db59f380c programs: ship cdecl 2025-07-21 23:20:06 +00:00
2691e3a8eb programs: mercurial: move to own directory 2025-07-21 22:13:39 +00:00
9f8193787f programs: ship bc 2025-07-21 21:47:03 +00:00
b43328f233 firefox-extensions.sponsorblock: fix first-run check? not sure this is actually necessary w/ auto-updates disabled 2025-07-21 21:22:09 +00:00
b45f3ea7db firefox: disable extension auto-updates
i mean, the whole concept assumes you don't patch any of those addons in the first place...
2025-07-21 21:21:29 +00:00
afbed1e18d nixpkgs: 2025-07-20 -> 2025-07-21 2025-07-21 20:35:31 +00:00
3068ac35b7 nixpkgs-wayland: 2025-07-20 -> 2025-07-21 2025-07-21 20:35:15 +00:00
6c4a6a596f opencellid: 2025-07-20 -> 2025-07-21 2025-07-21 20:35:02 +00:00
913dfbd798 uassets: 2025-07-20 -> 2025-07-21 2025-07-21 20:34:50 +00:00
f49ce4b2fd firefox: disable "security.tls.enable_0rtt_data"; add docs to other settings
i'm not that passionate about the 0rtt setting; but i worry the vulnerabilities could stack with e.g. insecure renogiation or other vulns
2025-07-21 08:23:39 +00:00
496b2a10b4 openssl: ship it 2025-07-21 05:49:31 +00:00
9f8df5db63 static-nix-shell.mkZsh: implement shellPreamble to reduce wrapping 2025-07-20 23:44:03 +00:00
6f590899bb static-nix-shell: fix typo in assigning PATH/XDG_DATA_DIRS 2025-07-20 23:27:23 +00:00
f8d2dbca62 sane-bt-search: add "--sort-by size" option 2025-07-20 23:25:19 +00:00
3b458d5337 sane-bt-search: improve help message for "--sort-by" option 2025-07-20 23:23:25 +00:00
3b9fd0a548 sane-bt-search: add tracker IDs for old (unused) trackers 2025-07-20 23:03:43 +00:00
4ef705d143 static-nix-shell.mkPython3: use shellPreamble to avoid an extra layer of wrapping
actually avoids *two* layers of wrapping, since we aren't using the nixpkgs Python wrapper anymore either
2025-07-20 22:55:15 +00:00
233320e3a1 gpodder-configured: expose helper utils via passthru 2025-07-20 22:46:31 +00:00
1a89305f18 static-nix-shell: more clearly mark the nix-shell preambles 2025-07-20 20:56:11 +00:00
3b8b227c09 static-nix-shell.mkYsh: manually inject PATH and XDG_DATA_DIRS to remove an extra layer of wrapping 2025-07-20 20:55:08 +00:00
5eb620d521 static-nix-shell.mkBash: manually inject PATH and XDG_DATA_DIRS to remove an extra layer of wrapping 2025-07-20 20:31:06 +00:00
8fc16eaf39 static-nix-shell: remove unused extraMakeWrapperArgs argument
it wasn't even implemented right
2025-07-20 20:09:50 +00:00
fa38f70079 nixpkgs: 2025-07-19 -> 2025-07-20 2025-07-20 19:00:50 +00:00
aed191b255 nixpkgs-wayland: 2025-07-19 -> 2025-07-20 2025-07-20 19:00:30 +00:00
02fe7e02c2 uvtools: 5.1.4 -> 5.1.5 2025-07-20 19:00:11 +00:00
0aaf453ba7 euicc-manual: 2025-07-19 -> 2025-07-20 2025-07-20 18:59:56 +00:00
dd12514486 uassets: 2025-07-19 -> 2025-07-20 2025-07-20 18:59:39 +00:00
d0eb5851d5 podcastindex-db: 2025-07-15 -> 2025-07-20 2025-07-20 18:59:24 +00:00
2fc1baebd6 opencellid: 2025-07-19 -> 2025-07-20 2025-07-20 18:59:06 +00:00
8477e51538 fix systemd backlight persistence 2025-07-19 23:55:22 +00:00
e016ed9272 fix nixos activation notify-send 2025-07-19 23:35:38 +00:00
e311e0e757 tailscale: remote bogus comment
/dev/net/tun *is* userspace networking; that's all tailscale can do
2025-07-19 23:33:24 +00:00
e6f724a54c networkmanager: dont set invalid main.dns values 2025-07-19 23:32:51 +00:00
bd735d4400 networkmanager-split: ship manpages 2025-07-19 22:36:59 +00:00
2d8dcb600c bluetooth pairings: set correct service.Type = "oneshot" 2025-07-19 21:12:41 +00:00
62a5711a2a wifi pairings: set correct service.Type = "oneshot"
this ensures correct ordering between the things which use it
2025-07-19 21:12:23 +00:00
bdbc632e1e nixpkgs: 2025-07-18 -> 2025-07-19 2025-07-19 19:21:49 +00:00
e25d8a29b9 nixpkgs-wayland: 0-unstable-2025-07-15 -> 0-unstable-2025-07-19 2025-07-19 19:21:49 +00:00
504a13832f euicc-manual: 0-unstable-2025-05-20 -> 0-unstable-2025-07-19 2025-07-19 19:21:49 +00:00
a95bbd23b4 mslicer: 0.2.2-unstable-2025-06-25 -> 0.2.2-unstable-2025-07-18 2025-07-19 19:21:49 +00:00
e2bb663c8e opencellid: 2025-07-16 -> 2025-07-19 2025-07-19 19:21:49 +00:00
04e4d9ed23 uassets: 2025-07-15 -> 2025-07-19 2025-07-19 19:21:49 +00:00
44d83ffdfd rk3399-ppp-sound DTO: elaborate docs 2025-07-19 19:21:49 +00:00
ee92770d11 linuxPackages.ppp-imx258: init
i'm failing to get working cam with this, but gotta start somewhere...
2025-07-19 19:21:49 +00:00
f39978ee43 todo.md: task for getting moby wifi to auto-connect 2025-07-19 19:21:49 +00:00
96a18c86dd static-nix-shell: add infrastructure for configuring PATH/XDG_DATA_DIRS without wrapping, in a shell-specific manner 2025-07-19 19:21:49 +00:00
d426a9e9e8 programs: ship "wiremix" 2025-07-19 19:21:49 +00:00
96d3e3fcca nixpkgs: patches: link to alsa-ucm-conf update 2025-07-19 19:21:49 +00:00
a84d48d601 nixpkgs: remove commented-out patches which have since been merged 2025-07-19 19:21:49 +00:00
7e882212c4 linuxPackages.{imx258,rt5640}: prefix name with "megi-"
to differentiate with other (future) customized versions of these modules
2025-07-19 19:21:49 +00:00
bde9114ce9 pinephone-pro: disable megi's imx258; fixes audio but loses us the camera (which may or may not have been working before) 2025-07-19 19:21:49 +00:00
d7a1859b97 linuxPackages.imx258: document why this custom kernel module is needed
and yes, this is still up-to-date with megi's as of linux 6.15
2025-07-19 19:21:49 +00:00
958f8ef0c9 pinephone-pro: add docs around kernel building 2025-07-19 19:21:49 +00:00
d37543e9e9 pinephone-pro: ship megi's rt5640 driver
longer term, i should switch back to the kernel driver, but first i gotta figure out why it fails...
2025-07-19 19:21:49 +00:00
88454ff073 alsa-ucm-conf: show how to build unmerged versions 2025-07-19 19:21:49 +00:00
0c791e30a0 linuxPackages_6_15.rt5640: fix build against linux 6.15
updated version comes from megi:
```console
$ cd src/linux
$ git fetch stable --tags
$ git checkout v6.15
$ patch -p1 <(curl https://xff.cz/kernels/6.15/patches/all.patch)
$ cp sound/soc/codecs/rt5640.c pkgs/linux-packages/rt5640/snd-soc-rt5640.c
```
2025-07-19 19:21:49 +00:00
e4c6c01f8d sane-input-handler: fix for more recent oils shell 2025-07-19 19:21:49 +00:00
87ce176081 static-niux-shell: support an optional installCheck phase 2025-07-19 19:21:49 +00:00
0f29c667aa sane-input-handler: move to pkgs/by-name 2025-07-19 19:21:49 +00:00
d7f3b7bcff [NOT FOR MOBY DEPLOY] nixpkgs: 2025-07-16 -> 2025-07-18
moby sound issues persist
2025-07-19 19:21:49 +00:00
009691212c [NOT FOR MOBY DEPLOY] nixpkgs: 2025-07-06 -> 2025-07-16
moby has broken sound output (kernel ASoC log errors), and GUI is unresponsive
2025-07-19 19:21:42 +00:00
82e049d99d nixpkgs-wayland: 2025-07-10 -> 2025-07-15 2025-07-18 16:12:05 +00:00
17cdbb12d2 sops-nix: 2025-07-04 -> 2025-07-15 2025-07-18 16:11:40 +00:00
c1edaf792a opencellid: 2025-07-15 -> 2025-07-16 2025-07-18 16:11:09 +00:00
36869a94b9 uassets: 2025-07-10 -> 2025-07-15 2025-07-18 16:10:53 +00:00
d669e66ffa sane-tag-media: fix missing closing paren in log message 2025-07-18 05:17:05 +00:00
2fcf88b89b zsh: define ls helpers in terms of eachother 2025-07-16 00:47:26 +00:00
023f006eb5 zsh: define a "lrt" alias 2025-07-16 00:45:29 +00:00
bdd012fa43 zshrc: use $HOME instead of hardcoding the user 2025-07-16 00:25:21 +00:00
cbcb43ac2c zsh: split zshrc into dedicated file 2025-07-16 00:24:38 +00:00
fde708e602 mercurial: ship mercurialFull
not sure _entirely_ what it adds though
2025-07-15 23:02:55 +00:00
e4fc268c24 mercurial: add an old "qcref" alias, but it doesnt work on modern (or nix?) mercurial 2025-07-15 22:23:43 +00:00
5f829789fd podcastindex-db: 2025-07-06 -> 2025-07-15 2025-07-15 06:44:50 +00:00
28a13219be opencellid: 2025-07-10 -> 2025-07-15 2025-07-15 06:44:37 +00:00
36f2bcd80c tailscale: log added/removed routes 2025-07-15 06:44:19 +00:00
1b181755c7 nixpkgs-wayland: 2025-07-09 -> 2025-07-10 2025-07-10 16:52:43 +00:00
ef68078de6 opencellid: 2025-07-09 -> 2025-07-10 2025-07-10 16:52:28 +00:00
d35ef1be32 uassets: 2025-07-09 -> 2025-07-10 2025-07-10 16:52:15 +00:00
ad2a555256 zimPackages.wikipedia_en_100: 2025-06 -> 2025-07 2025-07-10 16:51:58 +00:00
87908fdf03 nixpkgs-wayland: 2025-07-07 -> 2025-07-09 2025-07-09 15:59:36 +00:00
f079b3d920 zimPackages.devdocs_en_nix: 2025-04 -> 2025-07 2025-07-09 15:59:23 +00:00
82f7580d4c opencellid: 2025-07-07 -> 2025-07-09 2025-07-09 15:59:05 +00:00
df63240580 uassets: 2025-07-07 -> 2025-07-09 2025-07-09 15:58:54 +00:00
e8c5dda396 sane-bt-search: link to tracking issues for bitmagnet limitations 2025-07-09 06:24:42 +00:00
127d731892 signal-desktop: enable desktop notifications
they're actually integrated into sway; show up in swaync
2025-07-08 23:04:07 +00:00
f2a1aafcc6 zsh: tune options 2025-07-08 20:16:33 +00:00
1f3957bcc4 zsh: fix aliases/functions such that they can refer to eachother 2025-07-08 19:26:43 +00:00
fdbdf826d3 sane-bt-search: more precisely specify the --tracker argument options 2025-07-08 18:56:29 +00:00
f66920854a snippets: add a few more 2025-07-08 17:38:58 +00:00
33263c27ff sane-bt-search: calculate bitmagnet URI by using the InfoHash field instead of parsing MagnetUri 2025-07-07 22:27:52 +00:00
25aa82b038 sane-bt-search: add a --tracker parameter to query just a single tracker 2025-07-07 21:44:54 +00:00
fbce38a47a sane-bt-search: fix BitMagnet torrent page URIs 2025-07-07 21:44:54 +00:00
604599b3b6 sane-bt-search: refactor: split out Tracker details into own class 2025-07-07 21:44:54 +00:00
cf38651e8d netns: remove addresses from loopback device 2025-07-07 21:44:54 +00:00
48bd6d304f sane-bt-search: improve sort metrics 2025-07-07 21:44:54 +00:00
d5711e7de7 netns: set lo up when initializing the netns
this is critical for services which communicate with eachother, e.g. jackett -> bitmagnet
2025-07-07 21:44:54 +00:00
5e3854595e servo: bitmagnet: add docs 2025-07-07 19:08:18 +00:00
9f3cf94a0e nixpkgs-bootstrap: update the signal-desktop patch hash 2025-07-07 16:48:56 +00:00
bec6b6ed72 nixpkgs-wayland: 2025-07-06 -> 2025-07-07 2025-07-07 15:52:47 +00:00
fdf2b5327e opencellid: 2025-07-06 -> 2025-07-07 2025-07-07 15:52:31 +00:00
b7daf1ad04 uassets: 2025-07-06 -> 2025-07-07 2025-07-07 15:52:14 +00:00
b454a5a34f signal-desktop: push cross compilation patches upstream 2025-07-07 09:28:19 +00:00
ae29f3066b nixpkgs: 2025-07-05 -> 2025-07-06 2025-07-06 21:25:42 +00:00
70b1dda0a1 nixpkgs-wayland: 2025-07-05 -> 2025-07-06 2025-07-06 21:25:33 +00:00
960ac80ba4 podcastindex-db: 2025-07-02 -> 2025-07-06 2025-07-06 21:25:21 +00:00
214df43af2 opencellid: 2025-07-05 -> 2025-07-06 2025-07-06 21:25:03 +00:00
d67169aa13 uassets: 2025-07-05 -> 2025-07-06 2025-07-06 21:24:48 +00:00
019991cf1e signal-desktop: dont hold onto nodejs at all 2025-07-06 08:25:22 +00:00
c4f25ac198 signal-desktop: remove ref to build-time packages 2025-07-06 07:58:14 +00:00
831bddbcb6 programs: signal-desktop: ship upstream nixpkgs version, patched to cross-compile
because signal is too much bullshit for me to maintain on my own
2025-07-06 07:25:35 +00:00
4ac8805743 signal-desktop: fix cross compilation 2025-07-06 07:24:48 +00:00
abd5e8a18d flare-signal: test & update compat/status 2025-07-06 03:22:52 +00:00
a6a1597f26 signal-dessktop-from-src: freeze at 7.60.0 2025-07-05 23:08:40 +00:00
dede9e3ddb nixpkgs: 2025-07-04 -> 2025-07-05 2025-07-05 23:02:56 +00:00
69ac264681 nixpkgs-wayland: 2025-07-03 -> 2025-07-05 2025-07-05 23:02:35 +00:00
39fc431802 sops-nix: 2025-06-17 -> 2025-07-04 2025-07-05 23:02:19 +00:00
9b9a0fa953 uassets: 2025-07-03 -> 2025-07-05 2025-07-05 23:02:02 +00:00
85b41efc7e opencellid: 2025-07-03 -> 2025-07-05 2025-07-05 23:01:44 +00:00
bd80c3b6f7 nixpkgs: 2025-07-03 -> 2025-07-04 2025-07-04 07:46:30 +00:00
91624ba253 uassets: bump 2025-07-04 07:46:21 +00:00
e52ae986b6 Revert "signal-desktop-from-src: 7.60.0 -> 7.61.0"
This reverts commit 7c0523f3e6.

upon launch, Signal says 7.61.0 has expired and does not let you message
anyone.

fuck signal i hate their bullshit. "bUt It'S sO mUch EaSIer tHAn
MAtrIx". bruh
2025-07-03 07:47:34 +00:00
dead0a4b7c nixpkgs: 2025-07-02 -> 2025-07-03 2025-07-03 07:42:54 +00:00
fc29c61ab7 nixpkgs-wayland: 2025-07-02 -> 2025-07-03 2025-07-03 07:42:42 +00:00
7c0523f3e6 signal-desktop-from-src: 7.60.0 -> 7.61.0 2025-07-03 07:42:30 +00:00
00fdcb7ec3 opencellid: 2025-07-02 -> 2025-07-03 2025-07-03 07:42:09 +00:00
87fbeaa2bf uassets: 2025-07-02 -> 2025-07-03 2025-07-03 07:41:54 +00:00
3cd1bd2bff zsh: expose un-aliased coreutils ls as _ls 2025-07-03 05:08:06 +00:00
11f8127cc3 zsh: fix ls aliases
they were being overriden by shittier nixos defaults
2025-07-02 21:54:16 +00:00
722c94d169 nixpkgs: 2025-06-27 -> 2025-07-02 2025-07-02 19:52:46 +00:00
f1b8fd7a9d nixpkgs-wayland: 2025-06-28 -> 2025-07-02 2025-07-02 19:52:24 +00:00
0c4d84de90 sponsorblock: 5.13.1 -> 5.13.2 2025-07-02 19:52:10 +00:00
9ee805d2f4 uvtools: 5.1.3 -> 5.1.4 2025-07-02 19:51:57 +00:00
ce7702fbb7 uassets: 2025-06-28 -> 2025-07-02 2025-07-02 19:51:37 +00:00
6a1bdeb3a9 podcastindex-db: 2025-06-22 -> 2025-07-02 2025-07-02 19:51:24 +00:00
a61a3afd73 opencellid: 2025-06-28 -> 2025-07-02 2025-07-02 19:51:08 +00:00
728e97b122 ssh: remove unused SSH_EXTRA_KNOWN_HOSTS env hook 2025-07-02 07:37:08 +00:00
558e9edc4b snapper: document how to delete snapshots/data 2025-07-01 16:25:54 +00:00
195e420181 bind: enable reverse DNS on select networks 2025-07-01 16:18:33 +00:00
dd2aee0e10 nixpkgs: update patch hashes 2025-07-01 16:18:14 +00:00
851071c8e1 zsh: tweak ls aliases 2025-07-01 07:26:22 +00:00
73fcb27251 sane-private-unlock-remote: add a timeout 2025-06-29 20:08:10 +00:00
2e7f164738 fix native hosts to not build as cross 2025-06-28 22:48:22 +00:00
689d9ead5a nixpkgs-wayland: 2025-06-27 -> 2025-06-28 2025-06-28 21:19:33 +00:00
f1f0115e1b uassets: 2025-06-27 -> 2025-06-28 2025-06-28 21:19:13 +00:00
ecf90f3662 opencellid: 2025-06-27 -> 2025-06-28 2025-06-28 21:19:01 +00:00
58ab12310a toplevel: define a "static-x86_64" and "static-aarch64" host, to experiment with static linking
progress is early, and it's unclear if the work the make gtk, opengl, etc compatible with such a system will ever be feasible
2025-06-28 11:54:47 +00:00
4ceab76cd1 get "hosts.baseline-x86_64" to eval 2025-06-28 10:17:59 +00:00
a2634219bc nixpkgs: 2025-06-26 -> 2025-06-27 2025-06-27 17:58:33 +00:00
cd6e128a6d nixpkgs-wayland: 2025-06-26 -> 2025-06-27 2025-06-27 17:02:24 +00:00
a472f35775 opencellid: 2025-06-26 -> 2025-06-27 2025-06-27 17:02:10 +00:00
0558eb71d4 uassets: 2025-06-26 -> 2025-06-27 2025-06-27 17:01:57 +00:00
5a7310759e lddtree: ship 2025-06-27 07:16:23 +00:00
7e84c7e237 patchelf: ship it 2025-06-27 07:12:44 +00:00
d7f79ed7d9 nixpkgs: 2025-06-25 -> 2025-06-26 2025-06-26 18:23:15 +00:00
ba9e4b95ba nixpkgs-wayland: 2025-06-24 -> 2025-06-26 2025-06-26 18:23:02 +00:00
e1cc1570c7 signal-desktop-from-src: 7.59.0 -> 7.60.0 2025-06-26 17:46:31 +00:00
ecfe480394 opencellid: 2025-06-25 -> 2025-06-26 2025-06-26 17:46:12 +00:00
ca2e15c8c5 uassets: 2025-06-25 -> 2025-06-26 2025-06-26 17:46:01 +00:00
194151367c nixpkgs: 2025-06-24 -> 2025-06-25 2025-06-25 15:59:53 +00:00
87d9415223 nixpkgs-wayland: same-day bump 2025-06-25 15:59:34 +00:00
7d52b4210a mslicer: 0.2.2-unstable-2025-06-14 -> 0.2.2-unstable-2025-06-25 2025-06-25 15:59:21 +00:00
3c1b1c2967 zimPackages.archlinux_en_all_maxi: 2025-05 -> 2025-06 2025-06-25 15:58:44 +00:00
0b9e012bba uassets: 2025-06-24 -> 2025-06-25 2025-06-25 15:58:27 +00:00
aa7e60c415 opencellid: 2025-06-24 -> 2025-06-25 2025-06-25 15:58:13 +00:00
70b0f3a100 x86_64: enable nested virtualization (speculatively) 2025-06-25 08:16:57 +00:00
1c268038b2 users: colin: add to "kvm" group 2025-06-24 20:25:31 +00:00
6d335a2122 nixpkgs: 2025-06-23 -> 2025-06-24 2025-06-24 15:13:13 +00:00
cc37289967 nixpkgs-wayland: 2025-06-23 -> 2025-06-24 2025-06-24 15:13:04 +00:00
1ee216f7b1 zimPackages.wikipedia_en_all_mini: 2024-04 -> 2025-06 2025-06-24 15:12:50 +00:00
76ac917230 uninsane-dot-org: 2025-02-09 -> 2025-06-23 2025-06-24 15:12:36 +00:00
3ced6b5db9 opencellid: 2025-06-23 -> 2025-06-34 2025-06-24 15:00:23 +00:00
b6a55de5bd uassets: 2025-06-23 -> 2025-06-24 2025-06-24 15:00:12 +00:00
f6b1754dd1 nixpkgs: 2025-06-22 -> 2025-06-23 2025-06-23 15:19:47 +00:00
17b5cf31d1 nixpkgs-wayland: 2025-06-22 -> 2025-06-23 2025-06-23 15:19:29 +00:00
67c314b96c opencellid: 2025-06-22 -> 2025-06-23 2025-06-23 15:19:14 +00:00
7fefed160f uassets: 2025-06-22 -> 2025-06-23 2025-06-23 15:19:00 +00:00
d9c1a97ef6 modules/image.nix: remove dependency on mobile-nixos
the images build, but i have not tried booting them
2025-06-23 02:32:17 +00:00
dafa562f51 programs: cargo: assign buildCost = 1 2025-06-22 22:47:10 +00:00
bf4e5bce27 nixpkgs: 2025-06-21 -> 2025-06-22 2025-06-22 21:31:10 +00:00
059193d09a nixpkgs-wayland: 2025-06-21 -> 2025-06-22 2025-06-22 21:31:10 +00:00
5365044412 signal-desktop-from-src: fix hash 2025-06-22 21:31:10 +00:00
8fb8d468f9 opencellid: 2025-06-21 -> 2025-06-22 2025-06-22 21:31:10 +00:00
136abd88e0 podcastindex-db: 2025-06-16 -> 2025-06-22 2025-06-22 21:31:10 +00:00
dedd89bc43 uassets: 2025-06-21 -> 2025-06-22 2025-06-22 21:31:10 +00:00
e2b432f759 bootpart-u-boot-rpi-aarch64: cleanup
didn't try booting this; not super educated on all the different components here
2025-06-22 21:31:10 +00:00
4dc007460d cadey: ship rpi-400 boot files 2025-06-22 21:31:10 +00:00
2e40a2cf0c hosts: consolidate pkgs.bootpart-uefi-x86_64 into hal/x86_64 2025-06-22 21:31:10 +00:00
8ace840d50 cadey: ship kodi 2025-06-22 21:31:10 +00:00
8aa2396c36 hosts/cadey: init
this hasn't been deployed to hardware -- yet
2025-06-22 21:31:10 +00:00
082db767af sane-bt-add: support "--other $NAME" torrent types 2025-06-22 03:12:28 +00:00
0220a3c22b nixpkgs: update patch hashes 2025-06-22 01:36:22 +00:00
0212be3ac8 flowy: enable rsync-net backups 2025-06-21 16:31:17 +00:00
ec8092a99d nixpkgs: 2025-06-20 -> 2025-06-21; push buildfix patches upstream 2025-06-21 07:43:40 +00:00
03c17dedd2 nixpkgs-wayland: 2025-06-20 -> 2025-06-21 2025-06-21 07:42:55 +00:00
bd9d57c746 sponsorblock: 5.13 -> 5.13.1 2025-06-21 07:42:44 +00:00
51203647d4 zimPackages.alpinelinux_en_all_maxi: 2023-01 -> 2025-06 2025-06-21 07:42:32 +00:00
037e24e877 uassets: 2025-06-20 -> 2025-06-21 2025-06-21 07:42:15 +00:00
81c1db550f opencellid: 2025-06-20 -> 2025-06-21 2025-06-21 07:42:05 +00:00
4703744aa1 nixpkgs: 2025-06-18 -> 2025-06-20 2025-06-21 06:28:26 +00:00
7476f80cbe rsync: enable ssh access 2025-06-21 06:27:59 +00:00
0261110fa5 bypass-paywalls-clean: disable
sources are offline, i havent used it for several months anyway
2025-06-21 06:27:20 +00:00
34ea0a2756 signal-desktop: remove outdated comment 2025-06-21 06:26:27 +00:00
d891dbce96 signal-desktop-from-src: 7.58.0 -> 7.59.0 2025-06-20 21:42:17 +00:00
a5b5b58659 opencellid: 2025-06-18 -> 2025-06-20 2025-06-20 19:42:15 +00:00
18b3877eaa sponsorblock: 5.12.4 -> 5.13 2025-06-20 18:31:41 +00:00
751131bcb0 uassets: 2025-06-18 -> 2025-06-20 2025-06-20 18:31:05 +00:00
7c6d8e2da5 wifi: add new network 2025-06-20 02:11:00 +00:00
bb536e1a89 bind: add records for resolving localhost 2025-06-19 03:16:04 +00:00
13800abfbe tailscale: route the 192.168/16 IP space 2025-06-19 03:16:04 +00:00
da88798ff2 slack: allow access to ~/tmp 2025-06-18 17:30:46 +00:00
8ddf1fce66 nixpkgs: 2025-06-17 -> 2025-06-18 2025-06-18 17:27:33 +00:00
fbc2a06ab9 nixpkgs-wayland: 2025-06-16 -> 2025-06-18 2025-06-18 17:27:20 +00:00
dd93ccd26f opencellid: 2025-06-17 -> 2025-06-18 2025-06-18 17:26:58 +00:00
b6c638ac0b uassets: 0-unstable-2025-06-17 -> 0-unstable-2025-06-18 2025-06-18 17:26:43 +00:00
e241a1f78f hg: tune the [diff] config 2025-06-18 00:43:36 +00:00
42e863cb93 todo.md: task for showing deadlines less often 2025-06-17 21:42:08 +00:00
fb5f15e757 zoom: persist enough data that it stays logged in across exits (but not boots?) 2025-06-17 21:41:56 +00:00
09fd2426e3 nixpkgs: 2025-06-16 -> 2025-06-17 2025-06-17 14:44:32 +00:00
5fa2c56889 nixpkgs-wayland: same-day update 2025-06-17 14:44:23 +00:00
a76173c0ec opencellid: 2025-06-16 -> 2025-06-17 2025-06-17 14:44:10 +00:00
e1bdd9fa0f sops-nix: 2025-06-10 -> 2025-06-17 2025-06-17 14:43:57 +00:00
2dafce82df uassets: 2025-06-16 -> 2025-06-17 2025-06-17 14:43:39 +00:00
d4e668e6fd sane-private-unlock-remote: fix ssh sandboxing (hopefully) 2025-06-17 04:28:14 +00:00
af8f7c06ad nixpkgs: 2025-06-14 -> 2025-06-16 2025-06-17 03:53:42 +00:00
6c11a90bff mslicer: 0.2.1-unstable-2025-05-01 -> 0.2.2-unstable-2025-06-14 2025-06-17 03:53:23 +00:00
59d5d6592e nixpkgs-wayland: 2025-06-14 -> 2025-06-16 2025-06-16 16:56:56 +00:00
8641ee16ad opencellid: 2025-06-14 -> 2025-06-16 2025-06-16 16:56:28 +00:00
643e0f7bbc podcastindex-db: 2025-06-08 -> 2025-06-16 2025-06-16 16:56:16 +00:00
c2e686217c uassets: 2025-06-14 -> 2025-06-16 2025-06-16 16:55:45 +00:00
d4c9e47cff uvtools: 5.1.2 -> 5.1.3 2025-06-16 16:55:28 +00:00
0b241ea4ab firefox: update wiki.nixos.org search URL 2025-06-15 01:53:25 +00:00
c944521cb2 servo: deploy waka.laka.osaka as a derivation instead of linking to external untracked files 2025-06-14 21:37:20 +00:00
d3cc96415b servo: hickory-dns: discover zones via config.sane.dns 2025-06-14 21:07:08 +00:00
dabeadea09 servo: laka.osaka: fix so hickory-dns serves the site, and / is served by index.html 2025-06-14 21:03:05 +00:00
f0126eae61 nixpkgs: 2025-06-13 -> 2025-06-14 2025-06-14 20:58:35 +00:00
8f214ca89d nixpkgs-wayland: 2025-06-13 -> 2025-06-14 2025-06-14 20:58:11 +00:00
ee3442567a opencellid: 2025-06-13 -> 2025-06-14 2025-06-14 20:57:55 +00:00
5d956ce884 uassets: 2025-06-13 -> 2025-06-14 2025-06-14 20:57:46 +00:00
fa5122af8e servo: nginx: define laka.osaka website 2025-06-14 20:26:21 +00:00
1edf5b2d89 servo: uninsane.org: remove SSL hacks
i *think* these aren't needed, now i don't use ejabberd
2025-06-14 20:10:31 +00:00
58e72a6457 servo: uninsane.org: remove public logging; these don't go anywhere, with goaccess being disabled 2025-06-14 20:08:26 +00:00
8238ac10f5 servo: nginx: split uninsane.org out of main config file 2025-06-14 20:05:55 +00:00
c739e94658 servo: nginx: move to own folder 2025-06-14 19:57:26 +00:00
85fb7b04d0 sway: configure gpodder to always render titlebar 2025-06-14 19:53:16 +00:00
93d68e494f neovim: add H keybinding to switch between matching .c and .h files 2025-06-13 19:39:37 +00:00
6f4e96145a megapixels-next: 2025-06-01 -> 2025-06-12 2025-06-13 19:02:35 +00:00
a93e226058 nixpkgs: 2025-06-12 -> 2025-06-13 2025-06-13 19:02:21 +00:00
980a62ecfc nixpkgs-wayland: 2025-06-12 -> 2025-06-13 2025-06-13 19:02:04 +00:00
3d90e2a606 opencellid: 2025-06-12 -> 2025-06-13 2025-06-13 19:01:47 +00:00
c83b5fc771 uassets: 2025-06-12 -> 2025-06-13 2025-06-13 19:01:34 +00:00
7c27e27e27 programs/mercurial: implement a "hg qdup" alias 2025-06-13 07:35:12 +00:00
024fbd48a2 programs/mercurial: try to create an alias to migrate patches across stacks, but i'm too dumb to get it to actually work 2025-06-13 07:21:28 +00:00
5ec78adf11 feeds: unsubscribe from Away Days 2025-06-13 03:38:56 +00:00
cfc08dc06c sane-private-unlock: only unlock if we actually have a session 2025-06-12 19:14:45 +00:00
331cbaf926 modules/users: escape values in ~/.config/environment.d to avoid syntax errors 2025-06-12 19:14:29 +00:00
5aed77b30d programs/mercurial: configure some MQ-related aliases 2025-06-12 19:13:55 +00:00
2c25c54a7e programs/mercurial: add missing "less" dependency 2025-06-12 17:53:43 +00:00
57711561d6 signal-desktop-from-src: fix hash 2025-06-12 17:52:20 +00:00
1f779320d0 nixpkgs: 2025-06-11 -> 2025-06-12 2025-06-12 15:30:04 +00:00
7f57ead946 nixpkgs-wayland: 2025-06-11 -> 2025-06-12 2025-06-12 15:29:53 +00:00
26eddd0eff signal-desktop-from-src: 7.57.0 -> 7.58.0 2025-06-12 15:29:35 +00:00
d3bb04f84c opencellid: 2025-06-11 -> 2025-06-12 2025-06-12 15:29:18 +00:00
a0a2f60b44 uassets: 2025-06-11 -> 2025-06-12 2025-06-12 15:29:06 +00:00
69c9b6badc flowy: enable private-unlock to servo 2025-06-11 20:55:44 +00:00
9b3451f380 nixpkgs: 2025-06-10 -> 2025-06-11 2025-06-11 18:22:15 +00:00
12584bcfde nixpkgs-wayland: 2025-06-10 -> 2025-06-11 2025-06-11 18:22:04 +00:00
b87fdc2ae1 opencellid: 2025-06-10 -> 2025-06-11 2025-06-11 18:21:53 +00:00
a730800d76 sops-nix: 2025-05-18 -> 2025-06-10 2025-06-11 18:21:38 +00:00
7b62be4fa8 uassets: 2025-06-10 -> 2025-06-11 2025-06-11 18:21:28 +00:00
d39a4e38c3 nixpkgs: 2025-06-08 -> 2025-06-10 2025-06-10 16:59:27 +00:00
a6a55dca21 nixpkgs-wayland: 2025-06-08 -> 2025-06-10 2025-06-10 16:59:16 +00:00
4ad9192444 opencellid: 2025-06-08 -> 2025-06-10 2025-06-10 16:59:04 +00:00
c08af9e96f uassets: 2025-06-08 -> 2025-06-10 2025-06-10 16:58:53 +00:00
3765e24f16 zimPackages.wikipedia_en_100: 2025-05 -> 2025-06 2025-06-10 16:58:39 +00:00
ff667bc576 sway: switch back to shipping the nixpkgs-wayland version 2025-06-10 16:58:10 +00:00
81201a97ba servo: /var/media/archive/{README.md->temp/README.md} 2025-06-08 21:23:56 +00:00
d86d32bb55 scripts/deploy: swap lappy -> flowy for default deployments 2025-06-08 19:40:11 +00:00
feaf2ead69 nixpkgs: 2025-06-07 -> 2025-06-08 2025-06-08 19:33:56 +00:00
f811ac3a99 nixpkgs-wayland: 2025-06-07 -> 2025-06-08 2025-06-08 19:33:46 +00:00
9e74337e2d podcastindex-db: 2025-06-02 -> 2025-06-08 2025-06-08 19:33:31 +00:00
9886f95e62 opencellid: 2025-06-07 -> 2025-06-08 2025-06-08 19:33:18 +00:00
38074e0a95 uassets: 2025-06-07 -> 2025-06-08 2025-06-08 19:33:04 +00:00
881ddbc2f2 nixpkgs: push bind extraArgs patch upstream 2025-06-07 19:35:22 +00:00
8d76f4ccae bind: log to /var/log/named/named.log 2025-06-07 19:02:35 +00:00
3bff1fd013 bind: more docs 2025-06-07 09:55:18 +00:00
5acacb78fb nixpkgs: remove upstreamed patches 2025-06-07 09:22:39 +00:00
3c71e2f363 bind: configure minimal logging 2025-06-07 09:14:11 +00:00
e2b4f317fb nixpkgs: 2025-06-06 -> 2025-06-07 2025-06-07 06:58:05 +00:00
2e4a6f061e todo.md: add netns-related tasks 2025-06-07 06:57:49 +00:00
80c8131120 nixpkgs-wayland: 2025-06-06 -> 2025-06-07 2025-06-07 06:57:28 +00:00
e7ce064c69 opencellid: 2025-06-06 -> 2025-06-07 2025-06-07 06:57:07 +00:00
f206a15f29 uassets: 2025-06-06 -> 2025-06-07 2025-06-07 06:56:55 +00:00
7818b14b49 servo: bitmagnet: dont expose the web UI unprotected 2025-06-07 06:56:28 +00:00
40d63c837f polyunfill: keep XDG_CONFIG_DIRS=/etc/xdg nixos default
i finally found a place where it's used
2025-06-07 06:55:51 +00:00
dea48bf34b servo: bitmagnet: raise the crawl rate 2025-06-06 22:17:37 +00:00
0951725e36 sops: remove the default examples 2025-06-06 21:56:45 +00:00
503cc832d4 servo: bitmagnet: restrict behind a login 2025-06-06 21:06:30 +00:00
f7b872aba0 programs: add htpasswd 2025-06-06 21:00:50 +00:00
8b152137f6 secrets: servo: reformat readme 2025-06-06 20:45:07 +00:00
2eeb9a2ace servo: add bitmagnet service 2025-06-06 20:07:56 +00:00
bfae7cd4e9 firefox: add a search shortcut for rust-lang.org docs 2025-06-06 19:45:03 +00:00
cb79156d24 nixpkgs: 2025-06-05 -> 2025-06-06 2025-06-06 16:51:56 +00:00
57694a732d nixpkgs-wayland: 2025-06-04 -> 2025-06-06 2025-06-06 16:51:48 +00:00
51ee4826a5 opencellid: 2025-06-05 -> 2025-06-06 2025-06-06 16:51:31 +00:00
0762c0aa20 uassets: 2025-06-05 -> 2025-06-06 2025-06-06 16:51:21 +00:00
aeeed83b8b ssh: fix sandboxing to support "tailscale ssh" 2025-06-06 08:17:54 +00:00
01438ff7bb bunpen: apply BUNPEN_DISABLE regex matching to BUNPEN_DROP_SHELL, too 2025-06-06 04:02:23 +00:00
1db734375a mercurial: allow ssh access (for cloning over ssh://) 2025-06-06 03:30:23 +00:00
65f3c3d8bd programs/ssh: provide a way to inject known_hosts at runtime 2025-06-06 03:04:20 +00:00
bc25feab80 modules/users: provide an env var to control sourcing of ~/.profile 2025-06-06 03:04:06 +00:00
19a14cc8ad ssh: migrate to using ssh-agent
this provides better security, and the possibility of easier dependency injecting (e.g. coercing a program to use some _specific_ ssh key, even when not designed for it)'
2025-06-05 19:09:30 +00:00
d4c576c2ae servo: update fs uuids 2025-06-05 19:00:11 +00:00
c50f4b1a5a nixpkgs: 2025-06-04 -> 2025-06-05 2025-06-05 08:18:27 +00:00
78be5777cb nixpkgs-wayland: 2025-06-02 -> 2025-06-04 2025-06-05 08:18:14 +00:00
c01656686d opencellid: 2025-06-04 -> 2025-06-05 2025-06-05 08:18:01 +00:00
3a6d05bbf8 uassets: 2025-06-04 -> 2025-06-05 2025-06-05 08:17:48 +00:00
9b8603e505 pkgs/*: migrate stdenv -> stdenvNoCC for packages which dont need a compiler 2025-06-05 04:38:13 +00:00
bc293726ee mercurial: enable MQ extension 2025-06-04 18:57:47 +00:00
8bce4b6fba snippets: add project tracking links 2025-06-04 18:48:26 +00:00
26e9d73541 firefox-extensions: stdenv -> stdenvNoCC wherever possible 2025-06-04 18:05:25 +00:00
984bab8296 feeds: add Away Days (may or may not be worth keeping, idk yet) 2025-06-04 17:58:27 +00:00
55586b578a nixpkgs: 2025-06-03 -> 2025-06-04 2025-06-04 08:45:51 +00:00
d2054a55dd opencellid: 2025-06-03 -> 2025-06-04 2025-06-04 08:45:36 +00:00
9c6c18f157 uassets: 2025-06-03 -> 2025-06-04 2025-06-04 08:45:20 +00:00
3fb1fa3dd9 firefox: auto-open slack/zoom links in external handlers (untested) 2025-06-04 02:04:54 +00:00
d7c496eb28 zoom: allow meeting links to open in the main zoom session 2025-06-03 17:51:40 +00:00
0fdf4271f2 nixpkgs: 2025-06-01 -> 2025-06-03 2025-06-03 07:20:10 +00:00
ffe0ba614b tailscale: fix missing meta
consumers use 'lib.getExe', which works better with valid 'meta'
2025-06-03 03:50:17 +00:00
f12ec0fdeb megapixels-next: 2025-05-31 -> 2025-06-01 2025-06-03 03:49:23 +00:00
02653f1792 opencellid: 2025-06-02 -> 2025-06-03 2025-06-03 03:48:36 +00:00
241023a370 uassets: 2025-06-02 -> 2025-06-03 2025-06-03 03:48:23 +00:00
ecee0fe032 refactor: fs/remote-servo: remove dead code 2025-06-02 17:59:30 +00:00
b88136fe31 sway: assign workspace 1 predictably 2025-06-02 17:59:20 +00:00
788cc28063 flowy: update password 2025-06-02 17:44:11 +00:00
a250a99b69 secrets/net: add networks encountered with flowy 2025-06-02 17:43:29 +00:00
2509ea571f sway: add external displays for flowy 2025-06-02 17:42:49 +00:00
bdc56a20ce nixpkgs-bootstrap: fix patch hash 2025-06-02 16:05:47 +00:00
1929ef3458 flowy: add a user password 2025-06-02 16:05:37 +00:00
81d3c2c469 gnome-keyring: fix creation of default keyring 2025-06-02 09:57:32 +00:00
7fba13c628 flowy: fix host-specific secrets encryption 2025-06-02 09:23:24 +00:00
f4a8a94af8 flowy: enable wireguard 2025-06-02 09:13:48 +00:00
98f505887e doc: fix the updatekeys command to be non-interactive 2025-06-02 09:13:29 +00:00
1d1fe1d9b5 flowy: fix host secrets 2025-06-02 09:12:48 +00:00
be73029e54 doc/adding-a-host: show how to setup wireguard keys 2025-06-02 08:46:31 +00:00
4d3005ca5d scripts/sync: sync to flowy 2025-06-02 08:46:14 +00:00
72f4f6b1a0 hosts/common: add a /mnt/flowy mountpoint 2025-06-02 08:45:57 +00:00
bf3b383957 flowy: enable "work" role 2025-06-02 08:44:09 +00:00
474de5c3d7 programs: ship ssh-to-age 2025-06-02 08:43:54 +00:00
9c39b4346b wg-home: remove unused module argument 2025-06-02 08:43:42 +00:00
899e84ca75 flowy: add ssh and wireguard keys 2025-06-02 08:43:26 +00:00
28ab943be4 docs: show more clearly how to update secret keys 2025-06-02 08:37:17 +00:00
d837278324 secrets: give flowy access to relevant secrets 2025-06-02 08:35:48 +00:00
39ec9f5cfb modules/persist: remove extraneous "nosuid" flag from gocryptfs mounts
it was logging noisily
2025-06-02 08:27:51 +00:00
6ddac6b3f2 nixpkgs-wayland: 2025-05-31 -> 2025-06-02 2025-06-02 08:10:43 +00:00
66163f5e0c signal-desktop-from-src: update hash 2025-06-02 08:10:25 +00:00
10831169d1 opencellid: 2025-06-01 -> 2025-06-02 2025-06-02 08:10:08 +00:00
3ad397b6bc podcastindex-db: 2025-05-30 -> 2025-06-02 2025-06-02 08:09:57 +00:00
2991208cd9 uassets: 2025-06-01 -> 2025-06-02 2025-06-02 08:09:43 +00:00
8fa774e140 bootpart-uefi-x86_64: expand docs 2025-06-02 07:37:56 +00:00
2384c3575e tailscale: avoid overlapping IP routes
I think they were making fractal launch hang, between when tailscale is up and when wg-home is reachable; packet gets sent to tailscale instead and hangs
2025-06-02 05:22:19 +00:00
41f0bfde53 bootpart-uefi-x86_64: cleanup formatting 2025-06-02 04:38:05 +00:00
d4723795e6 tailscale: clean up the IP routes so that it can coexist with by home wireguard network 2025-06-02 04:37:23 +00:00
37ed00f441 refactor: hosts/modules/work: split tailscale into own file 2025-06-01 21:10:47 +00:00
e91eafdfc3 refactor: hosts/modules/work.nix -> subdirectory 2025-06-01 21:09:22 +00:00
ec276e013b nixpkgs-wayland: 2025-05-30 -> 2025-05-31 2025-06-01 20:43:42 +00:00
0555516ebb nixpkgs: 2025-05-31 -> 2025-06-01 2025-06-01 20:43:34 +00:00
3f14b7d364 megapixels-next: 2025-05-16 -> 2025-05-31 2025-06-01 20:43:10 +00:00
18b98125ac doc/adding-a-host: mention ssh/sops keys 2025-06-01 20:11:00 +00:00
4bd4f29759 hosts: add "flowy", my new laptop
i haven't actually deployed this yet, but it does build
2025-06-01 20:10:40 +00:00
bdb203bc5f opencellid: 2025-05-31 -> 2025-06-01 2025-06-01 20:09:18 +00:00
04c2912450 uassets: 2025-05-31 -> 2025-06-01 2025-06-01 20:09:05 +00:00
b11e329351 make host details like host_pubkey, wg-home.ip be optional 2025-06-01 20:08:49 +00:00
ef4373f704 wg-home: dont force each host to define its IP address twice 2025-06-01 20:07:53 +00:00
db9b5dcfeb firefox: remove some more unnecessary fields from search.json 2025-06-01 00:36:33 +00:00
15fcdfca2b firefox: remove some unnecessary fields from search.json 2025-06-01 00:28:52 +00:00
6226818ad7 firefox: configure Kagi as default search 2025-06-01 00:14:57 +00:00
7c18c0d13b programs: ship mozlz4a 2025-05-31 22:41:18 +00:00
fe1a8b7d5e programs/firefox: simplify persistence; improve docs for policies 2025-05-31 22:41:03 +00:00
3ef40e9cb3 nixpkgs: 2025-05-30 -> 2025-05-31 2025-05-31 18:31:42 +00:00
af3d16794f nixpkgs-wayland: bump 2025-05-31 18:31:30 +00:00
c52704b2ed opencellid: 2025-05-30 -> 2025-05-31 2025-05-31 18:31:14 +00:00
a09b05bb49 uassets: 2025-05-30 -> 2025-05-31 2025-05-31 18:31:02 +00:00
7b74ccf192 uvtools: 5.1.1 -> 5.1.2 2025-05-31 18:30:49 +00:00
74bb17316d zimPackages.rationalwiki_en_all_maxi: 2021-03 -> 2025-05 2025-05-31 18:30:32 +00:00
65d1fa76e6 slack: enable video calls 2025-05-30 20:08:40 +00:00
629de56f54 slack: allow notifications & more portal integrations (untested) 2025-05-30 19:32:57 +00:00
01812da816 nixpkgs: 2025-05-29 -> 2025-05-30 2025-05-30 18:13:52 +00:00
c297bc733a nixpkgs-wayland: 2025-05-29 -> 2025-05-30 2025-05-30 18:13:42 +00:00
28b69fd1f9 opencellid: 0-unstable-2025-05-22 -> 0-unstable-2025-05-30 2025-05-30 15:58:23 +00:00
ff786421c5 podcastindex-db: 0-unstable-2025-05-18 -> 0-unstable-2025-05-30 2025-05-30 15:58:07 +00:00
f05ec619e3 uassets: 0-unstable-2025-05-29 -> 0-unstable-2025-05-30 2025-05-30 15:57:52 +00:00
b8e0ae4ed5 firefox-extensions.ublock-origin: 1.63.2 -> 1.64.0 2025-05-30 05:16:56 +00:00
2484822b9d work/tailscale: harden & integrate with BIND for DNS resolution 2025-05-30 05:16:43 +00:00
eabc087ebb tailscale: document that --operator flag is broken 2025-05-30 04:21:02 +00:00
d178f2f2f6 firefox-extensions.sponsorblock: 5.12.1 -> 5.12.4 2025-05-30 04:13:30 +00:00
377f2c4a75 firefox-extensions.addon-git-updater: fix double-quoting of update URL 2025-05-30 04:12:08 +00:00
83855f7d6a desko: add tailscale config; move slack/zoom behind a "work" role 2025-05-30 03:02:46 +00:00
92f68baaf9 systemd: rework emergency/rescue targets to be safer 2025-05-30 01:14:11 +00:00
82096288e2 systemd: fix rescue/emergency targets to allow root login 2025-05-30 00:22:27 +00:00
2aa2af823d sane-vpn: add flags to control the address, device, and DNS server 2025-05-29 23:03:49 +00:00
047543ca93 programs: add slack 2025-05-29 19:12:07 +00:00
065e4f8fb8 programs: ship zoom-us 2025-05-29 18:02:37 +00:00
0c286946d9 zimPackages.archlinux_en_all_maxi: 2025-04 -> 2025-05 2025-05-29 16:03:57 +00:00
9078cf3acc uassets: 2025-05-22 -> 2025-05-29 2025-05-29 16:03:57 +00:00
5dca51f840 signal-desktop-from-src: 7.55.0 -> 7.57.0 2025-05-29 16:03:57 +00:00
32ca4476c5 nixpkgs-wayland: 2025-05-23 -> 2025-05-29 2025-05-29 16:03:57 +00:00
a9b165a63d nixpkgs: 2025-05-23 -> 2025-05-29
rk818-charger: fix to compile against linux 6.15
2025-05-29 16:03:54 +00:00
9337436b71 nixpkgs-wayland: 2025-05-21 -> 2025-05-23 2025-05-29 06:28:36 +00:00
e25a8a35e9 nixpkgs: 2025-05-19 -> 2025-05-23 2025-05-29 06:28:26 +00:00
c0a788f750 signal-desktop-from-src: update hashes 2025-05-29 06:27:22 +00:00
ed59897119 ollamaPackages.qwq-abliterated-32b: update hashes 2025-05-29 06:27:06 +00:00
5091786d9c servo/ovpn: update IP address 2025-05-29 06:26:21 +00:00
55aa9b75f1 opencellid: 0-unstable-2025-05-20 -> 0-unstable-2025-05-22 2025-05-29 06:26:21 +00:00
d5de32ddea uassets: 0-unstable-2025-05-21 -> 0-unstable-2025-05-22 2025-05-29 06:26:21 +00:00
c082154d58 nixpkgs-wayland: 2025-05-20 -> 2025-05-21 2025-05-29 06:26:21 +00:00
bb67240055 uassets: 2025-05-20 -> 2025-05-21 2025-05-29 06:26:21 +00:00
cea680b727 scripts/deploy: fix --help flag 2025-05-29 06:26:21 +00:00
61fb2666d0 nixpkgs-wayland: 2025-05-19 -> 2025-05-20 2025-05-29 06:26:21 +00:00
e328ec8c3f euicc-manual: 2025-05-18 -> 2025-05-20 2025-05-29 06:26:21 +00:00
d3c76f3a43 opencellid: 2025-05-19 -> 2025-05-20 2025-05-29 06:26:21 +00:00
69cf3ae762 uassets: 2025-05-19 -> 2025-05-20 2025-05-29 06:26:21 +00:00
b39c3ec7de desko: update fs uuids
migrated to a new disk; changing the UUIDs so i can have both disks in the same system without conflict
2025-05-29 06:14:54 +00:00
c4cdf5ee72 programs: replace coreutils uptime with procps uptime 2025-05-27 03:22:59 +00:00
ec5bf7cc1f ollamaPackages.qwq-abliterated-32b: fix hashes 2025-05-25 05:38:29 +00:00
b11bb8d2f9 ollama: stop shipping qwq-32b
redundant with qwq-abliterated-32b
2025-05-25 05:38:10 +00:00
448389d888 nixpkgs: update patch hashes 2025-05-25 05:37:45 +00:00
e5cd484138 nixpkgs: grab conky update 2025-05-19 19:02:34 +00:00
99826b7f1b scripts/deploy: fix missing "setvar" when parsing "--deriv" argument 2025-05-19 19:02:26 +00:00
d0327f8f73 nixpkgs: 2025-05-18 -> 2025-05-19 2025-05-19 17:52:48 +00:00
90b27d36c9 nixpkgs-wayland: 2025-05-17 -> 2025-05-19 2025-05-19 16:46:38 +00:00
1405d24a8e sops-nix: 2025-05-05 -> 2025-05-18 2025-05-19 16:46:23 +00:00
2ab16e97c2 opencellid: 2025-05-18 -> 2025-05-19 2025-05-19 16:46:11 +00:00
414bbc7217 uassets: 2025-05-18 -> 2025-05-19 2025-05-19 16:45:59 +00:00
8beada36d2 nixpkgs: 2025-05-17 -> 2025-05-18 2025-05-18 17:11:49 +00:00
6b55711f10 nixpkgs-wayland: 2025-05-16 -> 2025-05-17 2025-05-18 17:11:34 +00:00
6b0771f1fe euicc-manual: 2025-05-16 -> 2025-05-18 2025-05-18 17:11:20 +00:00
e865534903 opencellid: 2025-05-17 -> 2025-05-18 2025-05-18 17:11:05 +00:00
f4e9a0aa02 podcastindex-db: 2025-05-08 -> 2025-05-18 2025-05-18 17:10:52 +00:00
a963d63ca8 uassets: 2025-05-17 -> 2025-05-18 2025-05-18 17:10:39 +00:00
07ecda1116 servo: update OVPN IP address 2025-05-18 08:18:37 +00:00
ffdb00ea19 sane-vpn: clarify the CLI
unfortunately i can't directly use 'sane-vpn do -- CMD', because python strips -- in arg parsing
2025-05-18 02:31:45 +00:00
014008472b scripts/deploy: fix to allow destructive ... (echo=true) invocations 2025-05-18 00:07:39 +00:00
340f91de3f cross: drop the gnome-user-share patch; make my crossCargo compatible with debug build type 2025-05-18 00:03:56 +00:00
6fef1bbd4b scripts/deploy: refactor 2025-05-17 21:03:58 +00:00
99629c9e09 nixpkgs: 2025-05-15 -> 2025-05-17 2025-05-17 18:00:28 +00:00
9ec2c1a22a nixpkgs-wayland: 2025-05-15 -> 2025-05-16 2025-05-17 18:00:28 +00:00
e7e6997472 opencellid: 2025-05-16 -> 2025-05-17 2025-05-17 18:00:28 +00:00
f74a0bbaca neovim: configure filetype matching for nix-shell ysh 2025-05-17 18:00:28 +00:00
c4824f8f78 scripts/deploy: fix broken "|| return 1" 2025-05-17 18:00:28 +00:00
9daacae794 scripts/deploy: fix --build, --copy, --switch, --test flags 2025-05-17 18:00:28 +00:00
a375393f2a megapixels-next: 2.0.0-alpha1-unstable-2025-04-08 -> 2.0.0-alpha1-unstable-2025-05-16 2025-05-17 18:00:28 +00:00
7fc6bda614 euicc-manual: 2025-05-14 -> 2025-05-16 2025-05-17 18:00:28 +00:00
7423177796 uassets: 2025-05-16 -> 2025-05-17 2025-05-17 18:00:28 +00:00
cce19c38d7 nixpkgs-wayland: 2025-05-14 -> 2025-05-15 2025-05-17 01:42:39 +00:00
ba657ae647 scripts/deploy: print a deployment plan before executing it 2025-05-17 01:42:23 +00:00
997e901fee opencellid: 2025-05-15 -> 2025-05-16 2025-05-16 03:04:01 +00:00
793e7fca09 uassets: 2025-05-15 -> 2025-05-16 2025-05-16 03:03:48 +00:00
fcfe45da92 scripts/check-uninsane: add a check that uninsane.org. is reachable from Google DNS
sometimes 8.8.8.8 reflects DNS reboots faster than 1.1.1.1
2025-05-15 16:02:41 +00:00
0c6d279c54 nixpkgs-wayland: 2025-05-13 -> 2025-05-14 2025-05-15 15:42:12 +00:00
15d2a8bf65 nixpkgs: 2025-05-14 -> 2025-05-15 2025-05-15 15:41:58 +00:00
efd04b6601 servo: update /mnt/pool UUIDs 2025-05-15 15:41:40 +00:00
1c739bd8ad scripts/deploy: fix invalid use of "failed" builtin 2025-05-15 15:32:28 +00:00
098a5ac959 euicc-manual: 2025-05-13 -> 2025-05-14 2025-05-15 06:47:37 +00:00
bfd0a97e8a opencellid: 2025-05-14 -> 2025-05-15 2025-05-15 06:47:24 +00:00
030fe9596f uassets: 2025-05-14 -> 2025-05-15 2025-05-15 06:47:12 +00:00
56b8d82c42 scripts/deploy: port from bash to ysh 2025-05-15 06:47:01 +00:00
471341447e btrfs-progs: fix sandboxing to be compat with "btrfs replace" 2025-05-15 04:11:18 +00:00
2701b484e5 nixpkgs-wayland: 2025-05-12 -> 2025-05-13 2025-05-14 07:51:04 +00:00
5ca30a2e43 nixpkgs: 2025-05-13 -> 2025-05-14 2025-05-14 07:50:54 +00:00
8bd273e51b opencellid: 2025-05-12 -> 2025-05-14 2025-05-14 07:50:40 +00:00
f86b1d2ef1 signal-desktop-from-src: 7.54.0 -> 7.55.0 2025-05-14 07:50:28 +00:00
34a1cba331 uassets: 2025-05-13 -> 2025-05-14 2025-05-14 07:50:08 +00:00
97d789c52a programs: add readline 2025-05-14 07:49:55 +00:00
c645a73e2e common: stop persisting ~/.cache/mesa_shader_cache_db: make it ephemeral and then delete altogether once it has no more users 2025-05-14 07:49:22 +00:00
7e655c6451 schlock: fix icon rendering, slightly improve colors 2025-05-13 08:42:42 +00:00
e46ae9b9e5 nicotine-plus: update UI preferences (no confirm-on-quit; disable unused columns) 2025-05-13 06:08:42 +00:00
c4d0ead5e1 nixpkgs: 2025-05-12 -> 2025-05-13 2025-05-13 06:03:06 +00:00
39e9b4aa3e zsh: fix c alias to support 0 arguments 2025-05-13 06:02:37 +00:00
e561417c7c euicc-manual: 0-unstable-2025-05-03 -> 0-unstable-2025-05-13 2025-05-13 06:01:57 +00:00
d361ac1b5f uassets: 0-unstable-2025-05-12 -> 0-unstable-2025-05-13 2025-05-13 06:01:45 +00:00
d0c772533b mpv: remove MBTN_LEFT controls until i can update uosc 2025-05-13 05:29:50 +00:00
cc3e0e8fa0 nixpkgs-bootstrap: update *patched* src name to nixpkgs-$branch-sane 2025-05-13 04:32:43 +00:00
0e198ad482 scripts/update: relax note on parallelism now that nixpkgs-bootstrap updates are atomic 2025-05-13 04:31:34 +00:00
f8fb4b9ef4 nixpkgs-bootstrap: make the updater atomic, thereby allowing update of nixpkgs-bootstrap.master in parallel with anything else 2025-05-13 04:30:55 +00:00
22cf60914b nixpkgs-wayland: bump 2025-05-13 03:08:19 +00:00
3a9a3353a0 schlock: remove unused call args 2025-05-13 02:26:31 +00:00
218e06a8a8 nix-check-deps: ship it 2025-05-13 02:26:00 +00:00
78f42f984d nix-check-deps: init at 0-unstable-2025-04-09 2025-05-13 01:54:14 +00:00
c0878f1717 cross: fix xarchiver by fetching patch from upstream PR instead of with overlay 2025-05-12 23:14:12 +00:00
7d8fbf64dc cross: remove no-longer-necessary delfin patch
idk when this got fixed, but the msgfmt error no longer appears; nix log $result reads the same before and after
2025-05-12 20:59:16 +00:00
d8c692fc79 nixpkgs-wayland: 2025-05-09 -> 2025-05-12 2025-05-12 20:50:25 +00:00
d4f308caca nixpkgs: 2025-05-11 -> 2025-05-12 2025-05-12 20:50:13 +00:00
f0bb931ca9 opencellid: 2025-05-11 -> 2025-05-12 2025-05-12 20:50:00 +00:00
48f8f1c4e4 uvtools: 5.1.0 -> 5.1.1 2025-05-12 20:49:49 +00:00
d06b767f85 uassets: 2025-05-11 -> 2025-05-12 2025-05-12 20:49:23 +00:00
39a7556dbe nixpkgs: 2025-05-10 -> 2025-05-11 2025-05-11 15:24:10 +00:00
cf59cfab26 opencellid: 2025-05-10 -> 2025-05-11 2025-05-11 15:23:51 +00:00
b1b1c1dfc3 uassets: 2025-05-10 -> 2025-05-11 2025-05-11 15:23:38 +00:00
dabeb9bef9 sane-deadlines: ignore commented-out lines 2025-05-11 15:21:53 +00:00
3ca0b9ae28 sane-deadlines: port from bash -> ysh 2025-05-11 15:16:21 +00:00
4645e6389e firefox: add a shortcut for searching soundcloud 2025-05-10 22:10:21 +00:00
451a620916 sway: update config to (hopefully) place Zelda 64 recomp on the external display 2025-05-10 18:19:09 +00:00
c3ca009d05 zelda64recomp: 1.1.1-unstable-2025-02-14 -> 1.2.0 2025-05-10 18:18:18 +00:00
79048f5bd5 nixpkgs: 2025-05-09 -> 2025-05-10 2025-05-10 05:45:22 +00:00
14dcd5bf0c nixpkgs-wayland: bump 2025-05-10 05:45:14 +00:00
66cfb61e6c opencellid: 0-unstable-2025-05-06 -> 0-unstable-2025-05-10 2025-05-10 05:44:54 +00:00
1b35317f97 uassets: 0-unstable-2025-05-09 -> 0-unstable-2025-05-10 2025-05-10 05:44:42 +00:00
e17ed9a265 nixpkgs: 2025-05-08 -> 2025-05-09 2025-05-09 15:11:45 +00:00
17de44c0af nixpkgs-wayland: 2025-05-08 -> 2025-05-09 2025-05-09 15:11:27 +00:00
d841e6782f sops-nix: assets-unstable-2025-04-22 -> assets-unstable-2025-05-05 2025-05-09 15:11:06 +00:00
db862eac69 uassets: 2025-05-03 -> 2025-05-09 2025-05-09 15:10:51 +00:00
c32822cfa9 zimPackages.wikipedia_en_100: 2025-04 ->205-05 2025-05-09 15:04:23 +00:00
0587d33000 swaynotificationcenter: 0.10.1-unstable-2024-04-16 -> 0.11.0 2025-05-09 15:03:53 +00:00
02d10168b6 scripts/sync: dont sync PKM to self 2025-05-09 07:41:10 +00:00
cff611d7c1 nixpkgs-wayland: 2025-05-05 -> 2025-05-08 2025-05-09 07:41:05 +00:00
7e8c31dc2f signal-desktop-from-src: 7.53.0 -> 7.54.0 2025-05-09 07:41:05 +00:00
85f8706136 podcastindex-db: 0-unstable-2025-04-29 -> 0-unstable-2025-05-08 2025-05-09 07:36:24 +00:00
e99e2f5a6e nixpkgs-bootstrap.mkNixpkgs: remove the overrideAttrs call, and inline its functionality into applyPatches 2025-05-09 07:33:28 +00:00
bac24e6ceb nixpkgs-bootstrap: hoist config to callArgs level, to simplify the call site 2025-05-09 06:43:03 +00:00
acdf9b7f94 scripts/update: note some limitations of PARALLELISM 2025-05-09 06:30:18 +00:00
17cdca36ca nixpkgs-bootstrap: get rid of "override"
this reduces the number of times we have to 'import' different nixpkgs during bootstrap
2025-05-09 06:19:41 +00:00
86528b5fcc nixpkgs: 0-unstable-2025-05-05 -> 0-unstable-2025-05-08 2025-05-09 06:17:45 +00:00
fbde0005d8 nixpkgs-bootstrap/mkNixpkgs: rework to more reliably support updateScripts 2025-05-09 06:17:28 +00:00
15de5234ef opencellid: 2025-05-05 -> 2025-05-06 2025-05-06 02:59:29 +00:00
a4f177a125 nixpkgs: 2025-05-04 -> 2025-05-05 2025-05-05 15:30:05 +00:00
3336dbf5ef nixpkgs-wayland: 2025-05-03 -> 2025-05-05 2025-05-05 15:29:52 +00:00
810a62ae4d opencellid: 2025-05-04 -> 2025-05-05 2025-05-05 15:29:38 +00:00
c8e1d7d8ba firefox: grant access to hardware security keys 2025-05-04 20:50:06 +00:00
38624342bb modules/programs: implement a whitelistSecurityKeys sandboxing option 2025-05-04 20:49:54 +00:00
2a126684af scripts/check-uninsane: add graphical indicators for passed/failed tests 2025-05-04 19:47:52 +00:00
f725b7ef94 nixpkgs: 2025-05-03 -> 2025-05-04 2025-05-04 18:08:50 +00:00
73aecebd08 nixpkgs-wayland: bump 2025-05-04 18:08:39 +00:00
912753d723 opencellid: 2025-05-03 -> 2025-05-04 2025-05-04 07:45:45 +00:00
d3cc39a7f0 feeds: mention jumble.top for bypassing paywalls 2025-05-04 04:29:36 +00:00
2b36019dfa nixpkgs: 2025-05-02 -> 2025-05-03 2025-05-04 04:28:50 +00:00
4f558743e5 nixpkgs-wayland: 2025-05-01 -> 2025-05-03 2025-05-03 05:03:44 +00:00
f9462216b8 euicc-manual: 2025-04-26 -> 2025-05-03 2025-05-03 05:03:30 +00:00
d7fc1beb16 uassets: 2025-05-02 -> 2025-05-03 2025-05-03 05:03:15 +00:00
fc1c51174b opencellid: 2025-05-02 -> 2025-05-03 2025-05-03 05:03:05 +00:00
92c3cde5cd nixpkgs-bootstrap: bump, to grab upstreamed dialect fixes 2025-05-02 14:50:14 +00:00
5e68fe2df6 overlays/cross: tangram: document one route to upstreaming 2025-05-02 07:01:02 +00:00
9e199a9f74 cross: push dialect patch upstream 2025-05-02 05:58:15 +00:00
517d12c700 overlays/cross: update upstreaming status 2025-05-02 05:17:54 +00:00
5ad27f2ec0 programs/itgmania: address a todo 2025-05-02 04:30:48 +00:00
ac456501df sway: add a rule so ITGmania always renders to the external display 2025-05-02 03:59:21 +00:00
419968daa2 sway: add theater TV settings 2025-05-02 03:56:06 +00:00
2c6bf71111 overlays/cross: remove upstreamed blueprint-compiler fixes 2025-05-02 03:24:20 +00:00
c1e53b32ad nixpkgs: 2025-05-01 -> 2025-05-02 2025-05-02 02:56:23 +00:00
a18046cd3b nixpkgs-wayland: bump 2025-05-02 02:56:09 +00:00
6d189bf813 opencellid: 2025-05-01 -> 2025-05-02 2025-05-02 02:55:56 +00:00
a17df1c1e4 uassets: 2025-04-30 -> 2025-05-02 2025-05-02 02:55:45 +00:00
5de6d7f41a todo.md: add a task to rework "programs" API 2025-05-02 02:18:19 +00:00
3a7cc40703 scripts/sync: re-enable VN sync to moby 2025-05-01 16:48:08 +00:00
1334fba055 nixpkgs: 2025-04-30 -> 2025-05-01 2025-05-01 16:46:33 +00:00
4ffa0ec4ee nixpkgs-wayland: 2025-04-29 -> 2025-05-01 2025-05-01 16:45:58 +00:00
f23a924025 mslicer: 0.2.1-unstable-2025-04-25 -> 0.2.1-unstable-2025-05-01 2025-05-01 05:45:23 +00:00
dc88ce74a9 opencellid: 0-unstable-2025-04-30 -> 0-unstable-2025-05-01 2025-05-01 05:16:38 +00:00
dbb26cb983 firefox: add a shortcut to search with Kagi 2025-05-01 05:16:21 +00:00
bd2a360e90 nixpkgs: apply buffybox patch 2025-05-01 04:42:32 +00:00
2e288d6221 nixpkgs: 2025-04-29 -> 2025-04-30 2025-04-30 15:17:05 +00:00
03bd34982e nixpkgs-wayland: 2025-04-27 -> 2025-04-29 2025-04-30 15:16:57 +00:00
b1997b1ca2 opencellid: 2025-04-29 -> 2025-04-30 2025-04-30 15:16:41 +00:00
84c5ef3ac9 uassets: 2025-04-29 -> 2025-04-30 2025-04-30 15:16:29 +00:00
ccca3aa3b6 nixpkgs: 2025-04-28 -> 2025-04-29 2025-04-29 16:37:23 +00:00
3477794172 sops-nix: assets-unstable-2025-04-08 -> assets-unstable-2025-04-22 2025-04-29 16:37:13 +00:00
bf7900fded uassets: 0-unstable-2025-04-22 -> 0-unstable-2025-04-29 2025-04-29 16:37:00 +00:00
a12230e1f8 firefox: add an option to enable kagi-search extension (disabled by default)
with the extension, kagi auth actually persists across browser restarts -- unlike e.g. cookie-based GH auth

more would surely need to be done to persist that across machine restarts, however
2025-04-29 16:36:46 +00:00
fab4a9ea8d firefox-extensions.kagi-search: init at 0.7.4 2025-04-29 06:31:13 +00:00
69cccaa5f3 privacypass-extension: factor out the -lib build, but its broken because upstream doesnt commit their lock files! 2025-04-29 06:19:53 +00:00
945b637cc2 opencellid: 2025-04-28 -> 2025-04-29 2025-04-29 02:45:01 +00:00
e8a27b43a3 podcastindex-db: 0-unstable-2025-04-27 -> 0-unstable-2025-04-29
the db just grew 5x in size...

upstream website claims that this new count is correct, and is only a couple % larger than 3 days ago, implying that the old db snapshot was wrong somehow...

in fact looking at `head` and `tail` of the new v.s. old indexes:
- primary keys in old db: 6385082 - 7311215
- primary keys in new db: 1 - 7313345

so the old one was just WRONG somehow?
and ACTUAL growth is about 1000 keys per day.
TODO: add some safeguards to the update script, in light of this!
2025-04-29 02:43:14 +00:00
be83452c4a scripts/deploy: support "--force-reboot" as alternate spelling to "--reboot-force" 2025-04-28 04:15:45 +00:00
c0c01f355b feeds: subscribe to Mystery AI Hype Theater 3000 podcast
haven't listened; heard of via Future of Coding
2025-04-28 04:06:38 +00:00
e06b735bcb feeds/update-feed: add podcastindex support
also drop unused `site-name`, `site-url` from the saved feeds.
podcastindex doesn't provide exactly those, and they've shown to be
rather useless so far.
TODO: remove these entries from existing feeds.
2025-04-28 04:03:46 +00:00
7319bd1528 feeds/update-feed: refactor 2025-04-28 03:02:10 +00:00
11be114e1d nixpkgs: 0-unstable-2025-04-27 -> 0-unstable-2025-04-28 2025-04-28 02:40:29 +00:00
7cf7555c7d podcastindex-db: move output to /share subdirectory 2025-04-28 02:40:05 +00:00
bc8395a541 opencellid: move output to /share subdirectory 2025-04-28 02:39:35 +00:00
f7b4069631 nixpkgs-wayland: 0-unstable-2025-04-26 -> 0-unstable-2025-04-27 2025-04-28 02:38:57 +00:00
c0afdf69b1 signal-desktop-from-src: fix hash 2025-04-28 02:38:40 +00:00
1b8d2daf20 static-nix-shell: add $dep/share to XDG_DATA_DIRS, also only add those $dep/bin paths which actually exist to PATH
this actually causes some packages which were previously wrapped to no longer require wrapping (because none of the directories they were adding actually existed)
2025-04-28 01:56:04 +00:00
8e12201ecc feeds/update-feed: rename from feeds/update.py 2025-04-28 01:30:51 +00:00
8ae22c246e podcastindex-db: init at 2025-04-27 2025-04-27 22:41:08 +00:00
fdbf53e6bb hosts/common: ship sysadminExtraUtils to all hosts
includes sqlite3; just wanted to use it on desko, can imagine infrequent but highly important use on all hosts
2025-04-27 21:11:33 +00:00
d2d302137c nixpkgs: 0-unstable-2025-04-26 -> 0-unstable-2025-04-27 2025-04-27 18:22:32 +00:00
37f49fbf09 nixpkgs-wayland: 0-unstable-2025-04-24 -> 0-unstable-2025-04-26 2025-04-27 18:22:17 +00:00
9c31fc5a0a euicc-manual: 0-unstable-2025-04-06 -> 0-unstable-2025-04-26 2025-04-27 18:22:04 +00:00
46d1433606 opencellid: 0-unstable-2025-04-26 -> 0-unstable-2025-04-27 2025-04-27 18:21:47 +00:00
3dfde24a84 wrapFirefoxAddonsHook: remove legacy toplevel-is-XPI code path 2025-04-27 03:43:03 +00:00
6693333a84 firefox-extensions: refactor
remove the custom scope-level logic, and create the package set same way i do with normal pkgs/
2025-04-27 03:42:26 +00:00
a8a6cd2973 nixpkgs: 2025-04-25 -> 2025-04-26 2025-04-26 05:39:27 +00:00
eaae50f9ef mslicer: 0.2.1-unstable-2025-04-13 -> 0.2.1-unstable-2025-04-25 2025-04-26 05:39:16 +00:00
60c4a1b1bd opencellid: 2025-04-25 -> 2025-04-26 2025-04-26 05:39:03 +00:00
a77810f8e7 firefox-extensions.sponsorblock: 5.12 -> 5.12.1 2025-04-26 05:38:52 +00:00
670a744eca feeds: subscribe to Mother Earth News 2025-04-26 03:23:00 +00:00
fbeb6881db replace deprecated "substituteAll" with "replaceVars" 2025-04-25 16:01:15 +00:00
cf82e414f7 nixpkgs: 2025-04-24 -> 2025-04-25 2025-04-25 03:31:30 +00:00
dd93a1fc87 nixpkgs-wayland: 2025-04-23 -> 2025-04-24 2025-04-25 03:15:05 +00:00
26bc04ecbf firefox-extensions.sponsorblock: 5.11.11 -> 5.12 2025-04-25 02:52:16 +00:00
42290c23a1 opencellid: 2025-04-24 -> 2025-04-25 2025-04-25 02:50:11 +00:00
2f5ad8e7b0 firefox-extensions.privacypass-extension: init at 1.0.5 (DOESNT BUILD)
hopefully i'll come back to this when i have more time
2025-04-24 16:03:50 +00:00
641ac8bea7 nixpkgs: 2025-04-23 -> 2025-04-24 2025-04-24 15:47:02 +00:00
3eb5a0385b signal-desktop-from-src: 7.52.0 -> 7.53.0 2025-04-24 15:46:49 +00:00
c907f6fcd6 zimPackages.archlinux_en_all_maxi: 2025-03 -> 2025-04 2025-04-24 02:15:55 +00:00
e1d15b8adf opencellid: 2025-04-23 -> 2025-04-24 2025-04-24 02:15:32 +00:00
35a9adeb11 nixpkgs: 2025-04-21 -> 2025-04-23 2025-04-23 16:15:18 +00:00
826483d4c2 nixpkgs-wayland: 2025-04-22 -> 2025-04-23 2025-04-23 16:14:17 +00:00
110fddc026 opencellid: 2025-04-22 -> 2025-04-23 2025-04-23 16:13:33 +00:00
49c1fe2dba doc: show how to fix perms when migrating devices 2025-04-23 16:12:57 +00:00
92384f4b51 document how to migrate a system to a new drive 2025-04-23 07:17:15 +00:00
c5fbfa824b pine64-pinephone-pro: install bootloader 2025-04-23 07:16:45 +00:00
3b7883fe0f u-boot-pinephone-pro: remove no-longer-needed patches 2025-04-23 03:51:57 +00:00
30b4337f11 doc: update the nix attribute paths 2025-04-23 02:05:59 +00:00
4cf73cc03a nixpkgs: fix moby cross compilation 2025-04-22 16:43:39 +00:00
f3b16d33d6 nixpkgs-wayland: 2025-04-20 -> 2025-04-22 2025-04-22 16:43:05 +00:00
d8b44d7263 uvtools: 5.0.9 -> 5.0.10 2025-04-22 16:42:52 +00:00
022bc55575 btrfs-progs: fix scrub behavior when sandboxed 2025-04-22 16:42:24 +00:00
7f9ab477e7 snippets: update URLs 2025-04-22 16:00:41 +00:00
8c4b3c3a02 uassets: 0-unstable-2025-04-13 -> 0-unstable-2025-04-22 2025-04-22 07:11:02 +00:00
4dad4d9291 opencellid: 2025-04-21 -> 2025-04-22 2025-04-22 07:10:51 +00:00
aaa80bfb82 btrfs-progs: add missing /var/lib/btrfs path 2025-04-22 03:11:40 +00:00
a8c2414f19 nixpkgs: 2025-04-20 -> 2025-04-21 2025-04-21 08:25:16 +00:00
8a262749e8 passff: 1.22 -> 1.22.1 2025-04-21 08:19:51 +00:00
1c6054c720 nixpkgs-wayland: same-day bump 2025-04-21 07:49:44 +00:00
0dcbdd4262 opencellid: 2025-04-20 -> 2025-04-21 2025-04-21 07:49:31 +00:00
Shelvacu
0481a2f419 servo: gitea: increase client_max_body_size in nginx config
Ben was unable to upload a clone of a repo over HTTP, due to a 413 error.

Nginx's default limit is 1 megabyte ;( https://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size

See https://forum.gitea.com/t/unable-to-push-to-repo-due-to-rpc-failed-http-413-error/2630/4
2025-04-20 21:44:46 -07:00
db12529df3 firefox: add "i" shortcut to search for images 2025-04-20 23:31:36 +00:00
66001bd723 cross: blueprint-compiler: push build fixes toward upstream 2025-04-20 23:21:14 +00:00
fbde8816e9 cross: cleanup blueprint-compiler patches even more
it would *seem* that the only actual issue is the compiler itself not having GIR files *it* needs

however moby is being extremely slow to deploy so i havent verified this wholly
2025-04-20 20:52:23 +00:00
35539ca2ec nixpkgs: 0-unstable-2025-04-19 -> 0-unstable-2025-04-20 2025-04-20 17:31:12 +00:00
b49fac6651 nixpkgs-wayland: 0-unstable-2025-04-19 -> 0-unstable-2025-04-20 2025-04-20 17:30:58 +00:00
bfef88be88 signal-desktop-from-src: fix deps hash 2025-04-20 17:30:43 +00:00
9dc6e0f93d opencellid: 2025-04-19 -> 2025-04-20 2025-04-20 17:30:17 +00:00
d721845258 firefox-extensions.passff: 1.21 -> 1.22 2025-04-20 17:24:44 +00:00
a13feca385 cross: tidy up the blueprint-compiler patches
deployed and *seems* to be working; i ought to be able to turn these into proper patches over the next few days
2025-04-20 08:13:42 +00:00
a099279a7a overlays/cross: update upstreaming status 2025-04-20 03:46:24 +00:00
b4745b0c87 nixpkgs: 2025-04-18 -> 2025-04-19 2025-04-19 20:35:19 +00:00
8782b529fd fcitx5,xcb-imdkit: push cross fixes upstream 2025-04-19 20:35:09 +00:00
be2d34d869 nixpkgs-wayland: 0-unstable-2025-04-18 -> 0-unstable-2025-04-19 2025-04-19 20:34:26 +00:00
daff05855c signal-desktop-from-src: update dependencies hash
fuck this
2025-04-19 20:34:10 +00:00
67ea8ba8c3 opencellid: 0-unstable-2025-04-18 -> 0-unstable-2025-04-19 2025-04-19 20:33:51 +00:00
850299db58 disable systemd-ssh-proxy, to route around ssh permission errors when sandboxed 2025-04-19 05:40:26 +00:00
1d4191c838 nixpkgs: 0-unstable-2025-04-13 -> 0-unstable-2025-04-18 2025-04-19 04:32:14 +00:00
920b277a93 nixpkgs-wayland: 0-unstable-2025-04-12 -> 0-unstable-2025-04-18 2025-04-19 04:30:11 +00:00
36be5f8a95 signal-desktop-from-src: 7.51.0 -> 7.52.0 2025-04-19 04:27:46 +00:00
13f70c4626 opencellid: 0-unstable-2025-04-13 -> 0-unstable-2025-04-18 2025-04-19 04:27:25 +00:00
960c39966b mslicer: 0.2.0-unstable-2025-04-06 -> 0.2.1-unstable-2025-04-13 2025-04-19 04:27:12 +00:00
45f05e89ed sane-private-unlock-remote: avoid printing the password to stdout (where it may be saved to logs) 2025-04-19 02:20:32 +00:00
5e553585f4 scripts/check-uninsane: check for private data mount 2025-04-19 02:16:05 +00:00
31a884e27e feeds: subscribe to Unchained podcast 2025-04-13 21:25:42 +00:00
ab9f7a8768 feedsearch-crawler: add an update script
even though upstream appears to be dead (:
2025-04-13 21:22:55 +00:00
75c60c8cb6 feeds: unsubscribe from Tech Lounge
detached from reality in the *weirdest* (uninteresting) way
2025-04-13 20:27:28 +00:00
1597e6569e nixpkgs: 2025-04-12 -> 2025-04-13 2025-04-13 05:26:40 +00:00
f48ca3c77a signal-desktop-from-src: update hash
*cries*
2025-04-13 05:26:30 +00:00
b733a7e6cd opencellid: 2025-04-12 -> 2025-04-13 2025-04-13 05:26:12 +00:00
513e8c04e8 sops-nix: 2025-03-21 -> 2025-04-08 2025-04-13 05:26:01 +00:00
a006ef19c2 uassets: 2025-04-03 -> 2025-04-13 2025-04-13 05:25:47 +00:00
c0bb4ffa2b zsh: fix no-such-keybinding warnings (hopefully) 2025-04-13 02:49:24 +00:00
c6bc94f19a nixpkgs-wayland: 2025-04-11 -> 2025-04-12 2025-04-12 08:10:49 +00:00
bb04885d0a opencellid: 2025-04-11 -> 2025-04-12 2025-04-12 08:10:36 +00:00
d3846fd6fb zimPackages.zimgit-food-preparation_en: 2024-08 -> 2025-04 2025-04-12 08:10:23 +00:00
f47ce15fd9 nixpkgs: 2025-04-11 -> 2025-04-12 2025-04-12 08:10:04 +00:00
734bb04212 nixpkgs: 2025-04-10 -> 2025-04-11 2025-04-11 05:33:47 +00:00
d6bb231993 nixpkgs-wayland: 2025-04-09 -> 2025-04-11 2025-04-11 05:33:26 +00:00
fb630af35a opencellid: 2025-04-10 -> 2025-04-11 2025-04-11 05:32:56 +00:00
dc9b621fa1 programs/python3-repl: better sandboxing 2025-04-10 15:35:52 +00:00
38da1d9c5c nixpkgs-bootstrap: 2025-04-09 -> 2025-04-10 2025-04-10 03:30:10 +00:00
392eeed937 nixpkgs-wayland: 2025-04-08 -> 2025-04-09 2025-04-10 03:29:55 +00:00
eddf48e88e signal-desktop-from-src: 7.50.0 -> 7.51.0 2025-04-10 03:29:41 +00:00
da0361d2df opencellid: 2025-04-09 -> 2025-04-10 2025-04-10 03:29:25 +00:00
51077bffb1 zimPackages.devdocs_en_nix: 2025-01 -> 2025-04 2025-04-10 03:29:11 +00:00
5e02f8cff0 nixpkgs: 2025-04-08 -> 2025-04-09 2025-04-09 21:10:08 +00:00
9413ac3c8c nixpkgs-wayland: 2025-04-07 -> 2025-04-08 2025-04-09 20:58:17 +00:00
d7addb1568 megapixels-next: 2025-04-04 -> 2025-04-08 2025-04-09 20:15:12 +00:00
81e8e68ee0 signal-desktop-from-src: update hash
NSA is that you?
2025-04-09 20:14:02 +00:00
3ef1d9fc4e opencellid: 2025-04-08 -> 2025-04-09 2025-04-09 20:12:56 +00:00
c26479a31a nixpkgs: 2025-04-07 -> 2025-04-08 2025-04-08 04:46:48 +00:00
719ebfb52f feeds: subscribe to Blue City Blues 2025-04-08 04:11:56 +00:00
02c9105d63 nixpkgs-wayland: 2025-04-06 -> 2025-04-07 2025-04-08 02:30:30 +00:00
f838b65027 zimPackages.wikipedia_en_100: 2025-03 -> 2025-04 2025-04-08 02:30:17 +00:00
c557cb573b opencellid: 2025-04-07 -> 2025-04-08 2025-04-08 02:29:33 +00:00
f455eca161 nixpkgs: 2025-04-06 -> 2025-04-07 2025-04-07 14:50:22 +00:00
2c2fbab3d3 nixpkgs-wayland: 2025-04-05 -> 2025-04-06 2025-04-07 14:50:12 +00:00
9fdc909f9f signal-desktop-from-src: fix hash (...?) 2025-04-07 14:49:52 +00:00
d8079369fb opencellid: 2025-04-06 -> 2025-04-07 2025-04-07 14:49:02 +00:00
1a352aee4b mslicer: 0.2.0-unstable-2025-04-05 -> 0.2.0-unstable-2025-04-06
this should fix the --rotation parameter to be in degrees
2025-04-07 02:39:42 +00:00
b1cbe1be32 gps-share: fix update script 2025-04-06 18:32:09 +00:00
fcfa54e284 treewide: remove repo = pname idiom, format pkgs 2025-04-06 18:30:35 +00:00
3d08c79b42 mslicer: ship it! and stop shipping cassini, since it didnt seem to work 2025-04-06 06:41:42 +00:00
dbe8747b15 mslicer: 0.2.0 -> 0.2.0-unstable-2025-04-05
tip comes with a much expanded CLI for `slicer`
2025-04-06 06:26:13 +00:00
c0fc8f15aa 2025-04-05 -> 2025-04-06 2025-04-06 06:00:05 +00:00
9e8e0e5e36 nixpkgs-wayland: intra-day update 2025-04-06 05:59:53 +00:00
26e86f80eb euicc-manual: 2025-03-25 -> 2025-04-06 2025-04-06 05:59:42 +00:00
8e8725258f opencellid: 2025-04-05 -> 2025-04-06 2025-04-06 05:59:23 +00:00
9434a178a3 programs: unzip: ship it
dtrx isn't perfect; nice to have other archive helpers on hand
2025-04-05 19:04:02 +00:00
e7e15c55dc nixpkgs: 2025-04-04 -> 2025-04-05 2025-04-05 06:33:04 +00:00
43f3e165a9 nixpkgs-wayland: 2025-04-04 -> 2025-04-05 2025-04-05 06:32:46 +00:00
f64525898d megapixels-next: 2025-03-20 -> 2025-04-04 2025-04-05 06:32:32 +00:00
d1e4f46135 libmegapixels: 0.2.0 -> 0.2.1 2025-04-05 06:32:16 +00:00
780fceb5ef opencellid: 2025-04-04 -> 2025-04-05 2025-04-05 06:32:02 +00:00
29002c62fb overlays/cross: update upstreaming status 2025-04-04 16:44:37 +00:00
ccf2d5baa1 nixpkgs: push libbytesize cross fix towards upstream 2025-04-04 15:20:09 +00:00
bca2cea95f nixpkgs: 2025-04-03 -> 2025-04-04 2025-04-04 15:12:14 +00:00
5e69dddcb7 nixpkgs-wayland: 2025-04-02 -> 2025-04-04 2025-04-04 15:11:49 +00:00
93566f9e69 uvtools: 5.0.8 -> 5.0.9
did not test the build
2025-04-04 15:11:33 +00:00
278488a089 opencellid: 2025-04-03 -> 2025-04-04 2025-04-04 15:11:01 +00:00
7ebb88a40e fix broken "imgs" typo -> "img" 2025-04-04 00:21:37 +00:00
f7fc3bd981 nixpkgs-bootstrap: 2025-04-02 -> 2025-04-03 2025-04-03 06:46:24 +00:00
df5fdf54af nixpkgs-wayland: 2025-04-01 -> 2025-04-02 2025-04-03 06:45:57 +00:00
4374bb2b3b signal-desktop-from-src: 7.49.0 -> 7.50.0 2025-04-03 06:45:43 +00:00
abac2d3b03 opencellid: 2025-04-01 -> 2025-04-03 2025-04-03 06:45:06 +00:00
a4c763356b uassets: 2025-03-30 -> 2025-04-03 2025-04-03 06:44:54 +00:00
3e2040f83f firefox-extensions.sponsorblock: 5.11.10 -> 5.11.11 2025-04-03 06:44:43 +00:00
533dd469da nixpkgs: 2025-04-01 -> 2025-04-02 2025-04-02 15:23:08 +00:00
cec0612a64 nixpkgs-wayland: 2025-03-31 -> 2025-04-01 2025-04-02 15:12:14 +00:00
2747079373 sane-input-handler: fix power_then_voldown keybinding 2025-04-01 05:46:43 +00:00
4eec2cba7a sane-input-handler: fix typo: swamsg -> swaymsg 2025-04-01 04:13:40 +00:00
bb646b1828 nixpkgs: 2025-03-31 -> 2025-04-01 2025-04-01 04:01:50 +00:00
097618056b nixpkgs-wayland: same-day update 2025-04-01 04:01:40 +00:00
582168f570 firefox-extensions.sponsorblock: 5.11.9 -> 5.11.10 2025-04-01 04:01:24 +00:00
b60f4c2778 nixpkgs: 2025-03-30 -> 2025-03-31 2025-04-01 02:53:12 +00:00
e618eb4258 nixpkgs-wayland: 2025-03-30 -> 2025-03-31 2025-03-31 15:36:41 +00:00
f0fbf78b1a sane-input-handler: fix toggleKeyboard improperly calling effect
'cant call proc when errexit is set...' this seems like a genuine limitation of osh
2025-03-31 07:40:32 +00:00
9fcaba8bf3 sane-input-handler: express the logic in a way thats more immune to the previous class of quoting error
had to introduce some hacks to keep the debuggability though. i don't like it.
2025-03-31 07:10:31 +00:00
6da4a5ab9d sane-input-handler: dont crash on unmapped actions 2025-03-31 04:16:04 +00:00
a21618cb9c nixpkgs: 2025-03-29 -> 2025-03-30 2025-03-30 05:39:25 +00:00
fa4a2c84c8 nixpkgs-wayland: 2025-03-29 -> 2025-03-30 2025-03-30 05:39:17 +00:00
1cc630b7bb opencellid: 2025-03-29 -> 2025-03-30 2025-03-30 05:38:47 +00:00
7742e48af7 uassets: 2025-03-28 -> 2025-03-30 2025-03-30 05:38:35 +00:00
4ec928ea55 feeds: subscribe to Nocturne Podcast (rec by 99 percent invisible) 2025-03-30 05:38:23 +00:00
65cb6a027d sane-input-handler: log fullscreen state from handleWith 2025-03-30 04:55:01 +00:00
bff5d5a757 sane-input-handler: activate media controls when inside a fullscreen app 2025-03-30 04:17:28 +00:00
47659f9649 sane-input-handler: lift command execution up to the toplevel 2025-03-30 03:44:27 +00:00
a01b99c2dc sane-input-handler: factor out the side effects from the mapping 2025-03-30 03:19:20 +00:00
e83bcd07f8 sane-input-handler: port to oil shell 2025-03-30 03:08:07 +00:00
03635fcf31 sane-input-handler: implement --dry-run flag 2025-03-30 00:19:16 +00:00
617babafad sane-input-handler: implement --verbose flag 2025-03-30 00:10:00 +00:00
6a14303395 oils-for-unix: ship it! 2025-03-29 23:14:39 +00:00
b016f9e3ef cross: fix oils-for-unix (i.e. oils/ysh) to cross compile 2025-03-29 23:14:31 +00:00
6c1d93d344 nixpkgs: 2025-03-28 -> 2025-03-29 2025-03-29 19:30:01 +00:00
615afdea01 nixpkgs-wayland: 2025-03-28 -> 2025-03-29 2025-03-29 19:29:48 +00:00
080eff357a opencellid: 2025-03-28 -> 2025-03-29 2025-03-29 19:29:34 +00:00
0c24119f0f assorted: ensure mktemp places temporaries in /tmp 2025-03-28 05:42:20 +00:00
0cc171734a nixpkgs: 2025-03-27 -> 2025-03-28 2025-03-28 05:36:45 +00:00
d2623272ae nixpkgs-wayland: 2025-03-27 -> 2025-03-28 2025-03-28 05:30:13 +00:00
f459f921b7 opencellid: 2025-03-27 -> 2025-03-28 2025-03-28 05:29:56 +00:00
3d2a93a645 uassets: 2025-03-22 -> 2025-03-28 2025-03-28 05:29:34 +00:00
60a165cbb5 programs/cargo: remove no-longer-necessary package override 2025-03-27 06:12:12 +00:00
ce236f6c7a nixpkgs: 2025-03-25 -> 2025-03-27 2025-03-27 06:11:58 +00:00
30fca5512c nixpkgs-wayland: 2025-03-24 -> 2025-03-27 2025-03-27 05:29:21 +00:00
f66b37a84f firefox-extensions: dont passthru the updateScript when wrapping addons
the unwrapped addon's update script simply doesn't apply to the wrapped addon. otherwise we do silly things like try to update each addon twice
2025-03-27 05:17:34 +00:00
7d92241678 opencellid: 2025-03-24 -> 2025-03-27 2025-03-27 05:10:38 +00:00
17f3002b99 scripts/update: use a unique working directory per package, to decrease updateScript interference 2025-03-27 05:10:25 +00:00
7e354ce52a firefox-extensions.addon-version-lister: refactor
especially, improve logging; and don't log to stdout else we confuse the downstream updaters
2025-03-27 05:08:35 +00:00
6601efb5de linux-manjaro: remove
pkg no longer evals due to depending on a `linux` no longer shipped in nixpkgs
2025-03-27 05:07:44 +00:00
54b2151a00 nixpkgs-bootstrap: rework "mkNixpkgs" such that "nixpkgs-bootstrap.$channel.updateScript" can be evaluated *without* importing the underlying nixpkgs
this makes it possible to update out of a nixpkgs staging rev whose toplevel attrset doesn't eval
2025-03-27 03:32:01 +00:00
7169193cc4 programs/epiphany: fix so it launches again (had an overly restrictive bunpen sandbox, after i enabled webkit sandboxing) 2025-03-25 15:25:16 +00:00
662525d159 nixpkgs: 2025-03-24 -> 2025-03-25 2025-03-25 15:10:23 +00:00
e7e70ce611 euicc-manual: 2025-03-20 -> 2025-03-25 2025-03-25 15:10:08 +00:00
1b3cdd7905 libmegapixels: 2025-03-20 -> 2025-03-24 2025-03-25 15:09:55 +00:00
a7b5c86f25 dtrx: fix .tar.lz extraction 2025-03-25 14:40:27 +00:00
8685e11a13 nixpkgs/patches: remove upstreamed patches; update hashes 2025-03-25 02:41:49 +00:00
cd48bdad93 nixpkgs: 0-unstable-2025-03-22 -> 0-unstable-2025-03-24 2025-03-25 02:36:31 +00:00
f8d2e9a19c nixpkgs-wayland: 0-unstable-2025-03-22 -> 0-unstable-2025-03-24 2025-03-25 02:36:08 +00:00
18a8c487a8 zimPackages.archlinux_en_all_maxi: 2025-02 -> 2025-03 2025-03-25 02:35:52 +00:00
3c52d8a38f opencellid: 0-unstable-2025-03-23 -> 0-unstable-2025-03-24 2025-03-25 02:35:34 +00:00
dcc497cfad opencellid: 2025-03-22 -> 2025-03-23 2025-03-23 10:25:52 +00:00
c8b1f9d221 scripts/deploy: remove "crappy"; i dont deploy it anymore 2025-03-23 01:22:50 +00:00
b528d75d31 buffybox: 2025-03-12 -> 2025-03-16 2025-03-22 21:26:00 +00:00
7743428c9e sops-nix: assets-unstable-2025-03-19 -> assets-unstable-2025-03-21 2025-03-22 21:25:46 +00:00
d50321fa0d uassets: same-day update 2025-03-22 21:25:34 +00:00
a36c4ee2ff firefox-extensions.ublock: 1.63.0 -> 1.63.2 2025-03-22 09:46:25 +00:00
889a02311d firefox-extensions: ignore beta/rc releases (again) 2025-03-22 09:46:06 +00:00
dca343daed firefox-extensions.addon-version-lister: port from sh to oil 2025-03-22 09:45:23 +00:00
3d3bd5e5b2 static-nix-shell.mkYsh: init 2025-03-22 09:06:17 +00:00
c9699b7bc4 nixpkgs-bootstrap.master: 2025-03-21 -> 2025-03-22 2025-03-22 06:19:26 +00:00
65acb2be75 nixpkgs-wayland: 2025-03-20 -> 2025-03-22 2025-03-22 06:19:06 +00:00
0987f2f8f7 opencellid: 2025-03-21 -> 2025-03-22 2025-03-22 06:18:48 +00:00
b56366bf98 uassets: 0-unstable-2025-03-20 -> 0-unstable-2025-03-22 2025-03-22 06:18:02 +00:00
33f894674c todo.md: mark snapper as complete 2025-03-21 20:10:51 +00:00
4b0d0cd226 ols: fix to reference correct opencellid csv path 2025-03-21 18:16:09 +00:00
56c6e97f8f opencellid: rework package; mirror the data to an external repo 2025-03-21 08:08:36 +00:00
b51352bd98 nixpkgs-wayland: same-day bump 2025-03-21 05:37:02 +00:00
9a7ce9501e nixpkgs-bootstrap: 2025-03-20 -> 2025-03-21 2025-03-21 05:36:53 +00:00
ab5d291840 megapixels-next: 2025-03-12 -> 2025-03-20 2025-03-21 05:36:31 +00:00
2a6e5e5c9b libmegapixels: 2025-03-07 -> 2025-03-20 2025-03-21 05:36:16 +00:00
687141ee1f firefox-extensions: fix the damn uBlock update script 2025-03-21 04:09:40 +00:00
8bf9dec92f opencellid: 2025-03-20 -> 2025-03-21 2025-03-21 02:38:58 +00:00
8886fa867e gpodder: ACTUALLY fix environment variable expansion
they were incorrectly being expanded at build time by the python wrapper; use extraMakeWrapperArgs to avoid that
2025-03-20 16:30:17 +00:00
cfde788dc4 gpodder: fix to preserve GPODDER_HOME environment variables 2025-03-20 15:38:40 +00:00
73d79e10e7 nixpkgs: intra-day update (to get my upstreamed fontconfig fixes) 2025-03-20 14:51:43 +00:00
6c9766c96b nixpkgs-wayland: 2025-03-19 -> 2025-03-20 2025-03-20 14:51:23 +00:00
4d8aef47dd signal-desktop-from-src: 7.47.0 -> 7.48.0 2025-03-20 14:51:10 +00:00
6087334f39 sops-nix: 2025-03-13 -> 2025-03-19 2025-03-20 14:50:45 +00:00
db4751467f uassets: 0-unstable-2025-03-15 -> 0-unstable-2025-03-20 2025-03-20 14:50:30 +00:00
ff1d845fcd gpodder-adaptive: fix broken Exec= path in .desktop files 2025-03-20 08:14:39 +00:00
f279ea5cc1 servo: transmission/torrent-done: add some more files to the remove list 2025-03-20 07:45:56 +00:00
b689ffded6 servo: transmission/torrent-done: when a torrent completes, only copy that torrent's files -- not its entire directory
this is mostly relevant for single-file torrents. untested
2025-03-20 07:32:40 +00:00
adcc3fd4eb nixpkgs: fix rocm patch hash 2025-03-20 07:31:22 +00:00
3ff8b1750f servo: transmission/torrent-done: document more of the env vars available 2025-03-20 06:57:37 +00:00
38381b890b {epiphany,tangram}: remove obsolete WEBKIT_DISABLE_SANDBOX_THIS_IS_DANGEROUS=1 hack
epiphany works fine without this on moby now. didnt test tangram
2025-03-20 06:44:27 +00:00
6a69d54de7 gpodder: synchronize feeds as part of desktop bringup -- not once per launch 2025-03-20 04:00:03 +00:00
272f8e6b2c nixpkgs: 2025-03-19 -> 2025-03-20 2025-03-20 03:40:11 +00:00
406defeaef opencellid: 2025-03-19 -> 2025-03-20 2025-03-20 03:39:59 +00:00
29415aa88a scripts/deploy: allow --deriv to be either a .drv or a store path 2025-03-20 03:39:44 +00:00
5133664603 radicale: relax auth. fixes gnome-contacts 2025-03-20 03:38:54 +00:00
48b4a61e7b firefox-extensions: fix version-regex so that uBlock won't try to update to nonexistent versions anymore 2025-03-20 03:18:20 +00:00
9b9d0760b4 firefox-extensions.ublock: restrict to signed releases ONLY 2025-03-20 02:33:37 +00:00
d868f4fa15 nixpkgs-wayland: 2025-03-16 -> 2025-03-19 2025-03-20 02:06:17 +00:00
1ff24f5664 nixpkgs: 2025-03-18 -> 2025-03-19 2025-03-20 02:06:07 +00:00
1dc0d20c81 opencellid: 2025-03-18 -> 2025-03-19 2025-03-20 02:05:49 +00:00
a65d738765 euicc-manual: 0-unstable-2025-03-09 -> 0-unstable-2025-03-20 2025-03-20 02:05:37 +00:00
6f26d87e0d fc-cache patches: push upstream 2025-03-19 16:06:40 +00:00
0dc62d7fe2 fotnconfig: push cross patches upstream (partially) 2025-03-19 14:55:41 +00:00
208a88b8ca fontconfig: document some limitations of the cache 2025-03-19 07:25:43 +00:00
8974dd082b nixpkgs: 0-unstable-2025-03-16 -> 0-unstable-2025-03-18 2025-03-19 07:05:48 +00:00
fb9d7ad886 gst-launch: improve docs 2025-03-19 07:03:28 +00:00
6770bd158e nixpkgs-wayland: 2025-03-15 -> 2025-03-16 2025-03-19 07:03:03 +00:00
7de157564a firefox-extensions.ublock: 1.62.0 -> 1.63.0 2025-03-19 07:02:38 +00:00
5532ecc12d overlays/preferences: remove obsolete build fixs 2025-03-19 07:02:15 +00:00
9ebaefe7c2 itgmania: remove obsolete patch 2025-03-19 07:01:51 +00:00
7df509603b dialect: remove obsolete patch 2025-03-19 07:01:23 +00:00
1653fd36d7 sequoia: remove obsolete patch 2025-03-19 07:01:10 +00:00
70da2d6ec4 opencellid: 0-unstable-2025-02-25 -> 0-unstable-2025-03-18 2025-03-19 07:00:49 +00:00
ba9aced5e4 bemenu: use env instead of wrapping 2025-03-19 07:00:33 +00:00
83884c66dd firefox: add search bookmark for pypi.org 2025-03-18 19:37:08 +00:00
9b1db9aa18 nvimpager: push cross compilation fix upstream 2025-03-18 07:19:49 +00:00
fc426b5c0b nixpkgs: patches: fix rocm hash 2025-03-18 06:03:18 +00:00
f6a21f1c56 nixpkgs: update hashes for rocm, zelda64 patches 2025-03-17 07:04:31 +00:00
951d905cca firefox: add an etsy search alias 2025-03-17 06:30:18 +00:00
470664d1c4 sane-reboot: do a force reboot if the original command fails (experimental) 2025-03-17 06:28:32 +00:00
7ee91765fc upstream some cross compilation fixes; remove patches which are no longer necessary 2025-03-17 01:28:16 +00:00
04328e7f2a nixpkgs: 2025-03-11 -> 2025-03-16 2025-03-16 21:54:15 +00:00
2d7a06e8cd megapixels-next: 2025-03-09 -> 2025-03-12 2025-03-16 21:53:57 +00:00
f07c3efff8 nixpkgs-wayland: 2025-03-11 -> 2025-03-15 2025-03-16 21:53:43 +00:00
6768cad5c5 signal-desktop-from-src: 7.46.0 -> 7.47.0 2025-03-16 21:53:27 +00:00
1597f68cf2 sops-nix: assets-unstable-2025-03-10 -> assets-unstable-2025-03-13 2025-03-16 21:53:10 +00:00
41dfe31800 syshud: 0-unstable-2025-03-09 -> 0-unstable-2025-03-11 2025-03-16 21:52:56 +00:00
e19b2d87f8 uassets: 0-unstable-2025-03-11 -> 0-unstable-2025-03-15 2025-03-16 21:52:44 +00:00
2544bb4d68 scripts/deploy: add --build flag
useful as e.g. deploy --pre --build, to only *build* all variants/hosts, but don't actually copy
2025-03-16 07:01:15 +00:00
ca6c6f7b57 neovim: swap out a filetype plugin in place of tree-sitter-nix-shell for handling #!nix-shell scripts 2025-03-16 06:43:02 +00:00
9b4ff72758 neovim: switch nix-shell plugin back to the old way 2025-03-16 01:51:12 +00:00
2ac61bfa14 preferences: switch back to precompiled electron binaries 2025-03-16 00:40:54 +00:00
d549f4a0eb programs: disable a few programs i havent used in a long time 2025-03-16 00:40:18 +00:00
b488eeaf1d neovim: ship the *wrapped* version of tree-sitter-nix-shell
hopefully this will fix syntax highlighting
2025-03-16 00:39:41 +00:00
a5d36ca633 tree-sitter-nix-shell: make compatible with tree-sitter 0.15 2025-03-16 00:39:12 +00:00
af87c40b97 impure.nix (updaters): dont hardcode the location of this repo 2025-03-15 05:01:14 +00:00
c926bfc765 scripts/check-nur: dont hardcode the location of this repo 2025-03-15 05:00:49 +00:00
13a2acfd70 scripts/update: dont hardcode the location of this repo 2025-03-15 04:55:09 +00:00
bbefa924cf scripts/update: implement -j option to control the number of parallel update jobs 2025-03-15 04:45:28 +00:00
855522daec go2tv: install both the full and the "light" CLI 2025-03-14 10:31:31 +00:00
8393c6f823 go2tv: partially fix the -tc option 2025-03-14 10:31:17 +00:00
90df599adf go2tv: re-enable SSDP search patch 2025-03-13 15:25:56 +00:00
5b718799a5 mslicer: remove unused dependencies 2025-03-12 16:41:17 +00:00
e264c8dd21 mslicer: fix so the mslicer GUI loads 2025-03-12 15:46:40 +00:00
8818f271cb snapper: increase snapshot lifetime, except for lappy 2025-03-12 15:30:38 +00:00
0fd424306a mpv: associate with .amr audio files 2025-03-12 15:30:38 +00:00
075a089696 mslicer: forcibly link against wayland
this fixes the error that it can't find wayland, but now it complains about unsupported (graphics) features

old error:
```
thread 'main' panicked at mslicer/src/main.rs:80:6:
called `Result::unwrap()` on an `Err` value: WinitEventLoop(Os(OsError { line: 80, file: "/build/mslicer-0.2.0-vendor/winit-0.29.15/src/platform_impl/linux/wayland/event_loop/mod.rs", error: WaylandError(Connection(NoWaylandLib)) }))
```

new error:
```
thread 'main' panicked at mslicer/src/main.rs:80:6:
called `Result::unwrap()` on an `Err` value: Wgpu(RequestDeviceError(RequestDeviceError { inner: Core(UnsupportedFeature(Features(POLYGON_MODE_LINE))) }))
```
2025-03-11 16:22:39 +00:00
b18797bf98 gps-share: 0.3.1 -> 0.3.1-unstable-2024-03-19 2025-03-11 15:29:02 +00:00
ba7a931b18 gps-share: port to useFetchCargoVendor 2025-03-11 15:24:26 +00:00
284eeceee9 nixpkgs-wayland: 2025-03-07 -> 2025-03-11 2025-03-11 15:10:38 +00:00
5b1fa9bf32 nixpkgs-bootstrap: 2025-03-10 -> 2025-03-11 2025-03-11 15:10:27 +00:00
30637c3da2 uvtools: 5.0.7 -> 5.0.8 2025-03-11 15:10:05 +00:00
58a6f7cfd9 uassets: 2025-03-09 -> 2025-03-11 2025-03-11 15:09:41 +00:00
15546f9b31 sops-nix: 2025-03-03 -> 2025-03-10 2025-03-11 15:09:20 +00:00
ab8699732a firefox-extensions.sponsorblock: 5.11.8 -> 5.11.9 2025-03-11 15:08:47 +00:00
3c1a762c25 mslicer: init at 0.2.0
i haven't tested anything beyond the --help flags

hopefully this generates .goo files which are more compatible than UVtools'
2025-03-11 07:29:13 +00:00
69297280eb templates: rust: update for fetchCargoVendor 2025-03-11 07:21:17 +00:00
3956a2f166 nixpkgs: 2025-03-08 -> 2025-03-10 2025-03-10 18:10:16 +00:00
6ed1375069 syshud: 2025-01-13 -> 2025-03-09 2025-03-10 18:06:01 +00:00
8be329096e megapixels-next: 2025-03-07 -> 2025-03-09 2025-03-10 18:05:09 +00:00
e2e58fae5e euicc-manual: 0-unstable-2025-03-03 -> 0-unstable-2025-03-09 2025-03-10 15:44:34 +00:00
763bce7824 firefox-extensions.sponsorblock: 5.11.7 -> 5.11.8 2025-03-10 15:44:18 +00:00
05e27a5af6 uassets: 0-unstable-2025-03-08 -> 0-unstable-2025-03-09 2025-03-10 15:44:00 +00:00
7ae39338b7 cassini: point to my own development fork
i hope this isn't a dead end.
2025-03-10 07:59:53 +00:00
0bdc5b4a59 cassini: ship it
this fixes the firewall, but looks like the data format may have changed since upstream authored the project...

i think i can change:
```py
desc['Data']['Attributes']['MainboardID']
```
to
```
desc['Data']['MainboardID']
```
2025-03-10 07:59:49 +00:00
ca1b9294e5 net/upnp: document the firewall commands better 2025-03-10 07:59:44 +00:00
4441e1609f sane-scripts.ssdp: use stdenv.mkDerivation instead of buildPythonPackage 2025-03-10 06:49:57 +00:00
47fb71d980 templates/pkgs/python: show how to package a setuptools project 2025-03-10 06:49:16 +00:00
58b89e88fe cassini: init at 0-unstable-2024-03-30 2025-03-10 06:48:26 +00:00
69c41081a0 uvtools: ship 2025-03-10 01:49:47 +00:00
73ddbe22f0 libqmi: fix cross via upstream patch 2025-03-10 01:49:47 +00:00
072a98dce4 zelda64recomp: ship it 2025-03-09 02:06:39 +00:00
3080c34398 nixpkgs-bootstrap.master: 0-unstable-2025-03-06 -> 0-unstable-2025-03-08 2025-03-09 01:10:06 +00:00
7c78ba5776 megapixels-next: 2.0.0-alpha1-unstable-2025-02-17 -> 2.0.0-alpha1-unstable-2025-03-07 2025-03-09 01:09:22 +00:00
4615203f09 uassets: 0-unstable-2025-03-07 -> 0-unstable-2025-03-08 2025-03-09 01:09:00 +00:00
7116f3a954 mm64baserom: init 2025-03-08 21:43:48 +00:00
fd000c6ad8 sm64baserom: remove ... from callArgs 2025-03-08 21:43:03 +00:00
dc8bdf09ad signal-desktop-from-src: provide libgdm directly rather than through mesa 2025-03-08 20:43:14 +00:00
ef54ea84dc sway: disable USB DAC media keys 2025-03-08 13:53:36 +00:00
6554c8ea52 rename flavored hosts to $hostName{-light,-min}{-staging,-next}
i.e. swap the order of those two parameters
2025-03-08 09:38:45 +00:00
9a87622ce6 Merge pull request 'impure.nix: Add extendModules to hosts.*' (#4) from shelvacu/colins-nix-files:patch-add-host-extendModules into master
Reviewed-on: #4
2025-03-08 09:33:22 +00:00
97e65a55e2 gnome-sound-recorder: fix sandboxing 2025-03-07 17:01:36 +00:00
574a00b431 gnome-sound-recorder: ship 2025-03-07 16:55:33 +00:00
4f633e8492 nixpkgs-staging: 0-unstable-2025-03-05 -> 0-unstable-2025-03-07 2025-03-07 07:12:00 +00:00
2f7c79e97f nixpkgs-wayland: 2025-03-06 -> 2025-03-07 2025-03-07 07:11:47 +00:00
0dc7c06b72 uassets: 2025-03-05 -> 2025-03-07 2025-03-07 07:11:25 +00:00
cd6d40154c signal-desktop-from-src: 7.44.0 -> 7.46.0
build migrates from npm -> pnpm

also, cleaned up a runtime dep on the build-time bash

native compilation tested; cross compilation succeeds, haven't tested the binary
2025-03-07 07:11:13 +00:00
4d259e93b0 nixpkgs: fix hash 2025-03-07 04:11:28 +00:00
e5c1e02255 nixpkgs-wayland: 2025-03-04 -> 2025-03-06 2025-03-06 08:01:36 +00:00
f596efab0e nixpkgs: 2025-03-05 -> 2025-03-06 2025-03-06 08:01:26 +00:00
ad453264fb nixpkgs-wayland: intra-day bump 2025-03-06 05:11:23 +00:00
9a1d2cbda1 nixpkgs: 2025-03-04 -> 2025-03-05 2025-03-06 05:11:14 +00:00
881573c28a sops-nix: 2025-02-11 -> 2025-03-03 2025-03-06 05:10:46 +00:00
eea9b47121 firefox-extensions.sponsorblock: 5.11.6 -> 5.11.7 2025-03-06 05:10:31 +00:00
e7c52340ab uassets: 0-unstable-2025-03-04 -> 0-unstable-2025-03-05 2025-03-06 05:10:14 +00:00
e126aafa9b zsh: disable Ctrl+S "suspend terminal" shortcut 2025-03-04 21:16:41 +00:00
Shelvacu
a405850cf8 impure.nix: Add extendModules to hosts.*
With this something like `hosts.servo.extendModules { networking.hostname = "shel-is-awesome"; }` works as expected. Mirrors the functionality of extendModules on the result of evalConfig
2025-03-04 12:25:55 -08:00
4f4c06f753 clightning: disable problematic plugin, add more debugging options 2025-03-04 18:58:05 +00:00
5fbb790902 nipkgs-bootstrap.master: 0-unstable-2025-02-28 -> 0-unstable-2025-03-04 2025-03-04 16:53:59 +00:00
55bfcf3116 nixpkgs-wayland: 0-unstable-2025-02-26 -> 0-unstable-2025-03-04 2025-03-04 16:53:05 +00:00
1d42dccb6e euicc-manual: 0-unstable-2025-02-04 -> 0-unstable-2025-03-03 2025-03-04 16:52:49 +00:00
1d28dac94f libmegapixels: 0.2.0-unstable-2025-02-11 -> 0.2.0-unstable-2025-03-03 2025-03-04 16:52:30 +00:00
6a42b9125b zimPackages.wikipedia_en_100: 2024-06 -> 2025-03 2025-03-04 16:52:13 +00:00
e80c7e020a uassets: 0-unstable-2025-02-26 -> 0-unstable-2025-03-04 2025-03-04 16:51:53 +00:00
b5d30f989b firefox-extensions.sponsorblock: 5.11.5 -> 5.11.6 2025-03-04 16:51:39 +00:00
dd9daa06a8 fix impure.nix to be compatible with updateScripts 2025-03-04 07:30:57 +00:00
8160840bf2 audacity: fix GUI 2025-03-04 05:12:52 +00:00
d9a31ddff3 programs: add (and ship) see-cat; a program to pretty-print anything in the terminal 2025-03-04 05:00:58 +00:00
0448603731 bootstrap: avoid ever invoking mkNixpkgs without the localSystem argument
apparently importing nixpkgs and then `override`ing with `localSystem`
isn't enough; it needs `localSystem` from the start.
2025-03-03 08:30:25 +00:00
989f321c53 toplevel: pass localSystem into mkPkgs
hopefully this fixes pure-mode flake evaluation
2025-03-03 08:11:20 +00:00
64a2d60d89 sane-bt-rm: support deleting multiple torrents in one invocation 2025-03-02 05:25:28 +00:00
ccd343f0b6 nixpkgs: 0-unstable-2025-02-26 -> 0-unstable-2025-02-28 2025-02-28 16:52:05 +00:00
4be7222f98 emgucv: remove unused inputs 2025-02-28 09:04:17 +00:00
e8ab744bcc uvtools: fix missing runtime dep on emgucv
now `UVtoolsCmd convert case.sl1 Chitubox case.ctb` works!

or, appears to work. i have no printer with which to test the output yet
2025-02-28 07:33:00 +00:00
cf001326cd emgucv: port to buildDotnetModule
this isn't strictly necessary, but it seems to simplify the packaging
2025-02-28 07:32:07 +00:00
e93d04c09e nixpkgs-wayland: 0-unstable-2025-02-25 -> 0-unstable-2025-02-26 2025-02-27 06:47:20 +00:00
df0e072645 nixpkgs: 0-unstable-2025-02-25 -> 0-unstable-2025-02-26 2025-02-27 06:47:11 +00:00
5f8f8a44ba uassets: 0-unstable-2025-02-25 -> 0-unstable-2025-02-26 2025-02-27 02:53:36 +00:00
de8a544acd emgucv: init at 4.10.0 2025-02-26 17:32:00 +00:00
06add1cc55 signal-desktop-from-src: update hash (why did it change??) 2025-02-25 20:35:57 +00:00
fc40b9671e nixpkgs-wayland: intra-day update 2025-02-25 20:35:19 +00:00
68fc360586 uassets: intra-day update 2025-02-25 20:34:48 +00:00
5f79ddde03 opencellid: 0-unstable-2025-01-02 -> 0-unstable-2025-02-25 2025-02-25 20:34:02 +00:00
13f38d6fd7 servo: fix kiwix-serve build 2025-02-25 08:11:13 +00:00
3b44f05af0 nixpkgs: push librsvg patch toward upstream 2025-02-25 08:11:03 +00:00
79d567cd01 cross: fix librsvg (hopefully) 2025-02-25 07:30:39 +00:00
6bb6e4319c programs: gnome-contacts: remove dependency on webkitgtk 2025-02-25 07:30:37 +00:00
4c72d1af8e nixpkgs-bootstrap: 0-unstable-2025-02-24 -> 0-unstable-2025-02-25 2025-02-25 03:58:51 +00:00
9b0c90be7d nixpkgs-wayland: 0-unstable-2025-01-28 -> 0-unstable-2025-02-25 2025-02-25 03:58:38 +00:00
3f7000f2f8 signal-desktop-from-src: 7.42.0 -> 7.44.0 2025-02-25 03:58:25 +00:00
ffb08b1195 uassets: 0-unstable-2025-02-24 -> 0-unstable-2025-02-25 2025-02-25 03:57:26 +00:00
4fd4f6fa2f users/systemd: disable autostart limit for user services 2025-02-25 03:54:58 +00:00
9e6eb1eb94 nixpkgs: 0-unstable-2025-02-22 -> 0-unstable-2025-02-24 2025-02-25 02:51:24 +00:00
33108ea9e1 zimPackages.archlinux_en_all_maxi: 2022-12 -> 2025-02 2025-02-24 18:50:48 +00:00
8153e5e033 uvtools: only grab the deps we actually need 2025-02-24 18:49:54 +00:00
04d1da8e39 TODO: fold: sidebery 2025-02-24 18:48:55 +00:00
1aad4622a7 uassets: 0-unstable-2025-02-17 -> 0-unstable-2025-02-24 2025-02-24 18:43:08 +00:00
6f6851f565 sidebery: 5.3.2 -> 5.3.3 2025-02-24 18:41:20 +00:00
acb00e7f8a impure.nix: allow scripts/update to work with more types of updateScript 2025-02-24 07:35:14 +00:00
621cc83740 uvtools: init at 5.0.7 2025-02-24 07:34:55 +00:00
d399a824e4 nixpkgs: 0-unstable-2025-02-17 -> 0-unstable-2025-02-22 2025-02-24 05:55:15 +00:00
ec77f8f6b9 lemoa: upgrade rustPlatform.fetchCargoTarball -> rustPlatform.fetchCargoVendor
the former is deprecated
2025-02-22 09:55:58 +00:00
d5226957bf lemoa: fix build (it had incorrect cargo hash) 2025-02-22 09:43:00 +00:00
0b1c94d4a3 net: add guest wifi 2025-02-22 04:51:14 +00:00
64f23282e2 sane-stop-all-servo: add missing services 2025-02-19 08:32:34 +00:00
a530ee8ae4 nixpkgs: 0-unstable-2025-02-08 -> 0-unstable-2025-02-17 2025-02-18 15:31:10 +00:00
87c58c312d megapixels-next: 2.0.0-alpha1-unstable-2025-01-16 -> 2.0.0-alpha1-unstable-2025-02-11 2025-02-18 15:31:10 +00:00
dad4dd1860 uassets: assets-unstable-2025-01-31 -> assets-unstable-2025-02-11 2025-02-18 15:31:10 +00:00
b8e2205a15 uassets: 0-unstable-2025-02-07 -> 0-unstable-2025-02-17 2025-02-18 15:31:10 +00:00
9029127ea8 uninsane-dot-org: 0-unstable-2024-11-16 -> 0-unstable-2025-02-09 2025-02-18 15:30:50 +00:00
4134525019 snapper: decrease from 3 to 2 daily snapshots
servo is really running out of space
2025-02-18 15:30:50 +00:00
e4fe5e0cd4 snapper: gc old snapshots more frequently 2025-02-18 15:30:50 +00:00
dc0ad5ed20 signal-desktop-from-src: remove old source hashes 2025-02-18 15:25:49 +00:00
e4ba0d3c83 signal-desktop-from-src: 7.37.0 -> 7.42.0 2025-02-18 15:25:15 +00:00
e7ce6a2ef6 remove merged coturn build fix 2025-02-18 05:56:02 +00:00
16f4afbc60 feeds: unsubscribe from Adam Savage 2025-02-17 01:22:48 +00:00
21cb18885c sane-cast/go2tv: fix broken casting due to upstream SSDP changes 2025-02-13 06:59:39 +00:00
a636e19198 todo.md: soulseek CLI 2025-02-13 05:38:45 +00:00
0327d7072a snapper: cull snapshots more aggressively 2025-02-13 05:37:04 +00:00
396efcd357 nvimpager: fix cross compilation 2025-02-11 04:13:45 +00:00
79b4e5a652 secrets/net: be picky about which cell networks we autoconnect to 2025-02-11 03:50:51 +00:00
233ee5be43 networkmanager: actually plumb autoconnect for connections which specify it 2025-02-11 03:50:30 +00:00
da2217f194 sane-input-handler: lengthen the power-tap-2 threshold from 750ms to 825ms 2025-02-10 05:21:48 +00:00
ab55adb52d feeds: unsubscribe from Tech Won't Save Us 2025-02-10 03:46:44 +00:00
d419a3cb08 sane-input-handler: increase power-tap-hold duration from 750ms -> 875ms
i'm *very occasionally* killing windows when i mean to screen-off, but it's frequent enough that i'm now hesitant to double-tap power
2025-02-10 03:45:39 +00:00
ba38fbc4e5 ollama: dont ship on -min and -light variants 2025-02-10 03:43:24 +00:00
925c0faa05 servo: switch a few services which Require postgresql to a weaker Wants dependency, in light of my postgresql flakiness 2025-02-09 18:59:52 +00:00
8ec309e33f sway: increase the vertical padding inside titlebars 1 -> 3
i think this increases the height by 4 pixels, which may be a bit much. OTOH, it _feels_ like it decreased when i switched the default font earlier, and i'm just compensating for that
2025-02-09 03:50:23 +00:00
bec429a04d nixpkgs: 2025-02-07 -> 2025-02-08 2025-02-08 12:26:27 +00:00
77f62d247f nixpkgs: 2025-01-28 -> 2025-02-07 2025-02-08 12:26:27 +00:00
f6cddfb7e8 bonsai: avoid shipping multiple versions of the package 2025-02-08 11:51:39 +00:00
290fd281b9 haredoc: dont ship the *entirety* of hare; just the .ha files we need for docs 2025-02-08 11:43:34 +00:00
690abc305f sops-nix: assets-unstable-2025-01-20 -> assets-unstable-2025-01-31 2025-02-08 11:42:52 +00:00
e6d028b01d megapixels-next: 2.0.0-alpha1-unstable-2024-12-27 -> 2.0.0-alpha1-unstable-2025-01-16 2025-02-08 11:42:35 +00:00
9733f8af7a uassets: 0-unstable-2025-01-28 -> 0-unstable-2025-02-07 2025-02-08 11:42:17 +00:00
203aa4b470 firefox-extensions.sidebery: 5.3.1 -> 5.3.2 2025-02-08 11:42:03 +00:00
6542919831 feeds: add malicious.life podcast (like Darknet Diaries) 2025-02-08 10:46:12 +00:00
5d42f5a6e5 feeds: add Lawfare Daily 2025-02-08 03:27:55 +00:00
a5054deef0 ollama: add deepseek-r1-671b model 2025-02-07 12:13:50 +00:00
3ed2d08a77 net: add connection for overseas mobile provider 2025-02-05 19:30:40 +00:00
e2775ea266 networkmanagerapplet: ship
the UI overflows too much to be usable on mobile, however it does work (and is useful) on lappy
2025-02-05 19:30:11 +00:00
d077036bb6 desko: ship a few more ollama models 2025-02-05 17:16:19 +00:00
7a149d8f2f desko: ship 32b variant of deepseek-r1-abliterated 2025-02-05 14:08:16 +00:00
44f05916f2 desko: ship a bunch more models, especially deepseek-r1 and uncensored/"abliterated" models 2025-02-05 13:41:46 +00:00
5a88a10a19 confy: ship 2025-02-04 09:37:11 +00:00
ac899b614b hosts/all: wifi: auto-connect to non-password-protected APs 2025-02-04 08:39:00 +00:00
f1c7c32e84 wifi: update Brussels APs 2025-02-03 20:42:52 +00:00
9399fd0254 wifi: update 2025-02-01 14:11:34 +00:00
cb1a72cb71 blanket: fix dbus sandboxing 2025-01-31 07:13:05 +00:00
6d5c75b38c blanket: ship
turns out it actually is useful, in crowed settings where i can't focus
2025-01-31 06:56:23 +00:00
6ba9743f05 sane-vpn: fix to provide bunpen with the gateway address for "sane-vpn do none ..." 2025-01-31 06:05:32 +00:00
2ffaf1f3d8 sane-vpn: dont show the ip-check dialog for none region 2025-01-31 06:05:32 +00:00
3dea4370d7 sane-vpn: fix typos in recently-modified sane-vpn {up,down} paths 2025-01-31 06:05:32 +00:00
cebedc43c7 WIP: sane-vpn: fix "sane-vpn up none" to correctly delegate all DNS to the DHCP-provided servers when using BIND
previously this only worked when using hickory-dns as the local resolver
2025-01-31 06:05:32 +00:00
14d5910e79 cups: enable
verified working on lappy; builds for moby
2025-01-30 17:25:44 +00:00
45526bd583 feeds: subscribe to Quorators 2025-01-30 02:21:16 +00:00
a42bd18d14 feeds: unsubscribe from Justin Robert Young
too... trivia-like. like a sports betting podcast
2025-01-30 02:15:48 +00:00
b536a30919 fonts: switch to Monaspace Argon
this one is especially easy for reading code comments
2025-01-29 23:35:17 +00:00
ec71b0219a fonts: try Monaspace... but dont commit to it right now 2025-01-29 23:24:24 +00:00
41b1ed0c31 cross: update upstreaming status 2025-01-29 00:24:47 +00:00
9fbb9c0c07 uassets: 2025-01-26 -> 2025-01-28 2025-01-28 23:24:10 +00:00
f90faf4516 nixpkgs-wayland: 0-unstable-2025-01-27 -> 0-unstable-2025-01-28 2025-01-28 23:24:02 +00:00
0d6ae1cc3a nixpkgs: 0-unstable-2025-01-27 -> 0-unstable-2025-01-28 2025-01-28 23:23:48 +00:00
b40c5abaf4 nixpkgs-wayland: 0-unstable-2025-01-26 -> 0-unstable-2025-01-27 2025-01-27 21:23:36 +00:00
063c897b43 nixpkgs: 0-unstable-2025-01-26 -> 0-unstable-2025-01-27 2025-01-27 21:23:28 +00:00
63bba23ff2 nixpkgs-wayland: 0-unstable-2025-01-21 -> 0-unstable-2025-01-26 2025-01-26 11:13:13 +00:00
214bd1e696 nixpkgs: 0-unstable-2025-01-25 -> 0-unstable-2025-01-26 2025-01-26 11:13:04 +00:00
3d584cb07b uassets: 0-unstable-2025-01-25 -> 0-unstable-2025-01-26 2025-01-26 11:12:46 +00:00
6f0f54f0ae geary: try to reduce dbus access, but then abort because i notice it uses xdg-dbus-proxy internally, which doesnt yet support nesting! 2025-01-26 09:06:28 +00:00
5f8d64cdb5 nwg-panel: restrict dbus access 2025-01-26 09:06:02 +00:00
049011e7db gnome-calls: restrict dbus
tested, can receive calls, it rings, notifies on missed call, notification can be clicked to call back, in-call audio works and mute button works (on lappy)
2025-01-26 09:03:32 +00:00
40e2cbec2c wireplumber: grant access to the system bus
this is required for bluetooth audio
2025-01-26 06:28:00 +00:00
65997c9f00 programs: definitions for blueman, but dont actually enable it 2025-01-26 06:27:39 +00:00
3c41a0bd29 blueberry: enable bluetooth.service
i'm still not able to connect to a bluetooth speaker yet...
2025-01-26 05:34:56 +00:00
88ef815717 blueberry: patch for cross compilation, and ship it
note that this doesn't do anything yet, as i need to re-enable bluez (bluetooth.service), first
2025-01-26 05:07:35 +00:00
3f0e2c5cb2 aarch64/moby: fix papers cross-compilation and use that as my PDF viewer instead of zathura 2025-01-26 03:04:54 +00:00
54a23fd109 cross: push vpnc-related changes upstream to nixpkgs 2025-01-26 01:38:15 +00:00
ccb90e7e4e cross: update upstreaming status 2025-01-26 01:05:27 +00:00
8ab56cbe8e feeds: unsubscribe from 60 Minutes
too informationally sparse
2025-01-25 21:45:20 +00:00
f3fb303cbf nixpkgs: 0-unstable-2025-01-24 -> 0-unstable-2025-01-25 2025-01-25 21:01:53 +00:00
85cdef4b4e uassets: 0-unstable-2025-01-21 -> 0-unstable-2025-01-25 2025-01-25 21:01:43 +00:00
5ed6df90c2 cross: push networkmanager plugin patches toward upstream 2025-01-25 12:42:37 +00:00
63281e5486 postgresql: increase log level 2025-01-25 12:34:20 +00:00
3debab9a7a servo: shelvacu: allow to start/stop/restart units 2025-01-25 12:33:59 +00:00
de6845834f servo: add Shelvacu as postgres admin 2025-01-25 12:09:51 +00:00
d99a2382ff add missing file to git 2025-01-25 10:57:19 +00:00
2a1b0cc90c nixpkgs: 0-unstable-2025-01-23 -> 0-unstable-2025-01-24 2025-01-25 01:52:40 +00:00
b9cfd504cc nixpkgs-bootstrap.master: fix hash
how do these 0-hashes sneak in without breaking builds sooner?
2025-01-24 20:07:59 +00:00
429bb604d7 nixpkgs-wayland: intra-day bump 2025-01-24 05:57:00 +00:00
bb32cadc4a nixpkgs: 2025-01-22 -> 2025-01-23 2025-01-24 05:56:46 +00:00
fcaa2079e1 firefox-extensions.sidebery: 5.3.0 -> 5.3.1 2025-01-24 05:56:29 +00:00
dba7949943 firefox-extensions.sponsorblock: 5.11.3 -> 5.11.5 2025-01-24 05:56:16 +00:00
a368fb3fb2 gnome-maps: associate with geo: URI (seen via fosdem.org, and gnome-maps copy-to-clipboard) 2025-01-24 05:55:59 +00:00
37bb0cf076 nixpkgs-bootstrap: include the name "nixpkgs" in the source derivation, for easier debugging 2025-01-23 21:42:39 +00:00
1a59005cef firefox-extensions: dont update to beta versions 2025-01-22 21:10:18 +00:00
2364e9a819 pipeline: remove (upstreamed into nixpkgs) 2025-01-22 21:06:52 +00:00
b9237d9c46 libcap-with-captree: remove (upstreamed into main libcap) 2025-01-22 21:06:52 +00:00
74deec9bbf directoryListingUpdater2: remove leftover files (my changes for this were upstreamed) 2025-01-22 21:06:52 +00:00
34eb0ed749 buffybox: remove (upstreamed into nixpkgs) 2025-01-22 21:06:52 +00:00
47a433d42a blast-ugjka: remove (upstreamed, as sblast) 2025-01-22 21:06:52 +00:00
c05771ba0b nixpkgs-bootstrap: fix hash for nautilus cross patch 2025-01-22 21:06:37 +00:00
977859776b servo: ship a bunch more kiwix archives
can't ship khanacademy yet because it takes literal days to download
2025-01-22 20:46:08 +00:00
9bbd4f0887 nixpkgs: 2025-01-21 -> 2025-01-22 2025-01-22 20:37:55 +00:00
742f1ab700 euicc-manual: 0-unstable-2024-12-10 -> 0-unstable-2025-01-05 2025-01-22 20:37:25 +00:00
b2c0ca0b42 firefox-extensions.sponsorblock: 5.11.2 -> 5.11.3 2025-01-22 20:36:32 +00:00
c1565efb2d sane-reclaim-disk-space: fix capability sandboxing 2025-01-22 10:50:49 +00:00
83477b9e70 zim packages: add a bunch more
the khanacademy one is taking ages to download...
2025-01-22 10:50:36 +00:00
e8ef317468 nixpkgs: 2025-01-20 -> 2025-01-21 2025-01-21 18:34:52 +00:00
a741962f1f nixpkgs-wayland: 0-unstable-2025-01-19 -> 0-unstable-2025-01-21 2025-01-21 18:34:42 +00:00
080de3d9ce sops-nix: assets-unstable-2025-01-10 -> assets-unstable-2025-01-20 2025-01-21 18:34:30 +00:00
05f97dc836 firefox-extensions.sideberry: 5.2.0 -> 5.3.0 2025-01-21 18:34:17 +00:00
dc54383632 uassets: 0-unstable-2025-01-20 -> 0-unstable-2025-01-21 2025-01-21 18:34:00 +00:00
78feb634ad servo: postgresql: fix Restart=on-failure 2025-01-21 18:07:42 +00:00
5740718d08 servo: gitea: rate limit the restarts 2025-01-21 11:31:32 +00:00
a7010f597d servo: matrix: tune restart settings 2025-01-21 11:10:52 +00:00
ffa9153101 servo: postgres: regulate the restarting a bit more to prevent systemd from disabling it 2025-01-21 10:37:29 +00:00
8374418abc postgresql: WIP script to recollate the database 2025-01-21 06:41:59 +00:00
8607f3c2fd servo: postgres: move to subdirectory 2025-01-21 06:31:50 +00:00
7f1be0d933 systemctl: fix sandboxing 2025-01-21 05:51:42 +00:00
8fbf0e416b syshud: 0-unstable-2024-11-25 -> 0-unstable-2025-01-13 2025-01-21 05:51:41 +00:00
73c7dbb27a nixpkgs: 0-unstable-2025-01-19 -> 0-unstable-2025-01-20
this includes a kernel update from 6.12.x -> 6.13.0
2025-01-21 05:51:41 +00:00
ac9a44cb48 firefox-extensions.sponsorblock: 5.11.1 -> 5.11.2 2025-01-21 05:51:41 +00:00
ffaba82483 uassets: 0-unstable-2025-01-19 -> 0-unstable-2025-01-20 2025-01-21 05:51:41 +00:00
e43ad983cd nixpkgs: 0-unstable-2025-01-18 -> 0-unstable-2025-01-19
this includes a staging -> master merge, yay
2025-01-21 05:51:41 +00:00
e0447581d4 nixpkgs-wayland: 0-unstable-2025-01-04 -> 0-unstable-2025-01-19 2025-01-21 05:51:41 +00:00
4365babde2 uassets: 0-unstable-2025-01-18 -> 0-unstable-2025-01-19 2025-01-21 05:51:41 +00:00
ea9d42b778 snapper: enable for ALL hosts 2025-01-21 05:51:41 +00:00
ffd3ecd465 programs: ship snapper 2025-01-21 05:51:41 +00:00
2b34ef8ba4 desko: enable snapper 2025-01-21 05:51:41 +00:00
a46faff066 btrfs-progs: fix sandboxing for btrfs subvolume ops 2025-01-21 05:51:41 +00:00
68c9cf7189 desko: remove dead hickory-dns disable line 2025-01-21 05:51:41 +00:00
0738bc7395 feeds: subscribe to WHYcast 2025-01-19 01:41:58 +00:00
cb8b7676b6 erdtree: ship 2025-01-18 22:16:24 +00:00
fe28340922 bunpen: support --bunpen-autodetct existingDir 2025-01-18 22:16:17 +00:00
67e5a386a6 nixpkgs-bootstrap: 2025-01-17 -> 2025-01-18 2025-01-18 21:42:31 +00:00
8a79c0e995 firefox-extensions.sponsorblock: 5.11 -> 5.11.1 2025-01-18 21:33:54 +00:00
1ad46f7411 uassets: 2025-01-13 -> 2025-01-18 2025-01-18 21:33:40 +00:00
271ac808fa nixpkgs: 0-unstable-2025-01-14 -> 0-unstable-2025-01-17 2025-01-18 04:50:19 +00:00
1d8b45f37a reminders: init at 5.0.rc-unstable-2023-05-03
this is just translated from <https://github.com/NixOS/nixpkgs/pull/363748>
2025-01-17 08:48:56 +00:00
38a9c3baf4 todo.md: sync 2025-01-14 23:37:26 +00:00
9fccd2cf86 programs: gnome-frog: split into own file; hopefully fix dbus sandboxing 2025-01-14 23:31:41 +00:00
65633eea57 cross: upstream patches for nautilus, gnome-settings-daemon 2025-01-14 08:30:13 +00:00
3bd57f7370 overlays/cross: update upstreaming notes 2025-01-14 06:44:23 +00:00
9f49a12dac nixpkgs: 0-unstable-2025-01-13 -> 0-unstable-2025-01-14 2025-01-14 06:43:46 +00:00
df0ade9319 docs: dns/BIND: show how to invoke the service manually 2025-01-13 21:23:14 +00:00
5b358c8460 nixpkgs: 0-unstable-2025-01-12 -> 0-unstable-2025-01-13 2025-01-13 19:47:30 +00:00
9bb6866b85 sops-nix: assets-unstable-2025-01-05 -> assets-unstable-2025-01-10 2025-01-13 19:46:53 +00:00
8d30074c79 uassets: 0-unstable-2025-01-06 -> 0-unstable-2025-01-13 2025-01-13 19:46:41 +00:00
66bcd52341 firefox-extensions.sponsorblock: 5.10.5 -> 5.11 2025-01-13 11:23:37 +00:00
09fbe8f64e feeds: link to podcast charts 2025-01-13 09:09:55 +00:00
219b18d157 feeds: subscribe to Chapo Trap House (havent listened yet) 2025-01-13 08:43:22 +00:00
630278dedb feeds: subscribe to Advent of Computing (havent listened to it yet) 2025-01-13 08:28:02 +00:00
121e86e78b feeds: unsub from All-In
what a whiplash yeesh
2025-01-13 08:17:12 +00:00
3988191739 nixpkgs: 0-unstable-2025-01-11 -> 0-unstable-2025-01-12 2025-01-12 07:27:51 +00:00
ccca829c79 lpac: 2.2.0 -> 2.2.1 2025-01-12 00:45:04 +00:00
8e5dba2dc1 libdng: 0.2.1-unstable-2024-12-27 -> 0.2.1-unstable-2025-01-07 2025-01-11 23:15:16 +00:00
013ddec10c nixpkgs: 0-unstable-2025-01-10 -> 0-unstable-2025-01-11 2025-01-11 23:15:03 +00:00
6c55b4ae1c programs: fractal: add missing mesa cache dir 2025-01-11 21:30:41 +00:00
f014a9066e programs: dissent: add missing mesa cache dir 2025-01-11 21:30:23 +00:00
b228ea123d servo: clightning: rebalance channels in the background, always 2025-01-11 10:56:32 +00:00
cdbb128fbe nixpkgs patches: update; disable lua-language-server cross patch 2025-01-11 10:55:52 +00:00
162c3d16c6 clightning-sane: improve docs 2025-01-11 09:54:10 +00:00
de83d06f48 clightning-sane: show node aliases, not just pubkeys, on a best-effort 2025-01-11 09:30:18 +00:00
8d6b336100 clightning-sane: handle nodes w/o aliases 2025-01-11 07:23:27 +00:00
616e4c645d radicale: remove source override (upstream has released new version; no longer necessary to patch) 2025-01-11 00:45:27 +00:00
4f2c14f341 nixpkgs: 0-unstable-2025-01-05 -> 0-unstable-2025-01-10 2025-01-11 00:45:27 +00:00
b03b20f2f4 try (but fail) to enable dbus sandboxing for more apps: seems xdg-dbus-proxy doesnt nest! 2025-01-11 00:45:27 +00:00
5ea4e07847 programs: foliate: restrict dbus 2025-01-11 00:45:27 +00:00
06840bde34 programs: epiphany: restrict dbus 2025-01-11 00:45:27 +00:00
fe149e699e programs: portfolio: restrict dbus 2025-01-11 00:45:27 +00:00
b1690b5d8c programs: komikku: fix launch failure due to missing dbus access 2025-01-11 00:45:27 +00:00
91d56a8538 programs: feedbackd: restrict dbus 2025-01-11 00:45:27 +00:00
ec816311f9 programs: dino: restrict dbus 2025-01-11 00:45:27 +00:00
3fffc50975 modules/programs: allow access to the ProxyResolver portal 2025-01-11 00:45:27 +00:00
23513e34f2 programs: signal-desktop: restrict dbus 2025-01-11 00:45:27 +00:00
22a362ea4b programs: gnome-clocks: restrict dbus 2025-01-11 00:45:27 +00:00
d942498282 programs: gnome-contacts: restrict dbus 2025-01-11 00:45:27 +00:00
133f8703dc programs: firefox-xdg-open: restrict dbus 2025-01-11 00:45:27 +00:00
b40d2cc2a5 programs: discord: restrict dbus 2025-01-11 00:45:27 +00:00
95839bfad8 programs: dissent: restrict dbus 2025-01-11 00:45:27 +00:00
7ad1ca4e6b gnome-keyring: restrict dbus 2025-01-11 00:45:27 +00:00
07525a7000 gpodder: restrict dbus 2025-01-11 00:45:27 +00:00
35ce9a412d rofi-run-command: restrict dbus
can't restrict ALL of rofi, for some reason. maybe dbus proxies don't nest well?
2025-01-11 00:45:27 +00:00
14b475a0a6 sane-open: restrict dbus 2025-01-11 00:45:27 +00:00
a3ebeb0543 modules/programs: enable org.freedesktop.DBus.Introspectable.Introspect for portal users 2025-01-11 00:45:27 +00:00
7faa36b225 docs: matrix/irc: record some random .onion address i found for oftc 2025-01-11 00:45:27 +00:00
1721839c8d firefox: sandbox dbus
it's possible this breaks camera access; have not extensively tested
2025-01-11 00:45:27 +00:00
9b13717ecd tor-browser: sandbox dbus 2025-01-11 00:45:27 +00:00
5cae0edb12 mpv: sandbox dbus 2025-01-11 00:45:27 +00:00
4c56ea3e6b modules/programs: add more portal sandboxing options, and MPRIS option 2025-01-11 00:45:27 +00:00
091de5c788 refactor: fractal: sort sandboxing items 2025-01-11 00:45:27 +00:00
02669d3ef4 clightning-sane: dont crash when printing channels for which the scid hasnt been allocated yet 2025-01-09 04:23:37 +00:00
fa5fcaa2bf clightning-sane: default to "status" action when none specified 2025-01-09 04:04:51 +00:00
ff9b1538fe papers: disable sandboxing until i figure out why it cant open embedded media 2025-01-08 01:09:08 +00:00
de1acf946d uassets: 0-unstable-2025-01-05 -> 0-unstable-2025-01-06 2025-01-06 22:54:06 +00:00
65da9bd004 fractal: restrict dbus access a bit tighter 2025-01-06 11:25:35 +00:00
0915957337 bunpen: fix bracket mismatch 2025-01-06 10:02:21 +00:00
2a1d6fff08 programs: refactor whitelistDbus 2025-01-06 10:02:21 +00:00
365d9c2457 bunpen: dbus: replace "talk" with "call" specifier
the latter serves *mostly* as a more capable version of the former
2025-01-06 08:53:33 +00:00
5644dde395 bunpen: address a trivial todo 2025-01-06 03:11:16 +00:00
cce27f52fb bunpen: dbus: dont override stdin/stdout with dup2'd fds; just use normal dup instead
seems clearing non-0/1/2 fd's is a thing specific to pasta
2025-01-06 03:07:52 +00:00
d3a3231861 bunpen: pasta: fix to not keep the non-sandboxed file open after exec'ing into the user program 2025-01-06 03:00:35 +00:00
7f069b0f23 bunpen: tests: add a timeout for each integration test 2025-01-06 02:58:58 +00:00
57ef42991e bunpen: dbus: fix to not keep the non-sandboxed file open after exec'ing into the user program 2025-01-06 02:52:46 +00:00
db45fabb9c bunpen: dbus proxy: get it working even when --bunpen-keep-pid 2025-01-06 02:34:49 +00:00
8ac9ea4a91 bunpen: backfill tests that cover dbus proxying in a partial sandbox 2025-01-06 01:09:07 +00:00
94ffab5874 bunpen: dbus: backfill talk/own test cases 2025-01-06 00:42:30 +00:00
5814ae82fb nix-tree: ship it (for x86 only) 2025-01-05 22:34:19 +00:00
865b6a0679 nixpkgs-bootstrap.staging: 0-unstable-2025-01-03 -> 0-unstable-2025-01-05 2025-01-05 20:46:34 +00:00
513fe937ba nixpkgs-wayland: 0-unstable-2025-01-03 -> 0-unstable-2025-01-04 2025-01-05 20:46:05 +00:00
bac941d16a sops-nix: assets-unstable-2024-12-29 -> assets-unstable-2025-01-05 2025-01-05 20:45:52 +00:00
0df054fac4 uassets: 0-unstable-2025-01-03 -> 0-unstable-2025-01-05 2025-01-05 20:45:39 +00:00
52bc98741c moby: re-enable some packages which do cross-compile 2025-01-05 11:43:13 +00:00
9b9a1ba22a cross: enable lua-language-server, via upstream nixpkgs PR 2025-01-05 10:54:20 +00:00
f22ffd1fda WIP: nixpkgs: 0-unstable-2025-01-03 -> 0-unstable-2025-01-05 2025-01-05 10:42:02 +00:00
6878d3f65b bunpen: dbus: disable proxy if it would disrupt the main dbus daemon 2025-01-05 08:12:59 +00:00
93934eb609 bunpen: make pasta logging more verbose 2025-01-05 07:52:19 +00:00
884b99048f bunpen: xdg-dbus-proxy: place in its own user namespace separate from the user program 2025-01-05 07:51:50 +00:00
b4ff9eb4ae bunpen: refactor: dbus: use path::abs in place of strings::hasprefix 2025-01-05 06:39:06 +00:00
2f717dc770 bunpen: wait for xdg-dbus-proxy to be ready before continuing execution 2025-01-05 06:33:55 +00:00
35f24282c7 bunpen: dbus proxy: no longer crashes, but xdg-dbus-proxy dies still
error is 'No socket path given'
2025-01-04 02:25:55 +00:00
b005897d84 bunpen: backfill some integration tests for dbus operation inside the sandbox
the proxy appears not to work (yet)
2025-01-03 22:59:56 +00:00
4260909d2d todo.md: new item for alacritty failing to cd 2025-01-03 22:21:51 +00:00
22f3a19165 bunpen: finish wiring the xdg-dbus-proxy instance
this isn't tested, except to see that it doesn't interfere with the *existing* bunpen use
2025-01-03 11:55:46 +00:00
66103854fa bunpen: if --bunpen-dbus-* is specified, then include DBUS_SESSION_BUS_ADDRESS in the parent sandbox
this is just setup for what the dbus proxy will require in the near future
2025-01-03 10:51:34 +00:00
93f140e0e4 sway: document why i run the nixpkgs-wayland (unstable) version 2025-01-03 09:54:10 +00:00
51e5f13c06 nixpkgs-bootstrap: 0-unstable-2025-01-02 -> 0-unstable-2025-01-03 2025-01-03 09:41:54 +00:00
fd58ec6e24 nixpkgs-wayland: 0-unstable-2024-12-22 -> 0-unstable-2025-01-03 2025-01-03 09:41:41 +00:00
5ae42ce797 lpac: 2.1.0 -> 2.2.0 2025-01-03 09:41:25 +00:00
3842c4204b uassets: 0-unstable-2025-01-02 -> 0-unstable-2025-01-03 2025-01-03 09:41:15 +00:00
2b9700d2a6 bunpen: parse dbus config options
these aren't actually *consumed* yet, though
2025-01-03 05:19:33 +00:00
4f4538c44d bunpen: refactor: lift dbus_resources out of restrict/dbus_proxy -> resources 2025-01-03 05:11:11 +00:00
27365ff602 bunpen: dbus_proxy: implement restrict_dbus, totally untested function to shell out to xdg-dbus-proxy 2025-01-03 03:41:03 +00:00
f25eba7f37 bunpen: dbus_proxy: rename get_dbus_socket() -> get_dbus_session_path() 2025-01-03 03:19:01 +00:00
7c857f39e6 bunpen: dbus_proxy: define a function to parse the DBUS_SESSION_BUS_ADDRESS 2025-01-03 03:01:06 +00:00
0b9b9a8271 bunpen: dbus-proxy: document the --own flag 2025-01-03 02:37:49 +00:00
e803a5959f opencellid: 0-unstable-2024-12-17 -> 0-unstable-2025-01-02 2025-01-03 02:37:49 +00:00
10429055f9 firefox-extensions.ublock: 1.61.3b11 -> 1.62.0 2025-01-03 02:37:49 +00:00
77dde6057c uassets: 0-unstable-2024-12-31 -> 0-unstable-2025-01-02 2025-01-03 02:19:38 +00:00
92584b351b nixpkgs: 2025-01-01 -> 2025-01-02 2025-01-03 02:19:19 +00:00
713e7247b3 bunpen: add prototype xdg-dbus-proxy to git 2025-01-02 14:05:23 +00:00
ee57b94658 bunpen: pasta: better isolate
it still runs in the same user namespace as the main sandboxer.

it's technically possible to also unshare the user ns, but would appear to require an additional process
2025-01-02 11:49:02 +00:00
3fc6571294 programs: don't persist mesaCacheDir by default
and explicitly add it to every program that uses mesa.

wow, that's a *lot*
2025-01-02 05:36:19 +00:00
863468e402 programs: remove old fontconfig persistence/references 2025-01-02 03:09:17 +00:00
1c87ef5625 feeds: fix rephonic link 2025-01-02 02:28:05 +00:00
cfc2a2fc80 feeds: podcasts: add name comments where previously missing 2025-01-02 02:16:02 +00:00
3a09943a19 feeds: unsubscribe from Last Week in AI: each individual ep is not nearly info-dense enough 2025-01-02 02:12:59 +00:00
4cf3889d7a feeds: unsubscribe from Atlast Obscura; low signal/noise 2025-01-02 02:11:52 +00:00
63cc309cfd feeds: podcasts: subscribe to This Wont Last 2025-01-02 02:07:48 +00:00
a02be29c02 feeds: podcasts: subscribe to History 102 2025-01-02 02:06:32 +00:00
332c2b3493 feeds: podcasts: subscribe to Econ 102 w/ Noah Smith 2025-01-02 02:05:12 +00:00
737ac7329b feeds: subscribe to ChinaTalk podcast 2025-01-02 01:58:17 +00:00
54e6b62778 feeds: unsubscribe from Sustain OSS 2025-01-02 01:58:16 +00:00
002286e1ea feeds: subscribe to Ben+Marc podcast 2025-01-02 01:58:16 +00:00
5a487c18db xdg-terminal-exec: add a TODO for removing an override 2025-01-02 00:14:52 +00:00
0de134e208 nixpkgs: 0-unstable-2024-12-30 -> 0-unstable-2025-01-01 2025-01-02 00:14:39 +00:00
05a7bad26c uassets: 2024-12-21 -> 2024-12-30 2025-01-01 22:19:34 +00:00
c47f4179a0 python3-repl: enable numpy/scipy 2025-01-01 00:55:17 +00:00
6b0a78bee0 pipewire: remove upstreamed libcamera patch 2024-12-31 07:32:31 +00:00
7093385f98 programs: integrate nvimpager into man to make text reflow correctly
also get marginally better syntax highlighting! the cursor movements are a little strange, but overall net improvement
2024-12-30 20:25:45 +00:00
fee5c7042b firefox: add aur search shortcut 2024-12-30 17:42:21 +00:00
4d54877776 sops-nix: assets-unstable-2024-12-18 -> assets-unstable-2024-12-29 2024-12-30 17:09:09 +00:00
fdf038bf90 uassets: 0-unstable-2024-12-24 -> 0-unstable-2024-12-30 2024-12-30 17:09:09 +00:00
3ed002ea88 programs: less: enable color highlighting 2024-12-30 17:09:09 +00:00
0a9e5b9f68 bunpen: pasta: share /proc/self/ns/net with pasta in a way that will be friendlier to sandboxing 2024-12-30 16:58:26 +00:00
2d989327f7 todo.md: sync 2024-12-30 16:40:33 +00:00
ce447cf674 gpodder-adaptive: 3.11.4+1 -> 3.11.5+1 2024-12-30 14:35:13 +00:00
2b1637652a megapixels-next: 2.0.0-alpha1-unstable-2024-12-24 -> 2.0.0-alpha1-unstable-2024-12-27 2024-12-30 14:35:13 +00:00
64b7a75664 rofi-snippets: remove dependency on non-wayland rofi 2024-12-30 14:35:13 +00:00
d18cd69536 nixpkgs-bootstrap: 0-unstable-2024-12-29 -> 0-unstable-2024-12-30 2024-12-30 14:35:13 +00:00
da27a0e857 bunpen: pasta: fix to send the full 4bytes of the netns fd across the pipe 2024-12-30 13:46:40 +00:00
93782cd71c bunpen: pasta: share the netns via fd instead of path
this *should* allow for operation even when the sandboxed program wants access to all of / and we therefore can't make files like /bunpen-private/netns

however it may complicate future sandboxing efforts, as it requiires the child to read fd's from the parent
2024-12-30 13:35:31 +00:00
42ac5353f1 bunpen: use /proc/self/fd in place of /dev/fd
/dev/fd just symlinks to /proc/self/fd, hence using /proc/self requires strictly fewer resources (e.g., it's safe to unmount /dev now)
2024-12-30 09:22:25 +00:00
5c0418ac6a sane-vpn: find vpn configs, even when running under sudo 2024-12-30 08:18:58 +00:00
fc8a6a2144 BIND: disable IPv6
this makes it work (more reliably, at least) inside sane-vpn
2024-12-30 08:17:07 +00:00
acd20e23d9 common: net: switch DNS resolver from unbound to BIND 2024-12-30 07:29:01 +00:00
639 changed files with 13836 additions and 8283 deletions

3
.gitignore vendored
View File

@@ -1,4 +1,5 @@
.working
/build
/.working
result
result-*
/secrets/local.nix

View File

@@ -1,10 +1,12 @@
keys:
- &user_desko_colin age1tnl4jfgacwkargzeqnhzernw29xx8mkv73xh6ufdyde6q7859slsnzf24x
- &user_flowy_colin age1nw3z25gn6l8gxneqw43tp8d2354c83d9sn3r0dqy5tapakdwhyvse0j2cc
- &user_lappy_colin age1j2pqnl8j0krdzk6npe93s4nnqrzwx978qrc0u570gzlamqpnje9sc8le2g
- &user_servo_colin age1z8fauff34cdecr6sjkre260luzxcca05kpcwvhx988d306tpcejsp63znu
- &user_moby_colin age1zsrsvd7j6l62fjxpfd2qnhqlk8wk4p8r0dtxpe4sdgnh2474095qdu7xj9
- &host_crappy age1hl50ufuxnqy0jnk8fqeu4tclh4vte2xn2d59pxff0gun20vsmv5sp78chj
- &host_desko age1vnw7lnfpdpjn62l3u5nyv5xt2c965k96p98kc43mcnyzpetrts9q54mc9v
- &host_flowy age1azm6carlm6tdjup37u5dr40585vjujajev70u4glwd9sv7swa99sk6mswx
- &host_lappy age1w7mectcjku6x3sd8plm8wkn2qfrhv9n6zhzlf329e2r2uycgke8qkf9dyn
- &host_servo age1tzlyex2z6t88tg9h82943e39shxhmqeyr7ywhlwpdjmyqsndv3qq27x0rf
- &host_moby age18vq5ktwgeaysucvw9t67drqmg5zd5c5k3le34yqxckkfj7wqdqgsd4ejmt
@@ -13,11 +15,13 @@ creation_rules:
key_groups:
- age:
- *user_desko_colin
- *user_flowy_colin
- *user_lappy_colin
- *user_servo_colin
- *user_moby_colin
- *host_crappy
- *host_desko
- *host_flowy
- *host_lappy
- *host_servo
- *host_moby
@@ -25,6 +29,7 @@ creation_rules:
key_groups:
- age:
- *user_desko_colin
- *user_flowy_colin
- *user_lappy_colin
- *user_servo_colin
- *host_servo
@@ -32,18 +37,28 @@ creation_rules:
key_groups:
- age:
- *user_desko_colin
- *user_flowy_colin
- *user_lappy_colin
- *host_desko
- path_regex: secrets/flowy*
key_groups:
- age:
- *user_lappy_colin
- *user_flowy_colin
- *user_desko_colin
- *host_flowy
- path_regex: secrets/lappy*
key_groups:
- age:
- *user_lappy_colin
- *user_flowy_colin
- *user_desko_colin
- *host_lappy
- path_regex: secrets/moby*
key_groups:
- age:
- *user_desko_colin
- *user_flowy_colin
- *user_lappy_colin
- *user_moby_colin
- *host_moby

48
TODO.md
View File

@@ -1,5 +1,6 @@
## BUGS
- gnome-calls eats 100% CPU and never renders UI (moby AND lappy, at least)
- alacritty Ctrl+N frequently fails to `cd` to the previous directory
- bunpen dbus sandboxing can't be *nested* (likely a problem in xdg-dbus-proxy)
- dissent has a memory leak (3G+ after 24hr)
- set a max memory use in the systemd service, to force it to restart as it leaks?
- `rmDbusServices` may break sandboxing
@@ -8,7 +9,7 @@
- mpv: audiocast has mpv sending its output to the builtin speakers unless manually changed
- syshud (volume overlay): when casting with `blast`, syshud doesn't react to volume changes
- dissent: if i launch it without net connectivity, it gets stuck at the login, and never tries again
- newflash on moby can't play videos
- newsflash on moby can't play videos
- "open in browser" works though -- in mpv
- gnome-maps can't use geoclue *and* openstreetmap at the same time
- get gnome-maps to speak xdg-desktop-portal, and this will be fixed
@@ -19,6 +20,12 @@
- rsync to ssh target fails because of restrictive sandboxing
- `/mnt/.servo_ftp` retries every 10s, endlessly, rather than doing a linear backoff
- repro by `systemctl stop sftpgo` on servo, then watching `mnt-.servo_ftp.{mount,timer}` on desko
- `ovpns` (and presumably `doof`) net namespaces aren't firewalled
- not great because things like `bitmagnet` expose unprotected admin APIs by default!
- moby: NetworkManager doesn't connect to network until _after_ `systemctl restart NetworkManager`
- probably a dependency ordering issue
- e.g. we try to bring up NetworkManager before bringing up `lo`
- could be a perms issue (over-restrictive sandboxing)
## REFACTORING:
- fold hosts/modules/ into toplevel modules/
@@ -27,6 +34,10 @@
- ~/dev becomes a link to ~/ref/cat/mine
- fold hosts/common/home/ssh.nix -> hosts/common/users/colin.nix
- don't hardcode IP addresses so much in servo
- modules/netns: migrate `sane.netns.$NS.services = [ FOO ]` option to be `systemd.services.$FOO.sane.netns = NS`
- then change the ExecStartPre check to not ping `ipinfo.net` or whatever.
either port all of `sane-ip-check` to use a self-hosted reflector,
or settle for something like `test -eq "$(ip route get ...)" "$expectedGateway"`
### sops/secrets
- user secrets could just use `gocryptfs`, like with ~/private?
@@ -36,27 +47,20 @@
- upstream blueprint-compiler cross fixes -> nixpkgs
- upstream cargo cross fixes -> nixpkgs
- upstream `gps-share` package -> nixpkgs
- upstream PinePhonePro device trees -> linux
#### upstreaming to non-nixpkgs repos
- gnome-calls: retry net connection when DNS is down
- gtk: build schemas even on cross compilation: <https://github.com/NixOS/nixpkgs/pull/247844>
- gnome-calls retry net connection when DNS is down
- linux: upstream PinePhonePro device trees
- nwg-panel: configurable media controls
- nwg-panel / playerctl hang fix (i think nwg-panel is what should be patched here)
## IMPROVEMENTS:
- lack of a mesa shader cache for sandboxed programs DESTROYS PERF
- adding ~/.cache/mesa_shader_cache_db to the sandbox massively improves launch time,
probably reduces memory use,
but has unknown data leak implications.
- either (1) pre-populate the shader cache somehow, e.g. <https://gitlab.freedesktop.org/mesa/shader-db>
or (2) use a seperate shader cache per-app
or (3) disable the mesa cache and see if that actually helps (MESA_SHADER_CACHE_DISABLE=true)
- tmpfs usage inside bunpen apps is not introspectable/debuggable
- app sandboxes could be rooted in, say, `/run/bunpen/$PID`
- for a nested sandbox, its vfs could be queried from the root ns at `/run/bunpen/$PID1/run/bunpen/$PID2`
- servo: expand /boot to 2 GiB like all other hosts
- moby: port to systemd-boot
- sane-deadlines: show day of the week for upcoming items
- and only show on "first" terminal opened; not on Ctrl+N terminals
- curlftpfs: replace with something better
- safer (rust? actively maintained? sandboxable?)
- handles spaces/symbols in filenames
@@ -73,7 +77,6 @@
- likely requires updating envelope to a more recent version (for multi-accounting), and therefore updating libadwaita...
### security/resilience
- enable `snapper` btrfs snapshots (`services.snapper`)
- /mnt/desko/home, etc, shouldn't include secrets (~/private)
- 95% of its use is for remote media access and stuff which isn't in VCS (~/records)
- harden systemd services:
@@ -89,12 +92,7 @@
- port all sane.programs to be sandboxed
- sandbox `nix`
- enforce that all `environment.packages` has a sandbox profile (or explicitly opts out)
- lock down dbus calls within the sandbox
- <https://github.com/flatpak/xdg-dbus-proxy>
- stuff on dbus presents too much surface area
- ~~for example anyone can `systemd-run --user ...` to potentially escape a sandbox~~
- for example, xdg-desktop-portal allows anyone to make arbitrary DNS requests
- e.g. `gdbus call --session --timeout 10 --dest org.freedesktop.portal.Desktop --object-path /org/freedesktop/portal/desktop --method org.freedesktop.portal.NetworkMonitor.CanReach 'data1.exfiltrate.uninsane.org' 80`
- enforce granular dbus sandboxing (bunpen-dbus-*)
- make gnome-keyring-daemon less monolithic
- no reason every application with _a_ secret needs to see _all_ secrets
- check out oo7-daemon?
@@ -102,6 +100,7 @@
- make dconf stuff less monolithic
- i.e. per-app dconf profiles for those which need it. possible static config.
- flatpak/spectrum has some stuff to proxy dconf per-app
- rework `programs` API to be just an overlay which wraps each binary in an env with XDG_DATA_DIRS etc set & the config/state links placed in /nix/store instead of $HOME.
### user experience
- setup a real calendar system, for recurring events
@@ -120,7 +119,6 @@
- offline Wikipedia (or, add to `wike`)
- some type of games manager/launcher
- Gnome Highscore (retro games)?: <https://gitlab.gnome.org/World/highscore>
- better maps for mobile (Osmin (QtQuick)? Pure Maps (Qt/Kirigami)?)
- note-taking app: <https://linuxphoneapps.org/categories/note-taking/>
- Folio is nice, uses standard markdown, though it only supports flat repos
- OSK overlay specifically for mobile gaming
@@ -136,6 +134,8 @@
- blurble (https://linuxphoneapps.org/games/app.drey.blurble/). nix: not as of 2024-02-05
- Trivia Quiz (https://linuxphoneapps.org/games/io.github.nokse22.trivia-quiz/)
- sane-sync-music: remove empty dirs
- soulseek: install a CLI app usable over ssh
- moby: replace `spot` with its replacement, `riff` (<https://github.com/Diegovsky/riff>)
#### moby
- moby: port battery support to something upstreamable
@@ -152,6 +152,7 @@
- SwayNC/nwg-panel: add option to change audio output
- Newsflash: sync OPML on start, same way i do with gpodder
- better podcasting client?
- hardware upgrade (OnePlus)?
#### non-moby
- RSS: integrate a paywall bypass
@@ -160,13 +161,14 @@
- and strip the ads out using Whisper transcription + asking a LLM where the ad breaks are
- neovim: integrate ollama
- neovim: better docsets (e.g. c++, glib)
- firefox/librewolf: persist history
- firefox: persist history
- just not cookies or tabs
- have xdg-open parse `<repo:...> URIs (or adjust them so that it _can_ parse)
- sane-bt-search: show details like 5.1 vs stereo, h264 vs h265
- maybe just color these "keywords" in all search results?
- transmission: apply `sane-tag-media` path fix in `torrent-done` script
- many .mkv files do appear to be tagged: i'd just need to add support in my own tooling
- more aggressively cleanup non-media files after DL (ripper logos, info txts)
- uninsane.org: make URLs relative to allow local use (and as offline homepage)
- email: fix so that local mail doesn't go to junk
- git sendmail flow adds the DKIM signatures, but gets delivered locally w/o having the sig checked, so goes into Junk

View File

@@ -1,7 +1,10 @@
to add a host:
- create the new nix targets
- hosts/by-name/HOST
- let the toplevel (flake.nix) know about HOST
- let the toplevel (impure.nix) know about HOST
- let the other hosts know about this host (hosts/common/hosts.nix)
- let sops know about the host's pubkey (.sops.yaml)
- re-encrypt all sops keys in secrets/common
- build and flash an image
- optionally expand the rootfs
- `cfdisk /dev/sda2` -> resize partition
@@ -22,4 +25,9 @@ to add a host:
- instructions in hosts/common/secrets.nix
- run `ssh-to-age` on user/host pubkeys
- add age key to .sops.yaml
- update encrypted secrets: `sops updatekeys path/to/secret.yaml`
- update encrypted secrets: `find secrets -type f -exec sops updatekeys -y '{}' ';'`
- setup wireguard keys
- `pk=$(wg genkey)`
- `echo "$pk" | sops encrypt --filename-override secrets/$(hostname)/wg-home.priv.bin --output secrets/$(hostname)/wg-home.priv.bin`
- `pub=$(echo "$pk" | wg pubkey)`
- add pubkey to hosts/common/hosts.nix

View File

@@ -0,0 +1,49 @@
## migrating a host to a new drive
### 1. copy persistent data off of the host:
```sh
$ mkdir -p mnt old/persist
$ mount /dev/$old mnt
$ rsync -arv mnt/persist/ old/persist/
```
### 2. flash the new drive
```
$ nix-build -A hosts.moby.img
$ dd if=$(readlink ./result) of=/dev/$new bs=4M oflag=direct conv=sync status=progress
```
### 3.1. expand the partition
```sh
$ cfdisk /dev/$new
# scroll to the last partition
> Resize
leave at default (max)
> Write
type "yes"
> Quit
```
### 3.2. expand the filesystem
```
$ mkdir -p /mnt/$new
$ mount /dev/$new /mnt/$new
$ btrfs filesystem resize max /mnt/$new
```
### 4. copy data onto the new host
```
$ mkdir /mnt/$new
$ mount /dev/$new /mnt/$new
# if you want to use btrfs snapshots (e.g. snapper), then create the data directory as a subvolume:
$ btrfs subvolume create /mnt/$new/persist
# restore the data
$ rsync -arv old/persist/ /mnt/$new/persist/
```
### 5. ensure/fix ownership
```
$ chmod -R a+rX /mnt/$new/nix
# or, let the nix daemon do it:
$ nix copy --no-check-sigs --to /mnt/$new $(nix-build -A hosts.moby)
```
### 6. insert the disk into the system, and boot!

View File

@@ -1,5 +1,5 @@
## deploying to SD card
- build a toplevel config: `nix build '.#hostSystems.moby'`
- build a toplevel config: `nix build '.#hosts.moby.img'`
- mount a system:
- `mkdir -p root/{nix,boot}`
- `mount /dev/sdX1 root/boot`

View File

@@ -0,0 +1,19 @@
# MAME arcade cabinet
# Raspberry Pi 400:
# - quad-core Cortex-A72 @ 1.8 GHz (ARMv8-A 64; BCM2711)
# - 4GiB RAM
{ ... }:
{
imports = [
./fs.nix
];
sane.hal.rpi-400.enable = true;
sane.roles.client = true; # for WiFi creds
# TODO: port to `sane.programs` interface
services.xserver.desktopManager.kodi.enable = true;
# /boot space is at a premium, especially with uncompressed kernels. default was 20.
# boot.loader.generic-extlinux-compatible.configurationLimit = 10;
}

View File

@@ -0,0 +1,17 @@
{ ... }:
{
fileSystems."/nix" = {
device = "/dev/disk/by-uuid/cccccccc-aaaa-dddd-eeee-000020250621";
fsType = "btrfs";
options = [
"compress=zstd"
"defaults"
];
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/2025-0621";
fsType = "vfat";
};
}

View File

@@ -1,10 +1,13 @@
{ config, pkgs, ... }:
{ config, lib, ... }:
{
imports = [
./fs.nix
];
sane.services.hickory-dns.asSystemResolver = false; # TEMPORARY: TODO: re-enable hickory-dns
# firewall has to be open to allow clients to use services hosted on this device,
# like `ollama`
sane.ports.openFirewall = true;
# sane.programs.devPkgs.enableFor.user.colin = true;
# sane.guest.enable = true;
@@ -23,9 +26,9 @@
sane.roles.build-machine.enable = true;
sane.roles.client = true;
sane.roles.pc = true;
sane.services.ollama.enable = true;
sane.roles.work = true;
sane.services.ollama.enable = lib.mkIf (config.sane.maxBuildCost >= 3) true;
sane.services.wg-home.enable = true;
sane.services.wg-home.ip = config.sane.hosts.by-name."desko".wg-home.ip;
sane.ovpn.addrV4 = "172.26.55.21";
# sane.ovpn.addrV6 = "fd00:0000:1337:cafe:1111:1111:20c1:a73c";
sane.services.rsync-net.enable = true;
@@ -47,25 +50,8 @@
sane.programs.mpv.config.defaultProfile = "high-quality";
sane.image.extraBootFiles = [ pkgs.bootpart-uefi-x86_64 ];
# needed to use libimobiledevice/ifuse, for iphone sync
services.usbmuxd.enable = true;
hardware.amdgpu.opencl.enable = true; # desktop (AMD's opencl implementation AKA "ROCM"); probably required for ollama
# TODO: enable snapper (need to make `/nix` or `/nix/persist` a subvolume, somehow).
# default config: https://man.archlinux.org/man/snapper-configs.5
# defaults to something like:
# - hourly snapshots
# - auto cleanup; keep the last 10 hourlies, last 10 daylies, last 10 monthlys.
# to list snapshots: `sudo snapper --config nix list`
# to take a snapshot: `sudo snapper --config nix create`
# services.snapper.configs.nix = {
# # TODO: for the impermanent setup, we'd prefer to just do /nix/persist,
# # but that also requires setting up the persist dir as a subvol
# SUBVOLUME = "/nix";
# # TODO: ALLOW_USERS doesn't seem to work. still need `sudo snapper -c nix list`
# ALLOW_USERS = [ "colin" ];
# };
}

View File

@@ -6,7 +6,7 @@
fileSystems."/tmp".options = [ "size=128G" ];
fileSystems."/nix" = {
device = "/dev/disk/by-uuid/845d85bf-761d-431b-a406-e6f20909154f";
device = "/dev/disk/by-uuid/dddddddd-eeee-5555-cccc-000020250527";
fsType = "btrfs";
options = [
"compress=zstd"
@@ -15,7 +15,7 @@
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/5049-9AFD";
device = "/dev/disk/by-uuid/2025-0527";
fsType = "vfat";
};
}

View File

@@ -0,0 +1,58 @@
{ lib, pkgs, ... }:
{
imports = [
./fs.nix
];
sane.roles.client = true;
sane.roles.pc = true;
sane.roles.work = true;
sane.services.wg-home.enable = true;
# sane.ovpn.addrV4 = "172.23.119.72";
# sane.guest.enable = true;
sane.programs.sane-private-unlock-remote.enableFor.user.colin = true;
sane.programs.sane-private-unlock-remote.config.hosts = [ "servo" ];
sane.programs.firefox.config.formFactor = "laptop";
sane.programs.itgmania.enableFor.user.colin = true;
sane.programs.sway.enableFor.user.colin = true;
sops.secrets.colin-passwd.neededForUsers = true;
sane.services.rsync-net.enable = true;
# add an entry to boot into Windows, as if it had been launched directly from the BIOS.
boot.loader.systemd-boot.rebootForBitlocker = true;
boot.loader.systemd-boot.windows.primary.efiDeviceHandle = "HD0b";
system.activationScripts.makeDefaultBootEntry = {
text = let
makeDefaultBootEntry = pkgs.writeShellApplication {
name = "makeDefaultBootEntry";
runtimeInputs = with pkgs; [
efibootmgr
gnugrep
];
text = ''
# configure the EFI firmware to boot into NixOS by default.
# do this by querying the active boot entry, and just making that be the default.
# this is needed on flowy because enabling secure boot / booting into Windows
# resets the default boot order; manually reconfiguring that is tiresome.
efi=$(efibootmgr)
bootCurrent=$(echo "$efi" | grep '^BootCurrent: ')
bootCurrent=''${bootCurrent/BootCurrent: /}
bootOrder=$(echo "$efi" | grep '^BootOrder: ')
bootOrder=''${bootOrder/BootOrder: /}
if ! [[ "$bootOrder" =~ ^"$bootCurrent", ]]; then
# booted entry was not the default,
# so prepend it to the boot order:
newBootOrder="$bootCurrent,$bootOrder"
(set -x; efibootmgr -o "$newBootOrder")
fi
'';
};
in lib.getExe makeDefaultBootEntry;
};
}

View File

@@ -0,0 +1,17 @@
{ ... }:
{
fileSystems."/nix" = {
device = "/dev/disk/by-uuid/ffffffff-1111-0000-eeee-000020250531";
fsType = "btrfs";
options = [
"compress=zstd"
"defaults"
];
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/2025-0531";
fsType = "vfat";
};
}

View File

@@ -1,4 +1,4 @@
{ config, pkgs, ... }:
{ lib, ... }:
{
imports = [
./fs.nix
@@ -7,12 +7,10 @@
sane.roles.client = true;
sane.roles.pc = true;
sane.services.wg-home.enable = true;
sane.services.wg-home.ip = config.sane.hosts.by-name."lappy".wg-home.ip;
sane.ovpn.addrV4 = "172.23.119.72";
# sane.ovpn.addrV6 = "fd00:0000:1337:cafe:1111:1111:0332:aa96/128";
# sane.guest.enable = true;
sane.image.extraBootFiles = [ pkgs.bootpart-uefi-x86_64 ];
sane.programs.sane-private-unlock-remote.enableFor.user.colin = true;
sane.programs.sane-private-unlock-remote.config.hosts = [ "servo" ];
@@ -30,18 +28,10 @@
# 1024 solves *most* crackles, but still noticable under heavier loads.
sane.programs.pipewire.config.min-quantum = 2048;
# TODO: enable snapper (need to make `/nix` or `/nix/persist` a subvolume, somehow).
# default config: https://man.archlinux.org/man/snapper-configs.5
# defaults to something like:
# - hourly snapshots
# - auto cleanup; keep the last 10 hourlies, last 10 daylies, last 10 monthlys.
# to list snapshots: `sudo snapper --config nix list`
# to take a snapshot: `sudo snapper --config nix create`
# services.snapper.configs.nix = {
# # TODO: for the impermanent setup, we'd prefer to just do /nix/persist,
# # but that also requires setting up the persist dir as a subvol
# SUBVOLUME = "/nix";
# # TODO: ALLOW_USERS doesn't seem to work. still need `sudo snapper -c nix list`
# ALLOW_USERS = [ "colin" ];
# };
# limit how many snapshots we keep, due to extremely limited disk space (TODO: remove this override after upgrading lappy hard drive)
services.snapper.configs.root.TIMELINE_LIMIT_HOURLY = lib.mkForce 2;
services.snapper.configs.root.TIMELINE_LIMIT_DAILY = lib.mkForce 2;
services.snapper.configs.root.TIMELINE_LIMIT_WEEKLY = lib.mkForce 0;
services.snapper.configs.root.TIMELINE_LIMIT_MONTHLY = lib.mkForce 0;
services.snapper.configs.root.TIMELINE_LIMIT_YEARLY = lib.mkForce 0;
}

View File

@@ -6,7 +6,7 @@
# - Mobian wiki: <https://wiki.mobian-project.org/doku.php?id=start>
# - recommended apps, chatrooms
{ config, ... }:
{ ... }:
{
imports = [
./fs.nix
@@ -16,7 +16,6 @@
sane.roles.client = true;
sane.roles.handheld = true;
sane.services.wg-home.enable = true;
sane.services.wg-home.ip = config.sane.hosts.by-name."moby".wg-home.ip;
sane.ovpn.addrV4 = "172.24.87.255";
# sane.ovpn.addrV6 = "fd00:0000:1337:cafe:1111:1111:18cd:a72b";
@@ -60,5 +59,9 @@
sane.programs.mpv.config.defaultProfile = "fast";
# /boot space is at a premium, especially with uncompressed kernels. default was 20.
boot.loader.generic-extlinux-compatible.configurationLimit = 10;
# boot.loader.generic-extlinux-compatible.configurationLimit = 10;
# TODO: switch to systemd-boot
boot.loader.generic-extlinux-compatible.enable = true;
boot.loader.systemd-boot.enable = false;
}

View File

@@ -1,10 +1,9 @@
{ pkgs, ... }:
{ ... }:
{
imports = [
./fs.nix
];
sane.image.extraBootFiles = [ pkgs.bootpart-uefi-x86_64 ];
sane.persist.enable = false; # what we mean here is that the image is immutable; `/` is still tmpfs.
sane.nixcache.enable = false; # don't want to be calling out to dead machines that we're *trying* to rescue

View File

@@ -1,10 +1,11 @@
{ config, pkgs, ... }:
{ ... }:
{
imports = [
./fs.nix
./net
./services
./users
];
# for administering services
@@ -30,8 +31,6 @@
# XXX(2024-07-27): this is incompatible if using s6, which needs to auto-login as `colin` to start its user services.
services.getty.autologinUser = "root";
sane.image.extraBootFiles = [ pkgs.bootpart-uefi-x86_64 ];
# both transmission and ipfs try to set different net defaults.
# we just use the most aggressive of the two here:
boot.kernel.sysctl = {

View File

@@ -16,7 +16,7 @@
fileSystems."/tmp".options = [ "size=32G" ];
fileSystems."/nix" = {
device = "/dev/disk/by-uuid/cc81cca0-3cc7-4d82-a00c-6243af3e7776";
device = "/dev/disk/by-uuid/55555555-eeee-ffff-bbbb-000020250820";
fsType = "btrfs";
options = [
"compress=zstd"
@@ -25,7 +25,7 @@
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/6EE3-4171";
device = "/dev/disk/by-uuid/2025-0820";
fsType = "vfat";
};
@@ -41,10 +41,12 @@
# i don't know what guarantees NixOS/systemd make about that, so specifying all devices for now
# "device=/dev/disk/by-partuuid/14a7d00a-be53-2b4e-96f9-7e2c964674ec" #< removed 2024-11-24 (for capacity upgrade)
"device=/dev/disk/by-partuuid/409a147e-2282-49eb-87a7-c968032ede88" #< added 2024-11-24
"device=/dev/disk/by-partuuid/6b86cc10-c3cc-ec4d-b20d-b6688f0959a6"
# "device=/dev/disk/by-partuuid/6b86cc10-c3cc-ec4d-b20d-b6688f0959a6" #< removed 2025-06-04 (early drive failure; capacity upgrade)
# "device=/dev/disk/by-partuuid/7fd85cac-b6f3-8248-af4e-68e703d11020" #< removed 2024-11-13 (early drive failure)
"device=/dev/disk/by-partuuid/92ebbbfb-022f-427d-84d5-39349d4bc02a" #< added 2025-05-14
"device=/dev/disk/by-partuuid/9e6c06b0-4a39-4d69-813f-1f5992f62ed7" #< added 2025-06-05
"device=/dev/disk/by-partuuid/d9ad5ebc-0fc4-4d89-9fd0-619ce5210f1b" #< added 2024-11-13
"device=/dev/disk/by-partuuid/ef0e5c7b-fccf-f444-bac4-534424326159"
# "device=/dev/disk/by-partuuid/ef0e5c7b-fccf-f444-bac4-534424326159" #< removed 2025-05-14 (early drive failure)
"nofail"
# "x-systemd.before=local-fs.target"
"x-systemd.device-bound=false" #< don't unmount when `device` disappears (i thought this was necessary, for drive replacement, but it might not be)
@@ -67,8 +69,9 @@
mode = "0775";
}];
sane.fs."/var/media/archive".dir = {};
sane.fs."/var/media/archive/temp".dir = {};
# this is file.text instead of symlink.text so that it may be read over a remote mount (where consumers might not have any /nix/store/.../README.md path)
sane.fs."/var/media/archive/README.md".file.text = ''
sane.fs."/var/media/archive/temp/README.md".file.text = ''
this directory is for media i wish to remove from my library,
but keep for a short time in case i reverse my decision.
treat it like a system trash can.

View File

@@ -1,6 +1,6 @@
{ config, ... }:
{
sane.ovpn.addrV4 = "172.23.174.114";
sane.ovpn.addrV4 = "172.23.174.114"; #< this applies to the dynamic VPNs -- NOT the static VPN
# sane.ovpn.addrV6 = "fd00:0000:1337:cafe:1111:1111:8df3:14b0";
# OVPN CONFIG (https://www.ovpn.com):
@@ -12,9 +12,9 @@
dns.ipv4 = "46.227.67.134"; #< DNS requests inside the namespace are forwarded here
# wg.port = 51822;
wg.privateKeyFile = config.sops.secrets.wg_ovpns_privkey.path;
wg.address.ipv4 = "185.157.162.178";
wg.peer.publicKey = "SkkEZDCBde22KTs/Hc7FWvDBfdOCQA4YtBEuC3n5KGs=";
wg.peer.endpoint = "vpn36.prd.amsterdam.ovpn.com:9930";
# wg.peer.endpoint = "185.157.162.10:9930";
wg.address.ipv4 = "146.70.100.165"; #< IP address for my end of the VPN tunnel. for OVPN public IPv4, this is also the public IP address.
wg.peer.publicKey = "xc9p/lf2uLg6IGDh54E0Pbc6WI/J9caaByhwD4Uiu0Q="; #< pubkey by which i can authenticate OVPN, varies per OVPN endpoint
wg.peer.endpoint = "vpn31.prd.losangeles.ovpn.com:9930";
# wg.peer.endpoint = "45.83.89.131:9930";
};
}

View File

@@ -4,7 +4,6 @@
sane.services.wg-home.visibleToWan = true;
sane.services.wg-home.forwardToWan = true;
sane.services.wg-home.routeThroughServo = false;
sane.services.wg-home.ip = config.sane.hosts.by-name."servo".wg-home.ip;
services.unbound.settings.server.interface = [
# provide DNS to my wireguard clients
config.sane.hosts.by-name."servo".wg-home.ip

View File

@@ -0,0 +1,70 @@
# bitmagnet is a DHT crawler. it discovers publicly reachable torrents and indexes:
# - torrent's magnet URI
# - torrent's name
# - torrent's file list (the first 100 files, per torrent), including size and "type" (e.g. video)
# - seeder/leecher counts
# - torrent's size
# it provides a web UI to query these, especially a search form.
# data is stored in postgresql as `bitmagnet` db (`sudo -u bitmagnet psql`)
# after 30 days of operation:
# - 12m torrents discovered
# - 77GB database size => 6500B per torrent
{ config, ... }:
{
services.bitmagnet.enable = true;
sane.netns.ovpns.services = [ "bitmagnet" ];
sane.ports.ports."3334" = {
protocol = [ "tcp" "udp" ];
# visibleTo.ovpns = true; #< not needed: it runs in the ovpns namespace
description = "colin-bitmagnet";
};
services.bitmagnet.settings = {
# dht_crawler.scaling_factor: how rapidly to crawl the DHT.
# influences number of worker threads, buffer sizes, etc.
# default: 10.
# docs claim "diminishing returns" above 10, but seems weakly confident about that.
dht_crawler.scaling_factor = 64;
# http_server.local_address: `$addr:$port` to `listen` to.
# default is `:3333`, which listens on _all_ interfaces.
# the http server exposes unprotected admin endpoints though, so restrict to private interfaces:
http_server.local_address = "${config.sane.netns.ovpns.veth.netns.ipv4}:3333";
# tmdb.enabled: whether to query The Movie DataBase to resolve filename -> movie title.
# default: true.
# docs claim 1 query per second rate limit, unless you supply your own API key.
tmdb.enabled = false;
};
# bitmagnet web client
# protected by passwd because it exposes some mutation operations:
# - queuing "jobs"
# - deleting torrent infos (in bulk)
# it uses graphql for _everything_, so no easy way to disable just the mutations (and remove the password) AFAICT.
services.nginx.virtualHosts."bitmagnet.uninsane.org" = {
# basicAuth is cleartext user/pw, so FORCE this to happen over SSL
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://${config.sane.netns.ovpns.veth.netns.ipv4}:3333";
recommendedProxySettings = true;
};
basicAuthFile = config.sops.secrets.bitmagnet_passwd.path;
};
sops.secrets."bitmagnet_passwd" = {
owner = config.users.users.nginx.name;
mode = "0400";
};
sane.dns.zones."uninsane.org".inet.CNAME."bitmagnet" = "native";
systemd.services.bitmagnet = {
# hardening (systemd-analyze security bitmagnet). base nixos service is already partially hardened.
serviceConfig.CapabilityBoundingSet = "";
serviceConfig.SystemCallArchitectures = "native";
serviceConfig.PrivateDevices = true;
serviceConfig.PrivateUsers = true;
serviceConfig.ProtectProc = "invisible";
serviceConfig.ProcSubset = "pid";
serviceConfig.SystemCallFilter = [ "@system-service" "~@privileged" "~@resources" ];
};
}

View File

@@ -1,4 +1,5 @@
# as of 2023/12/02: complete blockchain is 530 GiB (on-disk size may be larger)
# as of 2025/08/06: on-disk blockchain as reported by `du` is 732 GiB
#
# ports:
# - 8333: for node-to-node communications
@@ -72,13 +73,18 @@ in
proxy=127.0.0.1:9050
'';
extraCmdlineOptions = [
# `man bitcoind` for options
# "-assumevalid=0" # to perform script validation on all blocks, instead of just the latest checkpoint published by bitcoin-core
# "-debug"
# "-debug=estimatefee"
# "-debug=leveldb"
# "-debug=http"
# "-debug=net"
"-debug=proxy"
"-debug=rpc"
# "-debug=validation"
# "-reindex" # wipe chainstate, block index, other indices; rebuild from blk*.dat (takes 2.5hrs)
# "-reindex-chainstate" # wipe chainstate; rebuild from blk*.dat
];
};

View File

@@ -115,11 +115,19 @@
# - fee-per-satoshi=<ppm>
# - feature configs (i.e. experimental-xyz options)
sane.services.clightning.extraConfig = ''
# log levels: "io", "debug", "info", "unusual", "broken"
log-level=info
# log levels: "io", "trace", "debug", "info", "unusual", "broken"
# log-level=info
# log-level=info:lightningd
# log-level=debug:lightningd
# log-level=debug
log-level=debug
# log-level=io
disable-plugin=cln-xpay
# let me use `lightning-cli dev-*` subcommands, fucktards.
developer
# `developer` enables `dev-*` but *disables* the older commands. asshats.
allow-deprecated-apis=true
# peerswap:
# - config example: <https://github.com/fort-nix/nix-bitcoin/pull/462/files#diff-b357d832705b8ce8df1f41934d613f79adb77c4cd5cd9e9eb12a163fca3e16c6>

View File

@@ -1,6 +1,7 @@
{ ... }:
{
imports = [
./bitmagnet.nix
./coturn.nix
./cryptocurrencies
./email
@@ -21,12 +22,12 @@
./minidlna.nix
./mumble.nix
./navidrome.nix
./nginx.nix
./nginx
./nixos-prebuild.nix
./ntfy
./pict-rs.nix
./pleroma.nix
./postgres.nix
./postgresql
./prosody
./slskd.nix
./transmission

View File

@@ -25,10 +25,10 @@
#
# debugging: general connectivity issues
# - test that inbound port 25 is unblocked:
# - `curl https://canyouseeme.org/ --data 'port=25&IP=185.157.162.178' | grep 'see your service'`
# - `curl https://canyouseeme.org/ --data 'port=25&IP=$MX_IP' | grep 'see your service'`
# - and retry with port 465, 587
# - i think this API requires the queried IP match the source IP
# - if necessary, `systemctl stop postfix` and `sudo nc -l 185.157.162.178 25`, then try https://canyouseeme.org
# - if necessary, `systemctl stop postfix` and `sudo nc -l $MX_IP 25`, then try https://canyouseeme.org
{ ... }:
{

View File

@@ -124,7 +124,9 @@
# ];
};
};
services.dovecot2.modules = [
environment.systemPackages = [
# XXX(2025-03-16): dovecot loads modules from /run/current-system/sw/lib/dovecot/modules
# see: <https://github.com/NixOS/nixpkgs/pull/387642>
pkgs.dovecot_pigeonhole # enables sieve execution (?)
];
services.dovecot2.sieve = {
@@ -141,5 +143,5 @@
'';
};
systemd.services.dovecot2.serviceConfig.RestartSec = lib.mkForce "15s"; # nixos defaults this to 1s
systemd.services.dovecot.serviceConfig.RestartSec = lib.mkForce "15s"; # nixos defaults this to 1s
}

View File

@@ -99,8 +99,10 @@ in
services.postfix.hostname = "mx.uninsane.org";
services.postfix.origin = "uninsane.org";
services.postfix.destination = [ "localhost" "uninsane.org" ];
services.postfix.sslCert = "/var/lib/acme/mx.uninsane.org/fullchain.pem";
services.postfix.sslKey = "/var/lib/acme/mx.uninsane.org/key.pem";
services.postfix.config.smtpd_tls_chain_files = [
"/var/lib/acme/mx.uninsane.org/key.pem"
"/var/lib/acme/mx.uninsane.org/fullchain.pem"
];
# see: `man 5 virtual`
services.postfix.virtual = ''
@@ -112,7 +114,7 @@ in
# smtpd_milters = local:/run/opendkim/opendkim.sock
# milter docs: http://www.postfix.org/MILTER_README.html
# mail filters for receiving email and from authorized SMTP clients (i.e. via submission)
# smtpd_milters = inet:185.157.162.190:8891
# smtpd_milters = inet:$IP:8891
# opendkim.sock will add a Authentication-Results header, with `dkim=pass|fail|...` value to received messages
smtpd_milters = "unix:/run/opendkim/opendkim.sock";
# mail filters for sendmail

View File

@@ -1,6 +1,6 @@
# config options: <https://docs.gitea.io/en-us/administration/config-cheat-sheet/>
# TODO: service shouldn't run as `git` user, but as `gitea`
{ pkgs, lib, ... }:
{ config, pkgs, lib, ... }:
{
sane.persist.sys.byStore.private = [
@@ -104,7 +104,7 @@
};
};
systemd.services.gitea.requires = [ "postgresql.service" ];
systemd.services.gitea.wants = [ "postgresql.service" ];
systemd.services.gitea.serviceConfig = {
# nix default is AF_UNIX AF_INET AF_INET6.
# we need more protos for sendmail to work. i thought it only needed +AF_LOCAL, but that didn't work.
@@ -113,28 +113,66 @@
ReadWritePaths = [
"/var/lib/postfix/queue/maildrop"
];
# rate limit the restarts to prevent systemd from disabling it
RestartSec = 5;
RestartMaxDelaySec = 30;
StartLimitBurst = 120;
RestartSteps = 5;
};
# services.openssh.settings.UsePAM = true; #< required for `git` user to authenticate
services.anubis.instances."git.uninsane.org" = {
settings.TARGET = "http://127.0.0.1:3000";
# allow IM clients/etc to show embeds/previews, else they just show "please verify you aren't a bot..."
botPolicy.openGraph.enabled = true;
};
# hosted git (web view and for `git <cmd>` use
# TODO: enable publog?
services.nginx.virtualHosts."git.uninsane.org" = {
services.nginx.virtualHosts."git.uninsane.org" = let
# XXX(2025-07-24): gitea's still being crawled, even with robots.txt.
# the load is less than when Anthropic first started, but it's still pretty high (like 600%).
# place behind anubis to prevent AI crawlers from hogging my CPU (gitea is slow to render pages).
proxyPassHeavy = "http://unix:${config.services.anubis.instances."git.uninsane.org".settings.BIND}";
# but anubis breaks embeds, so only protect the expensive repos.
proxyPassLight = "http://127.0.0.1:3000";
proxyTo = proxy: root: {
proxyPass = proxy;
recommendedProxySettings = true;
};
in {
forceSSL = true; # gitea complains if served over a different protocol than its config file says
enableACME = true;
# inherit kTLS;
extraConfig = ''
client_max_body_size 100m;
'';
locations."/" = {
proxyPass = "http://127.0.0.1:3000";
proxyPass = proxyPassLight;
recommendedProxySettings = true;
};
# selectively proxy the heavyweight items through anubis.
# a typical interaction is:
# nginx:/colin/linux -> anubis:/colin/linux -> browser is served a loading page
# -> nginx:.within.website/x/cmd/anubis/api/pass-challenge?response=... -> anubis:.within.website/x/cmd/anubis/api/pass-challenge?response=... -> browser is forwarded to /colin/linux
# -> nginx:/colin/linux -> anubis:/colin/linux -> gitea:/colin/linux -> browser is served the actual content
locations."/.within.website/" = proxyTo proxyPassHeavy;
locations."/colin/linux" = proxyTo proxyPassHeavy;
locations."/colin/nixpkgs" = proxyTo proxyPassHeavy;
locations."/colin/opencellid-mirror" = proxyTo proxyPassHeavy;
locations."/colin/podcastindex-db-mirror" = proxyTo proxyPassHeavy;
# fuck you @anthropic
locations."= /robots.txt".extraConfig = ''
return 200 "User-agent: *\nDisallow: /\n";
'';
# locations."= /robots.txt".extraConfig = ''
# return 200 "User-agent: *\nDisallow: /\n";
# '';
# gitea serves all `raw` files as content-type: plain, but i'd like to serve them as their actual content type.
# or at least, enough to make specific pages viewable (serving unoriginal content as arbitrary content type is dangerous).
locations."~ ^/colin/phone-case-cq/raw/.*.html" = {
proxyPass = "http://127.0.0.1:3000";
proxyPass = proxyPassLight;
recommendedProxySettings = true;
extraConfig = ''
proxy_hide_header Content-Type;
default_type text/html;
@@ -142,7 +180,8 @@
'';
};
locations."~ ^/colin/phone-case-cq/raw/.*.js" = {
proxyPass = "http://127.0.0.1:3000";
proxyPass = proxyPassLight;
recommendedProxySettings = true;
extraConfig = ''
proxy_hide_header Content-Type;
default_type text/html;

View File

@@ -56,6 +56,7 @@ lib.mkIf false #< 2024/09/30: disabled because i haven't used it in several mon
locations."/ws" = {
proxyPass = "http://127.0.0.1:7890";
recommendedProxySettings = true;
# XXX not sure how much of this is necessary
extraConfig = ''
proxy_http_version 1.1;

View File

@@ -1,5 +1,5 @@
# TODO: split this file apart into smaller files to make it easier to understand
{ config, lib, pkgs, ... }:
{ config, lib, ... }:
let
dyn-dns = config.sane.services.dyn-dns;
@@ -55,8 +55,7 @@ in
];
};
services.hickory-dns.settings.zones = [ "uninsane.org" ];
services.hickory-dns.settings.zones = builtins.attrNames config.sane.dns.zones;
networking.nat.enable = true; #< TODO: try removing this?
# networking.nat.extraCommands = ''

View File

@@ -27,6 +27,7 @@ lib.mkIf false # i don't actively use ipfs anymore
locations."/" = {
proxyPass = "http://127.0.0.1:8080";
recommendedProxySettings = true;
extraConfig = ''
proxy_set_header Host $host;
proxy_set_header X-Ipfs-Gateway-Prefix "";

View File

@@ -14,158 +14,160 @@
#
# N.B.: default install DOES NOT SUPPORT DLNA out of the box.
# one must install it as a "plugin", which can be done through the UI.
{ lib, ... }:
{ config, lib, ... }:
# lib.mkIf false #< XXX(2024-11-17): disabled because it hasn't been working for months; web UI hangs on load, TVs see no files
{
# https://jellyfin.org/docs/general/networking/index.html
sane.ports.ports."1900" = {
protocol = [ "udp" ];
visibleTo.lan = true;
description = "colin-upnp-for-jellyfin";
};
sane.ports.ports."7359" = {
protocol = [ "udp" ];
visibleTo.lan = true;
description = "colin-jellyfin-specific-client-discovery";
# ^ not sure if this is necessary: copied this port from nixos jellyfin.openFirewall
};
# not sure if 8096/8920 get used either:
sane.ports.ports."8096" = {
protocol = [ "tcp" ];
visibleTo.lan = true;
description = "colin-jellyfin-http-lan";
};
sane.ports.ports."8920" = {
protocol = [ "tcp" ];
visibleTo.lan = true;
description = "colin-jellyfin-https-lan";
};
sane.persist.sys.byStore.plaintext = [
{ user = "jellyfin"; group = "jellyfin"; mode = "0700"; path = "/var/lib/jellyfin/data"; method = "bind"; }
{ user = "jellyfin"; group = "jellyfin"; mode = "0700"; path = "/var/lib/jellyfin/metadata"; method = "bind"; }
# TODO: ship plugins statically, via nix. that'll be less fragile
{ user = "jellyfin"; group = "jellyfin"; mode = "0700"; path = "/var/lib/jellyfin/plugins/DLNA_5.0.0.0"; method = "bind"; }
{ user = "jellyfin"; group = "jellyfin"; mode = "0700"; path = "/var/lib/jellyfin/root"; method = "bind"; }
];
sane.persist.sys.byStore.ephemeral = [
{ user = "jellyfin"; group = "jellyfin"; mode = "0700"; path = "/var/lib/jellyfin/log"; method = "bind"; }
{ user = "jellyfin"; group = "jellyfin"; mode = "0700"; path = "/var/lib/jellyfin/transcodes"; method = "bind"; }
];
services.jellyfin.enable = true;
users.users.jellyfin.extraGroups = [ "media" ];
sane.fs."/var/lib/jellyfin".dir.acl = {
user = "jellyfin";
group = "jellyfin";
mode = "0700";
};
# `"Jellyfin.Plugin.Dlna": "Debug"` logging: <https://jellyfin.org/docs/general/networking/dlna>
# TODO: switch Dlna back to 'Information' once satisfied with stability
sane.fs."/var/lib/jellyfin/config/logging.json".symlink.text = ''
{
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"System": "Warning",
"Jellyfin.Plugin.Dlna": "Debug"
}
},
"WriteTo": [
{
"Name": "Console",
"Args": {
"outputTemplate": "[{Timestamp:HH:mm:ss}] [{Level:u3}] [{ThreadId}] {SourceContext}: {Message:lj}{NewLine}{Exception}"
}
}
],
"Enrich": [ "FromLogContext", "WithThreadId" ]
}
}
'';
sane.fs."/var/lib/jellyfin/config/network.xml".file.text = ''
<?xml version="1.0" encoding="utf-8"?>
<NetworkConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<BaseUrl />
<EnableHttps>false</EnableHttps>
<RequireHttps>false</RequireHttps>
<InternalHttpPort>8096</InternalHttpPort>
<InternalHttpsPort>8920</InternalHttpsPort>
<PublicHttpPort>8096</PublicHttpPort>
<PublicHttpsPort>8920</PublicHttpsPort>
<AutoDiscovery>true</AutoDiscovery>
<EnableUPnP>false</EnableUPnP>
<EnableIPv4>true</EnableIPv4>
<EnableIPv6>false</EnableIPv6>
<EnableRemoteAccess>true</EnableRemoteAccess>
<LocalNetworkSubnets>
<string>10.78.76.0/22</string>
</LocalNetworkSubnets>
<KnownProxies>
<string>127.0.0.1</string>
<string>localhost</string>
<string>10.78.79.1</string>
</KnownProxies>
<IgnoreVirtualInterfaces>false</IgnoreVirtualInterfaces>
<VirtualInterfaceNames />
<EnablePublishedServerUriByRequest>false</EnablePublishedServerUriByRequest>
<PublishedServerUriBySubnet />
<RemoteIPFilter />
<IsRemoteIPFilterBlacklist>false</IsRemoteIPFilterBlacklist>
</NetworkConfiguration>
'';
# guest user id is `5ad194d60dca41de84b332950ffc4308`
sane.fs."/var/lib/jellyfin/plugins/configurations/Jellyfin.Plugin.Dlna.xml".file.text = ''
<?xml version="1.0" encoding="utf-8"?>
<DlnaPluginConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<EnablePlayTo>true</EnablePlayTo>
<ClientDiscoveryIntervalSeconds>60</ClientDiscoveryIntervalSeconds>
<BlastAliveMessages>true</BlastAliveMessages>
<AliveMessageIntervalSeconds>180</AliveMessageIntervalSeconds>
<SendOnlyMatchedHost>true</SendOnlyMatchedHost>
<DefaultUserId>5ad194d6-0dca-41de-84b3-32950ffc4308</DefaultUserId>
</DlnaPluginConfiguration>
'';
# fix LG TV to play more files.
# there are certain files for which it only supports Direct Play (not even "Direct Stream" -- but "Direct Play").
# this isn't a 100% fix: patching the profile allows e.g. Azumanga Daioh to play,
# but A Place Further Than the Universe still fails as before.
#
# profile is based on upstream: <https://github.com/jellyfin/jellyfin-plugin-dlna>
sane.fs."/var/lib/jellyfin/plugins/DLNA_5.0.0.0/profiles/LG Smart TV.xml".symlink.target = ./dlna/user/LG_Smart_TV.xml;
# XXX(2024-11-17): old method, but the file referenced seems not to be used and setting just it causes failures:
# > [DBG] Jellyfin.Plugin.Dlna.ContentDirectory.ContentDirectoryService: Not eligible for DirectPlay due to unsupported subtitles
# sane.fs."/var/lib/jellyfin/plugins/configurations/dlna/user/LG Smart TV.xml".symlink.target = ./dlna/user/LG_Smart_TV.xml;
systemd.services.jellyfin.unitConfig.RequiresMountsFor = [
"/var/media"
];
# Jellyfin multimedia server
# this is mostly taken from the official jellfin.org docs
services.nginx.virtualHosts."jelly.uninsane.org" = {
forceSSL = true;
enableACME = true;
# inherit kTLS;
locations."/" = {
proxyPass = "http://127.0.0.1:8096";
proxyWebsockets = true;
recommendedProxySettings = true;
# extraConfig = ''
# # Disable buffering when the nginx proxy gets very resource heavy upon streaming
# proxy_buffering off;
# '';
config = lib.mkIf (config.sane.maxBuildCost >= 2) {
# https://jellyfin.org/docs/general/networking/index.html
sane.ports.ports."1900" = {
protocol = [ "udp" ];
visibleTo.lan = true;
description = "colin-upnp-for-jellyfin";
};
sane.ports.ports."7359" = {
protocol = [ "udp" ];
visibleTo.lan = true;
description = "colin-jellyfin-specific-client-discovery";
# ^ not sure if this is necessary: copied this port from nixos jellyfin.openFirewall
};
# not sure if 8096/8920 get used either:
sane.ports.ports."8096" = {
protocol = [ "tcp" ];
visibleTo.lan = true;
description = "colin-jellyfin-http-lan";
};
sane.ports.ports."8920" = {
protocol = [ "tcp" ];
visibleTo.lan = true;
description = "colin-jellyfin-https-lan";
};
};
sane.dns.zones."uninsane.org".inet.CNAME."jelly" = "native";
sane.persist.sys.byStore.plaintext = [
{ user = "jellyfin"; group = "jellyfin"; mode = "0700"; path = "/var/lib/jellyfin/data"; method = "bind"; }
{ user = "jellyfin"; group = "jellyfin"; mode = "0700"; path = "/var/lib/jellyfin/metadata"; method = "bind"; }
# TODO: ship plugins statically, via nix. that'll be less fragile
{ user = "jellyfin"; group = "jellyfin"; mode = "0700"; path = "/var/lib/jellyfin/plugins/DLNA_5.0.0.0"; method = "bind"; }
{ user = "jellyfin"; group = "jellyfin"; mode = "0700"; path = "/var/lib/jellyfin/root"; method = "bind"; }
];
sane.persist.sys.byStore.ephemeral = [
{ user = "jellyfin"; group = "jellyfin"; mode = "0700"; path = "/var/lib/jellyfin/log"; method = "bind"; }
{ user = "jellyfin"; group = "jellyfin"; mode = "0700"; path = "/var/lib/jellyfin/transcodes"; method = "bind"; }
];
services.jellyfin.enable = true;
users.users.jellyfin.extraGroups = [ "media" ];
sane.fs."/var/lib/jellyfin".dir.acl = {
user = "jellyfin";
group = "jellyfin";
mode = "0700";
};
# `"Jellyfin.Plugin.Dlna": "Debug"` logging: <https://jellyfin.org/docs/general/networking/dlna>
# TODO: switch Dlna back to 'Information' once satisfied with stability
sane.fs."/var/lib/jellyfin/config/logging.json".symlink.text = ''
{
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"System": "Warning",
"Jellyfin.Plugin.Dlna": "Debug"
}
},
"WriteTo": [
{
"Name": "Console",
"Args": {
"outputTemplate": "[{Timestamp:HH:mm:ss}] [{Level:u3}] [{ThreadId}] {SourceContext}: {Message:lj}{NewLine}{Exception}"
}
}
],
"Enrich": [ "FromLogContext", "WithThreadId" ]
}
}
'';
sane.fs."/var/lib/jellyfin/config/network.xml".file.text = ''
<?xml version="1.0" encoding="utf-8"?>
<NetworkConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<BaseUrl />
<EnableHttps>false</EnableHttps>
<RequireHttps>false</RequireHttps>
<InternalHttpPort>8096</InternalHttpPort>
<InternalHttpsPort>8920</InternalHttpsPort>
<PublicHttpPort>8096</PublicHttpPort>
<PublicHttpsPort>8920</PublicHttpsPort>
<AutoDiscovery>true</AutoDiscovery>
<EnableUPnP>false</EnableUPnP>
<EnableIPv4>true</EnableIPv4>
<EnableIPv6>false</EnableIPv6>
<EnableRemoteAccess>true</EnableRemoteAccess>
<LocalNetworkSubnets>
<string>10.78.76.0/22</string>
</LocalNetworkSubnets>
<KnownProxies>
<string>127.0.0.1</string>
<string>localhost</string>
<string>10.78.79.1</string>
</KnownProxies>
<IgnoreVirtualInterfaces>false</IgnoreVirtualInterfaces>
<VirtualInterfaceNames />
<EnablePublishedServerUriByRequest>false</EnablePublishedServerUriByRequest>
<PublishedServerUriBySubnet />
<RemoteIPFilter />
<IsRemoteIPFilterBlacklist>false</IsRemoteIPFilterBlacklist>
</NetworkConfiguration>
'';
# guest user id is `5ad194d60dca41de84b332950ffc4308`
sane.fs."/var/lib/jellyfin/plugins/configurations/Jellyfin.Plugin.Dlna.xml".file.text = ''
<?xml version="1.0" encoding="utf-8"?>
<DlnaPluginConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<EnablePlayTo>true</EnablePlayTo>
<ClientDiscoveryIntervalSeconds>60</ClientDiscoveryIntervalSeconds>
<BlastAliveMessages>true</BlastAliveMessages>
<AliveMessageIntervalSeconds>180</AliveMessageIntervalSeconds>
<SendOnlyMatchedHost>true</SendOnlyMatchedHost>
<DefaultUserId>5ad194d6-0dca-41de-84b3-32950ffc4308</DefaultUserId>
</DlnaPluginConfiguration>
'';
# fix LG TV to play more files.
# there are certain files for which it only supports Direct Play (not even "Direct Stream" -- but "Direct Play").
# this isn't a 100% fix: patching the profile allows e.g. Azumanga Daioh to play,
# but A Place Further Than the Universe still fails as before.
#
# profile is based on upstream: <https://github.com/jellyfin/jellyfin-plugin-dlna>
sane.fs."/var/lib/jellyfin/plugins/DLNA_5.0.0.0/profiles/LG Smart TV.xml".symlink.target = ./dlna/user/LG_Smart_TV.xml;
# XXX(2024-11-17): old method, but the file referenced seems not to be used and setting just it causes failures:
# > [DBG] Jellyfin.Plugin.Dlna.ContentDirectory.ContentDirectoryService: Not eligible for DirectPlay due to unsupported subtitles
# sane.fs."/var/lib/jellyfin/plugins/configurations/dlna/user/LG Smart TV.xml".symlink.target = ./dlna/user/LG_Smart_TV.xml;
systemd.services.jellyfin.unitConfig.RequiresMountsFor = [
"/var/media"
];
# Jellyfin multimedia server
# this is mostly taken from the official jellfin.org docs
services.nginx.virtualHosts."jelly.uninsane.org" = {
forceSSL = true;
enableACME = true;
# inherit kTLS;
locations."/" = {
proxyPass = "http://127.0.0.1:8096";
proxyWebsockets = true;
recommendedProxySettings = true;
# extraConfig = ''
# # Disable buffering when the nginx proxy gets very resource heavy upon streaming
# proxy_buffering off;
# '';
};
};
sane.dns.zones."uninsane.org".inet.CNAME."jelly" = "native";
};
}

View File

@@ -1,22 +1,42 @@
{ pkgs, ... }:
{ config, lib, pkgs, ... }:
{
sane.services.kiwix-serve = {
enable = true;
port = 8013;
zimPaths = [
"${pkgs.zimPackages.wikipedia_en_all_maxi}/share/zim/wikipedia_en_all_maxi.zim"
];
};
config = lib.mkIf (config.sane.maxBuildCost >= 3) {
sane.services.kiwix-serve = {
enable = true;
port = 8013;
zimPaths = with pkgs.zimPackages; [
alpinelinux_en_all_maxi.zimPath
archlinux_en_all_maxi.zimPath
bitcoin_en_all_maxi.zimPath
devdocs_en_nix.zimPath
gentoo_en_all_maxi.zimPath
# khanacademy_en_all.zimPath #< TODO: enable
openstreetmap-wiki_en_all_maxi.zimPath
psychonautwiki_en_all_maxi.zimPath
rationalwiki_en_all_maxi.zimPath
# wikipedia_en_100.zimPath
wikipedia_en_all_maxi.zimPath
# wikipedia_en_all_mini.zimPath
zimgit-food-preparation_en.zimPath
zimgit-medicine_en.zimPath
zimgit-post-disaster_en.zimPath
zimgit-water_en.zimPath
];
};
services.nginx.virtualHosts."w.uninsane.org" = {
forceSSL = true;
enableACME = true;
# inherit kTLS;
locations."/".proxyPass = "http://127.0.0.1:8013";
locations."= /robots.txt".extraConfig = ''
return 200 "User-agent: *\nDisallow: /\n";
'';
};
services.nginx.virtualHosts."w.uninsane.org" = {
forceSSL = true;
enableACME = true;
# inherit kTLS;
locations."/" = {
proxyPass = "http://127.0.0.1:8013";
recommendedProxySettings = true;
};
locations."= /robots.txt".extraConfig = ''
return 200 "User-agent: *\nDisallow: /\n";
'';
};
sane.dns.zones."uninsane.org".inet.CNAME."w" = "native";
sane.dns.zones."uninsane.org".inet.CNAME."w" = "native";
};
}

View File

@@ -17,6 +17,7 @@ lib.mkIf false #< 2024/09/30: disabled because i haven't used this for several
enableACME = true;
locations."/" = {
proxyPass = "http://127.0.0.1:${builtins.toString port}";
recommendedProxySettings = true;
};
locations."= /robots.txt".extraConfig = ''
return 200 "User-agent: *\nDisallow: /\n";

View File

@@ -3,7 +3,7 @@
# - <repo:LemmyNet/lemmy:docker/nginx.conf>
# - <repo:LemmyNet/lemmy-ansible:templates/nginx.conf>
{ lib, pkgs, ... }:
{ config, lib, pkgs, ... }:
let
uiPort = 1234; # default ui port is 1234
backendPort = 8536; # default backend port is 8536
@@ -24,150 +24,156 @@ let
media.video.max_frame_count = 30 * 60 * 60;
};
in {
services.lemmy = {
enable = true;
settings.hostname = "lemmy.uninsane.org";
# federation.debug forces outbound federation queries to be run synchronously
# N.B.: this option might not be read for 0.17.0+? <https://github.com/LemmyNet/lemmy/blob/c32585b03429f0f76d1e4ff738786321a0a9df98/RELEASES.md#upgrade-instructions>
# settings.federation.debug = true;
settings.port = backendPort;
ui.port = uiPort;
database.createLocally = true;
nginx.enable = true;
};
config = lib.mkIf (config.sane.maxBuildCost >= 2) {
services.lemmy = {
enable = true;
settings.hostname = "lemmy.uninsane.org";
# federation.debug forces outbound federation queries to be run synchronously
# N.B.: this option might not be read for 0.17.0+? <https://github.com/LemmyNet/lemmy/blob/c32585b03429f0f76d1e4ff738786321a0a9df98/RELEASES.md#upgrade-instructions>
# settings.federation.debug = true;
settings.port = backendPort;
ui.port = uiPort;
database.createLocally = true;
nginx.enable = true;
};
systemd.services.lemmy.environment = {
RUST_BACKTRACE = "full";
RUST_LOG = "error";
# RUST_LOG = "warn";
# RUST_LOG = "debug";
# RUST_LOG = "trace";
# upstream defaults LEMMY_DATABASE_URL = "postgres:///lemmy?host=/run/postgresql";
# - Postgres complains that we didn't specify a user
# lemmy formats the url as:
# - postgres://{user}:{password}@{host}:{port}/{database}
# SO suggests (https://stackoverflow.com/questions/3582552/what-is-the-format-for-the-postgresql-connection-string-url):
# - postgresql://[user[:password]@][netloc][:port][/dbname][?param1=value1&...]
# LEMMY_DATABASE_URL = "postgres://lemmy@/run/postgresql"; # connection to server on socket "/run/postgresql/.s.PGSQL.5432" failed: FATAL: database "run/postgresql" does not exist
# LEMMY_DATABASE_URL = "postgres://lemmy?host=/run/postgresql"; # no PostgreSQL user name specified in startup packet
# LEMMY_DATABASE_URL = lib.mkForce "postgres://lemmy@?host=/run/postgresql"; # WORKS
LEMMY_DATABASE_URL = lib.mkForce "postgres://lemmy@/lemmy?host=/run/postgresql";
};
users.groups.lemmy = {};
users.users.lemmy = {
group = "lemmy";
isSystemUser = true;
};
systemd.services.lemmy.environment = {
RUST_BACKTRACE = "full";
RUST_LOG = "error";
# RUST_LOG = "warn";
# RUST_LOG = "debug";
# RUST_LOG = "trace";
# upstream defaults LEMMY_DATABASE_URL = "postgres:///lemmy?host=/run/postgresql";
# - Postgres complains that we didn't specify a user
# lemmy formats the url as:
# - postgres://{user}:{password}@{host}:{port}/{database}
# SO suggests (https://stackoverflow.com/questions/3582552/what-is-the-format-for-the-postgresql-connection-string-url):
# - postgresql://[user[:password]@][netloc][:port][/dbname][?param1=value1&...]
# LEMMY_DATABASE_URL = "postgres://lemmy@/run/postgresql"; # connection to server on socket "/run/postgresql/.s.PGSQL.5432" failed: FATAL: database "run/postgresql" does not exist
# LEMMY_DATABASE_URL = "postgres://lemmy?host=/run/postgresql"; # no PostgreSQL user name specified in startup packet
# LEMMY_DATABASE_URL = lib.mkForce "postgres://lemmy@?host=/run/postgresql"; # WORKS
LEMMY_DATABASE_URL = lib.mkForce "postgres://lemmy@/lemmy?host=/run/postgresql";
};
users.groups.lemmy = {};
users.users.lemmy = {
group = "lemmy";
isSystemUser = true;
};
services.nginx.virtualHosts."lemmy.uninsane.org" = {
forceSSL = true;
enableACME = true;
};
services.nginx.virtualHosts."lemmy.uninsane.org" = {
forceSSL = true;
enableACME = true;
};
sane.dns.zones."uninsane.org".inet.CNAME."lemmy" = "native";
sane.dns.zones."uninsane.org".inet.CNAME."lemmy" = "native";
systemd.services.lemmy = {
# fix to use a normal user so we can configure perms correctly
# XXX(2024-07-28): this hasn't been rigorously tested:
# possible that i've set something too strict and won't notice right away
serviceConfig.DynamicUser = lib.mkForce false;
serviceConfig.User = "lemmy";
serviceConfig.Group = "lemmy";
systemd.services.lemmy = {
# fix to use a normal user so we can configure perms correctly
# XXX(2024-07-28): this hasn't been rigorously tested:
# possible that i've set something too strict and won't notice right away
serviceConfig.DynamicUser = lib.mkForce false;
serviceConfig.User = "lemmy";
serviceConfig.Group = "lemmy";
# hardening (systemd-analyze security lemmy)
# a handful of these are specified in upstream nixpkgs, but mostly not
serviceConfig.LockPersonality = true;
serviceConfig.NoNewPrivileges = true;
serviceConfig.MemoryDenyWriteExecute = true;
serviceConfig.PrivateDevices = true;
serviceConfig.PrivateMounts = true;
serviceConfig.PrivateTmp = true;
serviceConfig.PrivateUsers = true;
serviceConfig.ProcSubset = "pid";
# switch postgres from Requires -> Wants, so that postgres may restart without taking lemmy down with it.
requires = lib.mkForce [];
wants = [ "postgresql.service" ];
serviceConfig.ProtectClock = true;
serviceConfig.ProtectControlGroups = true;
serviceConfig.ProtectHome = true;
serviceConfig.ProtectHostname = true;
serviceConfig.ProtectKernelLogs = true;
serviceConfig.ProtectKernelModules = true;
serviceConfig.ProtectKernelTunables = true;
serviceConfig.ProtectProc = "invisible";
serviceConfig.ProtectSystem = "strict";
serviceConfig.RemoveIPC = true;
serviceConfig.RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6";
# hardening (systemd-analyze security lemmy)
# a handful of these are specified in upstream nixpkgs, but mostly not
serviceConfig.LockPersonality = true;
serviceConfig.NoNewPrivileges = true;
serviceConfig.MemoryDenyWriteExecute = true;
serviceConfig.PrivateDevices = true;
serviceConfig.PrivateMounts = true;
serviceConfig.PrivateTmp = true;
serviceConfig.PrivateUsers = true;
serviceConfig.ProcSubset = "pid";
serviceConfig.RestrictNamespaces = true;
serviceConfig.RestrictSUIDSGID = true;
serviceConfig.SystemCallArchitectures = "native";
serviceConfig.SystemCallFilter = [ "@system-service" ];
};
serviceConfig.ProtectClock = true;
serviceConfig.ProtectControlGroups = true;
serviceConfig.ProtectHome = true;
serviceConfig.ProtectHostname = true;
serviceConfig.ProtectKernelLogs = true;
serviceConfig.ProtectKernelModules = true;
serviceConfig.ProtectKernelTunables = true;
serviceConfig.ProtectProc = "invisible";
serviceConfig.ProtectSystem = "strict";
serviceConfig.RemoveIPC = true;
serviceConfig.RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6";
systemd.services.lemmy-ui = {
# hardening (systemd-analyze security lemmy-ui)
# TODO: upstream into nixpkgs
serviceConfig.LockPersonality = true;
serviceConfig.NoNewPrivileges = true;
# serviceConfig.MemoryDenyWriteExecute = true; #< it uses v8, JIT
serviceConfig.PrivateDevices = true;
serviceConfig.PrivateMounts = true;
serviceConfig.PrivateTmp = true;
serviceConfig.PrivateUsers = true;
serviceConfig.ProcSubset = "pid";
serviceConfig.RestrictNamespaces = true;
serviceConfig.RestrictSUIDSGID = true;
serviceConfig.SystemCallArchitectures = "native";
serviceConfig.SystemCallFilter = [ "@system-service" ];
};
serviceConfig.ProtectClock = true;
serviceConfig.ProtectControlGroups = true;
serviceConfig.ProtectHome = true;
serviceConfig.ProtectHostname = true;
serviceConfig.ProtectKernelLogs = true;
serviceConfig.ProtectKernelModules = true;
serviceConfig.ProtectKernelTunables = true;
serviceConfig.ProtectProc = "invisible";
serviceConfig.ProtectSystem = "strict";
serviceConfig.RemoveIPC = true;
serviceConfig.RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6";
systemd.services.lemmy-ui = {
# hardening (systemd-analyze security lemmy-ui)
# TODO: upstream into nixpkgs
serviceConfig.LockPersonality = true;
serviceConfig.NoNewPrivileges = true;
# serviceConfig.MemoryDenyWriteExecute = true; #< it uses v8, JIT
serviceConfig.PrivateDevices = true;
serviceConfig.PrivateMounts = true;
serviceConfig.PrivateTmp = true;
serviceConfig.PrivateUsers = true;
serviceConfig.ProcSubset = "pid";
serviceConfig.RestrictNamespaces = true;
serviceConfig.RestrictSUIDSGID = true;
serviceConfig.SystemCallArchitectures = "native";
serviceConfig.SystemCallFilter = [ "@system-service" "@pkey" "@sandbox" ];
};
serviceConfig.ProtectClock = true;
serviceConfig.ProtectControlGroups = true;
serviceConfig.ProtectHome = true;
serviceConfig.ProtectHostname = true;
serviceConfig.ProtectKernelLogs = true;
serviceConfig.ProtectKernelModules = true;
serviceConfig.ProtectKernelTunables = true;
serviceConfig.ProtectProc = "invisible";
serviceConfig.ProtectSystem = "strict";
serviceConfig.RemoveIPC = true;
serviceConfig.RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6";
#v DO NOT REMOVE: defaults to 0.3, instead of latest, so always need to explicitly set this.
services.pict-rs.package = pict-rs;
serviceConfig.RestrictNamespaces = true;
serviceConfig.RestrictSUIDSGID = true;
serviceConfig.SystemCallArchitectures = "native";
serviceConfig.SystemCallFilter = [ "@system-service" "@pkey" "@sandbox" ];
};
systemd.services.pict-rs = {
serviceConfig.ExecStart = lib.mkForce (lib.concatStringsSep " " [
(lib.getExe pict-rs)
"--config-file"
tomlConfig
"run"
]);
#v DO NOT REMOVE: defaults to 0.3, instead of latest, so always need to explicitly set this.
services.pict-rs.package = pict-rs;
# hardening (systemd-analyze security pict-rs)
# TODO: upstream into nixpkgs
serviceConfig.LockPersonality = true;
serviceConfig.NoNewPrivileges = true;
serviceConfig.MemoryDenyWriteExecute = true;
serviceConfig.PrivateDevices = true;
serviceConfig.PrivateMounts = true;
serviceConfig.PrivateTmp = true;
serviceConfig.PrivateUsers = true;
serviceConfig.ProcSubset = "pid";
serviceConfig.ProtectClock = true;
serviceConfig.ProtectControlGroups = true;
serviceConfig.ProtectHome = true;
serviceConfig.ProtectHostname = true;
serviceConfig.ProtectKernelLogs = true;
serviceConfig.ProtectKernelModules = true;
serviceConfig.ProtectKernelTunables = true;
serviceConfig.ProtectProc = "invisible";
serviceConfig.ProtectSystem = "strict";
serviceConfig.RemoveIPC = true;
serviceConfig.RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6";
serviceConfig.RestrictNamespaces = true;
serviceConfig.RestrictSUIDSGID = true;
serviceConfig.SystemCallArchitectures = "native";
serviceConfig.SystemCallFilter = [ "@system-service" ];
systemd.services.pict-rs = {
serviceConfig.ExecStart = lib.mkForce (lib.concatStringsSep " " [
(lib.getExe pict-rs)
"--config-file"
tomlConfig
"run"
]);
# hardening (systemd-analyze security pict-rs)
# TODO: upstream into nixpkgs
serviceConfig.LockPersonality = true;
serviceConfig.NoNewPrivileges = true;
serviceConfig.MemoryDenyWriteExecute = true;
serviceConfig.PrivateDevices = true;
serviceConfig.PrivateMounts = true;
serviceConfig.PrivateTmp = true;
serviceConfig.PrivateUsers = true;
serviceConfig.ProcSubset = "pid";
serviceConfig.ProtectClock = true;
serviceConfig.ProtectControlGroups = true;
serviceConfig.ProtectHome = true;
serviceConfig.ProtectHostname = true;
serviceConfig.ProtectKernelLogs = true;
serviceConfig.ProtectKernelModules = true;
serviceConfig.ProtectKernelTunables = true;
serviceConfig.ProtectProc = "invisible";
serviceConfig.ProtectSystem = "strict";
serviceConfig.RemoveIPC = true;
serviceConfig.RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6";
serviceConfig.RestrictNamespaces = true;
serviceConfig.RestrictSUIDSGID = true;
serviceConfig.SystemCallArchitectures = "native";
serviceConfig.SystemCallFilter = [ "@system-service" ];
};
};
}

View File

@@ -70,6 +70,15 @@ in
config.sops.secrets."matrix_synapse_secrets.yaml".path
];
# tune restart settings to ensure systemd doesn't disable it, and we don't overwhelm postgres
systemd.services.matrix-synapse.serviceConfig.RestartSec = 5;
systemd.services.matrix-synapse.serviceConfig.RestartMaxDelaySec = 20;
systemd.services.matrix-synapse.serviceConfig.StartLimitBurst = 120;
systemd.services.matrix-synapse.serviceConfig.RestartSteps = 3;
# switch postgres from Requires -> Wants, so that postgres may restart without taking matrix down with it.
systemd.services.matrix-synapse.requires = lib.mkForce [];
systemd.services.matrix-synapse.wants = [ "postgresql.service" ];
systemd.services.matrix-synapse.postStart = lib.optionalString ntfy ''
ACCESS_TOKEN=$(${lib.getExe' pkgs.coreutils "cat"} ${config.sops.secrets.matrix_access_token.path})
TOPIC=$(${lib.getExe' pkgs.coreutils "cat"} ${config.sops.secrets.ntfy-sh-topic.path})
@@ -114,6 +123,7 @@ in
locations."/" = {
proxyPass = "http://127.0.0.1:8008";
recommendedProxySettings = true;
extraConfig = ''
# allow uploading large files (matrix enforces a separate limit, downstream)
client_max_body_size 512m;

View File

@@ -154,6 +154,7 @@ in
# notable channels:
# - #sxmo
# - #sxmo-offtopic
# supposedly also available at <irc://37lnq2veifl4kar7.onion:6667/> (unofficial)
};
"irc.rizon.net" = ircServer { name = "Rizon"; };
# "irc.sdf.org" = ircServer {
@@ -183,6 +184,7 @@ in
enableACME = true;
locations."/media" = {
proxyPass = "http://127.0.0.1:11111";
recommendedProxySettings = true;
};
};

View File

@@ -34,7 +34,10 @@ lib.mkIf false #< i don't actively use navidrome
forceSSL = true;
enableACME = true;
# inherit kTLS;
locations."/".proxyPass = "http://127.0.0.1:4533";
locations."/" = {
proxyPass = "http://127.0.0.1:4533";
recommendedProxySettings = true;
};
};
sane.dns.zones."uninsane.org".inet.CNAME."music" = "native";

View File

@@ -1,270 +0,0 @@
# docs: <https://nixos.wiki/wiki/Nginx>
# docs: <https://nginx.org/en/docs/>
{ config, lib, pkgs, ... }:
let
# make the logs for this host "public" so that they show up in e.g. metrics
publog = vhost: lib.attrsets.unionOfDisjoint vhost {
extraConfig = (vhost.extraConfig or "") + ''
access_log /var/log/nginx/public.log vcombined;
'';
};
# kTLS = true; # in-kernel TLS for better perf
in
{
sane.ports.ports."80" = {
protocol = [ "tcp" ];
visibleTo.lan = true;
visibleTo.ovpns = true; # so that letsencrypt can procure a cert for the mx record
visibleTo.doof = true;
description = "colin-http-uninsane.org";
};
sane.ports.ports."443" = {
protocol = [ "tcp" ];
visibleTo.lan = true;
visibleTo.doof = true;
description = "colin-https-uninsane.org";
};
services.nginx.enable = true;
# nginxStable is one release behind nginxMainline.
# nginx itself recommends running mainline; nixos defaults to stable.
# services.nginx.package = pkgs.nginxMainline;
# XXX(2024-07-31): nixos defaults to zlib-ng -- supposedly more performant, but spams log with
# "gzip filter failed to use preallocated memory: ..."
services.nginx.package = pkgs.nginxMainline.override { zlib = pkgs.zlib; };
services.nginx.appendConfig = ''
# use 1 process per core.
# may want to increase worker_connections too, but `ulimit -n` must be increased first.
worker_processes auto;
'';
# this is the standard `combined` log format, with the addition of $host
# so that we have the virtualHost in the log.
# KEEP IN SYNC WITH GOACCESS
# goaccess calls this VCOMBINED:
# - <https://gist.github.com/jyap808/10570005>
services.nginx.commonHttpConfig = ''
log_format vcombined '$host:$server_port $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referrer" "$http_user_agent"';
access_log /var/log/nginx/private.log vcombined;
'';
# enables gzip and sets gzip_comp_level = 5
services.nginx.recommendedGzipSettings = true;
# enables zstd and sets zstd_comp_level = 9
services.nginx.recommendedZstdSettings = true;
# enables OCSP stapling (so clients don't need contact the OCSP server -- i do instead)
# - doesn't seem to, actually: <https://www.ssllabs.com/ssltest/analyze.html?d=uninsane.org>
# caches TLS sessions for 10m
services.nginx.recommendedTlsSettings = true;
# enables sendfile, tcp_nopush, tcp_nodelay, keepalive_timeout 65
services.nginx.recommendedOptimisation = true;
# web blog/personal site
# alternative way to link stuff into the share:
# sane.fs."/var/www/sites/uninsane.org/share/Ubunchu".mount.bind = "/var/media/Books/Visual/HiroshiSeo/Ubunchu";
# sane.fs."/var/media/Books/Visual/HiroshiSeo/Ubunchu".dir = {};
services.nginx.virtualHosts."uninsane.org" = publog {
# a lot of places hardcode https://uninsane.org,
# and then when we mix http + non-https, we get CORS violations
# and things don't look right. so force SSL.
forceSSL = true;
enableACME = true;
# inherit kTLS;
# for OCSP stapling
sslTrustedCertificate = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
locations."/" = {
root = "${pkgs.uninsane-dot-org}/share/uninsane-dot-org";
tryFiles = "$uri $uri/ @fallback";
};
# unversioned files
locations."@fallback" = {
root = "/var/www/sites/uninsane.org";
extraConfig = ''
# instruct Google to not index these pages.
# see: <https://developers.google.com/search/docs/crawling-indexing/robots-meta-tag#xrobotstag>
add_header X-Robots-Tag 'none, noindex, nofollow';
# best-effort attempt to block archive.org from archiving these pages.
# reply with 403: Forbidden
# User Agent is *probably* "archive.org_bot"; maybe used to be "ia_archiver"
# source: <https://archive.org/details/archive.org_bot>
# additional UAs: <https://github.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker>
#
# validate with: `curl -H 'User-Agent: "bot;archive.org_bot;like: something else"' -v https://uninsane.org/dne`
if ($http_user_agent ~* "(?:\b)archive.org_bot(?:\b)") {
return 403;
}
if ($http_user_agent ~* "(?:\b)archive.org(?:\b)") {
return 403;
}
if ($http_user_agent ~* "(?:\b)ia_archiver(?:\b)") {
return 403;
}
'';
};
# uninsane.org/share/foo => /var/www/sites/uninsane.org/share/foo.
# special-cased to enable directory listings
locations."/share" = {
root = "/var/www/sites/uninsane.org";
extraConfig = ''
# autoindex => render directory listings
autoindex on;
# don't follow any symlinks when serving files
# otherwise it allows a directory escape
disable_symlinks on;
'';
};
locations."/share/Milkbags/" = {
alias = "/var/media/Videos/Milkbags/";
extraConfig = ''
# autoindex => render directory listings
autoindex on;
# don't follow any symlinks when serving files
# otherwise it allows a directory escape
disable_symlinks on;
'';
};
locations."/share/Ubunchu/" = {
alias = "/var/media/Books/Visual/HiroshiSeo/Ubunchu/";
extraConfig = ''
# autoindex => render directory listings
autoindex on;
# don't follow any symlinks when serving files
# otherwise it allows a directory escape
disable_symlinks on;
'';
};
# allow matrix users to discover that @user:uninsane.org is reachable via matrix.uninsane.org
locations."= /.well-known/matrix/server".extraConfig =
let
# use 443 instead of the default 8448 port to unite
# the client-server and server-server port for simplicity
server = { "m.server" = "matrix.uninsane.org:443"; };
in ''
add_header Content-Type application/json;
return 200 '${builtins.toJSON server}';
'';
locations."= /.well-known/matrix/client".extraConfig =
let
client = {
"m.homeserver" = { "base_url" = "https://matrix.uninsane.org"; };
"m.identity_server" = { "base_url" = "https://vector.im"; };
};
# ACAO required to allow element-web on any URL to request this json file
in ''
add_header Content-Type application/json;
add_header Access-Control-Allow-Origin *;
return 200 '${builtins.toJSON client}';
'';
# static URLs might not be aware of .well-known (e.g. registration confirmation URLs),
# so hack around that.
locations."/_matrix" = {
proxyPass = "http://127.0.0.1:8008";
};
locations."/_synapse" = {
proxyPass = "http://127.0.0.1:8008";
};
# allow ActivityPub clients to discover how to reach @user@uninsane.org
# see: https://git.pleroma.social/pleroma/pleroma/-/merge_requests/3361/
# not sure this makes sense while i run multiple AP services (pleroma, lemmy)
# locations."/.well-known/nodeinfo" = {
# proxyPass = "http://127.0.0.1:4000";
# extraConfig = pleromaExtraConfig;
# };
# redirect common feed URIs to the canonical feed
locations."= /atom".extraConfig = "return 301 /atom.xml;";
locations."= /feed".extraConfig = "return 301 /atom.xml;";
locations."= /feed.xml".extraConfig = "return 301 /atom.xml;";
locations."= /rss".extraConfig = "return 301 /atom.xml;";
locations."= /rss.xml".extraConfig = "return 301 /atom.xml;";
locations."= /blog/atom".extraConfig = "return 301 /atom.xml;";
locations."= /blog/atom.xml".extraConfig = "return 301 /atom.xml;";
locations."= /blog/feed".extraConfig = "return 301 /atom.xml;";
locations."= /blog/feed.xml".extraConfig = "return 301 /atom.xml;";
locations."= /blog/rss".extraConfig = "return 301 /atom.xml;";
locations."= /blog/rss.xml".extraConfig = "return 301 /atom.xml;";
};
# serve any site not listed above, if it's static.
# because we define it dynamically, SSL isn't trivial. support only http
# documented <https://nginx.org/en/docs/http/ngx_http_core_module.html#server_name>
services.nginx.virtualHosts."~^(?<domain>.+)$" = {
default = true;
addSSL = true;
enableACME = false;
sslCertificate = "/var/www/certs/wildcard/cert.pem";
sslCertificateKey = "/var/www/certs/wildcard/key.pem";
# sslCertificate = "/var/lib/acme/.minica/cert.pem";
# sslCertificateKey = "/var/lib/acme/.minica/key.pem";
# serverName = null;
locations."/" = {
# somehow this doesn't escape -- i get error 400 if i:
# curl 'http://..' --resolve '..:80:127.0.0.1'
root = "/var/www/sites/$domain";
# tryFiles = "$domain/$uri $domain/$uri/ =404";
};
};
security.acme.acceptTerms = true;
security.acme.defaults.email = "admin.acme@uninsane.org";
sane.persist.sys.byStore.plaintext = [
{ user = "acme"; group = "acme"; path = "/var/lib/acme"; method = "bind"; }
];
sane.persist.sys.byStore.private = [
{ user = "colin"; group = "users"; path = "/var/www/sites"; method = "bind"; }
];
sane.persist.sys.byStore.ephemeral = [
# logs *could* be persisted to private storage, but then there's the issue of
# "what if servo boots, isn't unlocked, and the whole / tmpfs is consumed by logs"
{ user = "nginx"; group = "nginx"; path = "/var/log/nginx"; method = "bind"; }
];
# let's encrypt default chain looks like:
# - End-entity certificate ← R3 ← ISRG Root X1 ← DST Root CA X3
# - <https://community.letsencrypt.org/t/production-chain-changes/150739>
# DST Root CA X3 expired in 2021 (?)
# the alternative chain is:
# - End-entity certificate ← R3 ← ISRG Root X1 (self-signed)
# using this alternative chain grants more compatibility for services like ejabberd
# but might decrease compatibility with very old clients that don't get updates (e.g. old android, iphone <= 4).
# security.acme.defaults.extraLegoFlags = [
security.acme.certs."uninsane.org" = rec {
# ISRG Root X1 results in lets encrypt sending the same chain as default,
# just without the final ISRG Root X1 ← DST Root CA X3 link.
# i.e. we could alternative clip the last item and achieve the exact same thing.
extraLegoRunFlags = [
"--preferred-chain" "ISRG Root X1"
];
extraLegoRenewFlags = extraLegoRunFlags;
};
# TODO: alternatively, we could clip the last cert IF it's expired,
# optionally outputting that to a new cert file.
# security.acme.defaults.postRun = "";
# create a self-signed SSL certificate for use with literally any domain.
# browsers will reject this, but proxies and local testing tools can be configured
# to accept it.
system.activationScripts.generate-x509-self-signed.text = ''
mkdir -p /var/www/certs/wildcard
test -f /var/www/certs/wildcard/key.pem || ${lib.getExe pkgs.openssl} \
req -x509 -newkey rsa:4096 \
-keyout /var/www/certs/wildcard/key.pem \
-out /var/www/certs/wildcard/cert.pem \
-sha256 -nodes -days 3650 \
-addext 'subjectAltName=DNS:*' \
-subj '/CN=self-signed'
chmod 640 /var/www/certs/wildcard/{key,cert}.pem
chown root:nginx /var/www/certs/wildcard /var/www/certs/wildcard/{key,cert}.pem
'';
}

View File

@@ -0,0 +1,111 @@
# docs: <https://nixos.wiki/wiki/Nginx>
# docs: <https://nginx.org/en/docs/>
{ lib, pkgs, ... }:
{
imports = [
./uninsane.org.nix
./waka.laka.osaka
];
sane.ports.ports."80" = {
protocol = [ "tcp" ];
visibleTo.lan = true;
visibleTo.ovpns = true; # so that letsencrypt can procure a cert for the mx record
visibleTo.doof = true;
description = "colin-http-uninsane.org";
};
sane.ports.ports."443" = {
protocol = [ "tcp" ];
visibleTo.lan = true;
visibleTo.doof = true;
description = "colin-https-uninsane.org";
};
services.nginx.enable = true;
users.users.nginx.extraGroups = [ "anubis" ];
# nginxStable is one release behind nginxMainline.
# nginx itself recommends running mainline; nixos defaults to stable.
# services.nginx.package = pkgs.nginxMainline;
# XXX(2024-07-31): nixos defaults to zlib-ng -- supposedly more performant, but spams log with
# "gzip filter failed to use preallocated memory: ..."
# XXX(2025-07-24): "gzip filter" spam is gone => use default nginx package
# services.nginx.package = pkgs.nginxMainline.override { zlib = pkgs.zlib; };
services.nginx.appendConfig = ''
# use 1 process per core.
# may want to increase worker_connections too, but `ulimit -n` must be increased first.
worker_processes auto;
'';
# this is the standard `combined` log format, with the addition of $host
# so that we have the virtualHost in the log.
# KEEP IN SYNC WITH GOACCESS
# goaccess calls this VCOMBINED:
# - <https://gist.github.com/jyap808/10570005>
services.nginx.commonHttpConfig = ''
log_format vcombined '$host:$server_port $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referrer" "$http_user_agent"';
access_log /var/log/nginx/private.log vcombined;
'';
# enables gzip and sets gzip_comp_level = 5
services.nginx.recommendedGzipSettings = true;
# enables zstd and sets zstd_comp_level = 9
# services.nginx.recommendedZstdSettings = true; #< XXX(2025-07-18): nginx zstd integration is unmaintained in NixOS
# enables OCSP stapling (so clients don't need contact the OCSP server -- i do instead)
# - doesn't seem to, actually: <https://www.ssllabs.com/ssltest/analyze.html?d=uninsane.org>
# caches TLS sessions for 10m
services.nginx.recommendedTlsSettings = true;
# enables sendfile, tcp_nopush, tcp_nodelay, keepalive_timeout 65
services.nginx.recommendedOptimisation = true;
# serve any site not otherwise declared, if it's static.
# because we define it dynamically, SSL isn't trivial. support only http
# documented <https://nginx.org/en/docs/http/ngx_http_core_module.html#server_name>
services.nginx.virtualHosts."~^(?<domain>.+)$" = {
default = true;
addSSL = true;
enableACME = false;
sslCertificate = "/var/www/certs/wildcard/cert.pem";
sslCertificateKey = "/var/www/certs/wildcard/key.pem";
# sslCertificate = "/var/lib/acme/.minica/cert.pem";
# sslCertificateKey = "/var/lib/acme/.minica/key.pem";
# serverName = null;
locations."/" = {
# somehow this doesn't escape -- i get error 400 if i:
# curl 'http://..' --resolve '..:80:127.0.0.1'
root = "/var/www/sites/$domain";
# tryFiles = "$domain/$uri $domain/$uri/ =404";
};
};
security.acme.acceptTerms = true;
security.acme.defaults.email = "admin.acme@uninsane.org";
sane.persist.sys.byStore.plaintext = [
{ user = "acme"; group = "acme"; path = "/var/lib/acme"; method = "bind"; }
];
sane.persist.sys.byStore.private = [
{ user = "colin"; group = "users"; path = "/var/www/sites"; method = "bind"; }
];
sane.persist.sys.byStore.ephemeral = [
# logs *could* be persisted to private storage, but then there's the issue of
# "what if servo boots, isn't unlocked, and the whole / tmpfs is consumed by logs"
{ user = "nginx"; group = "nginx"; path = "/var/log/nginx"; method = "bind"; }
];
# create a self-signed SSL certificate for use with literally any domain.
# browsers will reject this, but proxies and local testing tools can be configured
# to accept it.
system.activationScripts.generate-x509-self-signed.text = ''
mkdir -p /var/www/certs/wildcard
test -f /var/www/certs/wildcard/key.pem || ${lib.getExe pkgs.openssl} \
req -x509 -newkey rsa:4096 \
-keyout /var/www/certs/wildcard/key.pem \
-out /var/www/certs/wildcard/cert.pem \
-sha256 -nodes -days 3650 \
-addext 'subjectAltName=DNS:*' \
-subj '/CN=self-signed'
chmod 640 /var/www/certs/wildcard/{key,cert}.pem
chown root:nginx /var/www/certs/wildcard /var/www/certs/wildcard/{key,cert}.pem
'';
}

View File

@@ -0,0 +1,132 @@
{ pkgs, ... }:
{
# alternative way to link stuff into the share:
# sane.fs."/var/www/sites/uninsane.org/share/Ubunchu".mount.bind = "/var/media/Books/Visual/HiroshiSeo/Ubunchu";
# sane.fs."/var/media/Books/Visual/HiroshiSeo/Ubunchu".dir = {};
services.nginx.virtualHosts."uninsane.org" = {
# a lot of places hardcode https://uninsane.org,
# and then when we mix http + non-https, we get CORS violations
# and things don't look right. so force SSL.
forceSSL = true;
enableACME = true;
# extraConfig = ''
# # "public" log so requests show up in goaccess metrics
# access_log /var/log/nginx/public.log vcombined;
# '';
locations."/" = {
root = "${pkgs.uninsane-dot-org}/share/uninsane-dot-org";
tryFiles = "$uri $uri/ @fallback";
};
# unversioned files
locations."@fallback" = {
root = "/var/www/sites/uninsane.org";
extraConfig = ''
# instruct Google to not index these pages.
# see: <https://developers.google.com/search/docs/crawling-indexing/robots-meta-tag#xrobotstag>
add_header X-Robots-Tag 'none, noindex, nofollow';
# best-effort attempt to block archive.org from archiving these pages.
# reply with 403: Forbidden
# User Agent is *probably* "archive.org_bot"; maybe used to be "ia_archiver"
# source: <https://archive.org/details/archive.org_bot>
# additional UAs: <https://github.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker>
#
# validate with: `curl -H 'User-Agent: "bot;archive.org_bot;like: something else"' -v https://uninsane.org/dne`
if ($http_user_agent ~* "(?:\b)archive.org_bot(?:\b)") {
return 403;
}
if ($http_user_agent ~* "(?:\b)archive.org(?:\b)") {
return 403;
}
if ($http_user_agent ~* "(?:\b)ia_archiver(?:\b)") {
return 403;
}
'';
};
# uninsane.org/share/foo => /var/www/sites/uninsane.org/share/foo.
# special-cased to enable directory listings
locations."/share" = {
root = "/var/www/sites/uninsane.org";
extraConfig = ''
# autoindex => render directory listings
autoindex on;
# don't follow any symlinks when serving files
# otherwise it allows a directory escape
disable_symlinks on;
'';
};
locations."/share/Milkbags/" = {
alias = "/var/media/Videos/Milkbags/";
extraConfig = ''
# autoindex => render directory listings
autoindex on;
# don't follow any symlinks when serving files
# otherwise it allows a directory escape
disable_symlinks on;
'';
};
locations."/share/Ubunchu/" = {
alias = "/var/media/Books/Visual/HiroshiSeo/Ubunchu/";
extraConfig = ''
# autoindex => render directory listings
autoindex on;
# don't follow any symlinks when serving files
# otherwise it allows a directory escape
disable_symlinks on;
'';
};
# allow matrix users to discover that @user:uninsane.org is reachable via matrix.uninsane.org
locations."= /.well-known/matrix/server".extraConfig =
let
# use 443 instead of the default 8448 port to unite
# the client-server and server-server port for simplicity
server = { "m.server" = "matrix.uninsane.org:443"; };
in ''
add_header Content-Type application/json;
return 200 '${builtins.toJSON server}';
'';
locations."= /.well-known/matrix/client".extraConfig =
let
client = {
"m.homeserver" = { "base_url" = "https://matrix.uninsane.org"; };
"m.identity_server" = { "base_url" = "https://vector.im"; };
};
# ACAO required to allow element-web on any URL to request this json file
in ''
add_header Content-Type application/json;
add_header Access-Control-Allow-Origin *;
return 200 '${builtins.toJSON client}';
'';
# static URLs might not be aware of .well-known (e.g. registration confirmation URLs),
# so hack around that.
locations."/_matrix".extraConfig = "return 301 https://matrix.uninsane.org$request_uri;";
locations."/_synapse".extraConfig = "return 301 https://matrix.uninsane.org$request_uri;";
# allow ActivityPub clients to discover how to reach @user@uninsane.org
# see: https://git.pleroma.social/pleroma/pleroma/-/merge_requests/3361/
# not sure this makes sense while i run multiple AP services (pleroma, lemmy)
# locations."/.well-known/nodeinfo" = {
# proxyPass = "http://127.0.0.1:4000";
# extraConfig = pleromaExtraConfig;
# };
# redirect common feed URIs to the canonical feed
locations."= /atom".extraConfig = "return 301 /atom.xml;";
locations."= /feed".extraConfig = "return 301 /atom.xml;";
locations."= /feed.xml".extraConfig = "return 301 /atom.xml;";
locations."= /rss".extraConfig = "return 301 /atom.xml;";
locations."= /rss.xml".extraConfig = "return 301 /atom.xml;";
locations."= /blog/atom".extraConfig = "return 301 /atom.xml;";
locations."= /blog/atom.xml".extraConfig = "return 301 /atom.xml;";
locations."= /blog/feed".extraConfig = "return 301 /atom.xml;";
locations."= /blog/feed.xml".extraConfig = "return 301 /atom.xml;";
locations."= /blog/rss".extraConfig = "return 301 /atom.xml;";
locations."= /blog/rss.xml".extraConfig = "return 301 /atom.xml;";
};
}

View File

@@ -0,0 +1,35 @@
{ config, pkgs, ... }:
let
wakaLakaOsaka = pkgs.linkFarm "waka-laka-osaka" {
"index.html" = ./index.html;
"waka.laka.for.osaka.mp4" = pkgs.fetchurl {
# saved from: <https://www.youtube.com/watch?v=ehB_7bBKprY>
url = "https://uninsane.org/share/Milkbags/PG_Plays_Video_Games-Waka_Laka_For_Osaka_4K.mp4";
hash = "sha256-UW0qR4btX4pZ1bJp4Oxk20m3mvQGj9HweLKO27JBTFs=";
};
};
in
{
services.nginx.virtualHosts."laka.osaka" = {
addSSL = true;
enableACME = true;
locations."/" = {
# redirect everything to waka.laka.osaka
return = "301 https://waka.laka.osaka$request_uri";
};
};
services.nginx.virtualHosts."waka.laka.osaka" = {
addSSL = true;
enableACME = true;
locations."/" = {
root = wakaLakaOsaka;
};
};
sane.dns.zones."laka.osaka".inet = {
SOA."@" = config.sane.dns.zones."uninsane.org".inet.SOA."@";
A."@" = config.sane.dns.zones."uninsane.org".inet.A."@";
NS."@" = config.sane.dns.zones."uninsane.org".inet.NS."@";
CNAME."waka" = "native.uninsane.org.";
};
}

View File

@@ -0,0 +1,46 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width initial-scale=1" />
<meta name="description" content="Waka Laka (for Osaka)" />
<title>Waka Laka (for Osaka)</title>
<style>
html,body {
width: 100%;
height: 100%;
max-width: 100%;
max-height: 100%;
}
* {
margin: 0px;
padding: 0px;
border: 0px;
}
.bg-image {
width: 100%;
height: 100%;
min-width: 100%;
min-height: 100%;
position: fixed;
background-repeat: no-repeat;
background-position: 50% 50%;
background-size: contain;
}
body {
background-color: #000000;
}
</style>
</head>
<body>
<!-- TODO: how to autoplay video _without_ it being muted? -->
<video class="bg-image" id="waka-video" width="1440" height="1080"
autoplay loop muted
onclick="document.getElementById('waka-video').muted = !document.getElementById('waka-video').muted;"
>
<!-- from https://www.youtube.com/watch?v=ehB_7bBKprY -->
<!-- original and more info at https://www.aquilinestudios.org/wakalaka.html -->
<source src="waka.laka.for.osaka.mp4" type="video/mp4">
</video>
</body>
</html>

View File

@@ -6,7 +6,7 @@ lib.optionalAttrs false # disabled until i can be sure it's not gonna OOM my se
description = "build a nixos image with all updated deps";
path = with pkgs; [ coreutils git nix ];
script = ''
working=$(mktemp -d /tmp/nixos-prebuild.XXXXXX)
working=$(mktemp -d nixos-prebuild.XXXXXX --tmpdir)
pushd "$working"
git clone https://git.uninsane.org/colin/nix-files.git \
&& cd nix-files \

View File

@@ -14,207 +14,209 @@ let
# logLevel = "debug";
in
{
sane.persist.sys.byStore.private = [
# contains media i've uploaded to the server
{ user = "pleroma"; group = "pleroma"; path = "/var/lib/pleroma"; method = "bind"; }
];
services.pleroma.enable = true;
services.pleroma.secretConfigFile = config.sops.secrets.pleroma_secrets.path;
services.pleroma.configs = [
''
import Config
config = lib.mkIf (config.sane.maxBuildCost >= 2) {
sane.persist.sys.byStore.private = [
# contains media i've uploaded to the server
{ user = "pleroma"; group = "pleroma"; path = "/var/lib/pleroma"; method = "bind"; }
];
services.pleroma.enable = true;
services.pleroma.secretConfigFile = config.sops.secrets.pleroma_secrets.path;
services.pleroma.configs = [
''
import Config
config :pleroma, Pleroma.Web.Endpoint,
url: [host: "fed.uninsane.org", scheme: "https", port: 443],
http: [ip: {127, 0, 0, 1}, port: 4040]
# secret_key_base: "{secrets.pleroma.secret_key_base}",
# signing_salt: "{secrets.pleroma.signing_salt}"
config :pleroma, Pleroma.Web.Endpoint,
url: [host: "fed.uninsane.org", scheme: "https", port: 443],
http: [ip: {127, 0, 0, 1}, port: 4040]
# secret_key_base: "{secrets.pleroma.secret_key_base}",
# signing_salt: "{secrets.pleroma.signing_salt}"
config :pleroma, :instance,
name: "Perfectly Sane",
description: "Single-user Pleroma instance",
email: "admin.pleroma@uninsane.org",
notify_email: "notify.pleroma@uninsane.org",
limit: 5000,
registrations_open: true,
account_approval_required: true,
max_pinned_statuses: 5,
external_user_synchronization: true
config :pleroma, :instance,
name: "Perfectly Sane",
description: "Single-user Pleroma instance",
email: "admin.pleroma@uninsane.org",
notify_email: "notify.pleroma@uninsane.org",
limit: 5000,
registrations_open: true,
account_approval_required: true,
max_pinned_statuses: 5,
external_user_synchronization: true
# docs: https://hexdocs.pm/swoosh/Swoosh.Adapters.Sendmail.html
# test mail config with sudo -u pleroma ./bin/pleroma_ctl email test --to someone@somewhere.net
config :pleroma, Pleroma.Emails.Mailer,
enabled: true,
adapter: Swoosh.Adapters.Sendmail,
cmd_path: "${lib.getExe' pkgs.postfix "sendmail"}"
# docs: https://hexdocs.pm/swoosh/Swoosh.Adapters.Sendmail.html
# test mail config with sudo -u pleroma ./bin/pleroma_ctl email test --to someone@somewhere.net
config :pleroma, Pleroma.Emails.Mailer,
enabled: true,
adapter: Swoosh.Adapters.Sendmail,
cmd_path: "${lib.getExe' pkgs.postfix "sendmail"}"
config :pleroma, Pleroma.User,
restricted_nicknames: [ "admin", "uninsane", "root" ]
config :pleroma, Pleroma.User,
restricted_nicknames: [ "admin", "uninsane", "root" ]
config :pleroma, :media_proxy,
enabled: false,
redirect_on_failure: true
#base_url: "https://cache.pleroma.social"
config :pleroma, :media_proxy,
enabled: false,
redirect_on_failure: true
#base_url: "https://cache.pleroma.social"
# see for reference:
# - `force_custom_plan`: <https://docs.pleroma.social/backend/configuration/postgresql/#disable-generic-query-plans>
config :pleroma, Pleroma.Repo,
adapter: Ecto.Adapters.Postgres,
username: "pleroma",
database: "pleroma",
hostname: "localhost",
pool_size: 10,
prepare: :named,
parameters: [
plan_cache_mode: "force_custom_plan"
]
# XXX: prepare: :named is needed only for PG <= 12
# prepare: :named,
# password: "{secrets.pleroma.db_password}",
# see for reference:
# - `force_custom_plan`: <https://docs.pleroma.social/backend/configuration/postgresql/#disable-generic-query-plans>
config :pleroma, Pleroma.Repo,
adapter: Ecto.Adapters.Postgres,
username: "pleroma",
database: "pleroma",
hostname: "localhost",
pool_size: 10,
prepare: :named,
parameters: [
plan_cache_mode: "force_custom_plan"
]
# XXX: prepare: :named is needed only for PG <= 12
# prepare: :named,
# password: "{secrets.pleroma.db_password}",
# Configure web push notifications
config :web_push_encryption, :vapid_details,
subject: "mailto:notify.pleroma@uninsane.org"
# public_key: "{secrets.pleroma.vapid_public_key}",
# private_key: "{secrets.pleroma.vapid_private_key}"
# Configure web push notifications
config :web_push_encryption, :vapid_details,
subject: "mailto:notify.pleroma@uninsane.org"
# public_key: "{secrets.pleroma.vapid_public_key}",
# private_key: "{secrets.pleroma.vapid_private_key}"
# config :joken, default_signer: "{secrets.pleroma.joken_default_signer}"
# config :joken, default_signer: "{secrets.pleroma.joken_default_signer}"
config :pleroma, :database, rum_enabled: false
config :pleroma, :instance, static_dir: "/var/lib/pleroma/instance/static"
config :pleroma, Pleroma.Uploaders.Local, uploads: "/var/lib/pleroma/uploads"
config :pleroma, configurable_from_database: false
config :pleroma, :database, rum_enabled: false
config :pleroma, :instance, static_dir: "/var/lib/pleroma/instance/static"
config :pleroma, Pleroma.Uploaders.Local, uploads: "/var/lib/pleroma/uploads"
config :pleroma, configurable_from_database: false
# strip metadata from uploaded images
config :pleroma, Pleroma.Upload, filters: [Pleroma.Upload.Filter.Exiftool.StripLocation]
# strip metadata from uploaded images
config :pleroma, Pleroma.Upload, filters: [Pleroma.Upload.Filter.Exiftool.StripLocation]
# fix log spam: <https://git.pleroma.social/pleroma/pleroma/-/issues/1659>
# specifically, remove LAN addresses from `reserved`
config :pleroma, Pleroma.Web.Plugs.RemoteIp,
enabled: true,
reserved: ["127.0.0.0/8", "::1/128", "fc00::/7", "172.16.0.0/12"]
# fix log spam: <https://git.pleroma.social/pleroma/pleroma/-/issues/1659>
# specifically, remove LAN addresses from `reserved`
config :pleroma, Pleroma.Web.Plugs.RemoteIp,
enabled: true,
reserved: ["127.0.0.0/8", "::1/128", "fc00::/7", "172.16.0.0/12"]
# TODO: GET /api/pleroma/captcha is broken
# there was a nixpkgs PR to fix this around 2022/10 though.
config :pleroma, Pleroma.Captcha,
enabled: false,
method: Pleroma.Captcha.Native
# TODO: GET /api/pleroma/captcha is broken
# there was a nixpkgs PR to fix this around 2022/10 though.
config :pleroma, Pleroma.Captcha,
enabled: false,
method: Pleroma.Captcha.Native
# (enabled by colin)
# Enable Strict-Transport-Security once SSL is working:
config :pleroma, :http_security,
sts: true
# (enabled by colin)
# Enable Strict-Transport-Security once SSL is working:
config :pleroma, :http_security,
sts: true
# docs: https://docs.pleroma.social/backend/configuration/cheatsheet/#logger
config :logger,
backends: [{ExSyslogger, :ex_syslogger}]
# docs: https://docs.pleroma.social/backend/configuration/cheatsheet/#logger
config :logger,
backends: [{ExSyslogger, :ex_syslogger}]
config :logger, :ex_syslogger,
level: :${logLevel}
config :logger, :ex_syslogger,
level: :${logLevel}
# policies => list of message rewriting facilities to be enabled
# transparence => whether to publish these rules in node_info (and /about)
config :pleroma, :mrf,
policies: [Pleroma.Web.ActivityPub.MRF.SimplePolicy],
transparency: true
# policies => list of message rewriting facilities to be enabled
# transparence => whether to publish these rules in node_info (and /about)
config :pleroma, :mrf,
policies: [Pleroma.Web.ActivityPub.MRF.SimplePolicy],
transparency: true
# reject => { host, reason }
config :pleroma, :mrf_simple,
reject: [ {"threads.net", "megacorp"}, {"*.threads.net", "megacorp"} ]
# reject: [ [host: "threads.net", reason: "megacorp"], [host: "*.threads.net", reason: "megacorp"] ]
# reject => { host, reason }
config :pleroma, :mrf_simple,
reject: [ {"threads.net", "megacorp"}, {"*.threads.net", "megacorp"} ]
# reject: [ [host: "threads.net", reason: "megacorp"], [host: "*.threads.net", reason: "megacorp"] ]
# XXX colin: not sure if this actually _does_ anything
# better to steal emoji from other instances?
# - <https://docs.pleroma.social/backend/configuration/cheatsheet/#mrf_steal_emoji>
config :pleroma, :emoji,
shortcode_globs: ["/emoji/**/*.png"],
groups: [
"Cirno": "/emoji/cirno/*.png",
"Kirby": "/emoji/kirby/*.png",
"Bun": "/emoji/bun/*.png",
"Yuru Camp": "/emoji/yuru_camp/*.png",
]
''
];
# XXX colin: not sure if this actually _does_ anything
# better to steal emoji from other instances?
# - <https://docs.pleroma.social/backend/configuration/cheatsheet/#mrf_steal_emoji>
config :pleroma, :emoji,
shortcode_globs: ["/emoji/**/*.png"],
groups: [
"Cirno": "/emoji/cirno/*.png",
"Kirby": "/emoji/kirby/*.png",
"Bun": "/emoji/bun/*.png",
"Yuru Camp": "/emoji/yuru_camp/*.png",
]
''
];
systemd.services.pleroma.path = [
# something inside pleroma invokes `sh` w/o specifying it by path, so this is needed to allow pleroma to start
pkgs.bash
# used by Pleroma to strip geo tags from uploads
pkgs.exiftool
# config.sane.programs.exiftool.package #< XXX(2024-10-20): breaks image uploading
# i saw some errors when pleroma was shutting down about it not being able to find `awk`. probably not critical
# config.sane.programs.gawk.package
# needed for email operations like password reset
pkgs.postfix
];
systemd.services.pleroma.path = [
# something inside pleroma invokes `sh` w/o specifying it by path, so this is needed to allow pleroma to start
pkgs.bash
# used by Pleroma to strip geo tags from uploads
pkgs.exiftool
# config.sane.programs.exiftool.package #< XXX(2024-10-20): breaks image uploading
# i saw some errors when pleroma was shutting down about it not being able to find `awk`. probably not critical
# config.sane.programs.gawk.package
# needed for email operations like password reset
pkgs.postfix
];
systemd.services.pleroma = {
# postgres can be slow to service early requests, preventing pleroma from starting on the first try
serviceConfig.Restart = "on-failure";
serviceConfig.RestartSec = "10s";
systemd.services.pleroma = {
# postgres can be slow to service early requests, preventing pleroma from starting on the first try
serviceConfig.Restart = "on-failure";
serviceConfig.RestartSec = "10s";
# hardening (systemd-analyze security pleroma)
# XXX(2024-07-28): this hasn't been rigorously tested:
# possible that i've set something too strict and won't notice right away
# make sure to test:
# - image/media uploading
serviceConfig.CapabilityBoundingSet = lib.mkForce [ "" "" ]; # nixos default is `~CAP_SYS_ADMIN`
serviceConfig.LockPersonality = true;
serviceConfig.NoNewPrivileges = true;
serviceConfig.MemoryDenyWriteExecute = true;
serviceConfig.PrivateDevices = lib.mkForce true; #< dunno why nixpkgs has this set false; it seems to work as true
serviceConfig.PrivateMounts = true;
serviceConfig.PrivateTmp = true;
serviceConfig.PrivateUsers = true;
# hardening (systemd-analyze security pleroma)
# XXX(2024-07-28): this hasn't been rigorously tested:
# possible that i've set something too strict and won't notice right away
# make sure to test:
# - image/media uploading
serviceConfig.CapabilityBoundingSet = lib.mkForce [ "" "" ]; # nixos default is `~CAP_SYS_ADMIN`
serviceConfig.LockPersonality = true;
serviceConfig.NoNewPrivileges = true;
serviceConfig.MemoryDenyWriteExecute = true;
serviceConfig.PrivateDevices = lib.mkForce true; #< dunno why nixpkgs has this set false; it seems to work as true
serviceConfig.PrivateMounts = true;
serviceConfig.PrivateTmp = true;
serviceConfig.PrivateUsers = true;
serviceConfig.ProtectProc = "invisible";
serviceConfig.ProcSubset = "all"; #< needs /proc/sys/kernel/overflowuid for bwrap
serviceConfig.ProtectProc = "invisible";
serviceConfig.ProcSubset = "all"; #< needs /proc/sys/kernel/overflowuid for bwrap
serviceConfig.ProtectClock = true;
serviceConfig.ProtectControlGroups = true;
serviceConfig.ProtectHome = true;
serviceConfig.ProtectKernelModules = true;
serviceConfig.ProtectSystem = lib.mkForce "strict";
serviceConfig.RemoveIPC = true;
serviceConfig.RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6 AF_NETLINK";
serviceConfig.ProtectClock = true;
serviceConfig.ProtectControlGroups = true;
serviceConfig.ProtectHome = true;
serviceConfig.ProtectKernelModules = true;
serviceConfig.ProtectSystem = lib.mkForce "strict";
serviceConfig.RemoveIPC = true;
serviceConfig.RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6 AF_NETLINK";
serviceConfig.RestrictSUIDSGID = true;
serviceConfig.SystemCallArchitectures = "native";
serviceConfig.SystemCallFilter = [ "@system-service" "@mount" "@sandbox" ]; #< "sandbox" might not actually be necessary
serviceConfig.RestrictSUIDSGID = true;
serviceConfig.SystemCallArchitectures = "native";
serviceConfig.SystemCallFilter = [ "@system-service" "@mount" "@sandbox" ]; #< "sandbox" might not actually be necessary
serviceConfig.ProtectHostname = false; #< else brap can't mount /proc
serviceConfig.ProtectKernelLogs = false; #< else breaks exiftool ("bwrap: Can't mount proc on /newroot/proc: Operation not permitted")
serviceConfig.ProtectKernelTunables = false; #< else breaks exiftool
serviceConfig.RestrictNamespaces = false; # media uploads require bwrap
};
serviceConfig.ProtectHostname = false; #< else brap can't mount /proc
serviceConfig.ProtectKernelLogs = false; #< else breaks exiftool ("bwrap: Can't mount proc on /newroot/proc: Operation not permitted")
serviceConfig.ProtectKernelTunables = false; #< else breaks exiftool
serviceConfig.RestrictNamespaces = false; # media uploads require bwrap
};
# this is required to allow pleroma to send email.
# raw `sendmail` works, but i think pleroma's passing it some funny flags or something, idk.
# hack to fix that.
users.users.pleroma.extraGroups = [ "postdrop" ];
# this is required to allow pleroma to send email.
# raw `sendmail` works, but i think pleroma's passing it some funny flags or something, idk.
# hack to fix that.
users.users.pleroma.extraGroups = [ "postdrop" ];
# Pleroma server and web interface
# TODO: enable publog?
services.nginx.virtualHosts."fed.uninsane.org" = {
forceSSL = true; # pleroma redirects to https anyway
enableACME = true;
# inherit kTLS;
locations."/" = {
proxyPass = "http://127.0.0.1:4040";
recommendedProxySettings = true;
# documented: https://git.pleroma.social/pleroma/pleroma/-/blob/develop/installation/pleroma.nginx
extraConfig = ''
# client_max_body_size defines the maximum upload size
client_max_body_size 16m;
'';
# Pleroma server and web interface
# TODO: enable publog?
services.nginx.virtualHosts."fed.uninsane.org" = {
forceSSL = true; # pleroma redirects to https anyway
enableACME = true;
# inherit kTLS;
locations."/" = {
proxyPass = "http://127.0.0.1:4040";
recommendedProxySettings = true;
# documented: https://git.pleroma.social/pleroma/pleroma/-/blob/develop/installation/pleroma.nginx
extraConfig = ''
# client_max_body_size defines the maximum upload size
client_max_body_size 16m;
'';
};
};
sane.dns.zones."uninsane.org".inet.CNAME."fed" = "native";
sops.secrets."pleroma_secrets" = {
owner = config.users.users.pleroma.name;
};
};
sane.dns.zones."uninsane.org".inet.CNAME."fed" = "native";
sops.secrets."pleroma_secrets" = {
owner = config.users.users.pleroma.name;
};
}

View File

@@ -1,4 +1,4 @@
{ pkgs, ... }:
{ lib, pkgs, ... }:
let
GiB = n: MiB 1024*n;
@@ -35,7 +35,6 @@ in
services.postgresql.package = pkgs.postgresql_16;
# XXX colin: for a proper deploy, we'd want to include something for Pleroma here too.
# services.postgresql.initialScript = pkgs.writeText "synapse-init.sql" ''
# CREATE ROLE "matrix-synapse" WITH LOGIN PASSWORD '<password goes here>';
@@ -46,10 +45,10 @@ in
# LC_CTYPE = "C";
# '';
# perf tuning
# - for recommended values see: <https://pgtune.leopard.in.ua/>
# - for official docs (sparse), see: <https://www.postgresql.org/docs/11/config-setting.html#CONFIG-SETTING-CONFIGURATION-FILE>
services.postgresql.settings = {
# perf tuning
# - for recommended values see: <https://pgtune.leopard.in.ua/>
# - for official docs (sparse), see: <https://www.postgresql.org/docs/11/config-setting.html#CONFIG-SETTING-CONFIGURATION-FILE>
# DB Version: 16
# OS Type: linux
# DB Type: web
@@ -73,8 +72,19 @@ in
max_parallel_workers_per_gather = 4;
max_parallel_workers = 12;
max_parallel_maintenance_workers = 4;
# DEBUG OPTIONS:
log_min_messages = "DEBUG1";
};
# regulate the restarts, so that systemd never disables it
systemd.services.postgresql.serviceConfig.Restart = lib.mkForce "on-failure";
systemd.services.postgresql.serviceConfig.RestartSec = 2;
systemd.services.postgresql.serviceConfig.RestartMaxDelaySec = 10;
systemd.services.postgresql.serviceConfig.RestartSteps = 4;
systemd.services.postgresql.serviceConfig.StartLimitBurst = 120;
# systemd.services.postgresql.serviceConfig.TimeoutStartSec = "14400s"; #< 14400 = 4 hours; recoveries are long
# daily backups to /var/backup
services.postgresqlBackup.enable = true;

View File

@@ -0,0 +1,81 @@
#!/bin/sh
# source: <https://gist.githubusercontent.com/troykelly/616df024050dd50744dde4a9579e152e/raw/fe84e53cedf0caa6903604894454629a15867439/reindex_and_refresh_collation.sh>
#
# run this whenever postgres complains like:
# > WARNING: database "gitea" has a collation version mismatch
# > DETAIL: The database was created using collation version 2.39, but the operating system provides version 2.40.
# > HINT: Rebuild all objects in this database that use the default collation and run ALTER DATABASE gitea REFRESH COLLATION VERSION, or build PostgreSQL with the right library version.
#
# this script checks which databases are in need of a collation update,
# and re-collates them as appropriate.
# invoking this script should have low perf impact in the non-upgrade case,
# so safe to do this as a cron job.
#
# invoke as postgres user
log_info() {
>&2 echo "$@"
}
list_databases() {
log_info "Retrieving list of databases from the PostgreSQL server..."
psql --dbname="postgres" -Atc \
"SELECT datname FROM pg_database WHERE datistemplate = false"
}
refresh_collation_version() {
local db=$1
log_info "Refreshing collation version for database: $db..."
psql --dbname="$db" -c \
"ALTER DATABASE \"$db\" REFRESH COLLATION VERSION;"
}
check_collation_mismatches() {
local error=
log_info "Checking for collation mismatches in all databases..."
# Loop through each database and check for mismatching collations in table columns.
while IFS= read -r db; do
if [ -n "$db" ]; then
log_info "Checking database: $db for collation mismatches..."
local mismatches=$(psql --dbname="$db" -Atc \
"SELECT 'Mismatch in table ' || table_name || ' column ' || column_name || ' with collation ' || collation_name
FROM information_schema.columns
WHERE collation_name IS NOT NULL AND collation_name <> 'default' AND table_schema = 'public'
EXCEPT
SELECT 'No mismatch - default collation of ' || datcollate || ' used.'
FROM pg_database WHERE datname = '$db';"
)
if [ -z "$mismatches" ]; then
log_info "No collation mismatches found in database: $db"
else
# Print an informational message to stderr.
log_info "Collation mismatches found in database: $db:"
log_info "$mismatches"
error=1
fi
fi
done
if [ -n "$error" ]; then
exit 1
fi
}
log_info "Starting the reindexing and collation refresh process for all databases..."
databases=$(list_databases)
if [ -z "$databases" ]; then
log_info "No databases found for reindexing or collation refresh. Please check connection details to PostgreSQL server."
exit 1
fi
for db in $databases; do
refresh_collation_version "$db"
done
# Checking for collation mismatches after reindexing and collation refresh.
# Pass the list of databases to the check_collation_mismatches function through stdin.
echo "$databases" | check_collation_mismatches
log_info "Reindexing and collation refresh process completed."

View File

@@ -173,7 +173,7 @@ in
domain = "conference.xmpp.uninsane.org";
}
];
uploadHttp.domain = "upload.xmpp.uninsane.org";
httpFileShare.domain = "upload.xmpp.uninsane.org";
virtualHosts = {
# "Prosody requires at least one enabled VirtualHost to function. You can
@@ -282,6 +282,7 @@ in
ntfy_binary = "${lib.getExe' pkgs.ntfy-sh "ntfy"}"
ntfy_topic = readAll("/run/secrets/ntfy-sh-topic")
'';
checkConfig = false; # secrets aren't available at build time
};
systemd.services.prosody = {

View File

@@ -36,6 +36,7 @@
locations."/" = {
proxyPass = "http://${config.sane.netns.ovpns.veth.netns.ipv4}:5030";
proxyWebsockets = true;
recommendedProxySettings = true;
};
};

View File

@@ -159,6 +159,7 @@ in
locations."/" = {
# proxyPass = "http://ovpns.uninsane.org:9091";
proxyPass = "http://${config.sane.netns.ovpns.veth.netns.ipv4}:9091";
recommendedProxySettings = true;
};
};

View File

@@ -3,8 +3,20 @@
# transmission invokes this with no args, and the following env vars:
# - TR_TORRENT_DIR: full path to the folder i told transmission to download it to.
# e.g. /var/media/torrents/Videos/Film/Jason.Bourne-2016
# optionally:
# e.g. "/var/media/torrents/Videos/Film/Jason.Bourne-2016"
# - TR_APP_VERSION
# - TR_TIME_LOCALTIME
# - TR_TORRENT_BYTES_DOWNLOADED
# - TR_TORRENT_HASH
# - TR_TORRENT_ID: local number to uniquely identify this torrent, used by e.g. transmission-remote.
# e.g. "67"
# - TR_TORRENT_LABELS
# - TR_TORRENT_NAME: file/folder name of the toplevel torrent item
# e.g. "Jason Bourne (2016) [2160p] [4K] [BluRay] [5.1] [YTS.MX]"
# - TR_TORRENT_PRIORITY
# - TR_TORRENT_TRACKERS
# optionally, set these variables for debugging (these are specific to my script and not used upstream):
# - TR_DRY_RUN=1
# - TR_DEBUG=1
@@ -24,7 +36,7 @@ debug() {
fi
}
echo "TR_TORRENT_DIR=$TR_TORRENT_DIR torrent-done $*"
echo "TR_TORRENT_DIR=$TR_TORRENT_DIR TR_TORRENT_NAME=$TR_TORRENT_NAME torrent-done $*"
if [[ "$TR_TORRENT_DIR" =~ ^.*freeleech.*$ ]]; then
# freeleech torrents have no place in my permanent library
@@ -33,20 +45,35 @@ if [[ "$TR_TORRENT_DIR" =~ ^.*freeleech.*$ ]]; then
fi
if ! [[ "$TR_TORRENT_DIR" =~ ^$DOWNLOAD_DIR/.*$ ]]; then
echo "unexpected torrent dir, aborting: $TR_TORRENT_DIR"
exit 0
exit 1
fi
TORRENT_PATH="$TR_TORRENT_DIR/$TR_TORRENT_NAME"
if [[ ! -e "$TORRENT_PATH" ]]; then
echo "torrent unexpectedly doesn't exist at $TORRENT_PATH. will try fallback"
TORRENT_PATH="$TR_TORRENT_DIR"
fi
if [[ -d "$TORRENT_PATH" ]]; then
# trailing slash so that rsync copies the directory contents, without creating an extra toplevel dir.
TORRENT_PATH="$TORRENT_PATH/"
elif [[ ! -e "$TORRENT_PATH" ]]; then
echo "torrent unexpectedly doesn't exist at TR_TORRENT_DIR=$TORRENT_PATH: bailing"
exit 1
fi
REL_DIR="${TR_TORRENT_DIR#$DOWNLOAD_DIR/}"
MEDIA_DIR="/var/media/$REL_DIR"
destructive mkdir -p "$(dirname "$MEDIA_DIR")"
destructive rsync -rlv "$TR_TORRENT_DIR/" "$MEDIA_DIR/"
destructive rsync -rlv "$TORRENT_PATH" "$MEDIA_DIR/"
# make the media rwx by anyone in the group
destructive find "$MEDIA_DIR" -type d -exec setfacl --recursive --modify d:g::rwx,o::rx {} \;
destructive find "$MEDIA_DIR" -type d -exec chmod g+rw,a+rx {} \;
destructive find "$MEDIA_DIR" -type f -exec chmod g+rw,a+r {} \;
# if there's a single directory inside the media dir, then inline that
# if there's a single directory inside the media dir, then inline that.
# TODO: this is probably obsolete now that i process TR_TORRENT_NAME
subdirs=("$MEDIA_DIR"/*)
debug "top-level items in torrent dir:" "${subdirs[@]}"
if [ ${#subdirs[@]} -eq 1 ]; then
@@ -61,10 +88,24 @@ fi
# -iname means "insensitive", but the syntax is NOT regex -- more similar to shell matching
destructive find "$MEDIA_DIR/" -type f \(\
-iname '*downloaded?from*' \
-o -iname 'source.txt' \
-o -iname '(xxxpav69).txt' \
-o -iname '*upcoming?releases*' \
-o -iname 'www.YTS*.jpg' \
-o -iname 'ETRG.mp4' \
-o -iname 'Encoded by*.txt' \
-o -iname 'PSArips.com.txt' \
-o -iname 'RARBG.com*' \
-o -iname 'RARBG.txt' \
-o -iname 'RARBG_DO_NOT_MIRROR.exe' \
-o -iname 'Tellytorrent.net.txt' \
-o -iname 'WWW.VPPV.LA.txt' \
-o -iname 'WWW.YIFY*.COM.jpg' \
-o -iname 'YIFY*.com.txt' \
-o -iname 'YTS*.com.txt' \
-o -iname 'YTSYify*.txt' \
-o -iname 'www.YTS*.jpg' \
\) -exec rm {} \;
# might want to keep, might want to remove:
# -o -iname 'info.txt'
# -o -iname 'source.txt'
# -o -iname 'sample.mkv'

View File

@@ -0,0 +1,6 @@
{ ... }:
{
imports = [
./shelvacu.nix
];
}

View File

@@ -0,0 +1,65 @@
{ lib, pkgs, ... }:
{
users.users.shelvacu = {
isNormalUser = true;
home = "/home/shelvacu";
subUidRanges = [
{ startUid=300000; count=1; }
];
group = "users";
initialPassword = lib.mkDefault "";
shell = pkgs.bash;
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKoy1TrmfhBGWtVedgOM1FB1oD2UdodN3LkBnnLx6Tug compute-deck"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAxAFFxQMXAgi+0cmGaNE/eAkVfEl91wafUqFIuAkI5I compute-deck-root"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINQ2c0GzlVMjV06CS7bWbCaAbzG2+7g5FCg/vClJPe0C fw"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGHLPOxRd68+DJ/bYmqn0wsgwwIcMSMyuU1Ya16hCb/m fw-root"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOre0FnYDm3arsFj9c/l5H2Q8mdmv7kmvq683pL4heru legtop"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINznGot+L8kYoVQqdLV/R17XCd1ILMoDCILOg+I3s5wC pixel9pro-nod"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDcRDekd8ZOYfQS5X95/yNof3wFYIbHqWeq4jY0+ywQX pro1x-nod"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJNFbzt0NHVTaptBI38YtwLG+AsmeNYy0Nr5yX2zZEPE root@vacuInstaller toptop-root"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICVeSzDkGTueZijB0xUa08e06ovAEwwZK/D+Cc7bo91g triple-dezert"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOtwtao/TXbiuQOYJbousRPVesVcb/2nP0PCFUec0Nv8 triple-dezert-root"
];
};
security.sudo.extraRules = [
{
users = [ "shelvacu" ];
runAs = "postgres";
commands = [
{
command = "ALL";
options = [ "NOPASSWD" ];
}
];
}
];
security.polkit.extraConfig = ''
// allow:
// - systemctl restart|start|stop SERVICE
polkit.addRule(function(action, subject) {
if (subject.user == "shelvacu" && action.id == "org.freedesktop.systemd1.manage-units") {
switch (action.lookup("verb")) {
// case "cancel":
// case "reenable":
case "restart":
// case "reload":
// case "reload-or-restart":
case "start":
case "stop":
// case "try-reload-or-restart":
// case "try-restart":
return polkit.Result.YES;
default:
}
}
})
'';
sane.persist.sys.byStore.private = [
{ path = "/home/shelvacu/persist"; user = "shelvacu"; group = "users"; mode = "0700"; }
];
}

View File

@@ -4,11 +4,12 @@
# useful emergency utils
boot.initrd.extraUtilsCommands = ''
copy_bin_and_libs ${lib.getExe' pkgs.btrfs-progs "btrfstune"}
copy_bin_and_libs ${lib.getExe' pkgs.util-linux "{cfdisk,lsblk,lscpu}"}
copy_bin_and_libs ${lib.getExe' pkgs.gptfdisk "{cgdisk,gdisk}"}
copy_bin_and_libs ${lib.getExe' pkgs.smartmontools "smartctl"}
copy_bin_and_libs ${lib.getExe' pkgs.e2fsprogs "resize2fs"}
copy_bin_and_libs ${lib.getExe' pkgs.gptfdisk "{cgdisk,gdisk}"}
copy_bin_and_libs ${lib.getExe' pkgs.mtools "mlabel"}
copy_bin_and_libs ${lib.getExe pkgs.nvme-cli}
copy_bin_and_libs ${lib.getExe' pkgs.smartmontools "smartctl"}
copy_bin_and_libs ${lib.getExe' pkgs.util-linux "{cfdisk,lsblk,lscpu}"}
'';
boot.kernelParams = [
"boot.shell_on_fail"
@@ -28,6 +29,7 @@
# simpler to keep near the latest kernel on all devices,
# and also makes certain that any weird system-level bugs i see aren't likely to be stale kernel bugs.
boot.kernelPackages = lib.mkDefault pkgs.linuxPackages_latest;
# boot.kernelPackages = lib.mkDefault pkgs.linuxPackages_testing;
# hack in the `boot.shell_on_fail` arg since that doesn't always seem to work.
boot.initrd.preFailCommands = "allowShell=1";
@@ -36,7 +38,12 @@
boot.consoleLogLevel = 7;
boot.loader.grub.enable = lib.mkDefault false;
boot.loader.generic-extlinux-compatible.enable = lib.mkDefault true;
# boot.loader.generic-extlinux-compatible.enable = lib.mkDefault true;
boot.loader.systemd-boot.enable = lib.mkDefault true;
boot.loader.systemd-boot.configurationLimit = lib.mkDefault 20;
boot.loader.systemd-boot.edk2-uefi-shell.enable = lib.mkDefault true;
boot.loader.systemd-boot.memtest86.enable = lib.mkDefault
(lib.meta.availableOn pkgs.stdenv.hostPlatform pkgs.memtest86plus);
hardware.enableAllFirmware = true; # firmware with licenses that don't allow for redistribution. fuck lawyers, fuck IP, give me the goddamn firmware.
# hardware.enableRedistributableFirmware = true; # proprietary but free-to-distribute firmware (extraneous to `enableAllFirmware` option)

View File

@@ -14,6 +14,7 @@
./programs
./quirks.nix
./secrets.nix
./snapper.nix
./ssh.nix
./systemd.nix
./users
@@ -29,6 +30,7 @@
sane.persist.enable = lib.mkDefault true;
sane.root-on-tmpfs = lib.mkDefault true;
sane.programs.sysadminUtils.enableFor.system = lib.mkDefault true;
sane.programs.sysadminExtraUtils.enableFor.system = lib.mkDefault true;
sane.programs.consoleUtils.enableFor.user.colin = lib.mkDefault true;
services.buffyboard.enable = true;

View File

@@ -1,12 +1,15 @@
# where to find good stuff?
# - universal search/directory: <https://podcastindex.org>
# - the full database is downloadable
# - find adjacent podcasts: <https://rephonic.com/graph>
# - charts: <https://rephonic.com/charts/apple/united-states/technology>
# - list of lists: <https://en.wikipedia.org/wiki/Category:Lists_of_podcasts>
# - podcasts w/ a community: <https://lemmyverse.net/communities?query=podcast>
# - podcast recs:
# - active lemmy: <https://slrpnk.net/c/podcasts>
# - old thread: <https://lemmy.ml/post/1565858>
#
# - paywall bypass / bootlegs: <https://jumble.top/>
{ lib, sane-data, ... }:
let
hourly = { freq = "hourly"; };
@@ -60,41 +63,48 @@ let
podcasts = [
(fromDb "404media.co/the-404-media-podcast" // tech)
(fromDb "acquiredlpbonussecretsecret.libsyn.com" // tech) # ACQ2 - more "Acquired" episodes
(fromDb "allinchamathjason.libsyn.com" // pol)
(fromDb "adventofcomputing.com" // tech) # computing history
(fromDb "api.oyez.org/podcasts/oral-arguments/2015" // pol) # Supreme Court Oral Arguments ("2015" in URL means nothing -- it's still updated)
(fromDb "anchor.fm/s/34c7232c/podcast/rss" // tech) # Civboot -- https://anchor.fm/civboot
(fromDb "anchor.fm/s/2da69154/podcast/rss" // tech) # POD OF JAKE -- https://podofjake.com/
(fromDb "bluecityblues.org.podcastpage.io" // pol) # hosts overlap with Seattle Nice
(fromDb "buzzsprout.com/2126417" // tech) # Mystery AI Hype Theater 3000
(fromDb "cast.postmarketos.org" // tech)
(fromDb "congressionaldish.libsyn.com" // pol) # Jennifer Briney
(fromDb "craphound.com" // pol) # Cory Doctorow -- both podcast & text entries
(fromDb "darknetdiaries.com" // tech)
(fromDb "dwarkeshpatel.com" // tech)
(fromDb "feeds.99percentinvisible.org/99percentinvisible" // pol) # 99% Invisible -- also available here: <https://feeds.simplecast.com/BqbsxVfO>
(fromDb "feeds.acast.com/public/shows/lawfare" // pol) # <https://www.lawfaremedia.org/podcasts-multimedia/podcast/the-lawfare-podcast>
(fromDb "feeds.buzzsprout.com/2412334.rss") # Matt Stoller's _Organized Money_ <https://www.organizedmoney.fm/>
(fromDb "feeds.eff.org/howtofixtheinternet" // pol)
(fromDb "feeds.feedburner.com/80000HoursPodcast" // rat)
(fromDb "feeds.feedburner.com/dancarlin/history" // rat)
(fromDb "feeds.feedburner.com/radiolab" // pol) # Radiolab -- also available here, but ONLY OVER HTTP: <http://feeds.wnyc.org/radiolab>
(fromDb "feeds.megaphone.fm/CHTAL4990341033" // pol) # ChinaTalk: https://www.chinatalk.media/podcast
(fromDb "feeds.megaphone.fm/GLT1412515089" // pol) # JRE: Joe Rogan Experience
(fromDb "feeds.megaphone.fm/behindthebastards" // pol) # also Maggie Killjoy
(fromDb "feeds.megaphone.fm/cspantheweekly" // pol)
(fromDb "feeds.megaphone.fm/econ102") # Noah Smith + Erik Torenberg <https://www.podpage.com/econ102/>
(fromDb "feeds.megaphone.fm/history102") # <https://www.podpage.com/history-102-with-whatifalthist/>
(fromDb "feeds.megaphone.fm/recodedecode" // tech) # The Verge - Decoder
(fromDb "feeds.megaphone.fm/thiswontlast" // tech) # <https://www.podpage.com/thiswontlast/>
(fromDb "feeds.megaphone.fm/unexplainable")
(fromDb "feeds.simplecast.com/wgl4xEgL" // rat) # Econ Talk
(fromDb "feeds.simplecast.com/xKJ93w_w" // uncat) # Atlas Obscura
(fromDb "feeds.simplecast.com/whlwDbyc" // tech) # Tech Lounge: <https://chrischinchilla.com/podcast/techlounge/>
(fromDb "feeds.transistor.fm/acquired" // tech)
(fromDb "feeds.transistor.fm/complex-systems-with-patrick-mckenzie-patio11" // tech) # Patrick Mackenzie (from Bits About Money)
(fromDb "feeds.twit.tv/floss.xml" // tech)
(fromDb "fulltimenix.com" // tech)
(fromDb "futureofcoding.org/episodes" // tech)
(fromDb "hackerpublicradio.org" // tech)
(fromDb "lastweekinai.com" // tech)
(fromDb "lexfridman.com/podcast" // rat)
(fromDb "linktr.ee/betteroffline" // pol)
(fromDb "linuxdevtime.com" // tech)
(fromDb "malicious.life" // tech)
(fromDb "mapspodcast.libsyn.com" // uncat) # Multidisciplinary Association for Psychedelic Studies
(fromDb "motherearthnewsandfriends.libsyn.com" // uncat) # off-grid living
(fromDb "microarch.club" // tech)
(fromDb "nocturnepodcast.org")
(fromDb "omegataupodcast.net" // tech) # 3/4 German; 1/4 eps are English
(fromDb "omny.fm/shows/cool-people-who-did-cool-stuff" // pol) # Maggie Killjoy -- referenced by Cory Doctorow
(fromDb "omny.fm/shows/money-stuff-the-podcast") # Matt Levine
@@ -102,41 +112,51 @@ let
(fromDb "omny.fm/shows/the-dollop-with-dave-anthony-and-gareth-reynolds") # The Dollop history/comedy
(fromDb "omny.fm/shows/weird-little-guys") # Cool Zone Media
(fromDb "originstories.libsyn.com" // uncat)
(fromDb "politicspoliticspolitics.com" // pol) # don't judge me. Justin Robert Young.
(fromDb "podcast.ergaster.org/@flintandsilicon" // tech) # Thib's podcast: public interest tech, gnome, etc: <https://fed.uninsane.org/users/$ALLO9MZ5g5CsQTCBH6>
(fromDb "podcast.sustainoss.org" // tech)
(fromDb "pods.media/api/rss/feed/channel/unchained" // tech) # cryptocurrency happenings; rec via patio11
(fromDb "politicalorphanage.libsyn.com" // pol)
(fromDb "reverseengineering.libsyn.com/rss" // tech) # UnNamed Reverse Engineering Podcast
(fromDb "rss.acast.com/ft-tech-tonic" // tech)
(fromDb "rss.art19.com/60-minutes" // pol)
(fromDb "rss.acast.com/ft-tech-tonic" // tech) # Financial Time's: Tech Tonic
(fromDb "rss.art19.com/the-portal" // rat) # Eric Weinstein
(fromDb "seattlenice.buzzsprout.com" // pol)
(fromDb "seattlenice.buzzsprout.com" // pol) # Seattle Nice
(fromDb "speedboatdope.com" // pol) # Chapo Trap House (premium feed)
(fromDb "srslywrong.com" // pol)
(fromDb "sharkbytes.transistor.fm" // tech) # Wireshark Podcast o_0
(fromDb "sharptech.fm/feed/podcast" // tech)
(fromDb "sscpodcast.libsyn.com" // rat) # Astral Codex Ten
(fromDb "sharptech.fm/feed/podcast" // tech) # Ben Thompson
(fromDb "sscpodcast.libsyn.com" // rat) # Astral Codex Ten; Scott Alexander
(fromDb "talesfromthebridge.buzzsprout.com" // tech) # Sci-Fi? has Peter Watts; author of No Moods, Ads or Cutesy Fucking Icons (rifters.com)
(fromDb "techtalesshow.com" // tech) # Corbin Davenport
(fromDb "techwontsave.us" // pol) # rec by Cory Doctorow
(fromDb "theamphour.com" // tech)
(fromDb "theamphour.com" // tech) # The Amp Hour
(fromDb "the-ben-marc-show.simplecast.com" // tech // pol) # Ben Horowitz + Marc Andreessen; love to hate em
(fromDb "timclicks.dev/compose-podcast" // tech) # Rust-heavy dev interviews
(fromDb "werenotwrong.fireside.fm" // pol)
(fromDb "werenotwrong.fireside.fm" // pol) # We're Not Wrong
(fromDb "whycast.podcast.audio/@whycast" // tech) # What Hackers Yearn [for]: <https://why2025.org/>
(mkPod "https://sfconservancy.org/casts/the-corresponding-source/feeds/ogg/" // tech)
# (fromDb "allinchamathjason.libsyn.com" // pol)
# (fromDb "feed.podbean.com/matrixlive/feed.xml" // tech) # Matrix (chat) Live
# (fromDb "feeds.libsyn.com/421877" // rat) # Less Wrong Curated
# (fromDb "feeds.megaphone.fm/hubermanlab" // uncat) # Daniel Huberman on sleep
# (fromDb "feeds.simplecast.com/54nAGcIl" // pol) # The Daily
# (fromDb "feeds.simplecast.com/82FI35Px" // pol) # Ezra Klein Show
# (fromDb "feeds.simplecast.com/l2i9YnTd" // tech // pol) # Hard Fork (NYtimes tech)
# (fromDb "feeds.simplecast.com/whlwDbyc" // tech) # Tech Lounge: <https://chrischinchilla.com/podcast/techlounge/>
# (fromDb "feeds.simplecast.com/xKJ93w_w" // uncat) # Atlas Obscura
# (fromDb "iheart.com/podcast/1119-away-days-podcast-reporti-275359753" // pol) # Away Days (Cool Zone Media)
# (fromDb "lastweekinai.com" // tech) # Last Week in AI
# (fromDb "mintcast.org" // tech)
# (fromDb "podcast.posttv.com/itunes/post-reports.xml" // pol)
# (fromDb "podcast.sustainoss.org" // tech) # "Sustainable tech", only... it somehow manages to avoid any tech which is actually sustainable, and most of the time doesn't even talk about Open Source Software (!). normie/surface-level/"feel good"
# (fromDb "podcast.thelinuxexp.com" // tech) # low-brow linux/foss PR announcements
# (fromDb "politicspoliticspolitics.com" // pol) # don't judge me. Justin Robert Young.
# (fromDb "rss.acast.com/deconstructed") # The Intercept - Deconstructed
# (fromDb "rss.acast.com/intercepted-with-jeremy-scahill") # The Intercept - Intercepted
# (fromDb "rss.art19.com/60-minutes" // pol)
# (fromDb "rss.art19.com/your-welcome" // pol) # Michael Malice - Your Welcome -- also available here: <https://origin.podcastone.com/podcast?categoryID2=2232>
# (fromDb "rss.prod.firstlook.media/deconstructed/podcast.rss" // pol) #< possible URL rot
# (fromDb "rss.prod.firstlook.media/intercepted/podcast.rss" // pol) #< possible URL rot
# (fromDb "sites.libsyn.com/438684" // humor) # Quorators - digging up *weird* Quota questions
# (fromDb "techwontsave.us" // pol) # rec by Cory Doctorow, but way too info-sparse
# (fromDb "trashfuturepodcast.podbean.com" // pol) # rec by Cory Doctorow, but way rambly
# (fromDb "wakingup.libsyn.com" // pol) # Sam Harris, but he just repeats himself now
# (mkPod "https://anchor.fm/s/21bc734/podcast/rss" // pol // infrequent) # Emerge: making sense of what's next -- <https://www.whatisemerging.com/emergepodcast>
@@ -259,20 +279,26 @@ let
(fromDb "youtube.com/@Exurb1a")
(fromDb "youtube.com/@hbomberguy")
(fromDb "youtube.com/@JackStauber")
(fromDb "youtube.com/@jaketran")
(fromDb "youtube.com/@kurzgesagt")
(fromDb "youtube.com/@mii_beta" // tech) # Baby Wogue / gnome reviewer
(fromDb "youtube.com/@Matrixdotorg" // tech) # Matrix Live
(fromDb "youtube.com/@NativLang")
(fromDb "youtube.com/@PolyMatter")
(fromDb "youtube.com/@scenesbyben" // pol) # video essays
(fromDb "youtube.com/@TechnologyConnections" // tech)
(fromDb "youtube.com/@tested" // tech) # Adam Savage
(fromDb "youtube.com/@theodd1sout")
(fromDb "youtube.com/@TomScottGo")
(fromDb "youtube.com/@TVW_Washington" // pol) # interviews with WA public officials
(fromDb "youtube.com/@veritasium")
(fromDb "youtube.com/@Vihart")
(fromDb "youtube.com/@InnuendoStudios" // pol) # breaks down the nastier political strategies, from a "politics is power" angle
# (fromDb "youtube.com/@CasuallyExplained" // pol)
# (fromDb "youtube.com/@ColdFusion")
# (fromDb "youtube.com/@rossmanngroup" // pol // tech) # Louis Rossmann
# (fromDb "youtube.com/@TheB1M")
# (fromDb "youtube.com/@tested" // tech) # Adam Savage (uploads too frequently)
# (fromDb "youtube.com/@Vox")
# (fromDb "youtube.com/@Vsauce") # they're all like 1-minute long videos now? what happened @Vsauce?
];

View File

@@ -24,9 +24,20 @@ let
type = fsType;
options = lib.concatStringsSep "," options;
wantedBy = [ "default.target" ];
after = [ "network-online.target" ];
after = [
"emergency.service"
"network-online.target"
];
requires = [ "network-online.target" ];
unitConfig.Conflicts = [
# emergency.service drops the user into a root shell;
# only accessible via physical TTY, but unmount sensitive data before that as a precaution.
"emergency.service"
];
# mountConfig.LazyUnmount = true; #< else it _ocassionally_ fails "target is busy"
mountConfig.ExecSearchPath = [ "/run/current-system/sw/bin" ];
mountConfig.User = "colin";
mountConfig.AmbientCapabilities = "CAP_SETPCAP CAP_SYS_ADMIN";
@@ -67,7 +78,8 @@ in
lib.mkMerge [
(ifSshAuthorized (remoteHome "crappy" {}))
(ifSshAuthorized (remoteHome "desko" {}))
(ifSshAuthorized (remoteHome "lappy" {}))
(ifSshAuthorized (remoteHome "flowy" {}))
# (ifSshAuthorized (remoteHome "lappy" {}))
(ifSshAuthorized (remoteHome "moby" { host = "moby-hn"; }))
(ifSshAuthorized (remoteHome "servo" {}))
]

View File

@@ -12,9 +12,7 @@ let
"stderr_path=/var/log/curlftpfs/servo-hn.stderr"
];
remoteServo = subdir: let
systemdBindName = utils.escapeSystemdPath "/mnt/servo/${subdir}";
in {
remoteServo = subdir: {
# sane.fs."/mnt/servo/${subdir}".mount.bind = "/mnt/.servo_ftp/${subdir}";
systemd.mounts = [{
where = "/mnt/servo/${subdir}";

View File

@@ -14,7 +14,9 @@
];
sane.user.persist.byStore.ephemeral = [
# this is persisted simply to save on RAM. mesa_shader_cache is < 10 MB per boot.
# this is persisted simply to save on RAM. mesa_shader_cache_db is < 10 MB per boot.
# TODO: see about removing this. the programs which benefit from shader caches should be configured to persist their _own_ dbs.
".cache/mesa_shader_cache_db"
];
sane.user.persist.byStore.private = [
@@ -29,28 +31,6 @@
"knowledge"
"Videos/local"
# TODO: pre-compile mesa shaders, and then run in read-only mode?
# mesa shader cache can be configured with e.g.:
# - MESA_SHADER_CACHE_DISABLE=true
# - MESA_SHADER_CACHE_DIR=/path/to/cache_db
# - MESA_DISK_CACHE_SINGLE_FILE=1 (in which case default cache file is ~/.cache/mesa_shader_cache_sf)
# - MESA_DISK_CACHE_MULTI_FILE=1 (in which case default cache dir is ~/.cache/mesa_shader_cache)
# - MESA_DISK_CACHE_READ_ONLY_FOZ_DBS=foo,bar
# - to use read-only mesa caches, one from foo.db the other bar.db
# - MESA_DISK_CACHE_READ_ONLY_FOZ_DBS_DYNAMIC_LIST=/path/to/txt
# - where /path/to/txt contains a list of names which represent read-only caches
# - allows to change the cache providers w/o having to update variables
#
# see also: <https://gitlab.freedesktop.org/mesa/shader-db>
# - database of common shaders (gtk4, chromium, etc) & instructions to compile for any arch
# see also: <https://github.com/ValveSoftware/Fossilize>
# which may help in generating readonly cache files
#
# for now, mesa shader cache is persisted because some programs *greatly* benefit from it.
# esp gnome-contacts has a first-launch bug where it shows a misleading warning if shaders take too long to compile,
# so we persist to private instead of ephemeral.
".cache/mesa_shader_cache_db"
];
# convenience

View File

@@ -2,6 +2,12 @@
{
# TODO: this should be populated per-host
sane.hosts.by-name."cadey" = {
ssh.authorized = lib.mkDefault false;
lan-ip = "10.78.79.70";
};
sane.hosts.by-name."crappy" = {
ssh.user_pubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMIvSQAGKqmymXIL4La9B00LPxBIqWAr5AsJxk3UQeY5";
ssh.host_pubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMN0cpRAloCBOE5/2wuzgik35iNDv5KLceWMCVaa7DIQ";
@@ -18,14 +24,22 @@
lan-ip = "10.78.79.52";
};
sane.hosts.by-name."lappy" = {
ssh.user_pubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDpmFdNSVPRol5hkbbCivRhyeENzb9HVyf9KutGLP2Zu";
ssh.host_pubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILSJnqmVl9/SYQ0btvGb0REwwWY8wkdkGXQZfn/1geEc";
wg-home.pubkey = "FTUWGw2p4/cEcrrIE86PWVnqctbv8OYpw8Gt3+dC/lk=";
wg-home.ip = "10.0.10.20";
lan-ip = "10.78.79.53";
sane.hosts.by-name."flowy" = {
ssh.user_pubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAa9U2+aUc5Kr6f2oeILAy2EC86W5OZSprmBb1F+8n7/";
ssh.host_pubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMNuTITzc07mqYspWw6fqRw40ObxwnmWCwg188apHB/o";
wg-home.pubkey = "o6Vh+gHF87wAOOofgKKYIhV91kgDRnLvwnd5W2WHsDE=";
wg-home.ip = "10.0.10.56";
lan-ip = "10.78.79.56";
};
# sane.hosts.by-name."lappy" = {
# ssh.user_pubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDpmFdNSVPRol5hkbbCivRhyeENzb9HVyf9KutGLP2Zu";
# ssh.host_pubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILSJnqmVl9/SYQ0btvGb0REwwWY8wkdkGXQZfn/1geEc";
# wg-home.pubkey = "FTUWGw2p4/cEcrrIE86PWVnqctbv8OYpw8Gt3+dC/lk=";
# wg-home.ip = "10.0.10.20";
# lan-ip = "10.78.79.53";
# };
sane.hosts.by-name."moby" = {
# ssh.authorized = lib.mkDefault false; # moby's too easy to hijack: don't let it ssh places
ssh.user_pubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICrR+gePnl0nV/vy7I5BzrGeyVL+9eOuXHU1yNE3uCwU";
@@ -36,7 +50,7 @@
};
sane.hosts.by-name."servo" = {
ssh.authorized = lib.mkDefault false; # servo presents too many services to the internet: easy atack vector
# ssh.authorized = lib.mkDefault false; # servo presents too many services to the internet: easy atack vector
ssh.user_pubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPS1qFzKurAdB9blkWomq8gI1g0T3sTs9LsmFOj5VtqX";
ssh.host_pubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOfdSmFkrVT6DhpgvFeQKm3Fh9VKZ9DbLYOPOJWYQ0E8";
wg-home.pubkey = "roAw+IUFVtdpCcqa4khB385Qcv9l5JAB//730tyK4Wk=";

View File

@@ -66,6 +66,11 @@
sane.ids.plugdev.gid = 2421;
sane.ids.ollama.uid = 2422;
sane.ids.ollama.gid = 2422;
sane.ids.bitmagnet.uid = 2423;
sane.ids.bitmagnet.gid = 2423;
sane.ids.anubis.uid = 2424;
sane.ids.anubis.gid = 2424;
sane.ids.shelvacu.uid = 5431;
sane.ids.colin.uid = 1000;
sane.ids.guest.uid = 1100;
@@ -91,6 +96,7 @@
sane.ids.radicale.gid = 2011;
sane.ids.named.uid = 2012;
sane.ids.named.gid = 2012;
sane.ids.lpadmin.gid = 2013;
# found on graphical hosts
sane.ids.nm-iodine.uid = 2101; # desko/moby/lappy

View File

@@ -1,15 +1,162 @@
{ lib, ... }:
# debugging:
# - /var/log/named/named.log
## config
# - `man named`
# - `man named.conf`
# - show defaults with: `named -C`
# - defaults live in <repo:isc-projects/bind:bin/named/config.c>
# - per-option docs live in <repo:isc-projects/bind:bind9/doc/arm/reference.rst>
#
## statistics
# - `netstat --statistics --udp`
# - `rdnc stats`? dumps to `named.stats` in named's PWD?
#
## interactive debugging
# - `systemctl stop bind`
# - `sudo /nix/store/0zpdy93sd3fgbxgvf8dsxhn8fbbya8d2-bind-9.18.28/sbin/named -g -u named -4 -c /nix/store/f1mp0myzmfms71h9vinwxpn2i9362a9a-named.conf`
# - `-g` = don't fork
# - `-u named` = start as superuser (to claim port 53), then drop to user `named`
#
{ config, lib, pkgs, ... }:
let
hostCfg = config.sane.hosts.by-name."${config.networking.hostName}" or null;
bindCfg = config.services.bind;
in
{
services.bind.enable = lib.mkDefault true;
services.bind.forwarders = []; #< don't forward queries to upstream resolvers
services.bind.cacheNetworks = [
"127.0.0.0/24"
"::1/128"
"10.0.0.0/16"
];
services.bind.extraOptions = ''
port 953;
'';
config = lib.mkIf (!config.sane.services.hickory-dns.asSystemResolver) {
services.resolved.enable = lib.mkForce false;
networking.resolvconf.useLocalResolver = false; #< undo bind making this default true
networking.nameservers = [
# be compatible with systemd-resolved
# "127.0.0.53"
# or don't be compatible with systemd-resolved, but with libc and pasta instead
# see <pkgs/by-name/sane-scripts/src/sane-vpn>
"127.0.0.1"
# enable IPv6, or don't; unbound is spammy when IPv6 is enabled but unroutable
# "::1"
];
networking.resolvconf.extraConfig = ''
# DNS serviced by `BIND` recursive resolver
name_servers='127.0.0.1'
'';
services.bind.enable = lib.mkDefault true;
services.bind.forwarders = []; #< don't forward queries to upstream resolvers
services.bind.cacheNetworks = [
"127.0.0.0/24"
"::1/128"
"10.0.10.0/24" #< wireguard clients (servo)
];
services.bind.listenOn = [
"127.0.0.1"
] ++ lib.optionals (hostCfg != null && hostCfg.wg-home.ip != null) [
# allow wireguard clients to use us as a recursive resolver (only needed for servo)
hostCfg.wg-home.ip
];
services.bind.listenOnIpv6 = [
# "::1"
];
services.bind.ipv4Only = true; # unbound is spammy when it tries IPv6 without a routable address
# when testing, deploy on a port other than 53
# services.bind.extraOptions = ''
# listen-on port 953 { any; };
# '';
# services.bind.extraArgs = [
# # -d = debug logging level: higher = more verbose
# "-d" "2"
# # -L = where to log. default is `named.run` in PWD -- unless running interactively in which case it logs to stdout
# "-L" "/var/log/named/named.log"
# ];
networking.resolvconf.useLocalResolver = false; #< we manage resolvconf explicitly, above
# TODO: how to exempt `pool.ntp.org` from DNSSEC checks, as i did when using unbound?
# allow runtime insertion of zones or other config changes:
# add your supplemental config as a toplevel file in /run/named/dhcp-configs/, then `systemctl restart bind`
services.bind.extraConfig = ''
include "/run/named/dhcp-configs.conf";
'';
services.bind.extraOptions = ''
// we can't guarantee that all forwarders support DNSSEC,
// and as of 2025-01-30 BIND9 gives no way to disable DNSSEC per-forwarder/zone,
// so just disable it globally
dnssec-validation no;
// XXX(2025-06-30): i need reverse DNS of private IP space such as 10.0.0.0/8.
// configuring those zones (done in a secrets/ file), unfortunately requires disabling
// ALL local entries for reserved zones (IN-ADDR.ARPA, IP6.ARPA, EMPTY.AS112.ARPA, HOME.ARPA, RESOLVER.ARPA).
// TODO: figure a better solution, as this likely causes reverse-DNS queries of LAN hosts to be sent to the WAN!
// - see <https://www.as112.net/>
empty-zones-enable no;
'';
# re-implement the nixos default bind config, but without `options { forwarders { }; };`,
# as having an empty `forwarders` at the top-level prevents me from forwarding the `.` zone in a separate statement
# (which i want to do to allow sane-vpn to forward all DNS).
services.bind.configFile = pkgs.writeText "named.conf" ''
include "/etc/bind/rndc.key";
controls {
inet 127.0.0.1 allow {localhost;} keys {"rndc-key";};
};
acl cachenetworks { ${lib.concatMapStrings (entry: " ${entry}; ") bindCfg.cacheNetworks} };
acl badnetworks { ${lib.concatMapStrings (entry: " ${entry}; ") bindCfg.blockedNetworks} };
options {
listen-on { ${lib.concatMapStrings (entry: " ${entry}; ") bindCfg.listenOn} };
listen-on-v6 { ${lib.concatMapStrings (entry: " ${entry}; ") bindCfg.listenOnIpv6} };
allow-query-cache { cachenetworks; };
blackhole { badnetworks; };
//v disable top-level forwards, so that i can do forwarding more generically in `zone FOO { ... }` directives.
// forward ${bindCfg.forward};
// forwarders { ${lib.concatMapStrings (entry: " ${entry}; ") bindCfg.forwarders} };
directory "${bindCfg.directory}";
pid-file "/run/named/named.pid";
${bindCfg.extraOptions}
};
// XXX(2025-06-18): some tools i use for work assume 'localhost' can be resolved by the system nameserver,
// and not just by /etc/hosts
zone "localhost" {
type master;
file "${pkgs.writeText "localhost" ''
$TTL 300
@ IN SOA localhost. root.localhost. (
202506181 ; Serial
28800 ; Refresh
7200 ; Retry
604800 ; Expire
86400) ; Minimum TTL
NS localhost.
localhost. A 127.0.0.1
AAAA ::1
''}";
};
${bindCfg.extraConfig}
'';
systemd.services.bind.serviceConfig.ExecStartPre = pkgs.writeShellScript "named-generate-config" ''
mkdir -p /run/named/dhcp-configs
chmod g+w /run/named/dhcp-configs
echo "// FILE GENERATED BY bind.service's ExecStartPre: CHANGES TO THIS FILE WILL BE OVERWRITTEN" > /run/named/dhcp-configs.conf
for c in $(ls /run/named/dhcp-configs/); do
cat "/run/named/dhcp-configs/$c" >> /run/named/dhcp-configs.conf
done
'';
systemd.services.bind.serviceConfig.ReadWritePaths = [
"/var/log/named"
];
sane.persist.sys.byPath."/var/log/named" = {
store = "ephemeral";
method = "symlink";
acl.mode = "0750";
acl.user = "named";
};
};
}

View File

@@ -1,7 +1,9 @@
# `man unbound.conf` for info on settings
# it's REALLY EASY to combine settings in a way that produce bad effects.
# generally, prefer to stay close to defaults unless there's a compelling reason to differ.
{ config, lib, pkgs, ... }: {
{ config, lib, ... }:
lib.optionalAttrs false #< XXX(2024-12-29): unbound caches failed DNS resolutions, just randomly breaks connectivity daily
{
config = lib.mkIf (!config.sane.services.hickory-dns.asSystemResolver) {
services.resolved.enable = lib.mkForce false;

View File

@@ -1,7 +1,10 @@
{ config, lib, pkgs, ... }:
{
networking.networkmanager.enable = true;
systemd.network.wait-online.enable = false; # systemd-networkd-wait-online.service reliably fails on lappy. docs don't match behavior. shit software.
# systemd-networkd-wait-online.service reliably fails on lappy. docs don't match behavior. shit software.
# XXX(2025-07-18): `systemd-networkd-wait-online.service` also fails on desko (timeout).
systemd.network.wait-online.enable = false;
# plugins mostly add support for establishing different VPN connections.
# the default plugin set includes mostly proprietary VPNs:
# - fortisslvpn (Fortinet)
@@ -203,6 +206,7 @@
};
networking.networkmanager.settings = {
# docs: `man 5 NetworkManager.conf`
# keyfile.path = where networkmanager should look for connection credentials
keyfile.path = "/var/lib/NetworkManager/system-connections";
@@ -214,20 +218,30 @@
# main.dhcp = "internal"; #< default
# main.dns controls what to do when NM gets a DNS server via DHCP
# - "none" (populate /run/NetworkManager/resolv.conf with DHCP settings)
# - "internal" (?)
# - "systemd-resolved" (tell systemd-resolved about it, and point /run/NetworkManager/resolv.conf -> systemd)
# without this, systemd-resolved won't be able to resolve anything (because it has no upstream servers)
# - "default": NM manages /etc/resolv.conf itself.
# - "none": NM doesn't manage /etc/resolv.conf, but does populate /run/NetworkManager/resolv.conf with DHCP settings
# - "systemd-resolved": tell systemd-resolved about it, and point /run/NetworkManager/resolv.conf -> systemd
# - without this, systemd-resolved won't be able to resolve anything (because it has no upstream servers)
# - (empty): perform a best-guess for how to manage /etc/resolv.conf
# -> if /etc/resolv.conf is a symlink to systemd-resolved, then behaves as "systemd-resolved".
# -> else, behaves as "default".
# note that NM's resolv.conf isn't (necessarily) /etc/resolv.conf -- that is managed by nixos (via symlinking)
main.dns = if config.services.resolved.enable then
"systemd-resolved"
else if
(config.sane.services.hickory-dns.enable && config.sane.services.hickory-dns.asSystemResolver)
|| (config.services.unbound.enable && config.services.unbound.resolveLocalQueries) then
"none"
else
"internal"
;
main.dns = let
dns = if config.services.resolved.enable then
"systemd-resolved"
else if
(config.sane.services.hickory-dns.enable && config.sane.services.hickory-dns.asSystemResolver)
|| (config.services.unbound.enable && config.services.unbound.resolveLocalQueries)
|| config.services.bind.enable # bind config isn't easily inspectable; assume that it's acting as local resolver
then
"none"
else
# omitting the option instructs NM to do a "best guess".
# this is nearly equivalent to "default", however NM will do checks like "is /etc/resolv.conf a symlink to systemd-resolved", etc,
# to actually try to understand the environment.
null
;
in lib.mkIf (dns != null) dns;
main.systemd-resolved = false;
};
environment.etc."NetworkManager/system-connections".source = "/var/lib/NetworkManager/system-connections";

View File

@@ -7,7 +7,8 @@
];
networking.firewall.extraCommands = with pkgs; ''
# after an outgoing SSDP query to the multicast address, open FW for incoming responses.
# after an outgoing SSDP query to the multicast address (dest port=1900, src port=any),
# open FW for incoming responses (i.e. accept any packet, so long as it's sent to the port we sent from).
# necessary for anything DLNA, especially go2tv
# source: <https://serverfault.com/a/911286>
# context: <https://github.com/alexballas/go2tv/issues/72>
@@ -16,6 +17,7 @@
${ipset}/bin/ipset create -! upnp hash:ip,port timeout 10
${iptables}/bin/iptables -A OUTPUT -d 239.255.255.250/32 -p udp -m udp --dport 1900 -j SET --add-set upnp src,src --exist
${iptables}/bin/iptables -A INPUT -p udp -m set --match-set upnp dst,dst -j ACCEPT
# IPv6 ruleset. ff02::/16 means *any* link-local multicast group (so this is probably more broad than it needs to be)
${ipset}/bin/ipset create -! upnp6 hash:ip,port timeout 10 family inet6
${iptables}/bin/ip6tables -A OUTPUT -d ff02::/16 -p udp -m udp --dport 1900 -j SET --add-set upnp6 src,src --exist

View File

@@ -55,7 +55,17 @@
# this is actually a no-op, and the real action happens in assigning `nix.settings.nix-path`.
nix.nixPath = (lib.optionals (config.sane.maxBuildCost >= 2) [
"nixpkgs=${pkgs.path}"
]) ++ [
]) ++ (let
# XXX(2024-09-02): nix 2.24.4 errors when nixpkgs-overlays includes a symlink component:
# "error: path '/home/colin/dev' is a symlink"
# apparently nix has to explicitly handle symlinks in every place it might encounter them,
# so the fixes inside nix for this are manual and fragile. dereference it ourselves:
dev = if (config.sane.fs."/home/colin/dev" or {}) != {} then
config.sane.fs."/home/colin/dev".symlink.target
else
"/home/colin/dev"
;
in [
# note the import starts at repo root: this allows `./overlay/default.nix` to access the stuff at the root
# "nixpkgs-overlays=${../../..}/hosts/common/nix-path/overlay"
# as long as my system itself doesn't rely on NIXPKGS at runtime, we can point the overlays to git
@@ -65,12 +75,8 @@
# when it goes wrong. should i port my `nix-shell` scripts to something more tailored to my uses
# and then delete `nixpkgs-overlays`?
# "nixpkgs-overlays=/home/colin/dev/nixos/integrations/nixpkgs/nixpkgs-overlays.nix"
# XXX(2024-09-02): nix 2.24.4 errors when nixpkgs-overlays includes a symlink component:
# "error: path '/home/colin/dev' is a symlink"
# apparently nix has to explicitly handle symlinks in every place it might encounter them,
# so the fixes inside nix for this are manual and fragile. dereference it ourselves:
"nixpkgs-overlays=${config.sane.fs."/home/colin/dev".symlink.target}/nixos/integrations/nixpkgs/nixpkgs-overlays.nix"
];
"nixpkgs-overlays=${dev}/nixos/integrations/nixpkgs/nixpkgs-overlays.nix"
]);
# ensure new deployments have a source of this repo with which they can bootstrap.
# this however changes on every commit and can be slow to copy for e.g. `moby`.

View File

@@ -6,11 +6,15 @@ let
# nixpkgs' pam hardcodes unix_chkpwd path to the /run/wrappers one,
# but i don't want the wrapper, so undo that.
# ideally i would patch this via an overlay, but pam is in the bootstrap so that forces a full rebuild.
# see: <repo:nixos/nixpkgs:pkgs/by-name/li/linux-pam/package.nix>
postPatch = (upstream.postPatch or "") + ''
substituteInPlace modules/pam_unix/Makefile.am --replace-fail \
substituteInPlace modules/module-meson.build --replace-fail \
"/run/wrappers/bin/unix_chkpwd" "$out/bin/unix_chkpwd"
'';
});
# `mkDefault` is `mkOverride 1000`.
# `mkOverrideDefault` will override `mkDefault` values, but not ordinary values.
mkOverrideDefault = lib.mkOverride 900;
in
{
# remove a few items from /run/wrappers we don't need.
@@ -106,6 +110,7 @@ in
conveniencePackages = [
config.boot.kernelPackages.cpupower # <repo:nixos/nixpkgs:nixos/modules/tasks/cpu-freq.nix> places it on PATH for convenience if powerManagement.cpuFreqGovernor is set
pkgs.kbd # <repo:nixos/nixpkgs:nixos/modules/config/console.nix> places it on PATH as part of console/virtual TTYs, but probably not needed unless you want to set console fonts
pkgs.nixos-firewall-tool # <repo:nixos/nixpkgs:nixos/modules/services/networking/firewall.nix> for end-user management of the firewall? cool but doesn't cross-compile
];
in lib.filter (p: ! builtins.elem p (requiredPackages ++ conveniencePackages));
};
@@ -134,11 +139,20 @@ in
environment.variables.NIXPKGS_CONFIG = lib.mkForce "";
# XDG_CONFIG_DIRS defaults to "/etc/xdg", which doesn't exist.
# in practice, pam appends the values i want to XDG_CONFIG_DIRS, though this approach causes an extra leading `:`
environment.sessionVariables.XDG_CONFIG_DIRS = lib.mkForce [];
# XXX(2025-06-06): some nixpkgs' systemd services actually depend on the default XDG_CONFIG_DIRS=/etc/xdg!
# specifically: `services.bitmagnet`
# environment.sessionVariables.XDG_CONFIG_DIRS = lib.mkForce [];
# XCURSOR_PATH: defaults to `[ "$HOME/.icons" "$HOME/.local/share/icons" ]`, neither of which i use, just adding noise.
# see: <repo:nixos/nixpkgs:nixos/modules/config/xdg/icons.nix>
environment.sessionVariables.XCURSOR_PATH = lib.mkForce [];
environment.shellAliases = {
# unset default aliases; see <repo:nixos/nixpkgs:nixos/modules/config/shells-environment.nix>
ls = mkOverrideDefault null;
ll = mkOverrideDefault null;
l = mkOverrideDefault null;
};
# disable nixos' portal module, otherwise /share/applications gets linked into the system and complicates things (sandboxing).
# instead, i manage portals myself via the sane.programs API (e.g. sane.programs.xdg-desktop-portal).
xdg.portal.enable = false;

View File

@@ -1,8 +1,11 @@
# Terminal UI mail client
{ ... }:
{ pkgs, ... }:
{
sane.programs.aerc = {
packageUnwrapped = pkgs.aerc.override {
withNotmuch = false; #< not used; regularly fails to build
};
sandbox.wrapperType = "inplace"; #< /share/aerc/aerc.conf mentions (in comments) other (non-sandboxed) /share files by absolute path
sandbox.net = "clearnet";
secrets.".config/aerc/accounts.conf" = ../../../secrets/common/aerc_accounts.conf.bin;

View File

@@ -0,0 +1,63 @@
# alpaca: ollama llm client
# - super simple, easy UI
#
# shortcomings (as of 6.1.7, 2025-07-23):
# - doesn't seem to do any prompt tuning;
# inherits all the pathologies of the underlying model (e.g. makes up citations)
#
# it creates a config dir, `~/.config/com.jeffser.Alpaca`, but apparently empty
#
# TODO: configure ollama connection details statically
# - until then, on first run:
# - select the non-"managed" ollama option.
# - connect to http://10.0.10.22:11434
# TODO: update the nix package 6.1.7 -> 7.5.2
# - i.e. review <https://github.com/NixOS/nixpkgs/pull/420698>
{ pkgs, ... }:
{
sane.programs.alpaca = {
packageUnwrapped = (pkgs.alpaca.override {
# ollama is only added to `PATH`; since i'm using it via http, remove it here.
# fixes cross compilation & simplifies closure.
ollama = null;
python3Packages = pkgs.python3Packages // {
# XXX(2025-07-23): does not cross compile (markitdown -> pydub -> ... -> opencv)
markitdown = null;
};
}).overrideAttrs (upstream: {
postPatch = (upstream.postPatch or "") + ''
# for nulled dependencies (above), patch so the application only errors
# at runtime, on first attempted use.
substituteInPlace src/widgets/attachments.py \
--replace-fail 'from markitdown' '# from markitdown'
'';
});
buildCost = 2; #< liable to break cross during updates; not important enough to block deploy over
sandbox.net = "all"; # maybe only needs wireguard, actually
sandbox.whitelistWayland = true;
sandbox.mesaCacheDir = ".cache/com.jeffser.Alpaca/mesa";
sandbox.whitelistDbus.user.own = [ "com.jeffser.Alpaca" ];
sandbox.whitelistPortal = [
"OpenURI"
];
sandbox.whitelistSendNotifications = true;
persist.byStore.ephemeral = [
".cache/com.jeffser.Alpaca" #< ?
];
persist.byStore.private = [
# alpaca.db: sqlite3 database with the following tables:
# - attachment
# - chat
# - instances
# - message
# - model_preferences
# - preferences
# - tool_parameters
".local/share/com.jeffser.Alpaca"
];
};
}

View File

@@ -1,15 +1,30 @@
{ config, lib, pkgs, ... }:
let
cfg = config.sane.programs.alsa-ucm-conf;
in
{
sane.programs.alsa-ucm-conf = {
packageUnwrapped = pkgs.alsa-ucm-conf.overrideAttrs (base: {
deprioritize = pkg: pkg.overrideAttrs (base: {
meta = (base.meta or {}) // {
# let the other alsa ucm packages override configs from this one
priority = ((base.meta or {}).priority or 10) + 20;
};
});
});
alsa-ucm-latest = pkgs.alsa-ucm-conf.overrideAttrs (upstream: rec {
# XXX(2025-07-18): see <https://github.com/NixOS/nixpkgs/pull/414818>
version = "1.2.14";
src = lib.warnIf (lib.versionAtLeast upstream.version "1.2.14") "upstream alsa-ucm-conf is up to date with my own: remove override?" pkgs.fetchurl {
url = "mirror://alsa/lib/alsa-ucm-conf-${version}.tar.bz2";
hash = "sha256-MumAn1ktkrl4qhAy41KTwzuNDx7Edfk3Aiw+6aMGnCE=";
};
installPhase = lib.replaceStrings
[ ''for file in "''${files[@]}"'' ]
[ ''for file in ucm2/common/ctl/led.conf'' ]
upstream.installPhase
;
});
in
{
sane.programs.alsa-ucm-conf = {
packageUnwrapped = deprioritize pkgs.alsa-ucm-conf;
# packageUnwrapped = deprioritize alsa-ucm-latest;
sandbox.enable = false; #< only provides $out/share/alsa
# alsa-lib package only looks in its $out/share/alsa to find runtime config data, by default.

View File

@@ -19,16 +19,15 @@
packageUnwrapped = with pkgs; animatch.override {
# allegro has no native wayland support, and so by default crashes when run without Xwayland.
# enable the allegro SDL backend, and achieve Wayland support via SDL's Wayland support.
# TODO: see about upstreaming this to nixpkgs?
allegro5 = allegro5.overrideAttrs (upstream: {
buildInputs = upstream.buildInputs ++ [
SDL2
];
cmakeFlags = upstream.cmakeFlags ++ [
"-DALLEGRO_SDL=on"
];
});
allegro5 = allegro5.override { useSDL = true; };
};
# nativeBuildInputs = (upstream.nativeBuildInputs or []) ++ [
# makeWrapper
# ];
# postFixup = (upstream.postFixup or "") + ''
# wrapProgram $out/bin/animatch \
# --set SDL_VIDEODRIVER wayland
# '';
buildCost = 1;

View File

@@ -48,9 +48,11 @@ in
"dtc" # device tree [de]compiler
"e2fsprogs" # resize2fs
"efibootmgr"
"erdtree" # like normal `tree` but colorful & prints sizes
"errno"
"ethtool"
"evtest"
"expect"
"fatresize"
"fd"
"fftest" # for debugging moby haptics/vibrator, mostly
@@ -65,6 +67,7 @@ in
"hdparm"
"hping"
"htop"
"htpasswd"
"iftop"
"inetutils" # for telnet
"iotop"
@@ -84,15 +87,18 @@ in
"mmcli"
"nano"
# "ncdu" # ncurses disk usage. doesn't cross compile (zig)
"nfs-utils" # required, for mounting nfs filesystems
"neovim"
"netcat"
"nethogs"
"nix"
"nix-tree"
"nmap"
"nmcli"
"nmon"
"nvimpager"
"nvme-cli" # nvme
# "openssl"
"openssl"
"parted"
"pciutils"
"picocom" # serial TTY
@@ -103,8 +109,11 @@ in
"rsync"
# "s6-rc" # service manager
# "screen"
"see-cat" # pretty-print equivalent to 'cat'
"ssh"
"sshpass"
"smartmontools" # smartctl
# "socat"
"socat"
"strace"
"subversion"
"tcpdump"
@@ -112,6 +121,7 @@ in
"unixtools.ps"
"unixtools.sysctl"
"unixtools.xxd"
"uptime"
"usbutils" # lsusb
"util-linux" # lsblk, lscpu, etc
"valgrind"
@@ -132,8 +142,11 @@ in
# - debugging?
consoleUtils = declPackageSet [
"alsa-utils" # for aplay, speaker-test
"bc" # CLI calculator
"cdecl" # like <https://cdecl.org>. `cdecl explain 'struct foo *const inst'`
# "cdrtools"
# "clinfo"
"colordiff"
# "dmidecode"
"dtrx" # `unar` alternative, "Do The Right eXtraction"
# "efivar"
@@ -148,12 +161,14 @@ in
# "gopass-jsonapi"
# "helix" # text editor
"htop" # needed as a user package, for ~/.config/htop
"lddtree"
# "libsecret" # for managing user keyrings (secret-tool)
# "lm_sensors" # for sensors-detect
# "lshw"
# "memtester"
"mercurial" # hg
"mimeo" # like xdg-open
"mozlz4a" # for extracting .mozlz4 files (firefox)
"neovim" # needed as a user package, for swap persistence
"nix" # needed as user package, for ~/.cache/nix persistence
# "nettools"
@@ -162,10 +177,13 @@ in
# "node2nix"
# "oathToolkit" # for oathtool
"objdump"
"oils-for-unix"
"patchelf"
# "ponymix"
"pulsemixer"
"python3-repl"
# "python3.pkgs.eyeD3" # music tagging
"readline" # for the config
"ripgrep" # needed as a user package so that its user-level config file can be installed
# "rsyslog" # KEEP THIS HERE if you want persistent logging (TODO: port to systemd, store in /var/log/...)
"sane-deadlines"
@@ -173,16 +191,17 @@ in
"sane-scripts.cli"
"sane-secrets-unlock"
"sane-sysload"
"sc-im"
# "snapper"
"sc-im" # CLI spreadsheet editor
"snapper"
"sops" # for manually viewing secrets; outside `sane-secrets` (TODO: improve sane-secrets!)
"speedtest-cli"
# "ssh-to-age"
"ssh" # specified as a user program, to enable ssh-agent service
"ssh-to-age" # used when provisioning a new nixos host
"strings"
"sudo"
# "tageditor" # music tagging
# "unar"
# "unzip"
"unzip"
"wireguard-tools" # for `wg`
"xdg-utils" # for xdg-open
# "yarn"
@@ -193,13 +212,14 @@ in
"dasht" # docset documentation viewer
# "gh" # MS GitHub cli
"haredoc"
"nix-check-deps" # run `nix-check-deps packageName -f .` before submitting stuff upstream
"nix-index"
"nixfmt-rfc-style" # run `nixpkgs path/to/package.nix` before submitting stuff upstream
"nixfmt-rfc-style" # run `nixfmt path/to/package.nix` before submitting stuff upstream
"nixpkgs-hammering"
"nixpkgs-review"
"qmk-udev-rules"
"sane-scripts.dev"
"sequoia"
"sequoia" # gpg tool
# "via"
"wally-cli"
# "zsa-udev-rules"
@@ -218,9 +238,12 @@ in
pcTuiApps = declPackageSet [
"aerc" # email client
# "cassini" # Elegoo printer control. need here especially, for opening firewalls.
"mslicer" # TODO: upstream, and then move this to the phone-case-cq repo
# "msmtp" # sendmail
# "offlineimap" # email mailbox sync
# "sfeed" # RSS fetcher
# "uvtools"
"visidata" # TUI spreadsheet viewer/editor
"w3m" # web browser
];
@@ -230,7 +253,6 @@ in
"clang"
"lua"
"nodejs"
"patchelf"
"rustc"
# "tree-sitter"
];
@@ -247,10 +269,10 @@ in
"celeste64"
# "cutemaze" # meh: trivial maze game; qt6 and keyboard-only
# "cuyo" # trivial puyo-puyo clone
"endless-sky" # space merchantilism/exploration
# "endless-sky" # space merchantilism/exploration
# "factorio"
# "frozen-bubble" # WAN + LAN + 1P/2P bubble bobble
"hase" # WAN worms game
# "hase" # WAN worms game
# "hedgewars" # WAN + LAN worms game (5~10 people online at any moment; <https://hedgewars.org>)
# "libremines" # meh: trivial minesweeper; qt6
# "mario0" # SMB + portal
@@ -260,16 +282,17 @@ in
# "osu-lazer"
# "pinball" # 3d pinball; kb/mouse. old sourceforge project
# "powermanga" # STYLISH space invaders derivative (keyboard-only)
"shattered-pixel-dungeon" # doesn't cross compile
# "shattered-pixel-dungeon" # doesn't cross compile
# "sm64ex-coop"
"sm64coopdx"
"space-cadet-pinball" # LMB/RMB controls (bindable though. volume buttons?)
"steam"
"superTux" # keyboard-only controls
"superTuxKart" # poor FPS on pinephone
"tumiki-fighters" # keyboard-only
# "tumiki-fighters" # keyboard-only
"vvvvvv" # keyboard-only controls
# "wine"
"zelda64recomp"
];
guiApps = declPackageSet [
@@ -281,7 +304,10 @@ in
guiBaseApps = declPackageSet [
# "abaddon" # discord client
"alacritty" # terminal emulator
"alpaca" # ollama/LLM client
"blanket" # ambient noise generator
"calls" # gnome calls (dialer/handler)
"confy" # conference planning app
"dbus"
# "dconf" # or use `gsettings`, with its keyfile backend
# "delfin" # Jellyfin client
@@ -289,11 +315,11 @@ in
"dino" # XMPP client
"dissent" # Discord client (formerly known as: gtkcord4)
# "emote"
"envelope" # GTK4 email client (alpha)
# "envelope" # GTK4 email client (alpha)
# "evince" # PDF viewer
# "flare-signal" # gtk4 signal client
"fractal" # matrix client
"g4music" # local music player
# "g4music" # local music player
# "gnome.cheese"
# "gnome-feeds" # RSS reader (with claimed mobile support)
# "gnome.file-roller"
@@ -308,6 +334,7 @@ in
"gnome-frog" # OCR/QR decoder
"gnome-maps"
"gnome-screenshot" # libcamera-based screenshotter, for debugging; should be compatible with gc2145 camera on Pinephone
"gnome-sound-recorder" # a simple microphone recorder/tester
"gnome-weather"
"gpodder"
"gsettings"
@@ -323,8 +350,9 @@ in
"mepo" # maps viewer
# "mesa-demos" # for eglinfo, glxinfo & other testing tools
"mpv"
# "networkmanagerapplet" # for nm-connection-editor GUI. XXX(2024-09-03): broken, probably by NetworkManager sandboxing
"networkmanagerapplet"
# "ntfy-sh" # notification service
"newelle" # ollama/LLM client
"newsflash" # RSS viewer
"papers" # PDF viewer
"pavucontrol"
@@ -340,10 +368,11 @@ in
# "tdesktop" # broken on phosh
# "tokodon"
"tuba" # mastodon/pleroma client (stores pw in keyring)
"v4l-utils" # for `media-ctl`; to debug cameras: <https://wiki.postmarketos.org/wiki/PINE64_PinePhone_(pine64-pinephone)#Cameras>
# "v4l-utils" # for `media-ctl`; to debug cameras: <https://wiki.postmarketos.org/wiki/PINE64_PinePhone_(pine64-pinephone)#Cameras>
"video-trimmer"
"vulkan-tools" # vulkaninfo
# "whalebird" # pleroma client (Electron). input is broken on phosh.
"wiremix" # wireplumber TUI
"xdg-terminal-exec"
"youtube-tui"
# "zathura" # PDF/CBZ/ePUB viewer
@@ -363,7 +392,7 @@ in
"megapixels" # camera app (does not support PPP as of 2024-11-29)
"megapixels-next" # camera app (which supports PPP, as of 2024-11-29)
"notejot" # note taking, e.g. shopping list
"planify" # todo-tracker/planner
# "planify" # todo-tracker/planner (XXX(2025-05-16): does not build; gxml tests fail against glib 2.84.1; planify itself fails still, if gxml.doCheck forced false)
"portfolio-filemanager"
# "tangram" # web browser
"wike" # Wikipedia Reader
@@ -376,11 +405,10 @@ in
"pcTuiApps"
####
"audacity"
# "blanket" # ambient noise generator
"brave" # for the integrated wallet -- as a backup
# "cantata" # music player (mpd frontend)
# "chromium" # chromium takes hours to build. brave is chromium-based, distributed in binary form, so prefer it.
# "cups"
"cups"
"discord" # x86-only
# "electrum"
"element-desktop"
@@ -403,7 +431,7 @@ in
# "kid3" # audio tagging
"krita"
"libreoffice" # TODO: replace with an office suite that uses saner packaging?
"losslesscut-bin" # x86-only
"losslesscut-bin" # x86-only (TODO: replace with from-source build: <https://github.com/NixOS/nixpkgs/pull/385535>)
# "makemkv" # x86-only
# "monero-gui" # x86-only
"mumble"
@@ -449,29 +477,13 @@ in
bash-language-server.sandbox.whitelistPwd = true;
blanket.buildCost = 1;
blanket.sandbox.whitelistAudio = true;
# blanket.sandbox.whitelistDbus = [ "user" ]; # TODO: untested
blanket.sandbox.whitelistWayland = true;
blueberry.sandbox.wrapperType = "inplace"; #< it places binaries in /lib and then /etc/xdg/autostart files refer to the /lib paths, and fail to be patched
blueberry.sandbox.whitelistWayland = true;
blueberry.sandbox.extraPaths = [
"/dev/rfkill"
"/run/dbus"
"/sys/class/rfkill"
"/sys/devices"
];
bc.sandbox.autodetectCliPaths = "existingFile";
bridge-utils.sandbox.net = "all";
"cacert.unbundled".sandbox.enable = false; #< data only
cargo.persist.byStore.plaintext = [ ".cargo" ];
# probably this sandboxing is too restrictive; i'm sandboxing it for rust-analyzer / neovim LSP
cargo.sandbox.whitelistPwd = true;
cargo.sandbox.net = "all";
cargo.sandbox.extraHomePaths = [ "dev" "ref" ];
cdecl = {};
clang = {};
@@ -481,6 +493,8 @@ in
"/var/lib/clightning/bitcoin/lightning-rpc"
];
colordiff.sandbox.autodetectCliPaths = "existingFile"; # for `aplay ./file.wav`
# cryptsetup: typical use is `cryptsetup open /dev/loopxyz mappedName`, and creates `/dev/mapper/mappedName`
cryptsetup.sandbox.extraPaths = [
"/dev/mapper"
@@ -501,13 +515,15 @@ in
delfin.buildCost = 1;
delfin.sandbox.whitelistAudio = true;
delfin.sandbox.whitelistDbus = [ "user" ]; # else `mpris` plugin crashes the player
delfin.sandbox.whitelistDbus.user = true; #< TODO: reduce # else `mpris` plugin crashes the player
delfin.sandbox.whitelistDri = true;
delfin.sandbox.whitelistWayland = true;
delfin.sandbox.net = "clearnet";
# auth token, preferences
delfin.persist.byStore.private = [ ".config/delfin" ];
difftastic.sandbox.autodetectCliPaths = "existing";
dig.sandbox.net = "all";
dmidecode.sandbox.extraPaths = [ "/sys/firmware/dmi" ];
@@ -530,10 +546,10 @@ in
endless-sky.buildCost = 1;
endless-sky.persist.byStore.plaintext = [ ".local/share/endless-sky" ];
endless-sky.sandbox.mesaCacheDir = ".cache/endless-sky/mesa";
endless-sky.sandbox.whitelistAudio = true;
endless-sky.sandbox.whitelistDri = true;
endless-sky.sandbox.whitelistWayland = true;
# endless-sky.sandbox.whitelistX = true;
endless-sky.packageUnwrapped = pkgs.endless-sky.overrideAttrs (base: {
nativeBuildInputs = (base.nativeBuildInputs or []) ++ [
pkgs.makeWrapper
@@ -548,6 +564,10 @@ in
# TODO: package [smile](https://github.com/mijorus/smile) for probably a better mobile experience.
emote.persist.byStore.plaintext = [ ".local/share/Emote" ];
erdtree.sandbox.tryKeepUsers = true; #< to keep user/group info when running as root
erdtree.sandbox.autodetectCliPaths = "existingDir";
erdtree.sandbox.whitelistPwd = true;
ethtool.sandbox.capabilities = [ "net_admin" ];
ethtool.sandbox.net = "all";
ethtool.sandbox.tryKeepUsers = true;
@@ -563,11 +583,12 @@ in
eza.sandbox.tryKeepUsers = true; #< to keep user/group info when running as root
eza.sandbox.autodetectCliPaths = "existing";
eza.sandbox.whitelistPwd = true;
eza.sandbox.extraHomePaths = [
# so that e.g. `eza -l ~` can show which symlink exist
".persist/ephemeral"
".persist/plaintext"
];
# eza.sandbox.extraHomePaths = [
# # so that e.g. `eza -l ~` can show which symlink exist
# # hol' up: this is almost like just un-sandboxing it
# ".persist/ephemeral"
# ".persist/plaintext"
# ];
fatresize.sandbox.autodetectCliPaths = "parent"; # /dev/sda1 -> needs /dev/sda
fatresize.sandbox.tryKeepUsers = true;
@@ -595,6 +616,7 @@ in
# ];
font-manager.buildCost = 1;
font-manager.sandbox.mesaCacheDir = ".cache/font-manager/mesa";
font-manager.sandbox.whitelistWayland = true;
font-manager.packageUnwrapped = pkgs.rmDbusServicesInPlace (pkgs.font-manager.override {
# build without the "Google Fonts" integration feature, to save closure / avoid webkitgtk_4_0
@@ -645,12 +667,14 @@ in
gitea = {};
gnome-calculator.buildCost = 1;
gnome-calculator.sandbox.mesaCacheDir = ".cache/gnome-calculator/mesa"; # TODO: is this the correct app-id?
gnome-calculator.sandbox.whitelistWayland = true;
gnome-calendar.buildCost = 2; # depends on webkitgtk_6_0 via evolution-data-server
gnome-calendar.sandbox.mesaCacheDir = ".cache/gnome-calendar/mesa"; # TODO: is this the correct app-id?
# gnome-calendar surely has data to persist, but i use it strictly to do date math, not track events.
gnome-calendar.sandbox.whitelistWayland = true;
gnome-calendar.sandbox.whitelistDbus = [ "user" ];
gnome-calendar.sandbox.whitelistDbus.user = true; #< TODO: reduce
gnome-calendar.suggestedPrograms = [
"evolution-data-server" #< to access/persist calendar events
];
@@ -658,7 +682,7 @@ in
# gnome-disks
# XXX(2024-09-02): fails to show any disks even when run as `BUNPEN_DISABLE=1 sudo -E gnome-disks`.
gnome-disk-utility.buildCost = 1;
gnome-disk-utility.sandbox.whitelistDbus = [ "system" ];
gnome-disk-utility.sandbox.whitelistDbus.system = true;
gnome-disk-utility.sandbox.whitelistWayland = true;
gnome-disk-utility.sandbox.extraHomePaths = [
"tmp"
@@ -691,34 +715,14 @@ in
# seahorse: dump gnome-keyring secrets.
seahorse.buildCost = 1;
# N.B. it can lso manage ~/.ssh keys, but i explicitly don't add those to the sandbox for now.
seahorse.sandbox.whitelistDbus = [ "user" ];
seahorse.sandbox.whitelistDbus.user = true; #< TODO: reduce
seahorse.sandbox.whitelistWayland = true;
gnome-2048.buildCost = 1;
gnome-2048.sandbox.whitelistWayland = true;
gnome-2048.sandbox.mesaCacheDir = ".cache/gnome-2048/mesa";
gnome-2048.persist.byStore.plaintext = [ ".local/share/gnome-2048/scores" ];
gnome-frog.buildCost = 1;
gnome-frog.sandbox.whitelistWayland = true;
gnome-frog.sandbox.whitelistDbus = [ "user" ];
gnome-frog.sandbox.extraPaths = [
# needed when processing screenshots
"/tmp"
];
gnome-frog.sandbox.extraHomePaths = [
# for OCR'ing photos from disk
"tmp"
"Pictures/albums"
"Pictures/cat"
"Pictures/from"
"Pictures/Photos"
"Pictures/Screenshots"
"Pictures/servo-macros"
];
gnome-frog.persist.byStore.ephemeral = [
".local/share/tessdata" # 15M; dunno what all it is.
];
gnugrep.sandbox.autodetectCliPaths = "existing";
gnugrep.sandbox.whitelistPwd = true;
gnugrep.sandbox.extraHomePaths = [
@@ -740,7 +744,6 @@ in
# N.B.: if the user doesn't specify an output path, `grim` will output to ~/Pictures (which isn't included in this sandbox)
grim.sandbox.autodetectCliPaths = "existingOrParent";
grim.sandbox.whitelistWayland = true;
grim.sandbox.mesaCacheDir = null; # not a GUI even though it uses wayland
hase.buildCost = 1;
hase.sandbox.net = "clearnet";
@@ -816,7 +819,7 @@ in
"/sys/devices"
];
libnotify.sandbox.whitelistDbus = [ "user" ]; # notify-send
libnotify.sandbox.whitelistDbus.user = true; #< TODO: reduce # notify-send
lightning-cli.packageUnwrapped = pkgs.linkBinIntoOwnPackage pkgs.clightning "lightning-cli";
lightning-cli.sandbox.extraHomePaths = [
@@ -838,6 +841,7 @@ in
losslesscut-bin.sandbox.whitelistDri = true;
losslesscut-bin.sandbox.whitelistWayland = true;
# losslesscut-bin.sandbox.whitelistX = true;
losslesscut-bin.sandbox.mesaCacheDir = ".cache/losslesscut/mesa"; # TODO: is this the correct app-id?
losslesscut-bin.packageUnwrapped = pkgs.losslesscut-bin.overrideAttrs (base: {
extraMakeWrapperArgs = (base.extraMakeWrapperArgs or []) ++ [
"--append-flags '--ozone-platform-hint=auto --ozone-platform=wayland --enable-features=WaylandWindowDecorations'"
@@ -865,18 +869,15 @@ in
marksman.sandbox.whitelistPwd = true;
mercurial.sandbox.net = "clearnet";
mercurial.sandbox.whitelistPwd = true;
mesa-demos.sandbox.whitelistDri = true;
mesa-demos.sandbox.whitelistWayland = true;
mesa-demos.sandbox.whitelistX = true;
meson = {};
millipixels.packageUnwrapped = pkgs.millipixels.override {
v4l-utils = config.sane.programs.v4l-utils.packageUnwrapped; # necessary for cross compilation
};
# millipixels.packageUnwrapped = pkgs.millipixels.override {
# v4l-utils = config.sane.programs.v4l-utils.packageUnwrapped; # necessary for cross compilation
# };
millipixels.sandbox.method = null; #< TODO: sandbox
# actual monero blockchain (not wallet/etc; safe to delete, just slow to regenerate)
@@ -888,6 +889,10 @@ in
"records/finance/cryptocurrencies/monero"
];
mozlz4a.sandbox.autodetectCliPaths = "existingOrParent";
mslicer.sandbox.method = null; #< TODO: sandbox
nano.sandbox.autodetectCliPaths = "existingFileOrParent";
netcat.sandbox.net = "all";
@@ -901,13 +906,25 @@ in
nettools.sandbox.capabilities = [ "net_admin" "net_raw" ];
networkmanagerapplet.sandbox.whitelistWayland = true;
networkmanagerapplet.sandbox.whitelistDbus = [ "system" ];
networkmanagerapplet.sandbox.whitelistDbus.system = true;
nfs-utils.sandbox.method = null; #< TODO: sandbox
nil.sandbox.whitelistPwd = true;
nil.sandbox.keepPids = true;
nixd.sandbox.whitelistPwd = true;
nix-check-deps.sandbox.whitelistPwd = true;
nix-check-deps.sandbox.net = "all";
nix-check-deps.sandbox.extraPaths = [
"/nix/var"
];
nix-tree.sandbox.extraPaths = [
"/nix/var"
];
nixfmt-rfc-style.sandbox.autodetectCliPaths = "existingDirOrParent"; #< it formats via rename
nixpkgs-hammering.sandbox.whitelistPwd = true;
@@ -950,8 +967,12 @@ in
# settings (electron app)
obsidian.persist.byStore.plaintext = [ ".config/obsidian" ];
oils-for-unix.sandbox.enable = false; #< it's a shell; doesn't make sense to sandbox
openscad-lsp.sandbox.whitelistPwd = true;
openssl.sandbox.net = "clearnet";
passt.sandbox.enable = false; #< sandbox helper (netns specifically)
parted.sandbox.extraPaths = [
@@ -964,6 +985,7 @@ in
pavucontrol.sandbox.whitelistAudio = true;
pavucontrol.sandbox.whitelistDri = true; #< to be a little more responsive
pavucontrol.sandbox.whitelistWayland = true;
pavucontrol.sandbox.mesaCacheDir = ".cache/pavucontrol/mesa";
pciutils.sandbox.extraPaths = [
"/sys/bus/pci"
@@ -1005,17 +1027,21 @@ in
pwvucontrol.sandbox.whitelistAudio = true;
pwvucontrol.sandbox.whitelistDri = true; # else perf on moby is unusable
pwvucontrol.sandbox.whitelistWayland = true;
pwvucontrol.sandbox.mesaCacheDir = ".cache/pwvucontrol/mesa"; # TODO: is this the correct app-id?
pyright.sandbox.whitelistPwd = true;
python3-repl.packageUnwrapped = pkgs.python3.withPackages (ps: with ps; [
libgpiod
numpy
psutil
pykakasi
requests
scipy
unidecode
]);
python3-repl.sandbox.net = "clearnet";
python3-repl.sandbox.autodetectCliPaths = "existing"; #< for invoking scripts like `python3 ./my-script.py`
python3-repl.sandbox.extraHomePaths = [
"/" #< this is 'safe' because with don't expose .persist/private, so no .ssh/id_ed25519
".persist/plaintext"
@@ -1027,7 +1053,9 @@ in
rsync.sandbox.net = "clearnet";
rsync.sandbox.autodetectCliPaths = "existingOrParent";
rsync.sandbox.tryKeepUsers = true; # if running as root, keep the user namespace so that `-a` can set the correct owners, etc
rsync.sandbox.whitelistSsh = true;
rust-analyzer.buildCost = 2;
rust-analyzer.sandbox.whitelistPwd = true;
rust-analyzer.suggestedPrograms = [
"cargo"
@@ -1042,7 +1070,7 @@ in
sane-cast.sandbox.whitelistAudio = true; #< for sblast audio casting
sane-cast.suggestedPrograms = [ "go2tv" "sblast" ];
sane-color-picker.sandbox.whitelistDbus = [ "user" ]; #< required for eyedropper to work
sane-color-picker.sandbox.whitelistDbus.user = true; #< TODO: reduce #< required for eyedropper to work
sane-color-picker.sandbox.whitelistWayland = true;
sane-color-picker.sandbox.keepPidsAndProc = true; #< required by wl-clipboard
sane-color-picker.suggestedPrograms = [
@@ -1050,6 +1078,7 @@ in
"wl-clipboard"
# "zenity"
];
sane-color-picker.sandbox.mesaCacheDir = ".cache/sane-color-picker/mesa"; # TODO: is this the correct app-id?
sane-die-with-parent.sandbox.enable = false; #< it's a launcher; can't sandbox
@@ -1059,10 +1088,10 @@ in
screen.sandbox.enable = false; #< tty; needs to run anything
sequoia.packageUnwrapped = pkgs.sequoia.overrideAttrs (_: {
# XXX(2024-07-30): sq_autocrypt_import test failure: "Warning: 9B7DD433F254904A is expired."
doCheck = false;
});
# sequoia.packageUnwrapped = pkgs.sequoia.overrideAttrs (_: {
# # XXX(2024-07-30): sq_autocrypt_import test failure: "Warning: 9B7DD433F254904A is expired."
# doCheck = false;
# });
sequoia.buildCost = 1;
sequoia.sandbox.whitelistPwd = true;
sequoia.sandbox.autodetectCliPaths = "existingFileOrParent"; # supports `-o <file-to-create>`
@@ -1072,6 +1101,7 @@ in
shattered-pixel-dungeon.sandbox.whitelistAudio = true;
shattered-pixel-dungeon.sandbox.whitelistDri = true;
shattered-pixel-dungeon.sandbox.whitelistWayland = true;
shattered-pixel-dungeon.sandbox.mesaCacheDir = ".cache/.shatteredpixel/mesa";
# printer/filament settings
slic3r.buildCost = 1;
@@ -1081,25 +1111,20 @@ in
slic3r.sandbox.autodetectCliPaths = "existingFileOrParent"; # slic3r <my-file>.stl -o <out>.gcode
slurp.sandbox.whitelistWayland = true;
slurp.sandbox.mesaCacheDir = null; # not a GUI even though it uses wayland
snapper.sandbox.tryKeepUsers = true;
snapper.sandbox.whitelistDbus.system = true; #< all `snapper` does is speak to the daemon, via dbus
# snapshot camera, based on libcamera
# TODO: enable dma heaps for more efficient buffer sharing: <https://gitlab.com/postmarketOS/pmaports/-/issues/2789>
snapshot.sandbox.method = null; #< TODO: sandbox
sops.sandbox.extraHomePaths = [
".config/sops"
"nixos"
# TODO: sops should only need access to knowledge/secrets,
# except that i currently put its .sops.yaml config in the root of ~/knowledge
"knowledge"
];
sox.sandbox.autodetectCliPaths = "existingFileOrParent";
sox.sandbox.whitelistAudio = true;
space-cadet-pinball.buildCost = 1;
space-cadet-pinball.persist.byStore.plaintext = [ ".local/share/SpaceCadetPinball" ];
space-cadet-pinball.sandbox.mesaCacheDir = ".cache/SpaceCadetPinball/mesa"; # TODO: is this the correct app-id?
space-cadet-pinball.sandbox.whitelistAudio = true;
space-cadet-pinball.sandbox.whitelistDri = true;
space-cadet-pinball.sandbox.whitelistWayland = true;
@@ -1108,6 +1133,8 @@ in
sqlite.sandbox.method = null; #< TODO: sandbox
ssh-to-age.sandbox.autodetectCliPaths = "existingFile";
# N.B. if you call sshfs-fuse from the CLI -- without `mount.fuse` -- disable sandboxing
sshfs-fuse.sandbox.net = "all";
sshfs-fuse.sandbox.autodetectCliPaths = "parent";
@@ -1120,6 +1147,8 @@ in
];
sshfs-fuse.sandbox.keepPids = true; #< XXX: bwrap didn't need this, but bunpen does. why?
sshpass.sandbox.autodetectCliPaths = "existingFile"; #< for `sshpass -f <path/to/password/file>`
strace.sandbox.enable = false; #< needs to `exec` its args, and therefore support *anything*
subversion.sandbox.net = "clearnet";
@@ -1131,6 +1160,7 @@ in
superTux.sandbox.whitelistDri = true;
superTux.sandbox.whitelistWayland = true;
# superTux.sandbox.whitelistX = true;
superTux.sandbox.mesaCacheDir = ".cache/supertux2/mesa"; # TODO: is this the correct app-id?
superTux.persist.byStore.plaintext = [ ".local/share/supertux2" ];
superTux.packageUnwrapped = pkgs.superTux.overrideAttrs (base: {
nativeBuildInputs = (base.nativeBuildInputs or []) ++ [
@@ -1141,6 +1171,8 @@ in
'';
});
swaybg.sandbox.method = null; #< TODO: sandbox
swappy.sandbox.autodetectCliPaths = "existingFileOrParent";
swappy.sandbox.whitelistWayland = true;
@@ -1150,11 +1182,6 @@ in
systemctl.sandbox.capabilities = [ "cap_dac_override" "cap_sys_admin" ];
systemctl.sandbox.keepPidsAndProc = true;
tcpdump.sandbox.net = "all";
tcpdump.sandbox.autodetectCliPaths = "existingFileOrParent";
tcpdump.sandbox.capabilities = [ "net_admin" "net_raw" ];
tcpdump.sandbox.tryKeepUsers = true;
tdesktop.persist.byStore.private = [ ".local/share/TelegramDesktop" ];
tokodon.buildCost = 1;
@@ -1165,13 +1192,19 @@ in
tree.sandbox.tryKeepUsers = true;
tree.sandbox.capabilities = [ "dac_read_search" ];
typescript-language-server.buildCost = 2;
typescript-language-server.sandbox.whitelistPwd = true;
typescript-language-server.persist.byStore.ephemeral = [
".cache/typescript"
".npm" # .npm/{_cacache,_logs}
];
tumiki-fighters.buildCost = 1;
tumiki-fighters.sandbox.whitelistAudio = true;
tumiki-fighters.sandbox.whitelistDri = true; #< not strictly necessary, but triples CPU perf
tumiki-fighters.sandbox.whitelistWayland = true;
tumiki-fighters.sandbox.whitelistX = true;
tumiki-fighters.sandbox.mesaCacheDir = ".cache/tumiki-fighters/mesa"; # TODO: is this the correct app-id?
tumiki-fighters.suggestedPrograms = [
"xwayland" #< XXX(2024-11-10): does not start without X(wayland), not even with SDL_VIDEDRIVER=wayland
];
@@ -1190,6 +1223,8 @@ in
"/sys/bus/usb"
];
uvtools.sandbox.method = null; #< TODO: sandbox
vala-language-server.sandbox.whitelistPwd = true;
vala-language-server.suggestedPrograms = [
# might someday support cmake, too: <https://github.com/vala-lang/vala-language-server/issues/73>
@@ -1202,7 +1237,6 @@ in
# `vulkaninfo`, `vkcube`
vulkan-tools.sandbox.whitelistDri = true;
vulkan-tools.sandbox.whitelistWayland = true;
vulkan-tools.sandbox.mesaCacheDir = null; # doesn't use mesa even though it uses wayland
vulkan-tools.sandbox.whitelistX = true;
vulkan-tools.sandbox.extraPaths = [
"/sys/dev/char"
@@ -1213,6 +1247,7 @@ in
vvvvvv.sandbox.whitelistAudio = true;
vvvvvv.sandbox.whitelistDri = true; #< playable without, but burns noticably more CPU
vvvvvv.sandbox.whitelistWayland = true;
vvvvvv.sandbox.mesaCacheDir = ".cache/VVVVVV/mesa";
vvvvvv.persist.byStore.plaintext = [ ".local/share/VVVVVV" ];
w3m.sandbox.net = "all";
@@ -1223,6 +1258,7 @@ in
watch.sandbox.enable = false; #< it executes the command it's given
wdisplays.sandbox.mesaCacheDir = ".cache/wdisplays/mesa"; # TODO: is this the correct app-id?
wdisplays.sandbox.whitelistWayland = true;
wget.sandbox.net = "all";
@@ -1241,18 +1277,19 @@ in
wirelesstools.sandbox.capabilities = [ "net_admin" ];
wirelesstools.sandbox.tryKeepUsers = true;
wiremix.sandbox.whitelistAudio = true;
wl-clipboard.sandbox.whitelistWayland = true;
wl-clipboard.sandbox.keepPids = true; #< this is needed, but not sure why?
wl-clipboard.sandbox.mesaCacheDir = null; # not a GUI even though it uses wayland
wtype = {};
wtype.sandbox.whitelistWayland = true;
wtype.sandbox.mesaCacheDir = null; # not a GUI even though it uses wayland
xwayland.sandbox.wrapperType = "inplace"; #< consumers use it as a library (e.g. wlroots)
xwayland.sandbox.whitelistWayland = true; #< just assuming this is needed
xwayland.sandbox.whitelistX = true;
xwayland.sandbox.whitelistDri = true; #< would assume this gives better gfx perf
xwayland.sandbox.mesaCacheDir = ".cache/xwayland/mesa"; # TODO: is this the correct app-id?
xterm.sandbox.enable = false; # need to be able to do everything
@@ -1261,7 +1298,11 @@ in
sane.persist.sys.byStore.plaintext = lib.mkIf config.sane.programs.guiApps.enabled [
# "/var/lib/alsa" # preserve output levels, default devices
"/var/lib/systemd/backlight" # backlight brightness
{
# backlight brightness; MUST be `bind`, else systemd loses its shit with "Too many levels of symbolic links".
path = "/var/lib/systemd/backlight";
method = "bind";
}
];
hardware.graphics = lib.mkIf config.sane.programs.guiApps.enabled ({

View File

@@ -3,22 +3,32 @@
# - default recording input will be silent, on lappy.
# - Audio Setup -> Rescan Audio Devices ...
# - Audio Setup -> Recording device -> sysdefault
{ pkgs, ... }:
{ lib, pkgs, ... }:
let
# wxGTK32 uses webkitgtk-4.0.
# audacity doesn't actually need webkit though, so diable to reduce closure
wxGTK32 = pkgs.wxGTK32.override {
withWebKit = false;
};
# basePkg = pkgs.audacity.overrideAttrs (base: {
# # upstream audacity.desktop specifies GDK_BACKEND=x11, with which it doesn't actually launch :|
# postInstall = (base.postInstall or "") + ''
# substituteInPlace $out/share/applications/${appId}.desktop \
# --replace-fail 'GDK_BACKEND=x11 ' ""
# '';
# # XXX(2025-03-03): upstream nixpkgs incorrectly defaults `GDK_BACKEND=x11`,
# # even though audacity runs fine on wayland
# postFixup = lib.replaceStrings [ "--set-default GDK_BACKEND x11" ] [ "" ] base.postFixup;
# });
basePkg = pkgs.tenacity; #< XXX(2025-07-27): upstream audacity fails build; use tenacity until fixed
appId = basePkg.pname;
in
{
sane.programs.audacity = {
packageUnwrapped = (pkgs.audacity.override {
# wxGTK32 uses webkitgtk-4.0.
# audacity doesn't actually need webkit though, so diable to reduce closure
wxGTK32 = pkgs.wxGTK32.override {
withWebKit = false;
};
}).overrideAttrs (base: {
# upstream audacity.desktop specifies GDK_BACKEND=x11, with which it doesn't actually launch :|
postInstall = (base.postInstall or "") + ''
substituteInPlace $out/share/applications/audacity.desktop \
--replace-fail 'GDK_BACKEND=x11 ' ""
'';
});
packageUnwrapped = basePkg.override {
inherit wxGTK32;
};
buildCost = 1;
@@ -30,20 +40,21 @@
"tmp"
"Music"
# audacity needs the entire config dir mounted if running in a sandbox
".config/audacity"
".config/${appId}"
];
sandbox.extraPaths = [
"/dev/snd" # for recording audio inputs to work
];
# disable first-run splash screen
fs.".config/audacity/audacity.cfg".file.text = ''
fs.".config/${appId}/${appId}.cfg".file.text = ''
PrefsVersion=1.1.1r1
[GUI]
ShowSplashScreen=0
[Version]
Major=3
Minor=4
Major=${lib.versions.major basePkg.version}
Minor=${lib.versions.minor basePkg.version}
Micro=${lib.versions.patch basePkg.version}
'';
};
}

View File

@@ -3,7 +3,5 @@
{
sane.programs.ausyscall = {
packageUnwrapped = pkgs.linkBinIntoOwnPackage pkgs.audit "ausyscall";
};
}

View File

@@ -22,13 +22,13 @@ in
# do this here, because the nixos service isn't so easily patched.
postInstall = (upstream.postInstall or "") + ''
wrapProgram "$out/sbin/avahi-daemon" \
--add-flags --no-drop-root
--add-flag --no-drop-root
'';
nativeBuildInputs = upstream.nativeBuildInputs ++ [
pkgs.makeBinaryWrapper
];
});
sandbox.whitelistDbus = [ "system" ];
sandbox.whitelistDbus.system = true;
sandbox.net = "all"; #< otherwise it will show 'null' in place of each interface name.
# sandbox.extraPaths = [ ]; #< may be missing some paths; only tried service discovery, not service advertisement.
};

View File

@@ -88,21 +88,6 @@ in
{
sane.programs.bemenu = {
sandbox.whitelistWayland = true;
sandbox.extraHomePaths = [
".cache/fontconfig" #< else it complains, and is *way* slower
];
packageUnwrapped = pkgs.bemenu.overrideAttrs (upstream: {
nativeBuildInputs = (upstream.nativeBuildInputs or []) ++ [
pkgs.makeBinaryWrapper
];
# can alternatively be specified as CLI flags
postInstall = (upstream.postInstall or "") + ''
wrapProgram $out/bin/bemenu \
--set BEMENU_OPTS "${bemenuOpts}"
wrapProgram $out/bin/bemenu-run \
--set BEMENU_OPTS "${bemenuOpts}"
'';
});
env.BEMENU_OPTS = bemenuOpts;
};
}

View File

@@ -0,0 +1,13 @@
{ ... }:
{
sane.programs.blanket = {
# com.rafaelmardojai.Blanket
buildCost = 1;
sandbox.whitelistAudio = true;
sandbox.whitelistDbus.user.own = [
"com.rafaelmardojai.Blanket"
"org.mpris.MediaPlayer2.Blanket"
];
sandbox.whitelistWayland = true;
};
}

View File

@@ -0,0 +1,24 @@
{ config, lib, ... }:
let
cfg = config.sane.programs.blueberry;
in
{
sane.programs.blueberry = {
sandbox.wrapperType = "inplace"; #< it places binaries in /lib and then /etc/xdg/autostart files refer to the /lib paths, and fail to be patched
sandbox.whitelistWayland = true;
sandbox.extraPaths = [
"/dev/rfkill"
"/run/dbus"
"/sys/class/rfkill"
"/sys/devices"
];
sandbox.keepPids = true; #< not sure why, but it fails to launch GUI without this
};
# TODO: hardware.bluetooth puts like 100 binaries from `bluez` onto PATH;
# i can probably patch this so it's just `bluetoothd`.
# see: <repo:nixos/nixpkgs:nixos/modules/services/hardware/bluetooth.nix>
hardware.bluetooth = lib.mkIf cfg.enabled {
enable = true;
};
}

View File

@@ -0,0 +1,6 @@
{ ... }:
{
sane.programs.blueman = {
sandbox.method = null; #< TODO: sandbox
};
}

View File

@@ -50,9 +50,10 @@ in
};
};
# plug into the (proposed) nixpkgs bonsaid service.
# plug into the nixpkgs bonsaid service.
# it's a user service, and since i don't use the service manager it doesn't actually activate:
# i just steal the config file generation from it :)
services.bonsaid.package = config.sane.programs.bonsai.package;
services.bonsaid.settings = lib.mkIf cfg.enabled (lib.mkMerge [
cfg.config.transitions
[{

View File

@@ -22,6 +22,7 @@
sandbox.extraPaths = [
"/tmp" # needed particularly if run from `sane-vpn do`
];
sandbox.mesaCacheDir = ".cache/BraveSoftware/mesa";
sandbox.whitelistAudio = true;
sandbox.whitelistDri = true;
sandbox.whitelistWayland = true;

View File

@@ -9,7 +9,7 @@ in
"/sys/class/leds"
"/sys/devices"
];
# sandbox.whitelistDbus = [ "system" ]; #< only necessary if not granting udev perms
# sandbox.whitelistDbus.system = true; #< only necessary if not granting udev perms
};
services.udev.extraRules = let

View File

@@ -4,7 +4,8 @@ let
in
{
sane.programs.btrfs-progs = {
sandbox.autodetectCliPaths = "existing"; # e.g. `btrfs filesystem df /my/fs`
# sandbox.autodetectCliPaths = "existing"; # e.g. `btrfs filesystem df /my/fs`
sandbox.autodetectCliPaths = "parent"; # e.g. `btrfs subvolume create ./my_subvol`
sandbox.extraPaths = [
"/dev/btrfs-control"
#vvv required for `sudo btrfs filesystem show` with no args
@@ -12,13 +13,28 @@ in
"/sys/block"
"/sys/dev/block"
"/sys/devices"
#vvv required for `sudo btrfs scrub start`
"/sys/fs"
#vvv required for `sudo btrfs scrub status` to show stats
"/var/lib/btrfs"
];
sandbox.tryKeepUsers = true;
sandbox.capabilities = [ "sys_admin" ]; # for `btrfs scrub`
sandbox.keepPids = true; # required for `sudo btrfs scrub start`
sandbox.capabilities = [
"dac_read_search" # for `btrfs replace`
"sys_admin" # for `btrfs scrub`
];
};
# TODO: service sandboxing
services.btrfs.autoScrub.enable = lib.mkIf cfg.enabled true;
services.btrfs.autoScrub.interval = "weekly";
# nixos/modules/tasks/filesystems/btrfs.nix fires this assertion, but its implementation totally handles the case of 0 btrfs filesystems.
sane.silencedAssertions = lib.mkIf cfg.enabled [''
If 'services.btrfs.autoScrub' is enabled, you need to have at least one
btrfs file system mounted via 'fileSystems' or specify a list manually
in 'services.btrfs.autoScrub.fileSystems'.
''];
}

View File

@@ -7,7 +7,7 @@ in
packageUnwrapped = pkgs.bunpen.overrideAttrs (base: {
# create a directory which holds just the `bunpen` so that we
# can add bunpen as a dependency to binaries via `PATH=/run/current-system/libexec/bunpen` without forcing rebuild every time bunpen changes
postInstall = ''
postInstall = (base.postInstall or "") + ''
mkdir -p $out/libexec/bunpen
ln -s $out/bin/bunpen $out/libexec/bunpen/bunpen
'';

View File

@@ -14,7 +14,7 @@
packageUnwrapped = pkgs.rmDbusServices pkgs.callaudiod;
sandbox.whitelistAudio = true;
sandbox.whitelistDbus = [ "user" ];
sandbox.whitelistDbus.user = true; #< TODO: reduce
services.callaudiod = {
description = "callaudiod: dbus service to switch audio profiles and mute microphone";

View File

@@ -102,9 +102,15 @@ in
];
}));
sandbox.mesaCacheDir = ".cache/calls/mesa";
sandbox.net = "vpn.wg-home"; #< XXX(2024/07/05): my cell carrier seems to block RTP, so tunnel it.
sandbox.whitelistAudio = true;
sandbox.whitelistDbus = [ "user" ]; # necessary for secrets, at the minimum
sandbox.whitelistDbus.user.call."org.freedesktop.secrets" = "*"; #< TODO: restrict to a subset of secrets
sandbox.whitelistDbus.user.call."org.mobian_project.CallAudio" = "*";
sandbox.whitelistDbus.user.call."org.sigxcpu.Feedback" = "*";
sandbox.whitelistDbus.user.call."org.gnome.evolution.dataserver.*" = "*"; #< TODO: reduce; only needs address book and maybe sources
sandbox.whitelistDbus.user.own = [ "org.gnome.Calls" ];
sandbox.whitelistSendNotifications = true; # for missed calls
sandbox.whitelistWayland = true;
persist.byStore.private = [

View File

@@ -1,7 +1,7 @@
{ pkgs, ... }:
{
sane.programs.captree = {
packageUnwrapped = pkgs.linkBinIntoOwnPackage pkgs.libcap-with-captree "captree";
packageUnwrapped = pkgs.linkBinIntoOwnPackage pkgs.libcap "captree";
sandbox.keepPidsAndProc = true;
};
}

View File

@@ -0,0 +1,16 @@
{ ... }:
{
sane.programs.cargo = {
#v XXX(2025-02-23): normal `cargo` fails to build for cross (temporarily?). use prebuilt instead.
# NOT easy to debug/fix. git bisect pins this between ceba2c6c3b (good) and 62a28e5a3d (bad)
# packageUnwrapped = pkgs.rust.packages.prebuilt.cargo;
buildCost = 1; # 2.5 GiB closure
persist.byStore.plaintext = [ ".cargo" ];
# probably this sandboxing is too restrictive; i'm sandboxing it for rust-analyzer / neovim LSP
sandbox.whitelistPwd = true;
sandbox.net = "all";
sandbox.extraHomePaths = [ "dev" "ref" ];
};
}

View File

@@ -0,0 +1,28 @@
{ config, lib, pkgs, ...}:
let
cfg = config.sane.programs.cassini;
in
{
sane.programs.cassini = {
sandbox.method = null; #< TODO: sandbox
};
# inspired by SSDP firewall code.
# Elegoo printers use their own SSDP-like discovery method, but on port 3000 instead of 1900 and 255.255.255.255 instead of 239.255.255.250:
# 1. i send a broadcast packet to 255.255.255.255 port 3000;
# 2. printers respond with a packet that originates from their port 3000, addressed to whichever port i sent from.
#
# TODO: can i generalize the SSDP rule from <hosts/common/net/upnp.nix> to be generic over port?
networking.firewall.extraCommands = with pkgs; lib.mkIf cfg.enabled ''
# originally for SSDP: <https://serverfault.com/a/911286>
# ipset -! means "don't fail if set already exists"
${ipset}/bin/ipset create -! upnp hash:ip,port timeout 10
${iptables}/bin/iptables -A OUTPUT -d 255.255.255.255/32 -p udp -m udp --dport 3000 -j SET --add-set upnp src,src --exist
${iptables}/bin/iptables -A INPUT -p udp -m set --match-set upnp dst,dst -j ACCEPT
# IPv6 ruleset. ff02::/16 means *any* link-local multicast group (so this is probably more broad than it needs to be)
${ipset}/bin/ipset create -! upnp6 hash:ip,port timeout 10 family inet6
${iptables}/bin/ip6tables -A OUTPUT -d ff02::/16 -p udp -m udp --dport 3000 -j SET --add-set upnp6 src,src --exist
${iptables}/bin/ip6tables -A INPUT -p udp -m set --match-set upnp6 dst,dst -j ACCEPT
'';
}

View File

@@ -14,5 +14,6 @@
# save data, controls map
".local/share/Celeste64"
];
sandbox.mesaCacheDir = ".cache/Celeste64/mesa";
};
}

View File

@@ -0,0 +1,19 @@
{ ... }:
{
sane.programs.confy = {
sandbox.net = "all";
sandbox.whitelistDri = true;
sandbox.whitelistWayland = true;
sandbox.mesaCacheDir = ".cache/net.kirgroup.confy/mesa";
sandbox.whitelistDbus.user.own = [ "net.kirgroup.confy" ];
sandbox.whitelistPortal = [
"NetworkMonitor"
"OpenURI"
];
persist.byStore.private = [
".cache/net.kirgroup.confy"
# ".local/share/net.kirgroup.confy" #< empty
];
};
}

View File

@@ -11,6 +11,7 @@
conky.config = {
out_to_wayland = true,
out_to_x = false,
update_interval = 10,
alignment = 'middle_middle',

View File

@@ -9,7 +9,6 @@
# "/sys/devices/system"
];
sandbox.whitelistWayland = true;
sandbox.mesaCacheDir = null; # doesn't use mesa even though it uses wayland
suggestedPrograms = [
"sane-sysload"

View File

@@ -16,7 +16,7 @@
buildCost = 1;
sandbox.whitelistAudio = true;
sandbox.whitelistDbus = [ "user" ]; # mpris
sandbox.whitelistDbus.user = true; #< TODO: reduce # mpris
sandbox.whitelistWayland = true;
sandbox.extraHomePaths = [
"Books/Audiobooks"

View File

@@ -11,11 +11,12 @@ let
in
{
sane.programs.cups = {
sandbox.method = null; #< TODO: sandbox
suggestedPrograms = [
"system-config-printer"
];
};
sane.programs.system-config-printer = {};
sane.programs.system-config-printer.sandbox.method = null; #< TODO: sandbox
services.printing = lib.mkIf cfg.enabled {
enable = true;

View File

@@ -30,7 +30,7 @@ in
{
sane.programs.dconf = {
packageUnwrapped = pkgs.rmDbusServicesInPlace pkgs.dconf;
sandbox.whitelistDbus = [ "user" ];
sandbox.whitelistDbus.user = true; #< TODO: reduce
persist.byStore.private = [
".config/dconf"
];

View File

@@ -5,6 +5,7 @@
./abaddon.nix
./aerc.nix
./alacritty.nix
./alpaca.nix
./alsa-ucm-conf
./animatch.nix
./assorted.nix
@@ -13,6 +14,9 @@
./avahi.nix
./bemenu.nix
./bitcoin-cli.nix
./blanket.nix
./blueberry.nix
./blueman.nix
./bonsai.nix
./brave.nix
./brightnessctl.nix
@@ -24,9 +28,12 @@
./cantata.nix
./capsh.nix
./captree.nix
./cargo.nix
./cassini.nix
./catt.nix
./celeste64.nix
./chatty.nix
./confy.nix
./conky
./cozy.nix
./cups.nix
@@ -52,6 +59,7 @@
./evince.nix
./evolution-data-server.nix
./exiftool.nix
./expect.nix
./fcitx5.nix
./feedbackd.nix
./fftest.nix
@@ -75,12 +83,14 @@
./gnome-clocks.nix
./gnome-contacts.nix
./gnome-feeds.nix
./gnome-frog.nix
./gnome-keyring
./gnome-maps.nix
./gnome-sound-recorder.nix
./gnome-weather.nix
./go2tv.nix
./gocryptfs.nix
./gpodder.nix
./gpodder
./gpsd.nix
./gps-share.nix
./grimshot.nix
@@ -93,6 +103,7 @@
./haredoc.nix
./helix.nix
./htop
./htpasswd.nix
./iio-sensor-proxy.nix
./imagemagick.nix
./inkscape.nix
@@ -103,6 +114,7 @@
./komikku.nix
./koreader
./krita.nix
./lddtree.nix
./less.nix
./lftp.nix
./lgtrombetta-compass.nix
@@ -115,6 +127,7 @@
./megapixels.nix
./megapixels-next.nix
./mepo.nix
./mercurial
./mimeo
./mimetype.nix
./mmcli.nix
@@ -125,6 +138,7 @@
./nautilus.nix
./neovim
./networkmanager_dmenu
./newelle.nix
./newsflash.nix
./nheko.nix
./nicotine-plus.nix
@@ -133,6 +147,7 @@
./nmcli.nix
./notejot.nix
./ntfy-sh.nix
./nvimpager.nix
./nwg-panel
./objdump.nix
./obsidian.nix
@@ -150,6 +165,7 @@
./playerctl.nix
./qmk-udev-rules.nix
./radicale.nix
./readline.nix
./rhythmbox.nix
./ripgrep.nix
./rofi
@@ -169,17 +185,22 @@
./sblast
./schlock.nix
./seatd.nix
./see-cat.nix
./sfeed.nix
./shadow.nix
./signal-desktop.nix
./slack.nix
./sm64coopdx.nix
./sm64ex-coop.nix
./smartmontools.nix
./socat.nix
./sops.nix
./soundconverter.nix
./splatmoji.nix
./spot.nix
./spotify.nix
./steam.nix
./ssh.nix
./stepmania.nix
./strings.nix
./sublime-music.nix
@@ -192,9 +213,11 @@
./switchboard.nix
./syshud.nix
./tangram.nix
./tcpdump.nix
./tor-browser.nix
./tuba.nix
./unl0kr
./uptime.nix
./v4l-utils.nix
./via.nix
./video-trimmer.nix
@@ -223,6 +246,8 @@
./zathura.nix
./zeal.nix
./zecwallet-lite.nix
./zelda64recomp.nix
./zoom-us.nix
./zulip.nix
./zsa-udev-rules.nix
./zfs-tools.nix

View File

@@ -1,20 +1,13 @@
{ pkgs, ... }:
{ ... }:
{
sane.programs.dialect = {
packageUnwrapped = pkgs.dialect.overrideAttrs (upstream: {
# TODO: send upstream
# TODO: figure out how to get audio working
# TODO: move to runtimeDependencies?
buildInputs = upstream.buildInputs ++ [
pkgs.glib-networking # for TLS
];
});
buildCost = 1;
sandbox.wrapperType = "inplace"; # share/search_providers/ calls back into the binary, weird wrap semantics
sandbox.whitelistWayland = true;
sandbox.net = "clearnet";
# gsettingsPersist = [ "app/drey/Dialect" ];
sandbox.mesaCacheDir = ".cache/dialect/mesa"; # TODO: is this the correct app-dir?
};
}

View File

@@ -50,22 +50,31 @@ in
};
};
packageUnwrapped = pkgs.dino.override {
# XXX(2024/04/24): build without echo cancelation (i.e. force WITH_VOICE_PROCESSOR to be undefined).
# this means that if the other end of the call is on speaker phone, i'm liable to hear my own voice
# leave their speaker, enter their mic, and then return to me.
# the benefit is a >50% reduction in CPU use. insignificant on any modern PC; make-or-break on a low-power Pinephone.
webrtc-audio-processing = null;
};
# packageUnwrapped = pkgs.dino.override {
# # XXX(2024/04/24): build without echo cancelation (i.e. force WITH_VOICE_PROCESSOR to be undefined).
# # this means that if the other end of the call is on speaker phone, i'm liable to hear my own voice
# # leave their speaker, enter their mic, and then return to me.
# # the benefit is a >50% reduction in CPU use. insignificant on any modern PC; make-or-break on a low-power Pinephone.
# # XXX(2025/05/16): this appears to no longer be optional
# # webrtc-audio-processing_1 = null;
# };
suggestedPrograms = [
"gnome-keyring"
];
# suggestedPrograms = [
# "gnome-keyring"
# ];
sandbox.net = "clearnet";
sandbox.whitelistAudio = true;
sandbox.whitelistDbus = [ "user" ]; # notifications
# sandbox.whitelistDbus.user.call."org.freedesktop.secrets" = "*"; #< apparently not needed?
sandbox.whitelistDbus.user.own = [ "im.dino.Dino" ];
sandbox.whitelistDri = true; #< not strictly necessary, but we need all the perf we can get on moby
sandbox.whitelistSendNotifications = true;
sandbox.whitelistPortal = [
# "FileChooser"
# "NetworkMonitor" #< stderr message if omitted, but non-fatal
"OpenURI"
"ProxyResolver" #< REQUIRED, else all peers will appear offline & messages can't be sent/received
];
sandbox.whitelistWayland = true;
sandbox.extraHomePaths = [
"Music"
@@ -84,6 +93,7 @@ in
# ".cache/gstreamer-1.0" # 1.3 MB #< TODO: place the gst cache in ~/.cache/dino/gstreamer-1.0
# ];
persist.byStore.private = [ ".local/share/dino" ];
sandbox.mesaCacheDir = ".cache/dino/mesa";
services.dino = {
description = "dino XMPP client";

View File

@@ -6,11 +6,16 @@
installPhase = lib.replaceStrings [ "NIXOS_OZONE_WL" ] [ "WAYLAND_DISPLAY" ] base.installPhase;
});
sandbox.mesaCacheDir = ".cache/discord/mesa";
# creds, but also 200 MB of node modules, etc
persist.byStore.private = [ ".config/discord" ];
sandbox.wrapperType = "inplace"; #< package contains broken symlinks that my wrapper can't handle
sandbox.whitelistAudio = true;
sandbox.whitelistDbus = [ "user" ]; # needed for xdg-open
# sandbox.whitelistDbus.user.own = [ ":*" ]; #< does not own any well-known name
sandbox.whitelistPortal = [
# "FileChooser" #< does not use file chooser
"OpenURI"
];
sandbox.whitelistDri = true; #< required for even basic graphics (e.g. rendering a window)
sandbox.whitelistWayland = true;
sandbox.net = "clearnet";

View File

@@ -38,8 +38,14 @@ in
sandbox.net = "clearnet";
sandbox.whitelistAudio = true;
sandbox.whitelistDbus = [ "user" ]; # notifications
sandbox.whitelistDbus.user.call."org.freedesktop.secrets" = "*"; #< TODO: restrict secrets
sandbox.whitelistDbus.user.own = [ "so.libdb.dissent" ];
sandbox.whitelistDri = true;
sandbox.whitelistPortal = [
"FileChooser"
"OpenURI"
];
sandbox.whitelistSendNotifications = true;
sandbox.whitelistWayland = true;
sandbox.extraHomePaths = [
"Music"
@@ -54,6 +60,8 @@ in
"tmp"
];
sandbox.mesaCacheDir = ".cache/dissent/mesa";
persist.byStore.private = [
".cache/dissent"
".config/dissent" # empty?

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