Compare commits

...

907 Commits

Author SHA1 Message Date
29b757638c megapixels-next: make it the default camera 2024-09-21 12:24:25 +00:00
821855651d gnome-calls: sandbox with bunpen 2024-09-21 12:23:33 +00:00
606be197db nicotine-plus: sandbox with bunpen 2024-09-21 12:23:21 +00:00
208b634040 programs/sandboxing: add required args to use pasta 2024-09-21 12:21:11 +00:00
224b298cda bunpen: tighter sequencing around pasta net proxying 2024-09-21 11:52:13 +00:00
29975ce787 remove custom eg25-manager and use nixpkgs upstream instead 2024-09-21 08:33:15 +00:00
90d48849cc mpv: replace "blast-to-default" with "sane-cast"
i could kill 'blast-to-default' altogether now, but i may hold off until i'm more certain this works
2024-09-21 08:30:01 +00:00
9a4635c93b sane-cast: support casting audio 2024-09-21 08:29:23 +00:00
f7b4e5ba98 pipewire: create a "effect_input.virtual" node which can become the "blast" audio source in the future 2024-09-21 07:38:05 +00:00
84c4dcb9d1 blast-ugjka: format with nixfmt 2024-09-21 06:37:31 +00:00
3dff60397e bunpen: get pasta working
full of race conditions and weird edge cases (some of which may have existed before)
2024-09-21 03:40:26 +00:00
b105e774b3 btrfs-progs: fix sandboxing 2024-09-21 01:56:56 +00:00
e9d3623a97 firefox: add search shortcut for ArchLinux wiki 2024-09-21 00:14:34 +00:00
a9472a14f2 bunpen: restore /proc access in PID-namespaced applications 2024-09-20 23:15:05 +00:00
a2abe159a4 bunpen: tests: ensure that --bunpen-keep-net actually does something 2024-09-20 22:50:24 +00:00
0546bf6ea5 bunpen: barebones pasta integration
totally untested, except that it builds
2024-09-20 12:41:39 +00:00
d22bbcf44a bunpen: refactor: be more organized with how we shed resources 2024-09-20 11:51:53 +00:00
e6803d6068 bunpen: refactor: split mount_ns into own file 2024-09-20 11:22:10 +00:00
3993f26cc6 bunpen: move restrict::namespace_restrict -> restrict::ns::namespace_restrict 2024-09-20 11:18:02 +00:00
f6a93e120a yt-dlp: fix that downloaded files have ordinary mtimes 2024-09-20 11:02:11 +00:00
b3a6656c81 moby: linux-armbian: remove an unnecessary HDMI-sound patch 2024-09-20 10:12:21 +00:00
a4a43d24dc eg25-control: fix missing sandbox path 2024-09-20 10:11:46 +00:00
ec144ae63b eg25-control: fix build 2024-09-20 10:11:46 +00:00
145c65b66b linux-armbian: enable patches necessary to boot the modem (with eg25-manager, or soon, eg25-control) 2024-09-20 10:11:46 +00:00
dfad5d596d eg25-control: fix power-down sequence 2024-09-20 10:11:09 +00:00
ee083b1b8f eg25-control: slightly more robust power-down codepath (i suspect it's still broken though) 2024-09-20 09:40:04 +00:00
f1d05af377 eg25-control: support power-on/off via GPIO control instead of modem-power 2024-09-20 08:07:15 +00:00
c81a6f51e2 eg25-control: split out a Phy abstraction behind which to hide megi's modem-power API 2024-09-20 08:07:15 +00:00
8559de949e python3-repl: ship libgpiod 2024-09-20 04:19:54 +00:00
8979ff0eec bunpen: plumb pasta related arguments into make-sandboxed
for testing only: these options don't yet have the intended effect
2024-09-19 23:54:43 +00:00
2a4043523d bunpen: plumb pasta CLI options up through main 2024-09-19 23:52:07 +00:00
bf53ab1cb1 bunpen: parse net CLI switches 2024-09-19 23:35:05 +00:00
381641b2db eg25-manager: actually ship udev rules (?) 2024-09-19 23:25:59 +00:00
1cc809b347 avahi: sandbox with bunpen 2024-09-19 23:10:28 +00:00
9e74297acd eg25-manager: ship udev rules 2024-09-19 22:39:00 +00:00
51556eeefd readme: remove outdated mention of sxmo-utils 2024-09-19 19:46:32 +00:00
32d565fe77 uassets: 0-unstable-2024-09-17 -> 0-unstable-2024-09-19 2024-09-19 19:02:24 +00:00
0e4b38a163 Revert "mpv: uosc: remove package pin"
This reverts commit 03ebb3de28.

newer uosc is completely unresponsive to touch controls.
sliders (speed, position, and *possibly* volume) respond to touch,
but buttons like play/forward/previous/close/menu don't activate.
2024-09-19 11:01:49 +00:00
03ebb3de28 mpv: uosc: remove package pin
this is not thoroughly tested; may well be partly broken on moby
2024-09-19 10:40:02 +00:00
b034196ce4 eg25-manager: ship (but not yet integrated) 2024-09-19 10:06:39 +00:00
b0edd56ba2 activationScripts: cleanup the "nixos activated" graphical notification 2024-09-19 10:05:56 +00:00
717af4e5ff moby: clean up kernel config 2024-09-19 08:26:45 +00:00
3c660df817 moby: ship axp20x_adc as a kernel module, in initrd, instead of as a builtin
works: display
works: rear camera (megapixels-next)
works: torch / LED
works: speaker
works: headphones
untested: battery/charging
2024-09-19 08:26:45 +00:00
dc1999e7b2 moby: default the ARM64_LPA2 kernel option
works: display
works: rear camera (megapixels-next)
works: torch / LED
works: speaker
works: headphones
untested: battery/charging
2024-09-19 08:26:45 +00:00
e2698f02c6 moby: default AXP20X_POWER kernel config
works: display
works: rear camera (megapixels-next)
works: torch / LED
works: speaker
works: headphones
untested: battery/charging
2024-09-19 08:26:45 +00:00
3c863bc004 moby: default some more AXP20x kernel options
works: display
works: rear camera (megapixels-next)
works: torch / LED
works: speaker
works: headphones
untested: battery/charging
2024-09-19 08:26:45 +00:00
fec90421df moby: remove INPUT_AXP20X_PEK kernel config override
works: display
works: rear camera (megapixels-next)
works: speakers
works: headphones
works: microphone
works: torche / LED
2024-09-19 08:26:45 +00:00
1c5b9f1ede moby: re-disable LCD_CLASS_DEVICE, now that boot has been verified 2024-09-19 08:26:45 +00:00
4ea9698959 moby: remove REGULATOR_VCTRL kernel config override
works: display
works: rear camera (via megapixels-next)
works: torch / LED
works: speakers
works: headphones
untested: battery/charging
2024-09-19 08:26:45 +00:00
c6705be538 moby: disable another LCD-related kernel override (and temporarily re-enable SUN50I_IOMMU until tested)
working: display
UNTESTED: camera
UNTESTED: torch / LED
UNTESTED: speakers
UNTESTED: headphones
2024-09-19 08:26:45 +00:00
d8b9f58788 moby: disable CMA/DMABUF config options
works: display
works: torch / LED
works: rear camera (via megapixels-next)
works: speakers
works: headphones
2024-09-19 08:26:45 +00:00
378168776a moby: remove the device-tree related kernel options
works: display
works: rear camera (via megapixels-next)
works: torch
works: speakers
works: headphones
untested: battery/charging
2024-09-19 08:26:45 +00:00
f5a86956a9 moby: remove the DRM-related kernel config overrides 2024-09-19 08:26:45 +00:00
965ef91736 moby: remove a couple more custom kernel configs
also revert the previous commit, but that's a development artifact; not actually required.

works: display
works: rear camera (via megapixels-next)
works: torch / LED
works: speakers
works: headphones
2024-09-19 08:26:45 +00:00
791b96fa8f moby: switch DRM kernel options from builtin back to module
works: display
works: rear camera (via megapixels-next)
works: torch / LED
works: speakers
works: headphones
2024-09-19 08:26:45 +00:00
92626cd87d moby: disable a few more custom kernel config options
works: display
works: rear camera (megapixels-next)
works: speaker
works: headphones
works: torch / LED
2024-09-19 08:26:45 +00:00
09bbd9fd91 NOT FOR MERGE: moby: switch a few more kernel options back to their default
display: non-functional
2024-09-19 08:26:45 +00:00
9b07eebf6d moby: switch a few more kernel configs back to their default
works: display
works: rear camera (via megapixels-next)
works: speakers
works: headphones
works: torch / LED
untested: battery/charging
2024-09-19 08:26:45 +00:00
439ee43a5e moby: decrease custom kernel config
works: display
works: rear camera / megapixels-next
works: speaker
works: headphones
works: torch / LED
untested: battery / charging
2024-09-19 08:26:45 +00:00
e2a96a391f moby: reduce custom kernel configs
works: rear camera (megapixels-next)
works: speaker
works: headphones
works: camera flash
untested: battery/charging
2024-09-19 08:26:45 +00:00
6be3a8a245 moby: remove a few unnecessary kernel configs
camera: works (rear, in megapixels-next)
speakers: work
headphones: work
charging: untested (assume the USB-C port only powers the board, doesn't charge the battery)
2024-09-19 08:26:45 +00:00
7a3c550817 moby: remove pmos kernel config (and replace some m options with y to keep functionality)
graphics: works
rear camera: works (in megapixels-next)
speakers: work
headphones: work
battery: incapable of charging; battery current capped to below 0.
- i *think* this happened when i switched to "all" config, earlier.
2024-09-19 08:26:45 +00:00
7b72046bee moby: don't blacklist mainline gc2145
this doesn't enable the front camera in any app, but it doesn't break anything either
2024-09-19 08:26:45 +00:00
5500a7ffcc linux-armbian: enable withFullConfig
hope to disable pmos later, but for now that would kill graphics.

battery charging _may_ be capped such that the battery cannot charge
unless powered off. difficult to tell for certain.
2024-09-19 08:26:45 +00:00
e2cd92a356 cross: push xdg-desktop-portal build fix upstream 2024-09-19 08:26:45 +00:00
b1036896fe cross: push switchboard-plug-network patch upstream 2024-09-19 08:26:45 +00:00
e4ab6e2022 cross: remove a few upstreamed patches 2024-09-19 08:26:44 +00:00
631bd9998d nixpkgs: 24.05-unstable-2024-09-16 -> 24.05-unstable-2024-09-17 2024-09-19 08:26:44 +00:00
28d329855f nixpkgs-wayland: 0-unstable-2024-09-13 -> 0-unstable-2024-09-17 2024-09-19 08:26:44 +00:00
4d03d7a845 sops-nix: assets-unstable-2024-09-13 -> assets-unstable-2024-09-16 2024-09-19 08:26:44 +00:00
2f367c1247 syshud: 0-unstable-2024-09-10 -> 0-unstable-2024-09-15 2024-09-19 08:26:44 +00:00
ee62acab02 uassets: 0-unstable-2024-09-14 -> 0-unstable-2024-09-17 2024-09-19 08:26:44 +00:00
9efa3f8f86 moby: disable some inconsequential audio-related kernel patches
speaker: works.
headphones: works.
internal mic: works.
headphone mic: works.
2024-09-19 08:26:44 +00:00
7b57d62da6 moby: disable more kernel audio patches
speakers: works.
headphones: works.
headset mic: works.
builtin mic: works.
2024-09-19 08:26:44 +00:00
aa0ca7ed0e moby: remove more AC100 audio patches
speakers: work. headphones: work.
mic: untested.
2024-09-19 08:26:44 +00:00
c0347eb68a moby: disable the "analog" component of AC100 codec as well
speaker and headphones work; builtin and headphone mic work.
2024-09-19 08:26:44 +00:00
e5a1aeedac moby: disable digital part of AC100
speaker and headphone audio work. safe to deploy.
2024-09-19 08:26:44 +00:00
9108ecdf59 moby: enable speaker audio
tested: speaker, headphone, rear cam (via megapixels-next)

this is hopefully more patches than actually required.
2024-09-19 08:26:44 +00:00
1859cfc714 moby: kernel: disable unnecessary N_VBUSEN patch
still working: rear cam with megapixels-next, charging, headphone out
2024-09-19 08:26:44 +00:00
c8fca594ef linux-armbian: fixup patching logic for modem power (still doesnt apply against 6.11.0 though) 2024-09-19 08:26:44 +00:00
395ff01276 moby: linux-armbian: switch back to armbian's megous patches, since they're better tracked
functionality is identical to mobian's
2024-09-19 08:26:44 +00:00
13b38f523c linux-armbian: fix formatting 2024-09-19 08:26:44 +00:00
1dc18bca5f firefox: add a search shortcut for repology.org 2024-09-17 07:42:21 +00:00
e763673e75 moby: ship stock kernel 6.11 with a subset of mobian patches
this is enough for the rear camera to work in megapixels-next (NOT normal megapixels, and not snapshot or gnome-screenshot)

audio over 3.5mm works; but not over speakers. charging: unknown
2024-09-17 03:27:55 +00:00
034c3f987e programs/make-sandboxed: fix for apps which ship thumbnailers (i.e. gnome papers) 2024-09-17 02:33:51 +00:00
c15d068f39 linux-mobian: init 2024-09-17 02:33:08 +00:00
6ad53751a1 nixpkgs: 24.05-unstable-2024-09-14 -> 24.05-unstable-2024-09-16
i'll lose access to the pinephone camera for a while, since this bumps to linux 6.11. but i think i can take from mobian linux to restore that, using just devicetree changes
2024-09-17 02:04:12 +00:00
bcc6c773cb deploy gnome-screenshot, for camera testing 2024-09-17 02:02:24 +00:00
dfe3f39225 linux-armbian: show that i can build against the armbian patches
they don't achieve much; nothing noticable at all, actually
2024-09-17 02:02:02 +00:00
2bb4a3fec2 linux-armbian: -> 2024-09-16 2024-09-17 02:01:22 +00:00
a03a0fcefd moby: kernel: remove another extraneous patch (still the display isnt coming on though, nor does libcamera see any cams) 2024-09-16 22:59:20 +00:00
b41db547ec moby: kernel: re-enable build-time improvements and display config (the latter doesnt always work though) 2024-09-16 22:58:47 +00:00
6edc81d437 moby: kernel: build without full config again 2024-09-16 22:57:48 +00:00
6d8008ea5e UNTESTED: linux-armbian: patch so it builds against linux 6.11 2024-09-16 21:25:37 +00:00
2c932ed926 moby: stop overriding the armbian kernel
that'll be useful as a form of documentation in the future, but for now it's just hassle
2024-09-16 21:23:39 +00:00
4560bb9dda WIP: moby: also blacklist gc2145, for flexibility in running mainline kernel
i think mainline camera *still* doesn't work though, even with this
2024-09-16 21:22:37 +00:00
051625fd47 moby: kernel: add a withMegousPatches option, disabled to get the minimal usable build (lacking cameras, and possibly with charging limitations) 2024-09-16 18:51:33 +00:00
bb0a90ec1e scripts/deploy: add a --deriv flag to deploy a pre-built path
useful for systems like moby where re-evaluating an unchanged system is expensive
2024-09-16 18:40:42 +00:00
acca87c187 moby: reduce the kernel patching
tested: camera (Megapixels), audio (mpv: speakers, headphones)

i think i *might* have had one failed (i.e. no graphics) boot? not sure.
2024-09-16 09:02:02 +00:00
e23429eebe moby: build w/o full config -- just pmos + nixpkgs
this *should* make iteration (of reducing kernel patches) a little quicker

this is the eventual goal, though in the meantime it may be quicker iteration to build with *only* pmos config and no full config
2024-09-16 08:21:17 +00:00
9fcbd6e7e2 moby: remove a few more unnecessary kernel patches 2024-09-16 04:57:00 +00:00
d943946f9d doc: moby: note why certain kernel patches must be kept 2024-09-16 04:36:22 +00:00
c8543e9326 moby: blacklist fewer camera-adjacent kernel modules 2024-09-16 02:42:08 +00:00
e9decbbf40 sandboxing: add a global toggle to disable sandboxing 2024-09-16 00:38:02 +00:00
fe353f3417 nixpkgs: 24.05-unstable-2024-09-10 -> 24.05-unstable-2024-09-14 2024-09-15 11:14:50 +00:00
adf554c177 moby: kernel: remove the rockchip-specific patches
Pinephone uses Allwinner A64, Pinephone Pro uses rockchip, patches are therefore not necessary for ordinary PP
2024-09-15 11:14:50 +00:00
373356d097 moby: reduce the set of kernel patches i apply
this makes them easier to maintain; upgrades are less fragile
2024-09-15 11:14:50 +00:00
b5f9ba62d0 camera: fix sandboxing for pipewire (so snapshot can open the camera), and share that with megapixels (which opens it directly)
N.B. snapshot (pipewire) doesn't work with the current kernel deployment; it requires linux-postmarketos-allwinner and even then only the front camera works (at about 1 fps)

this wasn't always the case: i believe that once, the rear camera worked as well. although now i think about it, i'm not positive of that
2024-09-15 11:14:23 +00:00
6e0c83b4f3 modules/programs: don't install bunpen/sanebox unless some program actually requires it 2024-09-14 23:10:19 +00:00
4fda2e67a2 crappy: bypass efibootmgr cross compilation error 2024-09-14 22:36:37 +00:00
c576885c84 neovim: fix treesitter cross compilation 2024-09-14 22:36:33 +00:00
565684d1e9 neovim: fix ts_ls typeserver LSP deprecation 2024-09-14 22:36:27 +00:00
7a75459249 curlftpfs-sane: fix cross compilation to 32bit platforms (i.e. armv7l-hf-multiplatform) 2024-09-14 21:18:11 +00:00
d0555548b7 linux-armbian.patches: -> 2024-09-14 2024-09-14 21:18:11 +00:00
52b71b5ef3 nixpkgs-wayland: 2024-09-08 -> 2024-09-13 2024-09-14 21:18:11 +00:00
0ffb67b77e sops-nix: 2024-09-08 -> 2024-09-13 2024-09-14 21:18:11 +00:00
146a184e43 uassets: 2024-09-08 -> 2024-09-14 2024-09-14 21:18:11 +00:00
9c4f87bbad syshud: 2024-09-07 -> 2024-09-10 2024-09-14 21:18:11 +00:00
54dfb04b81 moby: kernel: enable full config
camera works so long as i blacklist some new modules
2024-09-14 21:18:11 +00:00
a773513189 pkgsCCache: init (if only to prevent me from wasting time with ccache again: its really not that great) 2024-09-14 21:18:11 +00:00
4f77b2313b firefox: add a search shortcut for MyAnimeList.net 2024-09-14 02:54:16 +00:00
c7305f3c90 firefox: cleanup search URLs 2024-09-14 02:53:28 +00:00
f3edeca237 moby: linux-armbian kernel: use enableCommonConfig instead of copying the nixpkgs config into kernelPatches 2024-09-13 16:18:27 +00:00
8b3e413cae moby: dont patch CMA at all; just accept the defaults
it seems like things don't actually need this
2024-09-13 07:19:17 +00:00
1971ef5fd4 todo.md: sync 2024-09-13 07:19:17 +00:00
6a1f48420f google-chrome: ship 2024-09-13 00:05:03 +00:00
441269fb2f moby: enable modem-power 2024-09-13 00:04:15 +00:00
b43ee23459 firefox: allow webcam access 2024-09-13 00:02:48 +00:00
b9db78a154 moby: get WiFi + camera working on linux 6.10.9
note that modem_power is disabled... i can probably enable that here shortly
2024-09-12 23:27:21 +00:00
e2f7cd154d gst-device-monitor: improve docs 2024-09-12 07:14:20 +00:00
fa180ff50a moby: get the camera working on linux 6.10.9 (but at the expense of WiFi, heh); enable but un-commenting in pine64/kernel.nix
something in 'enableCommonConfig' breaks the camera. i bet it's related to the DRM stuff?
2024-09-12 07:13:18 +00:00
3febbcaef7 programs/via: make the udev config conditional upon via actually being installed 2024-09-12 06:38:04 +00:00
2c68bead1d linux-megous: orange-pi-6.9-20240514-1047 (6.9.0) -> orange-pi-6.9-20240721-2345 (6.9.10)
no immediately noticable differences, but not thoroughly tested
2024-09-12 06:37:38 +00:00
129a7aec68 linux-megous: fix build 2024-09-12 05:29:19 +00:00
fbed348e68 linux-postmarketos-allwinner: update; add option to build w/o pmos patches (just the megi kernel + pmos defconfig) 2024-09-12 05:28:27 +00:00
4694dacd2f millipixels: ship it (it doesnt work though) 2024-09-12 05:27:31 +00:00
7fa689c82d libcamera: split to separate file & add udev rules
i think the udev rules arent actually needed though?
2024-09-12 05:26:46 +00:00
add5910b4f linux-megous: lint 2024-09-11 22:11:46 +00:00
590d4d819e moby: try shipping the armbian kernel with (close to) the pmOS defconfig
it builds, but the camera is just as broken as w/o pmOS config
2024-09-11 21:16:02 +00:00
f6493122bb nix-index: sandbox with bunpen 2024-09-11 19:20:13 +00:00
954fedd41b hal/pine64: split kernel into new armbian-kernel package 2024-09-11 19:19:54 +00:00
858ca4245a megapixels-next: document the state of things against mainline linux 2024-09-11 04:31:36 +00:00
d1044023d3 fcitx5: sandbox with bunpen 2024-09-11 04:26:12 +00:00
53e73659b4 v4l-utils: more docs 2024-09-11 04:13:54 +00:00
8a5e1cb6b6 megapixels-next: unstable-2024-05-11 -> unstable-2024-09-03 2024-09-11 04:13:12 +00:00
2a29e22d6d libmegapixels,libdng,megapixels-next: format with nixfmt 2024-09-11 03:46:48 +00:00
f5a64bc913 megapixels-next: ship
i can't get any camera working on actually-mainline linux. i'm hoping megapixels-next will work with fewer patches, though
2024-09-11 03:44:08 +00:00
2407e51b67 endless-sky: sandbox with bunpen (only minimally tested) 2024-09-11 03:12:24 +00:00
e626044037 lightning-cli: sandbox with bunpen (only minimally tested) 2024-09-11 03:11:19 +00:00
f6abee5670 losslesscut-bin: sandbox with bunpen (only minimally tested) 2024-09-11 02:18:28 +00:00
8b8bbcd59b clightning-sane: sandbox with bunpen 2024-09-11 02:17:46 +00:00
f14dbf13b1 sane-find-dotfiles: sandbox with bunpen 2024-09-11 02:07:57 +00:00
a0a34cc62e sane-bt-add: sandbox with bunpen (only minimally tested) 2024-09-11 02:07:33 +00:00
89b9f693e5 sane-bt-rm: sandbox with bunpen 2024-09-11 02:07:19 +00:00
2c76497d34 wirelesstools: sandbox with bunpen (only minimally tested) 2024-09-11 02:04:59 +00:00
0128826a42 speedtest-cli: sandbox with bunpen 2024-09-11 02:01:46 +00:00
4de34f662b sox: sandbox with bunpen (minimally tested) 2024-09-11 02:01:29 +00:00
07626c55f5 slurp: sandbox with bunpen 2024-09-11 02:00:34 +00:00
d53b4df4a8 hdparm: sandbox with bunpen 2024-09-11 01:59:43 +00:00
f6b6d6488d gparted: sandbox with bunpen 2024-09-11 01:59:19 +00:00
c6d93598ed nixfmt-rfc-style: sandbox with bunpen 2024-09-11 01:57:31 +00:00
fad05b929a bunpen: support --bunpen-autodetect-cli existingDirOrParent 2024-09-11 01:57:11 +00:00
e69bacf54e sc-im: sandbox with bunpen 2024-09-11 01:55:40 +00:00
7d4d4d6c65 libreoffice: sandbox with bunpen 2024-09-11 01:55:20 +00:00
7d6c5cf20c handbrake: sandbox with bunpen (UNTESTED because unused) 2024-09-11 01:31:49 +00:00
b483254bb3 wireshark: sandbox with bunpen 2024-09-11 01:27:26 +00:00
884435fe21 refactor: remove uses of deprecated "rust.toRustTarget" 2024-09-11 01:25:15 +00:00
33aaf8c458 nixpkgs: 24.05-unstable-2024-09-08 -> 24.05-unstable-2024-09-10 2024-09-10 23:24:05 +00:00
1c3c7f599f feeds/update.py: fix sources which have null description 2024-09-10 20:30:29 +00:00
e7f54cda6b feeds: subscribe to Marijn Braam's blog 2024-09-10 19:54:46 +00:00
909beec420 sane-reclaim-disk-space: fix sandboxing 2024-09-10 19:35:42 +00:00
ae5bad1514 feeds: subscribe to mii beta / Baby Wogue 2024-09-10 18:16:45 +00:00
77683e090c lsof: sandbox with bunpen 2024-09-10 08:52:32 +00:00
f7c5b16c1c gst-launch: ship gst-libav, for H.264 decoding 2024-09-10 08:52:22 +00:00
ad98e96823 gst-launch: ship default plugins 2024-09-10 08:06:04 +00:00
e167cbbbb4 gst-launch: ship 2024-09-10 07:40:48 +00:00
eb6c0acf11 v4l-utils: expand docs 2024-09-10 07:36:03 +00:00
f7a650b0e0 nethogs: sandbox with bunpen 2024-09-10 06:59:18 +00:00
a37554ada3 moby: ship all of megi's patches again: this fixes charging. once i get the camera working i can then start wittling down the patch stack 2024-09-10 06:57:01 +00:00
d3fa4e6e7c programs: ship v4l-utils, for debugging the Pinephone camera pipeline 2024-09-10 05:00:15 +00:00
90df023be0 firefox: add search keyword for ebay 2024-09-10 03:56:54 +00:00
f8141c5270 zfs-tools: sandbox with bunpen 2024-09-10 02:18:44 +00:00
1599df26e7 /mnt/persist/private: remove unneeded "sandbox.keepPids" 2024-09-10 01:09:21 +00:00
0b39f18faa /mnt/persist/ephemeral: dont even try to delete the backing directory -- just everything contained in it 2024-09-10 00:45:07 +00:00
8ae7e255e5 gocryptfs: sandbox with bunpen 2024-09-10 00:02:03 +00:00
6f72453f5d nvme-cli: sandbox with bunpen 2024-09-09 19:51:36 +00:00
ca09c93bf8 bunpen: handle unexpected whitepsace in BUNPEN_APPEND env var 2024-09-09 07:29:30 +00:00
ba229aaf69 bunpen: implement BUNPEN_APPEND env var 2024-09-09 04:16:38 +00:00
95994de1ad provision-private-key (/run/gocryptfs/private.key): sandbox with bunpen 2024-09-09 03:56:55 +00:00
f04d0c07af programs: split yt-dlp config out of mpv config 2024-09-08 22:16:32 +00:00
6dc4aeafc1 programs/yt-dlp: migrate to own file 2024-09-08 21:51:23 +00:00
1067bc9215 scripts/deploy: separate eval and build phases to decrease maximum ram requirements 2024-09-08 20:36:54 +00:00
bb18f65ed2 nixpkgs: 2024-09-06 -> 2024-09-08 2024-09-08 20:35:58 +00:00
0d6a823382 syshud: 0-unstable-2024-09-04 -> 0-unstable-2024-09-07 2024-09-08 20:35:26 +00:00
13aad0256d nixpkgs-wayland: 0-unstable-2024-09-06 -> 0-unstable-2024-09-08 2024-09-08 20:35:07 +00:00
ca4061ab94 sops-nix: assets-unstable-2024-09-05 -> assets-unstable-2024-09-08 2024-09-08 20:34:45 +00:00
df65454950 uassets: 0-unstable-2024-09-06 -> 0-unstable-2024-09-08 2024-09-08 20:34:28 +00:00
64311094ad zsh: add more eza aliases (la, lla, lal) 2024-09-07 22:52:13 +00:00
ac53d5512b cryptsetup: sandbox with bunpen 2024-09-07 22:40:29 +00:00
9d594f696a bunpen: support BUNPEN_DEBUG=n env var 2024-09-07 22:32:32 +00:00
4ade6b1418 cryptsetup: sandbox with bwrap 2024-09-07 22:24:13 +00:00
3ef98a5ab3 modules/programs: support "sandbox.keepIpc = true" 2024-09-07 22:10:11 +00:00
130ce0e69f bunpen: support --bunpen-keep-ipc 2024-09-07 22:08:25 +00:00
3fb566a3fd ethtool: sandbox with bwrap
it doesn't *quite* sandbox with bunpen: i lose Wake-on-lan info... not sure why
2024-09-07 21:19:24 +00:00
135af51f37 eza: sandbox with bunpen 2024-09-07 21:12:18 +00:00
98ed5f10ee e2fsprogs: sandbox with bunpen 2024-09-07 21:08:21 +00:00
71241f83e2 nettools: sandbox with bunpen 2024-09-07 21:02:31 +00:00
2b7143fb84 portfolio-filemanager: sandbox with bunpen
note that portfolio seems not to use portal integration anymore? so using it to launch e.g. Music files totally fails (because i don't grant pipewire access)

well, i don't really use this that much, so i'll deal with that only if/when it's an issue
2024-09-07 20:58:57 +00:00
0605034a53 eg25-control: sandbox with bunpen 2024-09-07 20:57:11 +00:00
140f2b515e parted: sandbox with bunpen (only minimally tested) 2024-09-07 20:43:03 +00:00
ca5eab656d tcpdump: sandbox with bunpen 2024-09-07 20:42:11 +00:00
028f56f70b hping: sandbox with bunpen 2024-09-07 20:41:37 +00:00
9f4c40fe01 gptfdisk: sandbox with bunpen (minimally tested) 2024-09-07 20:36:50 +00:00
8eadede76d wireguard-tools: sandbox with bunpen 2024-09-07 20:33:54 +00:00
823ec0e6f4 pcituils: sandbox with bunpen 2024-09-07 20:28:39 +00:00
fc865574bf iputils: sandbox with bunpen 2024-09-07 20:26:36 +00:00
58b3411c8c iotop: sandbox with bunpen 2024-09-07 20:23:23 +00:00
e517c5cecf inetutils: sandbox with bunpen 2024-09-07 20:22:29 +00:00
c735c0e11e iftop: sandbox with bunpen 2024-09-07 20:18:26 +00:00
41d7268094 forkstat: sandbox with bunpen 2024-09-07 20:16:59 +00:00
e66c389695 efibootmgr: sandbox with bunpen 2024-09-07 20:04:58 +00:00
d43a5a4687 btrfs-progs: sandbox with bunpen 2024-09-07 20:01:46 +00:00
83efe3f552 smartmontools: sandbox with bunpen 2024-09-07 20:00:22 +00:00
5742101191 powertop: sandbox with bunpen 2024-09-07 19:59:59 +00:00
7b5508c91d g4music: sandbox with bunpen 2024-09-07 19:23:05 +00:00
0b11c0e790 sane-backup-rsync-net: remove dead SANEBOX_PREPEND flags
i'm not actually sure how this is still working, with bunpen? but it *seems* to be
2024-09-07 19:12:13 +00:00
aeea904e5b seatd/bunpen: remove the need for CAP_SETPCAP 2024-09-07 18:58:47 +00:00
64e302eb20 go2tv: sandbox with bunpen 2024-09-07 18:37:18 +00:00
91a9d6e0d6 fcitx5: re-enable 2024-09-07 18:35:55 +00:00
f593b8ca4a nwg-panel/torch-toggle: sandbox with bunpen 2024-09-07 18:33:08 +00:00
30060e4bb1 bunpen/seatd: remove CAP_NET_ADMIN: creating a net namespace does NOT require that, rather it was a quirk in bwrap 2024-09-07 18:32:29 +00:00
9b8bdfaf5e seatd: ACTUALLY sandbox with bunpen 2024-09-07 18:24:33 +00:00
fc72884c2e hosts/common: persist ~/.cache/mesa_shader_cache_db 2024-09-07 17:27:15 +00:00
8f47636ee0 ols: sandbox with bunpen 2024-09-07 17:26:30 +00:00
f68fbb0e0b bunpen/seatd namespacing: clarify that CAP_NET_ADMIN requirement is surprising 2024-09-07 17:14:50 +00:00
7ce82ca735 seatd: remove no-longer-necessary ambient caps 2024-09-07 17:01:05 +00:00
7ce098f2bb bunpen: --bunpen-try-user will now raise the capabilities it needs, as part of that 2024-09-07 17:00:34 +00:00
454c109ef8 seatd: sandbox with bunpen 2024-09-07 15:39:50 +00:00
4dfc0bf323 sane-open: fix keyboard toggling to be compatible with bunpen 2024-09-07 08:36:32 +00:00
2d1e7777e8 sm64ex-coop-deluxe: ship (and configure so that you dont have to drag the rom) 2024-09-07 06:21:11 +00:00
1d5f71f935 satellite: sandbox with bunpen 2024-09-07 05:44:40 +00:00
41a132dd9a geoclue-demo-agent: sandbox with bunpen 2024-09-07 04:31:53 +00:00
51350d228d where-am-i: sandbox with bunpen 2024-09-07 04:29:45 +00:00
e9a289cc87 gps-share: sandbox with bunpen 2024-09-07 04:27:20 +00:00
de47a0521d wvkbd: sandbox with bunpen 2024-09-07 02:14:20 +00:00
412e698786 bunpen: forward signals through the PID namespace
this should enable things like wvkbd -- which depend on signals -- to function while sandboxed
2024-09-07 01:43:34 +00:00
ed7c5ef89a bunpen: forward signals to the child
note that pid namespaces will silently not deliver signals to PID 1 for which no handler is installed... i'll have to either install an intermediary PID 1 which forwards to the real process, or peek into /proc/PID/status to check if the signal is deliverable before/after sending it (but that's racy, and eww parsing)
2024-09-06 23:16:10 +00:00
9814cb5ad7 bunpen: errors::ext::check: supoort errors::error 2024-09-06 23:13:21 +00:00
b6d8aa614c bunpen: fix so the integration tests are actually run during the nix build
heh
2024-09-06 18:29:20 +00:00
24440b059c bunpen: write tests for signal deliverability (which shows that the current behavior is incorrect) 2024-09-06 18:12:05 +00:00
53ec44b3de nixpkgs: 0-unstable-2024-09-05 -> 24.05-unstable-2024-09-06
N.B.: the different "revs" got merged again while i wasnt looking...
2024-09-06 17:00:05 +00:00
e9cd3069fa nixpkgs-wayland: 0-unstable-2024-09-02 -> 0-unstable-2024-09-06 2024-09-06 16:59:23 +00:00
7b4fc029b2 sops-nix: assets-unstable-2024-09-01 -> assets-unstable-2024-09-05 2024-09-06 16:59:03 +00:00
cc6e99361d uassets: 0-unstable-2024-09-05 -> 0-unstable-2024-09-06 2024-09-06 16:58:46 +00:00
ca3dc42586 rsync: sandbox with tryKeepUsers. this lets us rsync things owned by any user, not just the non-superuser invoker 2024-09-06 06:33:45 +00:00
8255e419be modules/programs: rename "keepUsers" -> "tryKeepUsers" 2024-09-06 06:32:49 +00:00
9bd5a7e4e4 bunpen: implement --bunpen-try-keep-users to try to keep the user namespace, but create a new one if keeping the existing one would require less sandboxing elsewhere 2024-09-06 06:25:27 +00:00
baf5aab4b9 sshfs-fuse: sandbox with bunpen 2024-09-06 06:04:23 +00:00
ce7474603f sway: fix config to not use Xwayland-specific settings 2024-09-06 05:41:34 +00:00
bf6053985f xwayland: sandbox with bunpen 2024-09-06 05:34:08 +00:00
c0106c9196 scripts/deploy: deploy to moby over wireguard by default, but allow this to be customized broadly 2024-09-06 05:30:59 +00:00
038e21a447 schlock: sandbox with bunpen 2024-09-06 05:27:19 +00:00
6596bad162 foliate: sandbox with bunpen 2024-09-06 05:25:20 +00:00
c46c5bb3ca komikku: sandbox with bunpen 2024-09-06 05:24:48 +00:00
8079cc47bf nwg-panel: simplify sandbox definition 2024-09-06 05:23:33 +00:00
8c802ddc1a epiphany: sandbox with bunpen 2024-09-06 05:23:00 +00:00
1ed27c166e wike: sandbox with bunpen 2024-09-06 05:21:55 +00:00
82dcd40829 sane-input-handler: sandbox with bunpen 2024-09-06 05:21:38 +00:00
c6af2c8e02 bonsai: sandbox with bunpen 2024-09-06 05:20:51 +00:00
8bdb711968 grimshot: fix sandboxing so that wl-clipboard can actually copy stuff to the clipboard 2024-09-06 04:57:53 +00:00
4b96d10980 swappy: sandbox with bunpen 2024-09-06 04:35:50 +00:00
346b887779 sane-screenshot: simplify by using grimshot savecopy command instead of separate copy + wl-paste tio file 2024-09-06 04:34:51 +00:00
6e30527688 modules/programs: simplfiy the common combination of keeping pids AND /proc by introducing "keepPidsAndProc" 2024-09-06 04:18:46 +00:00
9340f52df1 modules/programs: rename isolatePids -> keepPids, isolateUsers -> keepUsers
this follows my explicit whitelisting elsewhere
2024-09-06 04:06:42 +00:00
cc90183ca2 blast-ugjka: sandbox with bunpen 2024-09-06 03:52:36 +00:00
31d475bf88 sane-cast: sandbox with bunpen 2024-09-06 03:42:03 +00:00
329a02f475 gnome-keyring-daemon: sandbox with bunpen 2024-09-06 03:12:00 +00:00
e3dda5b140 grimshot: sandbox with bunpen 2024-09-06 02:31:20 +00:00
876ec637c2 stepmania: shift the data dir patch upstream 2024-09-06 02:21:08 +00:00
d338826855 stepmania: sandbox with bunpen 2024-09-06 01:44:11 +00:00
b770a77257 stepmania: simplify the wrapping 2024-09-06 01:41:20 +00:00
b289f13779 stepmania: wrap in a way which doesnt require manually cding to the data dir 2024-09-06 01:19:13 +00:00
d8664cd88b stepmania: fix fs paths to point to valid data 2024-09-06 01:17:21 +00:00
5270c41347 avahi: fix ip6tables firewall rule 2024-09-06 01:17:21 +00:00
850c975321 modules/programs: when sandboxing, use makeBinaryWrapper if supported 2024-09-06 01:17:21 +00:00
b1b12c353d sm64ex-coop-deluxe: init 2024-09-05 23:43:42 +00:00
3934d9c5a5 sway: fix sm64ex syntax error 2024-09-05 23:39:21 +00:00
84a36d9ef8 bunpen: fix last failing integration test 2024-09-05 23:21:56 +00:00
05b8352b4d bunpen: bind execvpe 2024-09-05 23:21:31 +00:00
4123d2d92e sway: bind mod+P to screenshot
one of my keyboards here doesn't have PrintScreen :o
2024-09-05 22:55:02 +00:00
768998f78d bunpen: rearrange integration tests to make it obvious that invoking by PATH is what's failing 2024-09-05 22:51:21 +00:00
a128f624b2 bunpen: fix to correctly forward the exit status 2024-09-05 22:41:12 +00:00
f12123416b bunpen: integration_test: add logging tests 2024-09-05 22:21:06 +00:00
392330f9ca bunpen: make the integration tests easier to understand 2024-09-05 22:04:00 +00:00
60bdc7c5d3 nixpkgs: 0-unstable-2024-08-30 -> 0-unstable-2024-09-05 2024-09-05 21:50:19 +00:00
aa93ac608b nixpkgs-wayland: 0-unstable-2024-08-30 -> 0-unstable-2024-09-02 2024-09-05 21:50:19 +00:00
3ad7271439 syshud: 0-unstable-2024-08-27 -> 0-unstable-2024-09-04 2024-09-05 21:50:19 +00:00
fe087720ed uassets: 0-unstable-2024-08-30 -> 0-unstable-2024-09-05 2024-09-05 21:50:19 +00:00
15ff2589d3 sops: 2024-08-12 -> 2024-09-01 2024-09-05 21:50:19 +00:00
b74372dd2b fs: mount moby via wireguard 2024-09-05 21:50:19 +00:00
196cf2dc9e bunpen: cleanup the integration test infrastructure 2024-09-05 10:01:47 +00:00
3f6713c12c s64ex-coop: sandbox 2024-09-05 08:56:43 +00:00
d8058f0591 sm64ex-coop: persist save data 2024-09-05 08:48:33 +00:00
a1450b4eff sm64ex-coop: ship 2024-09-05 06:38:58 +00:00
3b009b8435 baseRom: init 2024-09-05 06:25:20 +00:00
c0bf2df718 firefox: add a "pr" search shortcut to search nixpkgs PRs 2024-09-05 05:30:10 +00:00
24eefbeded bunpen: add some integration tests (they fail heh) 2024-09-05 02:37:41 +00:00
e97302a453 bunpen: dont forward argv[0] if the caller didnt forward it 2024-09-05 02:34:56 +00:00
2b2173be56 bunpen: enable logging earlier 2024-09-05 02:32:12 +00:00
ac5b9061a2 scripts/deploy: implement --wireguard flag, to deploy the host over wireguard 2024-09-05 02:06:59 +00:00
a54b051bbe crappy: split cross-specific programs config into hal 2024-09-05 01:11:16 +00:00
968e9654cf moby: move cross-specific programs config to hal 2024-09-05 01:11:16 +00:00
a557c79f4e hosts/modules/hal/pine64: split kernel into own file 2024-09-05 00:59:51 +00:00
f2dc84a1c8 refactor: hosts/modules/hal/pine64: give it its own directory 2024-09-05 00:57:29 +00:00
8a7a20fe2b sane-open: fix isLandscape to query actual geometry instead of the less informative "rotation" property 2024-09-05 00:23:57 +00:00
7e674b205f rsync-net: add a script to help with restoring backups 2024-09-04 23:09:04 +00:00
8d87a15e60 modules/image: be verbose when we flash the bootloader 2024-09-04 13:50:22 +00:00
f39a08e379 aerc: sandbox with bunpen 2024-09-04 13:49:40 +00:00
b567aeadd7 bunpen: namespace: populat /dev/pts 2024-09-04 13:49:40 +00:00
04ac2ada05 bunpen: simplify the /proc/self/{u,g}id_map logic 2024-09-04 13:49:40 +00:00
6193f347e7 bunpen: allow mount to take str mount params 2024-09-04 13:49:40 +00:00
39733b4862 bunpen: log more clearly when an error message is fatal v.s. non-fatal 2024-09-04 13:49:40 +00:00
9a7fca267e modules/image: bump /boot space from 1 GiB to 2 GiB 2024-09-04 13:49:40 +00:00
364a4f1182 sane-secrets-unlock: work around race condition during system boot 2024-09-04 13:48:10 +00:00
3e182b2a06 modules/persist: lint 2024-09-04 13:13:14 +00:00
6ff35b4366 dbus: place the bus in a subdirectory for better sandboxing 2024-09-04 13:04:20 +00:00
9f49084ccb firefox: normalize bookmark ADD_DATE / LAST_MODIFIED to "1"
i *think* these fields don't matter, so this makes editing them by hand easier
2024-09-04 12:15:06 +00:00
b2f351dba2 firefox: add Amazon.com search 2024-09-04 12:13:29 +00:00
35a41be824 modules/*: lint (esp: modules/vpn.nix -- removed unused priorityWgTable) 2024-09-03 20:24:36 +00:00
f384515c51 exiftool: sandbox with bunpen 2024-09-03 19:19:24 +00:00
c7eb0c7c71 youtube-tui: sandbox with bunpen
youtube-tui's kinda always breaking... i can't verify that this isn't breaking it more
2024-09-03 19:19:24 +00:00
2debd88019 objdump: sandbox with bunpen 2024-09-03 19:19:24 +00:00
783a0ae29f supertuxkart: sandbox with bunpen 2024-09-03 19:19:24 +00:00
ad57f1537a sane-ip-check: sandbox with bunpen 2024-09-03 19:19:24 +00:00
e82de6180c lftp: sandbox with bunpen 2024-09-03 19:19:24 +00:00
09cb743865 gst-device-monitor: sandbox with bunpen 2024-09-03 19:19:24 +00:00
0d737216ea kdenlive: sandbox with bunpen 2024-09-03 19:19:24 +00:00
3478224bf9 inkscape: split to own file and sandbox with bunpen 2024-09-03 19:19:24 +00:00
94863db03a frozen-bubble: sandbox with bunpen 2024-09-03 18:35:07 +00:00
3260659fc1 networkmanagerapplet: disable (broken) 2024-09-03 18:34:33 +00:00
1ce07e08f6 sane-wipe: dont wipe the static config files in ~/.mozilla/firefox 2024-09-03 18:33:20 +00:00
2e8904fa52 swaynotificationcenter: sandbox with bunpen 2024-09-03 18:32:51 +00:00
0535d97191 sane-wipe: sandbox with bunpen 2024-09-03 18:30:30 +00:00
71539036fc swayidle: sandbox with bunpen 2024-09-03 18:27:37 +00:00
e295da5d67 gpodder: sandbox with bunpen 2024-09-03 18:24:04 +00:00
986dc8c37a fontconfig: sandbox with bunpen 2024-09-03 18:22:27 +00:00
57637167b1 dconf: sandbox with bunpen 2024-09-03 18:21:58 +00:00
9b6ec64ed4 xdg-desktop-portal-gnome: sandbox with bunpen 2024-09-03 17:56:17 +00:00
c7638be79b visidata: sandbox with bunpen 2024-09-03 17:53:37 +00:00
f537049387 imagemagick: sandbox with bunpen 2024-09-03 17:52:23 +00:00
2cee6ea954 celeste64: sandbox with bunpen 2024-09-03 17:51:13 +00:00
36bcda6416 element-desktop: sandbox with bunpen 2024-09-03 17:48:58 +00:00
45907f23b9 oath-toolkit,sops: sandbox with bunpen 2024-09-03 17:48:30 +00:00
e57e0b9509 dbus: sandbox with bunpen 2024-09-03 17:46:08 +00:00
2f00580ddd vvvvvv: sandbox with bunpen 2024-09-03 17:44:07 +00:00
c7a786bef3 superTux: sandbox with bunpen 2024-09-03 17:43:35 +00:00
646ffa891c wdisplays: sandbox with bunpen 2024-09-03 17:31:33 +00:00
a887d2d780 soundconverter: split into own file and sandbox with bunpen 2024-09-03 17:30:41 +00:00
291e6fe1e3 w3m: sandbox with bunpen 2024-09-03 17:30:41 +00:00
acad3dc60a unzip: sandbox with bunpen 2024-09-03 17:30:41 +00:00
de78119e46 tumiki-fighters: sandbox with bunpen 2024-09-03 17:30:41 +00:00
628a701fa0 space-cadet-pinball: sandbox with bunpen 2024-09-03 17:30:41 +00:00
851e6e9176 slic3r: sandbox with bunpen 2024-09-03 17:30:41 +00:00
69bba0f6a9 shattered-pixel-dungeon: sandbox with bunpen 2024-09-03 17:30:41 +00:00
3a8f31a490 sequoia: sandbox with bunpen 2024-09-03 17:30:41 +00:00
4b0518408e sane-weather: sandbox with bunpen 2024-09-03 17:30:41 +00:00
2e38f49773 rsync: sandbox with bunpen 2024-09-03 17:30:41 +00:00
4704c9ca9e pstree: fix formatting 2024-09-03 17:30:41 +00:00
6d37c531f2 procps: sandbox with bunpen (note that i only use sub items of it though, like free and pidof) 2024-09-03 17:30:41 +00:00
1d8f825bc6 hase: sandbox with bunpen 2024-09-03 17:30:41 +00:00
775c1522ee grim: sandbox with bunpen 2024-09-03 17:30:41 +00:00
4856a46388 hitori: sandbox with bunpen 2024-09-03 17:30:41 +00:00
2702e2afd5 gnome-frog: sandbox with bunpen 2024-09-03 17:30:41 +00:00
2d1ebe7219 gnome-2048: sandbox with bunpen 2024-09-03 17:30:41 +00:00
cef2a1e129 gnome-calendar: sandbox with bunpen 2024-09-03 17:30:41 +00:00
f48b8fb6b9 discord: sandbox with bunpen 2024-09-03 17:30:41 +00:00
a75fb267f1 font-manager: sandbox with bunpen 2024-09-03 17:30:41 +00:00
981cd4c65c findutils: sandbox with bunpen 2024-09-03 17:30:41 +00:00
d25701e280 evtest: sandbox with bunpen 2024-09-03 17:30:41 +00:00
562315bf4d libnotify: sandbox with bunpen 2024-09-03 17:30:41 +00:00
5b9fbb97cb krita: split into own file and sandbox with bunpen 2024-09-03 17:30:41 +00:00
2965fe29d1 gnome-calculator: sandbox with bunpen 2024-09-03 16:48:35 +00:00
6692c67e74 wireplumber: sandbox with bunpen 2024-09-03 16:47:54 +00:00
cc7f53a828 nautilus: sandbox with bunpen 2024-09-03 16:06:42 +00:00
5e38ebef4b swaylock: sandbox with bunpen 2024-09-03 16:05:34 +00:00
181bc57a8a bunpen: fix edge-case where we wouldnt deref (and bind the underlying path of) a symlink under an already-mounted directory 2024-09-03 16:05:34 +00:00
8a61ad704a unl0kr: sandbox with bunpen 2024-09-03 15:42:39 +00:00
c93f71e285 pipewire: sandbox with bunpen 2024-09-03 15:42:24 +00:00
09507a04bd sway: sandbox with bunpen 2024-09-03 15:19:10 +00:00
ccdf633e4f gimp: sandbox with bunpen 2024-09-03 15:09:14 +00:00
e62c1fe63f sane-secrets-dump: sandbox with bunpen 2024-09-03 15:00:04 +00:00
66f00088f1 sane-tag-media: sandbox with bunpen 2024-09-03 14:58:48 +00:00
a2366ba9d4 sane-screenshot: sandbox with bunpen 2024-09-03 14:57:29 +00:00
a2bfb23253 nwg-panel: sandbox with bunpen 2024-09-03 14:56:09 +00:00
d474d159ac sane-shutdown,sane-reboot: sandbox with bunpen 2024-09-03 14:55:55 +00:00
60d5dbda77 sane-secrets-unlock: sandbox with bunpen 2024-09-03 14:49:02 +00:00
ff763b44bc playerctl: sandbox with bunpen 2024-09-03 14:47:39 +00:00
ba28240a04 audacity: sandbox with bunpen 2024-09-03 14:46:47 +00:00
2a755492bd conky: sandbox with bunpen 2024-09-03 14:45:59 +00:00
c682cb5fd7 bunpen: add regex functionality to BUNPEN_DISABLE 2024-09-03 14:42:01 +00:00
68dfd64ee3 sane-which: sandbox with bunpen 2024-09-03 14:16:40 +00:00
179c6697e6 sane-reclaim-{boot,disk}-space: sandbox with bunpen 2024-09-03 14:16:14 +00:00
9301a84e1c sane-bt-{search,show}: sandbox with bunpen 2024-09-03 14:13:40 +00:00
fc5a1c7d5e pkill: sandbox with bunpen 2024-09-03 14:12:36 +00:00
94a261280b pactl: sandbox with bunpen 2024-09-03 14:11:27 +00:00
8214b27569 dialect: sandbox with bunpen 2024-09-03 14:11:05 +00:00
12c39fec03 animatch: sandbox with bunpen 2024-09-03 14:10:14 +00:00
50d443ad46 make-sandboxed: fix quoting error 2024-09-03 14:10:06 +00:00
a4eb7c0fd6 gnome-weather: sandbox with bunpen 2024-09-03 14:08:26 +00:00
a633690ab9 gnome-clocks: sandbox with bunpen 2024-09-03 14:07:57 +00:00
8badb38b76 firefox-xdg-open: sandbox with bunpen 2024-09-03 14:07:28 +00:00
3bc8c34b85 engrampa: sandbox with bunpen 2024-09-03 14:05:34 +00:00
88263695d3 dtrx: sandbox with bunpen 2024-09-03 14:04:41 +00:00
7d9b2cb224 nmcli: sandbox with bunpen
note that i can't 'nmcli connect' -- but i think that's a NetworkManager service error, not nmcli
2024-09-03 14:04:07 +00:00
1588ebe696 wl-clipboard: sandbox with bunpen 2024-09-03 13:54:45 +00:00
8cbe8fc9e2 wtype: sandbox with bunpen 2024-09-03 13:54:27 +00:00
0ee564b329 tor-browser: sandbox with bunpen 2024-09-03 13:11:15 +00:00
a9f0f99482 sane-private-unlock-remote: sandbox with bunpen 2024-09-03 13:10:16 +00:00
fd2eabf07e mepo: sandbox with bunpen 2024-09-03 13:06:25 +00:00
7b8303f070 git: sandbox with bunpen 2024-09-03 13:05:42 +00:00
eaf03520e7 curl: sandbox with bunpen 2024-09-03 13:04:45 +00:00
b05ebc6c62 papers: sandbox with bunpen 2024-09-03 13:03:58 +00:00
8c94bc79d5 newsflash: sandbox with bunpen 2024-09-03 13:02:10 +00:00
d2f86e7b0d gdbus: sandbox with bunpen 2024-09-03 12:54:06 +00:00
f959a0dd00 sane-open: sandbox with bunpen 2024-09-03 12:41:12 +00:00
a0240dca36 mimetype: sandbox with bunpen 2024-09-03 12:40:39 +00:00
471f453321 pidof: sandbox with bunpen 2024-09-03 12:40:22 +00:00
3712eaf869 brave: sandbox with bunpen 2024-09-03 12:39:57 +00:00
ecc4e90b4a gnome-maps: sandbox with bunpen 2024-09-03 12:38:19 +00:00
c7823ab3f4 assorted: remove outdated comments about landlock > bwrap 2024-09-03 04:49:36 +00:00
2cc23525ec curlftp: sandbox with bunpen 2024-09-03 04:48:23 +00:00
07bbf34f59 nmon: sandbox with bunpen 2024-09-03 04:38:44 +00:00
941fff725a vulkan-tools: sandbox with bunpen 2024-09-03 04:34:19 +00:00
d478b945c4 killall: sandbox with bunpen 2024-09-03 04:26:56 +00:00
769fdcee89 tree: sandbox with bunpen 2024-09-03 04:26:06 +00:00
b0aedb6714 pstree: sandbox with bunpen 2024-09-03 04:25:20 +00:00
20e71ad800 fd: sandbox with bunpen 2024-09-03 04:23:41 +00:00
0566e237aa alsaUtils: sandbox with bunpen 2024-09-03 04:23:13 +00:00
0df02b5ba3 bunpen: sandbox with bunpen 2024-09-03 03:56:11 +00:00
22a5bcc259 firefox: sandbox with bunpen 2024-09-03 03:55:52 +00:00
40d14460ab rofi: sandbox with bunpen
i had a lot of trouble with this... i *think* it's working now
2024-09-03 03:51:10 +00:00
ef0f6c2053 htop: sandbox with bunpen 2024-09-03 03:48:52 +00:00
71be891c85 string: sandbox with bunpen 2024-09-03 03:37:31 +00:00
a163a260fa errno: sandbox with bunpen 2024-09-03 03:37:05 +00:00
fe910ea153 brightnessctl: sandbox with bunpen 2024-09-03 03:32:34 +00:00
1e81c033aa pwvucontrol: sandbox with bunpen 2024-09-03 03:32:12 +00:00
f490a49921 pulsemixer: sandbox with bunpen 2024-09-03 03:31:14 +00:00
7b9874b90d ausyscall: sandbox with bunpen 2024-09-03 03:30:57 +00:00
4b52fe260c yt-dlp: sandbox with bunpen 2024-09-03 03:10:29 +00:00
8a2951a405 firefox: add YouTube search shortcut (yt) 2024-09-03 03:09:59 +00:00
c81e2fd6fa wget: sandbox with bunpen 2024-09-03 03:07:54 +00:00
1ac244d1de usbutils: sandbox with bunpen 2024-09-03 03:06:50 +00:00
f70d4b75b2 typescript-language-server: sandbox with bunpen 2024-09-03 03:06:36 +00:00
34aad6f74c python3-repl: sandbox with bunpen 2024-09-03 03:04:38 +00:00
d20359fc1d pyright: sandbox with bunpen 2024-09-03 03:01:06 +00:00
714f727f1a pavucontrol: sandbox with bunpen 2024-09-03 03:00:36 +00:00
eff8f2597c openscad-lsp: sandbox with bunpen 2024-09-03 02:59:59 +00:00
1d7a8c688a nmap: sandbox with bunpen 2024-09-03 02:59:22 +00:00
56bac1ac19 nixd: sandbox with bunpen 2024-09-03 02:58:48 +00:00
fbe00915bb nano: sandbox with bunpen 2024-09-03 02:58:23 +00:00
bf1d401b48 mercurial: document that sandboxing DOES work at present 2024-09-03 02:58:11 +00:00
424f6ef35a marksman: sandbox with bunpen 2024-09-03 02:57:24 +00:00
4637a3eee3 lua-language-server: sandbox with bunpen 2024-09-03 02:57:13 +00:00
d2e600dcf8 jq: sandbox with bunpen 2024-09-03 02:56:10 +00:00
a17369cebe sed: sandbox with bunpen 2024-09-03 02:55:34 +00:00
2d5cb84eef forkstat: document sandbox limitations 2024-09-03 02:54:27 +00:00
9050d8979e grep: sandbox with bunpen 2024-09-03 02:53:37 +00:00
15d668f1ca file: sandbox with bunpen 2024-09-03 02:48:13 +00:00
147efe0a9e dig: sandbox with bunpen 2024-09-03 02:47:32 +00:00
d11f3152d0 cargo,rust-analyzer: sandbox with bunpen 2024-09-03 02:46:54 +00:00
8a2a41ecc9 bash-language-server: sandbox with bunpen 2024-09-03 02:44:10 +00:00
f1000c9fba syshud: sandbox with bunpen 2024-09-03 02:40:03 +00:00
5266a8b8f2 ps: sandbox with bunpen 2024-09-03 02:28:52 +00:00
af99673043 ripgrep (rg): sandbox with bunpen
yay! im finally free of the sanebox ~/dev/cat symlink glitch!
2024-09-03 02:28:33 +00:00
eb562037b1 free: sandbox with bunpen 2024-09-03 02:26:17 +00:00
08ed8cd052 haredoc: sandbox with bunpen 2024-09-03 02:25:52 +00:00
ce7a082447 modules/programs: plum sandbox.keepPids and whitelistPwd into bunpen 2024-09-03 02:25:28 +00:00
53c4054bb7 less: sandbox with bunpen 2024-09-03 02:24:51 +00:00
070bc867da sane-deadlines: sandbox with bunpen 2024-09-03 02:24:25 +00:00
9bfc527aa7 dissent: sandbox with bunpen 2024-09-03 02:23:42 +00:00
c23cf48001 sane-sysload: sandbox with bunpen 2024-09-03 02:21:36 +00:00
dfffa564e2 signal-desktop: sandbox with bunpen 2024-09-03 02:13:52 +00:00
8a89e62063 bunpen: enable /dev/shm in the sandbox 2024-09-03 02:13:32 +00:00
71d32e442f dino: sandbox with bunpen 2024-09-03 02:13:00 +00:00
68ffdc113e neovim: sandbox with bunpen 2024-09-03 01:50:01 +00:00
8b0ca4d393 geary: sandbox with bunpen 2024-09-03 01:48:07 +00:00
743ede00c4 bunpen: avoid binding /proc entries; these especially confuse bwrap apps like geary 2024-09-03 01:47:49 +00:00
41d9eccfe8 bunpen: preserve argv0 in the wrapper 2024-09-03 01:45:48 +00:00
04eb5ed012 bunpen: more verbose logging when we exec 2024-09-03 01:45:28 +00:00
0279c030de loupe: sandbox with bunpen 2024-09-03 00:33:16 +00:00
f0ea3f8bf6 fractal: sandbox with bunpen 2024-09-03 00:32:03 +00:00
f3b9369783 bunpen: implement BUNPEN_DISABLE=1 env var to bypass sandboxing 2024-09-03 00:27:14 +00:00
5ae12272bd bunpen: restrict/namespace: fix so that nested mounts mount both paths
so e.g. '--bunpen-path /' at the end of the CLI will actually do something
2024-09-02 23:50:19 +00:00
6a1b4fdba1 bunpen: logging: make the exec log line easier to understand 2024-09-02 23:24:46 +00:00
0264ed68f4 bunpen: check syscall return codes more strictly
many syscalls say *specifically* in their documentation that they return 0 on success (implying no other value is success)
2024-09-02 22:39:52 +00:00
384472c1c4 nix: fix typo in NIXPATH introduced in a39d705ff5 2024-09-02 21:54:14 +00:00
1719943a6e bunpen: log the args it was invoked with 2024-09-02 21:53:41 +00:00
0ee51d1812 bunpen: peek through *all* symlinks, not just intermediary ones
`mount` doesnt seem to mount over symlinks, hence why we have to follow even terminal symlinks
2024-09-02 21:47:51 +00:00
5e84056715 bunpen: make --bunpen-caps all behave as shorthand for literally specifying every capability 2024-09-02 20:39:18 +00:00
da72fc9d52 bunpen: fix typo that prevented assigning caps >= 32 2024-09-02 20:36:37 +00:00
36e2f57b06 bunpen: proper capability boxing
the Amb/Bound sets are written as specified, and I/P set so as to be activated when we exec the wrapped program
2024-09-02 20:21:09 +00:00
bc2823d622 bunpen: better (still incomplete) capability boxing 2024-09-02 18:55:53 +00:00
8b53f97c1c bunpen: bind the different PR_CAP* prctl syscalls
see 'man prctl' for additional calls, some of which were omitted because i don't expect to need them
2024-09-02 17:02:02 +00:00
712b2c38f0 firefox: disable Ctrl+W shortcut
finally, i can stop accidentally killing tabs when i mean to backspace
2024-09-02 15:43:12 +00:00
3212664f37 firefox: migrate extraPolicies to overrides.cfg
this fixes that the bookmarks policy in extraPolicies was breaking my bookmarks import
2024-09-02 15:15:00 +00:00
98c62f66dd firefox: add duckduckgo search bookmark 2024-09-02 14:11:13 +00:00
1677f77fd6 firefox: statically define a few bookmarks 2024-09-02 14:04:47 +00:00
c5e21546ff firefox: refactor: split addons into separate file 2024-09-02 13:57:53 +00:00
5eb597b133 programs: firefox: move to subdir
then i'll split it into separate files fore easier management
2024-09-02 13:41:11 +00:00
90f7953615 firefox: remove dead code 2024-09-02 13:29:11 +00:00
ab15d2a991 programs: replace gnome-disk-utility with gparted
the latter *appears* to work better when sandboxed
2024-09-02 12:02:32 +00:00
eba9bb3099 feeds: subscribe to Charles Stross blog 2024-09-02 11:38:47 +00:00
3deb17125d make-sandboxed: handl polkit files when patching bin paths 2024-09-02 11:31:24 +00:00
49a38001bc update-feed: support sites which are accessible only by www.FOO and not toplevel FOO 2024-09-02 11:30:53 +00:00
a39d705ff5 nix: fix NIXPATH to be free of symlinks 2024-09-02 11:29:58 +00:00
4328a7ddf3 modules/programs: remove unused arguments 2024-09-02 10:26:42 +00:00
1b959272a1 moby: fetch the ANX7688 patch from lkml instead of armbian
didn't actually deploy this, but it builds
2024-09-02 10:07:37 +00:00
9d83f4cbf7 NetworkManager: reduce hardening options which broke IPv6 link-local addressing
'ip -6 addr' should show an address even on networks which aren't
routable. /proc or /sys sandboxing was preventing this (with error messages logged to syslog).
2024-09-01 23:13:30 +00:00
48fccebd1e iptables: temporarily disable sandbox
it was overrestrictive
2024-09-01 21:24:19 +00:00
8f4d4c97bc avahi: ensure that mDNS responses arent blocked by rpfilter
this PROBABLY isnt necessary, but keep it here as i debug stuff at least
2024-09-01 21:23:52 +00:00
0419e50cc3 upnp: fix rpfilter to support IPv6, too 2024-09-01 21:21:57 +00:00
80d3ad3d0e moby: wifi low power patch: clarify that it just mitigates, doesnt solve, the reconnections 2024-09-01 21:21:30 +00:00
3d3853d596 moby: rtw88 wifi: disable deep sleep to prevent disconnections 2024-09-01 17:37:53 +00:00
cfa60ce41c common/fs: remove dead nfs code 2024-09-01 15:50:28 +00:00
942ca82445 assorted: hosts/common: remove unused module parameters 2024-09-01 15:49:15 +00:00
336696bb06 scripts/deploy: show the nix copy command, to aid in manual runs 2024-09-01 15:41:33 +00:00
7d75b3c736 neovim: docs: suggest alternate mappings for nvim-cmp 2024-09-01 15:38:13 +00:00
3ca2c7ec53 sane-tag-media: fix escapes in docstring 2024-09-01 14:30:53 +00:00
9d605030c3 cross: wike: push build fix to upstream nixpkgs 2024-09-01 13:44:31 +00:00
e1d678093e ayatana, switchboard: push cross patches upstream 2024-09-01 13:16:39 +00:00
5586a3a87b moby: document status of linux 6.11 2024-09-01 11:35:20 +00:00
38c6ecefa6 programs: ship camera debugging tools 2024-09-01 11:31:10 +00:00
c80aa813d9 neovim: ship GitMessenger plugin for git-blame-like functionality 2024-09-01 01:12:27 +00:00
4f6ea0938c neovim: Ctrl+Space to autocomplete 2024-09-01 01:00:37 +00:00
7ed78686c2 hal/pine64: remove more commented out patches which are irrelevant to pinephone 2024-08-31 22:42:04 +00:00
96b90b84d3 linux-firmware-megous: lint 2024-08-31 21:57:33 +00:00
c32be5d170 hal/pine64: remove some commented out patches which are *definitely* irrelevant to pinephone
probably there are way more; i just have to make sense of the weird name scheme and be sure which sensors are/aren't on the pinephone
2024-08-31 21:50:50 +00:00
7830603ff3 cleanup: impure.nix: remove extraneous parentheses 2024-08-31 21:20:18 +00:00
98f028108e moby: remove old way of getting the armbian patches 2024-08-31 21:09:57 +00:00
1649e9e22f moby: remove outdated documentation 2024-08-31 21:08:08 +00:00
874ba132a8 crust-firmware-pinephone: remove unused pkgsCross input 2024-08-31 20:57:48 +00:00
1f0fa1cf2b WIP: moby: add the modem-power dev node back
my eg25-control script requires it; maybe someday i'll manage modem power from userspace as well -- that should be less error prone
2024-08-31 20:54:55 +00:00
98e32fbcab moby: add anxNNNN back to the device tree
i *suspect* this fixes/improves battery charging.
at least, i see the nwg-panel icon intermittently switch between
charging/not-charging, whereas before it ONLY ever showed not-charging.
2024-08-31 20:51:55 +00:00
947f2b821d moby: reduce the set of kernel patches
in fact i forgot to include the patch which adds anxNNNN to the device
tree, but it still boots to graphics. battery charging i *think* DOESN'T
work (needs the dts change probably)

waiting for this to deploy; i think i removed too many, and should have kept the anxNNNN device-tree patch, but unsure
2024-08-31 19:43:42 +00:00
68478b37fe moby: fix display for pseudo-mainline kernel
i'll work to reduce the patch stack... but it takes time to recompile/deploy
2024-08-31 18:20:41 +00:00
097f172e71 nixpkgs: remove no-longer-needed permittedInsecurePackages config 2024-08-31 18:19:14 +00:00
28be40a2c8 WIP: moby: enable the HDMI sound card
waiting on deploy; unsure if this achieves anything. but it applies and builds so why not, for now.
2024-08-31 17:10:32 +00:00
9daa12049f WIP: moby: ship mainline linux, with a few megi patches
100% mainline linux boots, with WiFi and battery charging, but no display

i'm trying to select megi patches that will enable the display; haven't found that yet. may be that the config requires tweaking (e.g. SIMPLEDRM stuff)
2024-08-31 17:09:39 +00:00
b9cd911c0d armbian-build: init
this repo contains (among other things) megi's kernel tree, exported as individual patches, where they can be easily cherry-picked and tracked
2024-08-31 17:03:17 +00:00
de2991a515 cleanup: nixpkgs/list: remove dead inputs 2024-08-31 17:01:11 +00:00
dd3dfc1988 todo.md: sync 2024-08-31 16:56:04 +00:00
a4dbca48fe all: remove the UV_USE_IO_URING=0 patch (seemingly fixed by linux 6.9/6.10?) 2024-08-31 07:22:05 +00:00
2cfccd948f nixpkgs: 0-unstable-2024-08-25 -> 0-unstable-2024-08-30 2024-08-31 07:15:00 +00:00
d911f92c28 nixpkgs-wayland: 0-unstable-2024-08-13 -> 0-unstable-2024-08-30 2024-08-31 07:14:51 +00:00
5a782551f7 syshud: 0-unstable-2024-08-24 -> 0-unstable-2024-08-27 2024-08-31 07:14:32 +00:00
c4f97fc31b uassets: 0-unstable-2024-08-21 -> 0-unstable-2024-08-30 2024-08-31 07:13:56 +00:00
b4f921ab04 programs: tangram: disable (i dont use it) 2024-08-31 07:13:39 +00:00
458a87045d uninsane-dot-org: 0-unstable-2024-08-14 -> 0-unstable-2024-08-29 2024-08-31 07:13:24 +00:00
ee4c699850 moby: fix cross: replace papers with zathura 2024-08-31 07:13:07 +00:00
341b150254 feeds: unsubscribe Sam Harris
he just kinda says the same thing over and over.
2024-08-30 20:38:18 +00:00
737df8c10e modules/programs: plumb capabilities into bunpen sandboxer 2024-08-30 20:36:11 +00:00
2053ba079c bunpen: plumb capabilities sandboxing into main
it produces visible effects (in the cap_i set), but it's useless until i also set ambient caps
2024-08-30 20:35:27 +00:00
04c937f04b bunpen: bind capset syscall, and plumb the caps into restrict::resources
but don't actually restrict them yet
2024-08-30 18:40:44 +00:00
475d1615fa bunpen: implement capability struct with parse method 2024-08-30 17:02:44 +00:00
25b3ccaa48 bunpen: split autodetect type into own file 2024-08-30 16:28:03 +00:00
735079e615 bunpen: config: make the help type not an error
asking for help isn't an error
2024-08-30 15:41:17 +00:00
1a1edc0d19 refactor: bunpen: config/translate_opts: guard file type more idiomatically
i hope. it's still really weird code here.
2024-08-30 15:34:54 +00:00
9148b49ba2 refactor: bunpen: config/translate_opts: make the autodetect logic not pollute the hardcoded path ingestion quite so much 2024-08-30 15:20:56 +00:00
67f6026c67 refactor: bunpen: config/translate_opts: rework the path detection code 2024-08-30 14:38:52 +00:00
cfb5a7651b refactor: bunpen: implement and use check_u64 to cover most remaining uses of ! 2024-08-30 13:41:11 +00:00
6f71d2f8db refactor: bunpen: switch a few more ! error unwraps to errors::ext::check 2024-08-30 13:25:41 +00:00
5f5cda9706 refactor: bunpen: namespace: swallow /proc/self/*_map errors instead of aborting 2024-08-30 13:17:24 +00:00
7ac4a6f060 refactor: bunpen: namespace: simplify the error paths 2024-08-30 13:10:00 +00:00
1d79f3eacc papers: ship in place of Zathura as the default pdf viewer 2024-08-30 12:53:05 +00:00
e5263915b9 refactor: namespace: leverage errors::ext::swallow where easily applicable 2024-08-30 12:42:28 +00:00
29cabd2ac4 bunpen: refactor: cleanup error checking impl 2024-08-30 12:23:48 +00:00
475037f9c9 bunpen: move rtext:: -> rt::ext:: 2024-08-30 12:03:23 +00:00
dab05a0f9c {check,swallow}_error: lift out of rtext into errors::ext
the ::ext namespace is required to prevent a circular dep within the std lib
2024-08-30 12:00:43 +00:00
d2bf8dbdbb bunpen: clone: place the clone flags behind an enum 2024-08-30 11:37:45 +00:00
3e5cb29a7d bunpen: namespace/umount: place the umount flags behind an enum 2024-08-30 11:31:12 +00:00
edeb153eb8 bunpen: namespace/mount: place the various mount flags behind an enum 2024-08-30 11:28:34 +00:00
61e8b99f72 bunpen: landlock: namespace the landlock_create_ruleset flags as well 2024-08-30 11:04:52 +00:00
566a61ca9f bunpen: landlock: namespace the different flags into enums 2024-08-30 10:57:48 +00:00
590cd36e53 bunpen: landlock: split out a helper to simplify the error handling 2024-08-30 10:33:33 +00:00
9803be75e1 bunpen: no_new_privs -> capabilities, in expectation of this file expanding in role 2024-08-30 09:43:46 +00:00
73583d19d4 programs: nix: ship nixVersions.latest
it gives better error messages, and i'm not seeing any regressions so far
2024-08-30 09:37:56 +00:00
19e2e37105 mpv: sandbox with bunpen instead of bwrap
it's far enough along to be actually working; though i likely give it a few more in-namespace capabilities than it really needs
2024-08-29 20:14:30 +00:00
f26f13ddf3 bunpen: bind "safe"-ish /de items 2024-08-29 20:13:37 +00:00
9c69666646 bunpen: expose a new /tmp to the sandbox 2024-08-29 20:13:20 +00:00
4f6b1b0a69 bunpen: bind a sandboxed /proc 2024-08-29 20:12:42 +00:00
bc1453f675 bunpen: mount /proc in the namespace, if pids are sandboxed 2024-08-29 16:47:02 +00:00
353057af23 bunpen: namespace: perform the first fork required for pid namespacing 2024-08-29 14:54:08 +00:00
7f5b55bc2a bunpen: simplify: share resources with the CLI parsing to avoid duplication 2024-08-29 14:17:42 +00:00
452ee68926 bunpen: lay the plumbing for future pid isolation 2024-08-29 14:13:38 +00:00
a2fa3727cc sane_sysvol: fix use of uninitialized volstr
hey, that lua language server is pretty neat ^_^
2024-08-29 11:43:19 +00:00
1676ef77ad bunpen: configure logging ASAP
this avoids dumping undesired spam to the console during the autodetect phase
2024-08-29 11:41:08 +00:00
39a7c1a6d9 bunpen: namespace: improve docs around path edgecases 2024-08-29 11:27:01 +00:00
d91e1d51c1 bunpen: handle intermediary symlinks when binding 2024-08-29 11:17:35 +00:00
f6d4dcaabb bunpen: fix outdated docs for namespace path binding 2024-08-29 11:10:37 +00:00
963a0ee56c mpv: setup profiles by which to tune youtube quality preferences and debanding 2024-08-29 10:17:53 +00:00
3e9e1168b4 bunpen: landlock: fix landlock access mode for unix sockets
the inode type for a socket is a superset of the inode type for a directory, so the bitmasking logic was wrong
2024-08-28 13:27:36 +00:00
14929c1102 programs: plum --bunpen-autodetect into modules/programs API 2024-08-28 11:37:18 +00:00
35848ece02 bunpen: implement --bunpen-autodetect 2024-08-28 11:35:58 +00:00
38ee8be785 bunpen: refactor: dont exit directly when parsing args, but return an error and let main do that 2024-08-27 22:28:06 +00:00
b3ea0ff2b3 bunpen: remove dead options i wont ever implement 2024-08-27 22:12:54 +00:00
e5cdd53537 bunpen: implement --bunpen-debug=n for more controlled logging 2024-08-27 20:48:26 +00:00
fb894bb7a5 bunpen: treelogger: implement log depth filtering 2024-08-27 20:36:31 +00:00
2ffacf0e44 bunpen: lay groundwork for a better logger 2024-08-27 20:36:31 +00:00
7dbe64e52f bunpen: preserve environment across exec boundary 2024-08-27 20:36:31 +00:00
b9fc61e627 modules/programs: plumb bunpen's home/run path binds 2024-08-27 20:36:31 +00:00
99de056048 bunpen: namespace: restore the working directory (if possible) after entering the mount namespace 2024-08-27 20:36:31 +00:00
469b9b9223 bunpen: prefer os::getpwd instead of relying on the PWD env var 2024-08-27 20:36:31 +00:00
2f6e54f331 bunpen: support --bunpen-home-path, --bunpen-run-path
still needs to be integrated into modules/programs
2024-08-27 20:36:31 +00:00
29886d7f10 servo: sftpgo: allow read-only media access via password auth 2024-08-27 13:52:40 +00:00
861014bca3 nixpkgs: fix patch hashes 2024-08-27 13:44:42 +00:00
3417a9fd3f sanebox: remove the portal logic, and delegate it to manual handling by those few apps which truly need special casing
it's a questionable responsibility to give to the sandbox itself (unless i also have the sandbox do things like dbus proxying, someday). and it will make the bunpen implementation simpler
2024-08-27 11:00:15 +00:00
83ef250a34 neovim: fix lints 2024-08-26 20:47:18 +00:00
59ba9e4853 neovim: disable ltex-ls plugin 2024-08-26 20:46:32 +00:00
3994beaa01 hosts/moby: disable the very heavy-weight LSPs (rust, typescript) 2024-08-26 17:17:10 +00:00
93159485fa neovim: integrate LSP for lua, LaTeX, html, markdown, nix, OpenSCAD, Rust, js/TypeScript :) 2024-08-26 16:49:00 +00:00
e1f5a55bca neovim: enable bash and python language servers 2024-08-26 14:06:49 +00:00
ea2739f86c neovim: enable "which-key" plugin 2024-08-26 14:06:49 +00:00
3c9ff16108 neovim: simplify plugin config schema 2024-08-26 14:06:49 +00:00
0787a3a50e neovim: split plugin configs into their own file 2024-08-26 14:06:49 +00:00
446e614e9a neovim: split vimrc into own file 2024-08-26 14:06:49 +00:00
afd0ec09a1 nixfmt-rfc-style: ship 2024-08-26 14:06:49 +00:00
422e8aeb3f sanebox: support existingDir{,OrParent} autodetect option 2024-08-26 14:06:49 +00:00
ae8e9267c4 nixpkgs: 0-unstable-2024-08-21 -> 0-unstable-2024-08-25 2024-08-26 08:15:49 +00:00
60c4b2e4c0 syshud: 2024-08-17 -> 2024-08-24, and apply nixfmt 2024-08-26 08:06:43 +00:00
289e9182fd bunpen: --bunpen-drop-shell: specify argv0 more correctly 2024-08-25 19:24:32 +00:00
ec7b87b985 bunpen: PARTIAL support for symlinks 2024-08-25 19:22:25 +00:00
9f5d7f2bb2 bunpen: fix mixup between argv0 and the rest of argv 2024-08-25 19:10:26 +00:00
64697a2cb8 bunpen: namespace: bind all requested user paths, and create requisite directories 2024-08-25 19:06:28 +00:00
1c50ff8fe4 bunpen: factor the pivot_root logic into some abstraction
is this really helpful? hard to tell for sure
2024-08-25 13:36:11 +00:00
3010ff89d0 bunpen: clean up mount namespacing so that i could bind any directory -- including /tmp 2024-08-25 13:27:31 +00:00
7a902cabfe bunpen: proof-of-concept mount namespace, exposing only *some* paths 2024-08-25 11:38:08 +00:00
64948a497d bunpen: write real uid/gid to /proc/self/uid_map 2024-08-24 20:38:33 +00:00
ccddc6f8e1 bunpen: TODO: calculate uid/gid at runtime 2024-08-24 20:12:51 +00:00
7d7abc9619 bunpen: namespace: simplify 2024-08-24 20:05:09 +00:00
f0efa0c255 bunpen: proof-of-concept mount namespacing 2024-08-24 20:01:27 +00:00
9ab6d101f6 bunpen: no_new_privs: propagate the error & handle it in main 2024-08-24 17:18:47 +00:00
164275fa59 bunpen: bind pivot_root to Hare 2024-08-24 12:35:55 +00:00
dbdd356691 bunpen: mv rtext/namespace -> rtext/unshare, to reflect that it is more limited in scope 2024-08-24 06:36:04 +00:00
c9157291b9 bunpen: namespace: unshare cgroup/ipc/uts, and net where possible 2024-08-24 05:20:54 +00:00
e315919b54 bunpen: run process inside a new user namespace 2024-08-24 05:12:27 +00:00
5f35eaccd9 programs/host: sandbox with bunpen instead of landlock
this just acts as a good proof-of-concept / testing it in the wild
2024-08-23 16:00:31 +00:00
c86d893a2c modules/programs: sandbox: allow method = "bunpen" 2024-08-23 16:00:31 +00:00
abb19b1fc9 bunpen: fix to allow binding files into the environment -- not just directories 2024-08-23 16:00:31 +00:00
ab4ebb012a bunpen: implement --bunpen-drop-shell flag 2024-08-23 16:00:31 +00:00
effec38a99 modules/programs: sandbox: introduce an interface which will allow for sandboxers other than sanebox 2024-08-23 16:00:31 +00:00
c5ed1263dc feeds: subscribe to justine.lol 2024-08-23 16:00:31 +00:00
e0d33862f0 bunpen: implement --bunpen-keep-net CLI arg 2024-08-23 16:00:31 +00:00
7d097474a3 bunpen: implement --bunpen-path cli arg 2024-08-23 16:00:31 +00:00
7a4a7d613b bunpen: implement basic arg parsing 2024-08-23 16:00:31 +00:00
e457cf96ae bunpen: break out a resources abstraction 2024-08-23 16:00:31 +00:00
f323c0f90d bunpen: rename "methods" -> "restrict" 2024-08-23 16:00:31 +00:00
5525ea4b59 bunpen: lift main up to the toplevel
it seems modules *do* support freestanding hare files at the toplevel -- but only if theres just one of them (?)
2024-08-23 16:00:31 +00:00
daa1783e21 bunpen: refactor kernel bindings into a rtext module
additionally, this requires moving all other files into their own directories, else hare doesn't seem to recognize 'rtext' as a module
2024-08-23 16:00:31 +00:00
27d5928155 bunpen: landlock: allow access to all of / 2024-08-23 16:00:31 +00:00
2f9dd4cd60 bunpen: landlock: fully restrict
of course, this means it's unable to 'exec' from disk -- for now
2024-08-23 16:00:31 +00:00
ba406e912f bunpen: landlock: cleaner bindings 2024-08-23 16:00:31 +00:00
45ff21822a feeds: sub JRE (we'll see how long this lasts...) 2024-08-23 06:09:33 +00:00
7ef9f0b455 bunpen: implement landlock_add_rule binding 2024-08-23 06:09:14 +00:00
ec90f5c066 bunpen: landlock: negotiate access modes with the running kernel 2024-08-22 17:30:07 +00:00
57e113137f bunpen: add minimal landlock API 2024-08-22 16:08:53 +00:00
2c390a8b6d bunpen: set no_new_privs before executing the command 2024-08-22 15:42:59 +00:00
634f13ba6b bunpen: use stdlib log isntead of raw fmt::printfln 2024-08-22 14:40:46 +00:00
dab7803cbb bunpen: execute the given argv 2024-08-22 14:34:08 +00:00
64f53020ee bunpen: explicitly configure 2-space indentation 2024-08-22 13:19:39 +00:00
e737d2e24b bunpen: run hare test during build 2024-08-22 13:19:21 +00:00
9b11b64349 haredoc: ship 2024-08-22 09:00:14 +00:00
212f6c0f48 bunpen: init at 0.1.0 2024-08-22 08:31:21 +00:00
a9cc0f28e2 feeds: subscribe to linuxdevtime podcast 2024-08-22 07:19:37 +00:00
3599f051b1 nixpkgs: 0-unstable-2024-08-19 -> 0-unstable-2024-08-21 2024-08-22 04:12:57 +00:00
d72a1c799e uassets: 0-unstable-2024-08-18 -> 0-unstable-2024-08-21 2024-08-22 04:12:39 +00:00
e78907b88b curlftpfs: remove -o interface... option and patch curl instead 2024-08-21 10:20:09 +00:00
04c41f6045 alsa-ucm-conf: make clear which data i last updated everything 2024-08-21 08:26:50 +00:00
32a52c3366 gnome-calls: document limitations/compatibility 2024-08-21 08:26:00 +00:00
55175e5957 geary: fix that it was failing to connect 2024-08-21 06:06:10 +00:00
b4b95be588 make-sandboxed: fix to preserve the specified output, for packages like dig 2024-08-21 04:00:45 +00:00
2758b0eae2 signal-desktop: DO start by default: until/unless i get signal-flare working, hosts which are capable should launch signal-desktop at boot 2024-08-21 03:30:16 +00:00
ae0d6cb8e8 make-sandboxed: preserve outputs of multiple-output packages
especially, this fixes the dconf service, since we keep '/libexec'
2024-08-21 03:28:02 +00:00
9c9b237e69 /mnt/servo/*: fix for curl 8.9.0
see: <https://github.com/curl/curl/discussions/14299>
2024-08-20 09:53:37 +00:00
17dcf566f7 loupe: add /dev/dri to the sandbox for faster rendering 2024-08-20 08:52:24 +00:00
bf94946759 nixpkgs: 0-unstable-2024-08-18 -> 0-unstable-2024-08-19 2024-08-20 08:52:07 +00:00
6e1ccc3e19 all: pin kernel to a later version (6.10, whereas it would be reduced to 6.6 by next nixpkgs update) 2024-08-20 08:51:38 +00:00
4055c6d3e9 podcasts: subscribe to C-Span's _The Weekly_ 2024-08-20 02:23:41 +00:00
ba8d9f2882 ayatana-ido: fix cross 2024-08-20 00:46:46 +00:00
82aa0eb1d6 flatpak: fix cross for 1.14.10 2024-08-19 23:39:31 +00:00
6341531122 syshud: 0-unstable-2024-08-10 -> 0-unstable-2024-08-17 2024-08-19 13:57:46 +00:00
c71d89e6af signal-desktop-from-src: disable automatic updates 2024-08-19 13:49:41 +00:00
995183a4fd koreader-from-src: disable automatic updates 2024-08-19 13:49:41 +00:00
ddffda1594 nixpkgs: 0-unstable-2024-08-13 -> 0-unstable-2024-08-18 2024-08-19 13:49:32 +00:00
c15cea08f6 nixpkgs-wayland: versionless update 2024-08-19 13:47:44 +00:00
7e73199b68 uassets: 0-unstable-2024-08-13 -> 0-unstable-2024-08-18 2024-08-19 13:46:50 +00:00
705a8a19c9 uninsane-dot-org: 0-unstable-2024-08-06 -> 0-unstable-2024-08-14 2024-08-19 13:46:30 +00:00
c8b28580a9 todo.md: sync 2024-08-19 13:30:46 +00:00
1b4266f8a7 hickory-dns: fix compilation error with newer rustc 2024-08-19 13:29:09 +00:00
aecbfb45c9 gnome-calls: dont fail offline indefinitely when DNS errors 2024-08-18 14:24:11 +00:00
e16a26fad2 sane-tag-media: implement --style video to aid in structuring an album-less library (e.g. an archive of Youtube videos, organized by channel) 2024-08-18 01:51:12 +00:00
7d23f9453e sane-tag-media: update docs 2024-08-17 22:42:51 +00:00
391c4f5aac geary: change the default autostart to true 2024-08-17 12:13:15 +00:00
48b0960966 moby: dont auto-start signal-desktop (its too battery draining) 2024-08-17 12:11:40 +00:00
9069a97c26 sane-tag-media: ignore QuarkXPress publisher 2024-08-17 10:53:45 +00:00
ca793af819 make-sandboxed: fix double-wrapping when two symlinks point to the same binary by non-canonical paths (e.g. mount.sshfs -> ../bin/sshfs) 2024-08-16 10:50:20 +00:00
05e2f6f2a0 todo.md: note that hickory-dns cant resolve shows.acast.com 2024-08-16 02:48:24 +00:00
08d6f9c761 dconf: sandbox out-of-place 2024-08-16 02:48:24 +00:00
05bc5923cf sway: sandbox out-of-place 2024-08-16 02:48:24 +00:00
114b37928a tor-browser: sandbox out-of-place 2024-08-16 02:44:27 +00:00
e846a5046a feeds: subscribe to 404 media 2024-08-16 02:41:17 +00:00
5dcb7b5cf6 scripts/init-feed: sanitize titles/descriptions 2024-08-16 02:39:56 +00:00
f603bad779 scripts/init-feed: support --podcast argument to select podcasts over text 2024-08-16 02:34:19 +00:00
729d2a9809 firefox: dont use inplace wrapper
avoiding inplace wrapping gives me more leverage over what gets linked into the final runtime environment
2024-08-16 02:16:37 +00:00
a552ed625b make-sandboxed: fix several edge-cases for e.g. brave, firefox, especially around handling of wrapped binaries 2024-08-16 02:15:46 +00:00
f3df321713 sanebox: fix pasta argv passing 2024-08-16 02:14:29 +00:00
62ebdf5de4 brave: fix sandboxing 2024-08-16 00:15:58 +00:00
f834f551ed assorted: clarify why i use wrapperType = inplace when sandboxing 2024-08-15 21:01:42 +00:00
140b61a944 slic3r: ship 2024-08-15 10:32:22 +00:00
db7767c679 assorted: remove some no-longer-needed sandbox.wrapperType = "inplace" declarations 2024-08-15 10:32:22 +00:00
fd6959230f make-sandboxed: handle /opt-style packaging, with toplevels linked into /bin, a bit better 2024-08-15 10:32:18 +00:00
87e9856497 sanebox: forward argv0 2024-08-15 10:31:21 +00:00
50b1d82b38 nixpkgs: fix hashes 2024-08-14 23:20:31 +00:00
60a4eb0bde gnome-calls: associate with tel:, sip:, sips: URIs 2024-08-14 08:27:27 +00:00
a96e83f4e1 doc: gnome-calls: document some UI elements 2024-08-14 07:53:47 +00:00
0d685f406e uassets: 2024-08-09 -> 2024-08-13 2024-08-13 22:02:37 +00:00
a16e33d7a6 sops-nix: 2024-08-05 -> 2024-08-12 2024-08-13 22:02:27 +00:00
f38d351869 syshud: 2024-08-03 -> 2024-08-10 2024-08-13 22:01:57 +00:00
e245164da3 nixpkgs-wayland: 2024-08-12 -> 2024-08-13 2024-08-13 22:01:31 +00:00
7df8f45e97 nixpkgs: 2024-08-12 -> 2024-08-13 2024-08-13 22:00:49 +00:00
e1ba371838 cross: flatpak: fix via nixpkgs patch instead of overlay 2024-08-13 07:20:24 +00:00
467283989f todo.md: fix Epiphany to persist cookies 2024-08-13 03:41:08 +00:00
db39dc209f xdg-desktop-portal-gnome: sandbox 2024-08-13 03:34:09 +00:00
7cf860a071 nixpkgs: update passt hash 2024-08-13 03:33:48 +00:00
77a753b0d6 gnome-maps: todo: better portal integration 2024-08-13 02:50:59 +00:00
e2a4f4d63e todo.md: newsflash and gnome-maps bugs to tackle 2024-08-13 02:48:08 +00:00
31fc072bce nixpkgs-overlays: try to be a little more pure 2024-08-12 21:56:30 +00:00
144afd8171 sway: fix wlroots drmSync bug via upstream patch 2024-08-12 21:52:44 +00:00
7d97355d2a overlays/cross: remove no-longer-necessary overrides 2024-08-12 21:20:16 +00:00
7827f6c584 sway: note that the activation patch is still necessary 2024-08-12 18:28:16 +00:00
e1899495a0 nixpkgs-wayland: 0-unstable-2024-08-06 -> 0-unstable-2024-08-12 2024-08-12 18:05:32 +00:00
a56ad56a4f refactor: move ~/.cache/nix persistence to hosts/common/programs/nix.nix 2024-08-12 16:06:26 +00:00
da551b8b97 geary: grant access to more files 2024-08-12 16:04:20 +00:00
ca412d08bd nautilus: grant access to more files 2024-08-12 16:04:11 +00:00
e7a1bb6ec0 nixpkgs: 2024-08-11 -> 2024-08-12 2024-08-12 10:30:04 +00:00
74acfeadd5 programs/assorted: clarify sandbox.enable = false situation 2024-08-12 10:27:41 +00:00
e7d5a61014 libcap: split into separate capsh and captree programs, and sandbox the latter 2024-08-12 10:13:50 +00:00
6f47708624 nixpkgs patches: send a few upstream; dont apply ffado patch here because my system doesnt use it 2024-08-12 10:10:06 +00:00
fc826a3503 libcap: patch in captree locally rather than via a nixpkgs patch that would force mass rebuilds 2024-08-12 09:39:43 +00:00
ccb2b7b8b6 nixpkgs: update libcap patch to grab from the PR 2024-08-12 09:18:50 +00:00
78169d50f2 overlays/cross: remove upstreamed patches; simplify rust things 2024-08-12 09:14:42 +00:00
33a7d3536d nixpkgs: update patches 2024-08-12 09:14:00 +00:00
7899c8d033 syshud: 0-unstable-2024-07-29 -> 0-unstable-2024-08-10 2024-08-12 02:37:03 +00:00
82b662a733 nixpkgs: remove dead (upstreamed) patches 2024-08-12 02:13:07 +00:00
d4290588bf rename: trust-dns -> hickory-dns 2024-08-12 01:23:39 +00:00
bd97fb9ec9 nixpkgs: 24.05-unstable-2024-08-09 -> 24.05-unstable-2024-08-11 2024-08-12 01:08:03 +00:00
4dbff9c18f scripts/deploy: shorten "--action copy" to just "--copy" 2024-08-12 01:07:50 +00:00
bfe278c17a feeds: subscribe to Weird Little Guys 2024-08-12 00:35:34 +00:00
295e07d535 sane-tag-media: fix lingering crashes around --derive behavior 2024-08-12 00:13:42 +00:00
d39459d8b5 NetworkManager: tighten the systemd sandboxing 2024-08-11 22:54:47 +00:00
4d5e60756b modemmanager: make its capabilities more obvious 2024-08-11 22:54:41 +00:00
119afcf393 firefox: remove open-in-mpv (obsoleted by firefox-xdg-open) 2024-08-11 22:37:12 +00:00
d3d970eb3e firefox: dont require approval to open xdg-open: URIs 2024-08-11 22:32:26 +00:00
c0d5004926 firefox: add a right-click context menu to open any URI with the system handler
it still prompts the user to allow it, but i'll fix that later i guess
2024-08-11 22:26:23 +00:00
d9a876e49a fractal: association with https://matrix.to links 2024-08-11 21:45:51 +00:00
5a9dd89475 sane-vpn: fix global up/down action 2024-08-11 21:01:11 +00:00
5e71e5a067 moby: enable bluetooth 2024-08-11 06:27:07 +00:00
f0b0d15ad7 evtest: ship 2024-08-11 06:26:58 +00:00
8aebc1fe87 feeds: subscribe to Oyez supreme court oral arguments 2024-08-10 11:16:54 +00:00
764c2a3276 Revert "nixpkgs-wayland: 0-unstable-2024-08-06 -> 0-unstable-2024-08-09"
This reverts commit ce1c3ec804.

while the nixpkgs-wayland bump works fine on lappy/desko,
it causes moby to be stuck on the white screen after unlocking.
2024-08-10 04:16:31 +00:00
a2f34be9d6 avahi: fix so the dbus policy files get installed system wide, again 2024-08-10 02:59:20 +00:00
bda172bc2d avahi: harden systemd service
N.B.: i haven't tested this on moby yet (which advertizes the gps-share service) nor on servo (which maybe uses it for jellyfin, idk)
2024-08-10 02:04:57 +00:00
a91a2d8a7f gps-share: fix sandboxing 2024-08-10 01:10:31 +00:00
875d919fa8 systemd-rfkill: harden 2024-08-10 00:34:13 +00:00
a323f321b5 snapper: disable
it wasn't working to begin with
2024-08-10 00:09:58 +00:00
f986936bbd wg-home-refresh: use the sandboxed wireguard-tools 2024-08-09 23:52:31 +00:00
3d773fe375 sanebox: improve the capsh stuff a bit more 2024-08-09 23:52:16 +00:00
055ad222e3 wg-home-refresh: harden systemd service 2024-08-09 23:05:58 +00:00
3aafcb0aa8 sanebox: capshonly: be more precise about preserving e/i/p capabilities
with this, gocryptfs works AND wg works
2024-08-09 22:55:02 +00:00
c85f02ca68 scripts/sync: dont rely on /mnt/$self existing 2024-08-09 21:41:56 +00:00
eeafc34ccf hare-ev: 2024-07-11 -> 2024-08-06 2024-08-09 21:41:56 +00:00
039ffcdcd4 newsflash: sandbox 2024-08-09 21:35:33 +00:00
2a35cb5379 mime.urlAssociations: clarify regexes by using $ terminator 2024-08-09 20:57:13 +00:00
3db009bc98 mpv: associate with all web audio/video resources 2024-08-09 20:55:00 +00:00
1e840e72b3 nixpkgs: 24.05-unstable-2024-08-06 -> 24.05-unstable-2024-08-09 2024-08-09 10:34:20 +00:00
ce1c3ec804 nixpkgs-wayland: 0-unstable-2024-08-06 -> 0-unstable-2024-08-09 2024-08-09 10:34:02 +00:00
09dd69a855 uassets: 0-unstable-2024-08-06 -> 0-unstable-2024-08-09 2024-08-09 10:33:29 +00:00
cbe71868ef newsflash: deploy 2024-08-09 10:25:53 +00:00
7b043d0c87 newsflash: simplify cross compilation 2024-08-09 10:14:59 +00:00
fd0188025d newsflash: fix cross compilation 2024-08-09 09:46:40 +00:00
1c57ffa798 newsflash-nixified: init at 3.3.4 (doesn't build!)
it's doing complicated things with glib macros that i can't get to work.
2024-08-09 03:50:36 +00:00
1d205a89bc sway: fix gnome-calls to always be on workspace 1 2024-08-08 23:59:19 +00:00
5ff643aa2f foliate: fix sandboxing 2024-08-08 23:58:02 +00:00
bfdf63e641 calls: 46.3 -> 47.0-beta 2024-08-08 23:57:47 +00:00
c695f7a979 foliate: ship 2024-08-08 21:08:51 +00:00
b3b38451b5 koreader-from-src: add an update script (only updates the toplevel, at the moment) 2024-08-08 18:47:03 +00:00
1ee81db537 switch xdg-desktop-portal-gtk -> xdg-desktop-portal-gnome
the gnome file chooser is far more responsive, on moby

though thumbnailing doesnt work, which may degrade the desktop experience :-(
2024-08-08 09:43:47 +00:00
b9947c05ca xdg-desktop-portal-gnome: fix cross compilation 2024-08-08 09:05:26 +00:00
2de6491583 xdg-desktop-portal-gnome: get working as a xdp backend, on lappy
probably needs some porting to moby before it works there
2024-08-08 08:52:24 +00:00
4525df58e0 rsyslog: disable 2024-08-08 07:40:59 +00:00
9d1ffc7c43 todo.md: document some connectivity issues 2024-08-08 03:41:52 +00:00
a69af91b7b add /mnt/servo/home to my hosts 2024-08-08 00:45:33 +00:00
7b5d655c91 scripts/check-backups: show how to view the host's last-completed 2024-08-07 23:00:44 +00:00
de6ffe6b75 flare-signal: update compatibility notes 2024-08-07 22:07:56 +00:00
f8aea34e96 sanebox: bwrap: make user namespace unsharing more obvious 2024-08-07 21:23:21 +00:00
49efb94a0a seatd: restrict capabilities 2024-08-07 20:30:29 +00:00
9b1e053ead seatd: place the socket in a place that lends itself to better sandboxing 2024-08-07 19:37:20 +00:00
235dc86155 todo.md: delete completed sandboxing items 2024-08-07 01:33:31 +00:00
6dad290cd5 duplicity: purge 2024-08-07 01:33:31 +00:00
cc6ed6c0ec flare-signal: annotate my notes on it with datestamps 2024-08-07 01:23:43 +00:00
cc3aba3cc2 servo: fix postfix: dont start until after the mail dir has been mounted 2024-08-07 00:17:17 +00:00
41f08125bb scripts/check-backups: convert timestamps to hours 2024-08-06 21:50:49 +00:00
27487fe870 scripts/check-admin: script to show which (if any) services require tending to registration attempts 2024-08-06 21:40:48 +00:00
d45ea622d1 servo: disable email-based registration gating 2024-08-06 21:39:32 +00:00
247fd3f807 less: tune flags, especially for systemd/journalctl 2024-08-06 19:25:10 +00:00
816e2a7065 nixpkgs: 24.05-unstable-2024-08-04 -> 24.05-unstable-2024-08-06 2024-08-06 19:08:39 +00:00
be842d5c5e nixpkgs-wayland: 0-unstable-2024-08-03 -> 0-unstable-2024-08-06 2024-08-06 19:08:30 +00:00
fa6ec981e0 sops-nix: assets-unstable-2024-07-27 -> assets-unstable-2024-08-05 2024-08-06 19:08:16 +00:00
52b4c1542a uassets: 0-unstable-2024-08-03 -> 0-unstable-2024-08-06 2024-08-06 19:08:00 +00:00
3ff59247da uninsane-dot-org: ? -> 2024-08-06 2024-08-06 19:07:44 +00:00
d9c0855c4e fractal-nixified: 7 -> 8 2024-08-06 08:26:50 +00:00
1a67a05238 transmission/torrent-done: make files readable (speculative) 2024-08-06 08:26:16 +00:00
1cdeedd9ec servo: partially ship ollama 2024-08-06 08:24:29 +00:00
6830bb7097 servo: transmission: simplify the rsync call
i'm having perms issues _somewhere_
2024-08-06 08:14:45 +00:00
316b0bee3a landlock-sandboxer: disable the ABI mismatch warnings 2024-08-06 07:20:00 +00:00
638655ff83 mnt-servo-*-reachable.service: harden systemd service 2024-08-06 06:43:10 +00:00
5e57e78411 /mnt/servo/*: fix to not hang the mount when fs is offline
this is an unfortunate effect of the drop_privileges part of fuse3,
that the mount is active as soon as the fs implementation is launched,
instead of when it enters `fuse_main`.
2024-08-06 05:54:31 +00:00
3859619ae0 curlftpfs-sane: implement "-o exit_after_connect" 2024-08-06 05:53:45 +00:00
646c2dd85a common/fs: mount curlftpfs using fuse3 2024-08-06 04:48:47 +00:00
0655b6906c curlftpfs: implement readdir
i think now all the stuff you'd expect of a basic fs now actually works
2024-08-06 04:11:32 +00:00
3019f90f5d curlftpfs-sane: upgrade to fuse3 2024-08-06 03:00:11 +00:00
020e5f8c6e /mnt/persist/private: split waiting on the keyfile out of the mount process 2024-08-06 02:03:55 +00:00
809c3af7fa /mnt/persist/private: minor improvements to file permissions 2024-08-06 01:26:53 +00:00
93cb1bc546 /mnt/persist/private: sandbox in a way that the actual gocryptfs instance doesn't get CAP_SYS_ADMIN 2024-08-06 00:52:48 +00:00
53acab834c refactor: persist/stores/ephemeral: move to its own source directory 2024-08-05 23:05:02 +00:00
3a0610b029 /mnt/persist/ephemeral: sandbox in a way that the actual gocryptfs instance doesn't get CAP_SYS_ADMIN
instead, only fuse does, and the capability is lost during the handoff between fuse and gocryptfs
2024-08-05 23:04:14 +00:00
9cee460d7e gocryptfs: sandbox with landlock
now /mnt/persist/ephemeral implementation can't access /mnt/persist/private; /mnt/persist/private can't access /mnt/desko/home, and so on
2024-08-05 23:01:38 +00:00
e657507a76 libfuse-sane: search for mount helpers on /run/current-system/sw/bin 2024-08-05 23:00:05 +00:00
c706a19836 landlock-sandboxer: rename the binary, so that it can be included on PATH without collisions 2024-08-05 22:59:14 +00:00
566e15286b sanebox: don't assume 'readlink' is available in the environment 2024-08-05 22:56:18 +00:00
d1b4e9c923 sanebox: allow /dev/fd in the sandbox by default 2024-08-05 22:55:12 +00:00
5eca45891b sanebox: fix landlock sandboxing IAB edgecases
i don't fully understand it. but adjusting the Inh capability set breaks things like gocryptfs. i think it isn't necessary: if we set E alone, and no-new-privs, then that gets us the same guarantees.
2024-08-05 22:54:20 +00:00
722fe8f368 libcap: ship the optional 'captree' component 2024-08-05 05:30:14 +00:00
e25dd98f6c spot/spotify: disable
i don't use spotify atm
2024-08-05 00:47:59 +00:00
54e9d4a0ae sane-vpn: switch back to bwrap instead of pasta 2024-08-04 18:56:17 +00:00
9f3a13eeb8 nixpkgs: 24.05-unstable-2024-08-02 -> 24.05-unstable-2024-08-04 2024-08-04 02:19:14 +00:00
5605ffda4b nixpkgs-wayland: 0-unstable-2024-08-02 -> 0-unstable-2024-08-03 2024-08-04 02:18:57 +00:00
9165925469 syshud: 0-unstable-2024-07-29 -> 0-unstable-2024-08-03 2024-08-04 02:18:37 +00:00
f65bf2b433 uassets: 0-unstable-2024-08-02 -> 0-unstable-2024-08-03 2024-08-04 02:18:14 +00:00
0f60a86ed4 hare-ev: 0-unstable-2024-07-07 -> 0-unstable-2024-07-11 2024-08-04 01:08:37 +00:00
b488b6748d nixos/pam: replace apparmor warnings with assertions 2024-08-04 00:50:41 +00:00
ef6b7cf175 syshud: 0-unstable-2024-07-16 -> 0-unstable-2024-07-29 2024-08-04 00:39:04 +00:00
0906d76f83 libcap_ng: ship 2024-08-03 23:27:53 +00:00
90c495e74c libfuse-sane: ship 2024-08-03 22:59:34 +00:00
74662df720 persist/{private,ephemeral}: mount via fuse
gocryptfs is compatible with --drop-permissions style of mount.fuse3. only, i can't actually use that today because i need to keep permissions :o

but maybe i'll enable that in the future
2024-08-03 18:51:58 +00:00
2b3278eb7f /mnt/$host/home: layer bwrap sandboxing after the drop-privileges passoff 2024-08-03 17:11:11 +00:00
9b4e91fbd9 /mnt/$host/home: harden systemd settings 2024-08-03 16:27:42 +00:00
734627232a /mnt/$host/home: mount with drop_privileges 2024-08-03 15:13:04 +00:00
3adbbe5fa7 /mnt/$host/home: run as user instead of as root 2024-08-03 15:13:04 +00:00
b4a244df7a rsync-net: fix /nix/persist/private path 2024-08-03 14:32:44 +00:00
97268e9b26 curlftpfs-sane: rename from curlftpfs
i already patched it significantly; i plan to port to fuse3 shortly
2024-08-03 14:32:01 +00:00
bebf6bdaeb rsync-net: hardcode fewer paths 2024-08-03 11:38:43 +00:00
04fc601c9c rsync-net: fix sandboxing (dont set PrivateUsers: we lose perms in the root ns doing that) 2024-08-03 11:25:50 +00:00
ee062d61d0 sane-tag-media: rework the tag extrapolation to be less intrusive 2024-08-03 07:58:43 +00:00
0dba9987c5 sane-tag-media: remove unused "confirm" function 2024-08-03 07:19:53 +00:00
4761690b6d sane-tag-media: have --derive + --override-existing NOT override the existing tags when the derived ones apear to be simply lower-quality versions of the same on-disk data 2024-08-03 07:19:08 +00:00
604782c3a6 sane-tag-media: refactor (simplify) 2024-08-03 03:57:09 +00:00
365d33c357 sane-tag-media: empty manual tags always overwrite tags, regardless of --override-existing flag 2024-08-03 03:38:22 +00:00
a39ad8a508 sane-tag-media: rename --force flag to --override-existing 2024-08-03 03:31:16 +00:00
c49e9a4c2b sane-tag-media: implement the --ignore-existing flag 2024-08-03 03:18:07 +00:00
36491842cc sanebox: bwrap: micro-optimize to not require env 2024-08-02 22:44:27 +00:00
81ea2210c9 sanebox: allow keeping the net namespace 2024-08-02 22:44:27 +00:00
f678508b33 sanebox: add --sanebox-capsh-arg flag 2024-08-02 22:44:27 +00:00
6135be5f72 sanebox: refactor: bwrapFlags -> bwrapArgs 2024-08-02 22:44:27 +00:00
c8989ca1a8 pasta: allow running as root 2024-08-02 22:44:26 +00:00
1d665f8ecc sanebox: support "--sanebox-cap all" special case 2024-08-02 22:43:52 +00:00
7c284ad8da sane-vpn: use pasta instead of full bwrap for net namespacing 2024-08-02 22:42:56 +00:00
1c26674da7 rsync-net: temporarily use only RestrictNetworkInterfaces option and disable the internal sane-vpn logic
this is temporary, until i can fix sane-vpn to preserve linux capabilities
2024-08-02 22:10:44 +00:00
dae8481176 firefox: ship a "stub DNS" desktop file variant
though note that my stub-dns seems to be broken recently...
2024-08-02 21:41:07 +00:00
42b27f0433 sane-vpn: fix broken doc on --verbose flag 2024-08-02 21:39:29 +00:00
84be0cae5a todo.md: note another website which doesnt resolve with trust-dns 2024-08-02 21:20:31 +00:00
fbfd0afca4 common/fs: only desclare /mnt/$host mounts for hosts this machine is authorized to access 2024-08-02 20:29:22 +00:00
e586b7b449 signal-desktop-from-src: 7.16.0 -> 7.18.0 2024-08-02 10:52:44 +00:00
222c37b056 uassets: 2024-07-29 -> 2024-08-02 2024-08-02 10:52:25 +00:00
53b17ec230 nixpkgs-wayland: 2024-07-28 -> 2024-08-02 2024-08-02 10:52:07 +00:00
7697704aff nixpkgs: 2024-07-31 -> 2024-08-02 2024-08-02 10:51:44 +00:00
c490b6e6ad common/polyunfill: simplify my config by using the new security.pam.package option 2024-08-02 10:04:20 +00:00
89d678c729 nixpkgs: 2024-07-29 -> 2024-07-31 2024-08-02 10:03:48 +00:00
c64163290c gocryptfs: return to running mainline
i don't need the bug fix anymore, since i don't use pam_mount anymore
2024-08-02 09:52:20 +00:00
eaeb8380dc fs: enable @basic-api everywhere, since its required by systemd restart logic 2024-08-02 09:13:55 +00:00
05a9e8e819 common: /mnt/servo: fix systemd mount files to be aware of the timeout, again 2024-08-02 08:16:13 +00:00
cf20230d96 sane.fs: cleanup
plumb systemd.{mounts,services} instead of the less detailed 'systemd'
2024-08-02 08:01:38 +00:00
9dbb2a6266 sane.fs: take in the role of generating systemd.mounts files 2024-08-02 07:33:21 +00:00
113b107d73 persist: fix ordering so stores arent required by local-fs.target
maybe they should be, but then there's weird stuff about getty depending on sysinit.target, and that being blocked by the private store...
2024-08-02 06:20:39 +00:00
96dfe79a8c fs: persist/private: harden systemd mount file 2024-08-02 05:17:44 +00:00
6e5bde17aa cleanup: persist/private: simplify 2024-08-02 05:00:55 +00:00
3eb66c098b trust-dns: make it a dependency of "network-online.target" 2024-08-02 04:54:58 +00:00
515aab5370 cleanup: persist/private: encode the dependencies more precisely, rather than just having it all depend on default.target 2024-08-02 04:50:33 +00:00
f925dd9a20 fs: isolate /mnt/servo/* and /mnt/persist/ephemeral a bit more 2024-08-02 04:45:14 +00:00
cbe6bdf158 hosts: fs: sandbox /mnt/servo/* mounts 2024-08-02 03:17:53 +00:00
949a52dee1 activationScripts.notifyActive: be quiet about sane-deadlines/sane-sysload 2024-08-02 01:11:19 +00:00
2ee1fb17c4 sane-deadlines, sane-sysload: fix ordering to not run before the environment is configured 2024-08-02 01:04:07 +00:00
48cc718700 login: remove systemd-user-sessions integration so that we dont block on remote-fs
tested on lappy. will it work on servo, with gitea?
2024-08-02 00:52:51 +00:00
6a7dd31755 vpn: fix warning about missing /32 syntax 2024-08-02 00:37:58 +00:00
2197951e12 NetworkManager-dispatcher: cleanup an ordering cycle between it and trust-dns-localhost 2024-08-02 00:36:54 +00:00
883db3e9ba todo.md: sync 2024-08-02 00:33:35 +00:00
312b0a5554 todo.md: sandbox the remaining filesystems 2024-08-01 22:50:03 +00:00
07de46c616 todo.md: remove completed items 2024-08-01 22:48:49 +00:00
343 changed files with 31161 additions and 8028 deletions

View File

@@ -17,8 +17,6 @@ the only hard dependency for my exported pkgs/modules should be [nixpkgs][nixpkg
building [hosts/](./hosts/) will require [sops][sops].
you might specifically be interested in these files (elaborated further in #key-points-of-interest):
- ~~[`sxmo-utils`](./pkgs/additional/sxmo-utils/default.nix)~~
- these files will remain until my config settles down, but i no longer use or maintain SXMO.
- [my implementation of impermanence](./modules/persist/default.nix)
- my way of deploying dotfiles/configuring programs per-user:
- [modules/fs/](./modules/fs/default.nix)

61
TODO.md
View File

@@ -2,18 +2,21 @@
- `rmDbusServices` may break sandboxing
- e.g. if the package ships a systemd unit which references $out, then make-sandboxed won't properly update that unit.
- `rmDbusServicesInPlace` is not affected
- when moby wlan is explicitly set down (via ip link set wlan0 down), /var/lib/trust-dns/dhcp-configs doesn't get reset
- when moby wlan is explicitly set down (via ip link set wlan0 down), /var/lib/hickory-dns/dhcp-configs doesn't get reset
- `ip monitor` can detect those manual link state changes (NM-dispatcher it seems cannot)
- or try dnsmasq?
- trust-dns can't resolve `abs.twimg.com`
- trust-dns can't resolve `social.kernel.org`
- sandbox: link cache means that if i update ~/.config/... files inline, sandboxed programs still see the old version
- hickory-dns can't resolve `abs.twimg.com`
- hickory-dns can't resolve `social.kernel.org`
- hickory-dns can't resolve `pe.usps.com`
- hickory-dns can't resolve `social.seattle.wa.us`
- hickory-dns can't resolve `support.mozilla.org`
- hickory-dns can't resolve `shows.acast.com`
- mpv: continues to play past the end of some audio files
- mpv: audiocast has mpv sending its output to the builtin speakers unless manually changed
- mpv: no way to exit fullscreen video on moby
- uosc hides controls on FS, and touch doesn't support unhiding
- `ssh` access doesn't grant same linux capabilities as login
- syshud (volume overlay): when casting with `blast`, syshud doesn't react to volume changes
- moby: after bringing the modem up, powering it down loses *complete* net connectivity (i.e. wlan is gone as well)
- dissent: if i launch it without net connectivity, it gets stuck at the login, and never tries again
- moby: kaslr is effectively disabled
- `dmesg | grep "KASLR disabled due to lack of seed"`
- fix by adding `kaslrseed` to uboot script before `booti`
@@ -24,8 +27,19 @@
- `dmesg | grep 'hid_bpf: error while preloading HID BPF dispatcher: -22'`
- `s6` is not re-entrant
- so if the desktop crashes, the login process from `unl0kr` fails to re-launch the GUI
- newflash 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
- epiphany can't save cookies
- see under "preferences", cookies are disabled
- prevents logging into websites (OpenStreetMap)
- works when sandbox is disabled
## REFACTORING:
- get moby's kernel closer to mainline
- i.e. reduce the number of megi patches i apply
- don't use pmOS's defconfig, but nixpkgs default config + whatever extras i need
- add import checks to my Python nix-shell scripts
- consolidate ~/dev and ~/ref
- ~/dev becomes a link to ~/ref/cat/mine
@@ -47,40 +61,32 @@
#### upstreaming to non-nixpkgs repos
- gtk: build schemas even on cross compilation: <https://github.com/NixOS/nixpkgs/pull/247844>
- gnome-calls retry net connection when DNS is down
## IMPROVEMENTS:
- systemd/journalctl: use a less shit pager
- there's an env var for it: SYSTEMD_PAGER? and a flag for journalctl
- kernels: ship the same kernel on every machine
- then i can tune the kernels for hardening, without duplicating that work 4 times
- zfs: replace this with something which doesn't require a custom kernel build
- mpv: add media looping controls (e.g. loop song, loop playlist)
- curlftpfs: replace with something better
- safer (rust? actively maintained? sandboxable?)
- handles spaces/symbols in filenames
- has better multi-stream perf (e.g. `sane-sync-music` should be able to copy N items in parallel)
- firefox: open *all* links (http, https, ...) with system handler
- removes the need for open-in-mpv, firefox-xdg-open, etc.
- matrix room links *just work*.
- `network.protocol-handler.external.https = true` in about:config *seems* to do this,
but breaks some webpages (e.g. Pleroma)
### security/resilience
- validate duplicity backups!
- encrypt more ~ dirs (~/archives, ~/records, ..?)
- best to do this after i know for sure i have good backups
- 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)
- port all sane.programs to be sandboxed
- sandbox `curlftpfs`
- sandbox `nix`
- sandbox `sshfs-fuse`
- enforce that all `environment.packages` has a sandbox profile (or explicitly opts out)
- revisit "non-sandboxable" apps and check that i'm not actually just missing mountpoints
- LL_FS_RW=/ isn't enough -- need all mount points like `=/:/proc:/sys:...`.
- ensure non-bin package outputs are linked for sandboxed apps
- i.e. `outputs.man`, `outputs.debug`, `outputs.doc`, ...
- lock down dbus calls within the sandbox
- otherwise anyone can `systemd-run --user ...` to potentially escape a sandbox
- <https://github.com/flatpak/xdg-dbus-proxy>
- port sanebox to a compiled language (hare?)
- it adds like 50-70ms launch time _on my laptop_. i'd hate to know how much that is on the pinephone.
- 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
@@ -116,27 +122,28 @@
#### moby
- fix cpuidle (gets better power consumption): <https://xnux.eu/log/077.html>
- fix cpupower for better power/perf
- `journalctl -u cpupower --boot` (problem is present on lappy, at least)
- moby: tune keyboard layout
- SwayNC:
- don't show MPRIS if no players detected
- this is a problem of playerctld, i guess
- add option to change audio output
- SwayNC: add option to change audio output
- moby: tune GPS
- fix iio-sensor-proxy magnetometer scaling
- tune QGPS setting in eg25-control, for less jitter?
- configure geoclue to do some smoothing?
- manually do smoothing, as some layer between mepo and geoclue?
- email wigle.net people to unlock API access
- moby: port `freshen-agps` timer service to s6 (maybe i want some `s6-cron` or something)
- moby: show battery state on ssh login
- moby: improve gPodder launch time
- moby: theme GTK apps (i.e. non-adwaita styles)
- especially, make the menubar collapsible
- try Gradience tool specifically for theming adwaita? <https://linuxphoneapps.org/apps/com.github.gradienceteam.gradience/>
- moby: remove my use of modem-power, since it won't be mainlined (maybe eg25-manager does what i need?)
#### non-moby
- RSS: integrate a paywall bypass
- e.g. self-hosted [ladder](https://github.com/everywall/ladder) (like 12ft.io)
- neovim: set up language server (lsp; rnix-lsp; nvim-lspconfig)
- RSS: have podcasts get downloaded straight into ~/Videos/...
- and strip the ads out using Whisper transcription + asking a LLM where the ad breaks are
- neovim: integrate LLMs
- Helix: make copy-to-system clipboard be the default
- firefox/librewolf: persist history

View File

@@ -30,16 +30,4 @@
# sane.programs.guiApps.enableFor.user.colin = false;
# sane.programs.pcGuiApps.enableFor.user.colin = false; #< errors!
sane.programs.blueberry.enableFor.user.colin = false; # bluetooth manager: doesn't cross compile!
# sane.programs.brave.enableFor.user.colin = false; # 2024/06/03: fails eval if enabled on cross
# sane.programs.firefox.enableFor.user.colin = false; # 2024/06/03: this triggers an eval error in yarn stuff -- i'm doing IFD somewhere!!?
sane.programs.mepo.enableFor.user.colin = false; # 2024/06/04: doesn't cross compile (nodejs)
sane.programs.mercurial.enableFor.user.colin = false; # 2024/06/03: does not cross compile
sane.programs.nixpkgs-review.enableFor.user.colin = false; # 2024/06/03: OOMs when cross compiling
sane.programs.ntfy-sh.enableFor.user.colin = false; # 2024/06/04: doesn't cross compile (nodejs)
sane.programs.pwvucontrol.enableFor.user.colin = false; # 2024/06/03: doesn't cross compile (libspa-sys)
sane.programs."sane-scripts.bt-search".enableFor.user.colin = false; # 2024/06/03: does not cross compile
sane.programs.sequoia.enableFor.user.colin = false; # 2024/06/03: does not cross compile
sane.programs.zathura.enableFor.user.colin = false; # 2024/06/03: does not cross compile
}

View File

@@ -1,10 +1,10 @@
{ config, lib, pkgs, ... }:
{ config, pkgs, ... }:
{
imports = [
./fs.nix
];
sane.services.trust-dns.asSystemResolver = false; # TEMPORARY: TODO: re-enable trust-dns
sane.services.hickory-dns.asSystemResolver = false; # TEMPORARY: TODO: re-enable hickory-dns
# sane.programs.devPkgs.enableFor.user.colin = true;
# sane.guest.enable = true;
@@ -28,7 +28,6 @@
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.duplicity.enable = true;
sane.services.rsync-net.enable = true;
sane.nixcache.remote-builders.desko = false;
@@ -40,28 +39,30 @@
sane.programs.iphoneUtils.enableFor.user.colin = true;
sane.programs.steam.enableFor.user.colin = true;
sane.programs.geary.config.autostart = true;
sane.programs.signal-desktop.config.autostart = true;
sane.programs.nwg-panel.config = {
battery = false;
brightness = false;
};
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;
# 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.
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" ];
};
# 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

@@ -21,21 +21,22 @@
sane.programs.stepmania.enableFor.user.colin = true;
sane.programs.sway.enableFor.user.colin = true;
sane.programs.geary.config.autostart = true;
sane.programs.signal-desktop.config.autostart = true;
sops.secrets.colin-passwd.neededForUsers = true;
sane.services.rsync-net.enable = true;
# 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.
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";
ALLOW_USERS = [ "colin" ];
};
# 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 @@
# - Mobian wiki: <https://wiki.mobian-project.org/doku.php?id=start>
# - recommended apps, chatrooms
{ config, pkgs, lib, ... }:
{ config, ... }:
{
imports = [
./fs.nix
@@ -30,20 +30,17 @@
sane.programs.sway.enableFor.user.colin = true;
sane.programs.sway.config.mod = "Mod1"; #< alt key instead of Super
sane.programs.blueberry.enableFor.user.colin = false; # bluetooth manager: doesn't cross compile!
sane.programs.fcitx5.enableFor.user.colin = false; # does not cross compile
sane.programs.mercurial.enableFor.user.colin = false; # does not cross compile
sane.programs.nvme-cli.enableFor.system = false; # does not cross compile (libhugetlbfs)
# enabled for easier debugging
sane.programs.eg25-control.enableFor.user.colin = true;
# sane.programs.rtl8723cs-wowlan.enableFor.user.colin = true;
sane.programs.eg25-manager.enableFor.user.colin = true;
# sane.programs.ntfy-sh.config.autostart = true;
sane.programs.dino.config.autostart = true;
sane.programs.signal-desktop.config.autostart = true;
# sane.programs.geary.config.autostart = true;
# sane.programs.calls.config.autostart = true;
sane.programs.signal-desktop.config.autostart = false;
sane.programs.geary.config.autostart = false;
sane.programs.pipewire.config = {
# tune so Dino doesn't drop audio
@@ -61,6 +58,8 @@
max-quantum = 8192;
};
sane.programs.mpv.config.defaultProfile = "fast";
# /boot space is at a premium. default was 20.
# even 10 can be too much
boot.loader.generic-extlinux-compatible.configurationLimit = 8;

View File

@@ -21,7 +21,7 @@
"sane-scripts.stop-all-servo"
];
sane.services.dyn-dns.enable = true;
sane.services.trust-dns.asSystemResolver = false; # TODO: enable once it's all working well
sane.services.hickory-dns.asSystemResolver = false; # TODO: enable once it's all working well
sane.services.wg-home.enable = true;
sane.services.wg-home.visibleToWan = true;
sane.services.wg-home.forwardToWan = true;
@@ -31,7 +31,6 @@
# sane.ovpn.addrV6 = "fd00:0000:1337:cafe:1111:1111:8df3:14b0";
sane.nixcache.remote-builders.desko = false;
sane.nixcache.remote-builders.servo = false;
# sane.services.duplicity.enable = true; # TODO: re-enable after HW upgrade
sane.services.rsync-net.enable = true;
# automatically log in at the virtual consoles.

View File

@@ -7,6 +7,7 @@
./ejabberd.nix
./freshrss.nix
./export
./hickory-dns.nix
./gitea.nix
./goaccess.nix
./ipfs.nix
@@ -20,13 +21,13 @@
./nginx.nix
./nixos-prebuild.nix
./ntfy
./ollama.nix
./pict-rs.nix
./pleroma.nix
./postgres.nix
./prosody
./slskd.nix
./transmission
./trust-dns.nix
./wikipedia.nix
];
}

View File

@@ -1,4 +1,11 @@
# postfix config options: <https://www.postfix.org/postconf.5.html>
# config files:
# - /etc/postfix/main.cf
# - /etc/postfix/master.cf
#
# logs:
# - postfix logs directly to *syslog*,
# so check e.g. ~/.local/share/rsyslog
{ config, lib, pkgs, ... }:
@@ -20,12 +27,12 @@ in
{
sane.persist.sys.byStore.private = [
# TODO: mode? could be more granular
{ user = "opendkim"; group = "opendkim"; path = "/var/lib/opendkim"; method = "bind"; }
{ user = "root"; group = "root"; path = "/var/lib/postfix"; method = "bind"; } #< probably not *all* of postfix needs to actually be persisted (e.g. not the conf dir)
{ user = "opendkim"; group = "opendkim"; path = "/var/lib/opendkim"; method = "bind"; } #< TODO: migrate to secrets
{ user = "root"; group = "root"; path = "/var/spool/mail"; method = "bind"; }
# *probably* don't need these dirs:
# "/var/lib/dhparams" # https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/security/dhparams.nix
# "/var/lib/dovecot"
# "/var/lib/postfix"
];
# XXX(2023/10/20): opening these ports in the firewall has the OPPOSITE effect as intended.
@@ -95,6 +102,7 @@ in
services.postfix.sslCert = "/var/lib/acme/mx.uninsane.org/fullchain.pem";
services.postfix.sslKey = "/var/lib/acme/mx.uninsane.org/key.pem";
# see: `man 5 virtual`
services.postfix.virtual = ''
notify.matrix@uninsane.org matrix-synapse
@uninsane.org colin
@@ -135,6 +143,20 @@ in
# smtpd_sender_restrictions = reject_unknown_sender_domain
};
# debugging options:
# services.postfix.masterConfig = {
# "proxymap".args = [ "-v" ];
# "proxywrite".args = [ "-v" ];
# "relay".args = [ "-v" ];
# "smtp".args = [ "-v" ];
# "smtp_inet".args = [ "-v" ];
# "submission".args = [ "-v" ];
# "submissions".args = [ "-v" ];
# "submissions".chroot = false;
# "submissions".private = false;
# "submissions".privileged = true;
# };
services.postfix.enableSubmission = true;
services.postfix.submissionOptions = submissionOptions;
services.postfix.enableSubmissions = true;
@@ -142,6 +164,10 @@ in
systemd.services.postfix.after = [ "wireguard-wg-ovpns.service" ];
systemd.services.postfix.partOf = [ "wireguard-wg-ovpns.service" ];
systemd.services.postfix.unitConfig.RequiresMountsFor = [
"/var/spool/mail" # spooky errors when postfix is run w/o this: `warning: connect #1 to subsystem private/proxymap: Connection refused`
"/var/lib/opendkim"
];
systemd.services.postfix.serviceConfig = {
# run this behind the OVPN static VPN
NetworkNamespacePath = "/run/netns/ovpns";
@@ -175,23 +201,30 @@ in
#### OUTGOING MESSAGE REWRITING:
services.postfix.enableHeaderChecks = true;
services.postfix.headerChecks = [
# intercept gitea registration confirmations and manually screen them
{
# headerChecks are somehow ignorant of alias rules: have to redirect to a real user
action = "REDIRECT colin@uninsane.org";
pattern = "/^Subject: Please activate your account/";
}
# intercept Matrix registration confirmations
{
action = "REDIRECT colin@uninsane.org";
pattern = "/^Subject:.*Validate your email/";
}
# XXX postfix only supports performing ONE action per header.
# - `man 5 header_checks`
# - <https://www.postfix.org/header_checks.5.html>
# - populates `/var/lib/postfix/conf/header_checks`
# XXX(2024-08-06): registration gating via email matches is AWFUL:
# 1. bypassed if the service offers localization.
# 2. if i try to forward the registration request, it may match the filter again and get sent back to my inbox.
# 3. header checks are possibly under-used in the ecosystem, and may break postfix config.
# services.postfix.enableHeaderChecks = true;
# services.postfix.headerChecks = [
# # intercept gitea registration confirmations and manually screen them
# {
# action = "REPLACE Subject: git application: Please activate your account";
# pattern = "/^Subject:.*activate your account/";
# # headerChecks are somehow ignorant of alias rules: have to redirect to a real user
# action = "REDIRECT colin@uninsane.org";
# pattern = "/^Subject: Please activate your account/";
# }
];
# # intercept Matrix registration confirmations
# {
# action = "REDIRECT colin@uninsane.org";
# pattern = "/^Subject:.*Validate your email/";
# }
# # XXX postfix only supports performing ONE action per header.
# # {
# # action = "REPLACE Subject: git application: Please activate your account";
# # pattern = "/^Subject:.*activate your account/";
# # }
# ];
}

View File

@@ -37,15 +37,15 @@
wantedBy = [ "nfs.service" "sftpgo.service" ];
file.text = ''
- media/ read-only: Videos, Music, Books, etc
- playground/ read-write: use it to share files with other users of this server, inaccessible from the www
- pub/ read-only: content made to be shared with the www
- playground/ read-write*: use it to share files with other users of this server, inaccessible from the www
*if you can't write to it, make sure you're connected to the WiFi and not mobile.
'';
};
sane.fs."/var/export/playground/README.md" = {
wantedBy = [ "nfs.service" "sftpgo.service" ];
file.text = ''
this directory is intentionally read+write by anyone with access (i.e. on the LAN).
this directory is intentionally read+write by anyone with access.
- share files
- write poetry
- be a friendly troll

View File

@@ -71,6 +71,9 @@ TRUSTED_CREDS = [
# $<method>$<salt>$<hash>
"$6$Zq3c2u4ghUH4S6EP$pOuRt13sEKfX31OqPbbd1LuhS21C9MICMc94iRdTAgdAcJ9h95gQH/6Jf6Ie4Obb0oxQtojRJ1Pd/9QHOlFMW." #< m. rocket boy
]
TRUSTED_VIEWING_OR_PLAYGROUND_CREDS = [
"$6$iikDajz5b.YH1.on$tfSzzBEtX8IeDiJJXCasOTxRTd7cFDKXU6dhlWYVhK6xDeJhV2fh6bmm1WIHItjIth9Eh9zNgUB8xibMIWCm/."
];
def mkAuthOk(username: str, permissions: dict[str, list[str]]) -> dict:
return dict(
@@ -112,8 +115,8 @@ def isLan(ip: str) -> bool:
def isWireguard(ip: str) -> bool:
return ip.startswith("10.0.10.")
def isTrustedCred(password: str) -> bool:
for cred in TRUSTED_CREDS:
def isTrustedCred(password: str, credlist: list[str] = TRUSTED_CREDS) -> bool:
for cred in credlist:
if passlib.hosts.linux_context.verify(password, cred):
return True
@@ -131,6 +134,21 @@ def getAuthResponse(ip: str, username: str, password: str) -> dict:
"/playground": PERM_RW,
"/.public_for_test": PERM_RO,
})
if isTrustedCred(password, TRUSTED_VIEWING_OR_PLAYGROUND_CREDS) and username != "colin":
return mkAuthOk(username, permissions = {
# error prone, but... not the worst if i miss something
"/": PERM_LIST,
"/media/archive": PERM_DENY,
"/media/Books": PERM_RO,
"/media/collections": PERM_DENY,
"/media/games": PERM_RO,
"/media/Music": PERM_RO,
"/media/Pictures": PERM_RO,
"/media/torrents": PERM_DENY,
"/media/Videos": PERM_RO,
"/playground": PERM_RW,
"/.public_for_test": PERM_RO,
})
if isWireguard(ip):
# allow any user from wireguard
return mkAuthOk(username, permissions = {

View File

@@ -1,10 +1,14 @@
# config options: <https://docs.gitea.io/en-us/administration/config-cheat-sheet/>
# TODO: service shouldn't run as `git` user, but as `gitea`
{ config, pkgs, lib, ... }:
{
sane.persist.sys.byStore.private = [
{ user = "git"; group = "gitea"; mode = "0750"; path = "/var/lib/gitea"; method = "bind"; }
];
sane.programs.gitea.enableFor.user.colin = true; # for admin, and monitoring
services.gitea.enable = true;
services.gitea.user = "git"; # default is 'gitea'
services.gitea.database.type = "postgres";
@@ -40,14 +44,21 @@
# timeout for email approval. 5760 = 4 days. 10080 = 7 days
ACTIVE_CODE_LIVE_MINUTES = 10080;
# REGISTER_EMAIL_CONFIRM = false;
# REGISTER_MANUAL_CONFIRM = true;
REGISTER_EMAIL_CONFIRM = true;
# REGISTER_EMAIL_CONFIRM = true; #< override REGISTER_MANUAL_CONFIRM
REGISTER_MANUAL_CONFIRM = true;
# not sure what this notifies *on*...
ENABLE_NOTIFY_MAIL = true;
# defaults to image-based captcha.
# also supports recaptcha (with custom URLs) or hCaptcha.
ENABLE_CAPTCHA = true;
NOREPLY_ADDRESS = "noreply.anonymous.git@uninsane.org";
EMAIL_DOMAIN_BLOCKLIST = lib.concatStringsSep ", " [
"*.claychoen.top"
"*.gemmasmith.co.uk"
"*.jenniferlawrence.uk"
"*.sarahconnor.co.uk"
"*.marymarshall.co.uk"
];
};
session = {
COOKIE_SECURE = true;

View File

@@ -55,7 +55,7 @@ in
];
};
services.trust-dns.settings.zones = [ "uninsane.org" ];
services.hickory-dns.settings.zones = [ "uninsane.org" ];
networking.nat.enable = true; #< TODO: try removing this?
@@ -83,8 +83,8 @@ in
# };
sane.services.trust-dns.enable = true;
sane.services.trust-dns.instances = let
sane.services.hickory-dns.enable = true;
sane.services.hickory-dns.instances = let
mkSubstitutions = flavor: {
"%ADOOF%" = config.sane.netns.doof.netnsPubIpv4;
"%ANATIVE%" = nativeAddrs."servo.${flavor}";
@@ -141,5 +141,5 @@ in
# };
};
sane.services.dyn-dns.restartOnChange = lib.map (c: "${c.service}.service") (builtins.attrValues config.sane.services.trust-dns.instances);
sane.services.dyn-dns.restartOnChange = lib.map (c: "${c.service}.service") (builtins.attrValues config.sane.services.hickory-dns.instances);
}

View File

@@ -11,7 +11,7 @@
# - `curl --header "Authorization: Bearer <your_access_token>" --data '{ "app_display_name": "<topic>", "app_id": "ntfy.uninsane.org", "data": { "url": "https://ntfy.uninsane.org/_matrix/push/v1/notify", "format": "event_id_only" }, "device_display_name": "<topic>", "kind": "http", "lang": "en-US", "profile_tag": "", "pushkey": "<topic>" }' localhost:8008/_matrix/client/v3/pushers/set`
# - delete a notification destination by setting `kind` to `null` (otherwise, request is identical to above)
#
{ config, lib, pkgs, ... }:
{ config, pkgs, ... }:
{
imports = [
@@ -30,7 +30,7 @@
# services.matrix-synapse.enable_registration_captcha = true;
# services.matrix-synapse.enable_registration_without_verification = true;
enable_registration = true;
# enable_registration = true;
# services.matrix-synapse.registration_shared_secret = "<shared key goes here>";
# default for listeners is port = 8448, tls = true, x_forwarded = false.

View File

@@ -1,6 +1,6 @@
# config docs:
# - <https://github.com/matrix-org/matrix-appservice-irc/blob/develop/config.sample.yaml>
{ config, lib, ... }:
{ lib, ... }:
let
ircServer = { name, additionalAddresses ? [], ssl ? true, sasl ? true, port ? if ssl then 6697 else 6667 }: let
@@ -128,6 +128,7 @@ in
ircService = {
logging.level = "warn"; # "error", "warn", "info", "debug"
mediaProxy.publicUrl = "https://irc.matrix.uninsane.org/media";
servers = {
"irc.esper.net" = ircServer {
name = "esper";
@@ -168,4 +169,16 @@ in
# the service actively uses at least one of these, and both of them are fairly innocuous
SystemCallFilter = lib.mkForce "~@clock @cpu-emulation @debug @keyring @module @mount @obsolete @raw-io @setuid @swap";
};
services.nginx.virtualHosts."irc.matrix.uninsane.org" = {
forceSSL = true;
enableACME = true;
locations."/media" = {
proxyPass = "http://127.0.0.1:11111";
};
};
sane.dns.zones."uninsane.org".inet = {
CNAME."irc.matrix" = "native";
};
}

View File

@@ -0,0 +1,23 @@
# ollama: <https://github.com/ollama/ollama>
# use: `ollama run llama3.1`
# or: `ollama run llama3.1:70b`
# or use a remote session: <https://github.com/ggozad/oterm>
{ lib, ... }:
lib.mkIf false #< WIP
{
sane.persist.sys.byStore.plaintext = [
{ user = "ollama"; group = "ollama"; path = "/var/lib/ollama"; method = "bind"; }
];
services.ollama.enable = true;
services.ollama.user = "ollama";
services.ollama.group = "ollama";
users.groups.ollama = {};
users.users.ollama = {
group = "ollama";
isSystemUser = true;
};
systemd.services.ollama.serviceConfig.DynamicUser = lib.mkForce false;
}

View File

@@ -40,10 +40,11 @@ REL_DIR="${TR_TORRENT_DIR#$DOWNLOAD_DIR/}"
MEDIA_DIR="/var/media/$REL_DIR"
destructive mkdir -p "$(dirname "$MEDIA_DIR")"
destructive rsync -arv "$TR_TORRENT_DIR/" "$MEDIA_DIR/"
destructive rsync -rlv "$TR_TORRENT_DIR/" "$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
subdirs=("$MEDIA_DIR"/*)

View File

@@ -25,10 +25,14 @@
# moby has to run recent kernels (defined elsewhere).
# meanwhile, kernel variation plays some minor role in things like sandboxing (landlock) and capabilities.
# - as of 2024/08/xx, my boot fails on 6.6, but works on 6.9 and (probably; recently) 6.8.
# 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.
# servo needs zfs though, which doesn't support every kernel.
boot.kernelPackages = lib.mkDefault pkgs.zfs.latestCompatibleLinuxPackages;
#
# further, `zfs.latestCompatibleLinuxPackage` ocassionally _downgrades_. e.g. when 6.8 EOL'd, it went back to 6.6.
# therefore, we have to use `zfs_unstable` (!!)
boot.kernelPackages = lib.mkDefault pkgs.zfs_unstable.latestCompatibleLinuxPackages;
# hack in the `boot.shell_on_fail` arg since that doesn't always seem to work.
boot.initrd.preFailCommands = "allowShell=1";

View File

@@ -1,4 +1,4 @@
{ config, lib, pkgs, ... }:
{ lib, pkgs, ... }:
{
imports = [
./boot.nix

View File

@@ -57,8 +57,10 @@ 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 "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 "cast.postmarketos.org" // tech)
@@ -70,7 +72,9 @@ let
(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/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/recodedecode" // tech) # The Verge - Decoder
(fromDb "feeds.simplecast.com/82FI35Px" // pol) # Ezra Klein Show
(fromDb "feeds.simplecast.com/wgl4xEgL" // rat) # Econ Talk
@@ -83,6 +87,7 @@ let
(fromDb "hackerpublicradio.org" // tech)
(fromDb "lexfridman.com/podcast" // rat)
(fromDb "linktr.ee/betteroffline" // pol)
(fromDb "linuxdevtime.com" // tech)
(fromDb "mapspodcast.libsyn.com" // uncat) # Multidisciplinary Association for Psychedelic Studies
(fromDb "microarch.club" // tech)
(fromDb "mintcast.org" // tech)
@@ -90,6 +95,7 @@ let
(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
(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 "politicalorphanage.libsyn.com" // pol)
(fromDb "reverseengineering.libsyn.com/rss" // tech) # UnNamed Reverse Engineering Podcast
@@ -107,7 +113,6 @@ let
(fromDb "theamphour.com" // tech)
(fromDb "techtalesshow.com" // tech) # Corbin Davenport
(fromDb "techwontsave.us" // pol) # rec by Cory Doctorow
(fromDb "wakingup.libsyn.com" // pol) # Sam Harris
(fromDb "werenotwrong.fireside.fm" // pol)
(mkPod "https://sfconservancy.org/casts/the-corresponding-source/feeds/ogg/" // tech)
@@ -121,6 +126,7 @@ let
# (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 "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>
# (mkPod "https://audioboom.com/channels/5097784.rss" // tech) # Lateral with Tom Scott
# (mkPod "https://feeds.megaphone.fm/RUNMED9919162779" // pol // infrequent) # The Witch Trials of J.K. Rowling: <https://www.thefp.com/witchtrials>
@@ -131,6 +137,7 @@ let
(fromDb "acoup.blog/feed") # history, states. author: <https://historians.social/@bretdevereaux/following>
(fromDb "amosbbatto.wordpress.com" // tech)
(fromDb "anish.lakhwara.com" // tech)
(fromDb "antipope.org") # Charles Stross
(fromDb "apenwarr.ca/log/rss.php" // tech) # CEO of tailscale
(fromDb "applieddivinitystudies.com" // rat)
(fromDb "artemis.sh" // tech)
@@ -145,6 +152,7 @@ let
(fromDb "blog.jmp.chat" // tech)
(fromDb "blog.rust-lang.org" // tech)
(fromDb "blog.thalheim.io" // tech) # Mic92
(fromDb "blog.brixit.nl" // tech) # Martijn Braam
(fromDb "bunniestudios.com" // tech) # Bunnie Juang
(fromDb "capitolhillseattle.com" // pol)
(fromDb "edwardsnowden.substack.com" // pol // text)
@@ -157,6 +165,7 @@ let
(fromDb "interconnected.org/home/feed" // rat) # Matt Webb -- engineering-ish, but dreamy
(fromDb "jeffgeerling.com" // tech)
(fromDb "jefftk.com" // tech)
(fromDb "justine.lol" // tech)
(fromDb "jwz.org/blog" // tech // pol) # DNA lounge guy, loooong-time blogger
(fromDb "kill-the-newsletter.com/feeds/joh91bv7am2pnznv.xml" // pol) # Matt Levine - Money Stuff
(fromDb "kosmosghost.github.io/index.xml" // tech)
@@ -235,6 +244,7 @@ let
(fromDb "youtube.com/@Exurb1a")
(fromDb "youtube.com/@hbomberguy")
(fromDb "youtube.com/@JackStauber")
(fromDb "youtube.com/@mii_beta" // tech) # Baby Wogue / gnome reviewer
(fromDb "youtube.com/@NativLang")
(fromDb "youtube.com/@PolyMatter")
(fromDb "youtube.com/@TechnologyConnections" // tech)

View File

@@ -2,7 +2,7 @@
# - x-systemd options: <https://www.freedesktop.org/software/systemd/man/systemd.mount.html>
# - fuse options: `man mount.fuse`
{ config, lib, pkgs, sane-lib, utils, ... }:
{ config, lib, utils, ... }:
let
fsOpts = rec {
@@ -45,7 +45,7 @@ let
"gid=100"
];
ssh = common ++ fuse ++ [
ssh = common ++ fuseColin ++ [
"identityfile=/home/colin/.ssh/id_ed25519"
# i *think* idmap=user means that `colin` on `localhost` and `colin` on the remote are actually treated as the same user, even if their uid/gid differs?
# i.e., local colin's id is translated to/from remote colin's id on every operation?
@@ -64,39 +64,6 @@ let
# # we don't transform_symlinks because that breaks the validity of remote /nix stores
# "sftp_server=/run/wrappers/bin/sudo\\040/run/current-system/sw/libexec/sftp-server"
# ];
# in the event of hunt NFS mounts, consider:
# - <https://unix.stackexchange.com/questions/31979/stop-broken-nfs-mounts-from-locking-a-directory>
# NFS options: <https://linux.die.net/man/5/nfs>
# actimeo=n = how long (in seconds) to cache file/dir attributes (default: 3-60s)
# bg = retry failed mounts in the background
# retry=n = for how many minutes `mount` will retry NFS mount operation
# intr = allow Ctrl+C to abort I/O (it will error with `EINTR`)
# soft = on "major timeout", report I/O error to userspace
# softreval = on "major timeout", service the request using known-stale cache results instead of erroring -- if such cache data exists
# retrans=n = how many times to retry a NFS request before giving userspace a "server not responding" error (default: 3)
# timeo=n = number of *deciseconds* to wait for a response before retrying it (default: 600)
# note: client uses a linear backup, so the second request will have double this timeout, then triple, etc.
# proto=udp = encapsulate protocol ops inside UDP packets instead of a TCP session.
# requires `nfsvers=3` and a kernel compiled with `NFS_DISABLE_UDP_SUPPORT=n`.
# UDP might be preferable to TCP because the latter is liable to hang for ~100s (kernel TCP timeout) after a link drop.
# however, even UDP has issues with `umount` hanging.
#
# N.B.: don't change these without first testing the behavior of sandboxed apps on a flaky network.
nfs = common ++ [
# "actimeo=5"
# "bg"
"retrans=1"
"retry=0"
# "intr"
"soft"
"softreval"
"timeo=30"
"nofail" # don't fail remote-fs.target when this mount fails (not an option for sshfs else would be common)
# "proto=udp" # default kernel config doesn't support NFS over UDP: <https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1964093> (see comment 11).
# "nfsvers=3" # NFSv4+ doesn't support UDP at *all*. it's ok to omit nfsvers -- server + client will negotiate v3 based on udp requirement. but omitting causes confusing mount errors when the server is *offline*, because the client defaults to v4 and thinks the udp option is a config error.
# "x-systemd.idle-timeout=10" # auto-unmount after this much inactivity
];
# manually perform a ftp mount via e.g.
# curlftpfs -o ftpfs_debug=2,user=anonymous:anonymous,connect_timeout=10 -f -s ftp://servo-hn /mnt/my-ftp
@@ -107,18 +74,64 @@ let
"connect_timeout=20"
];
};
remoteHome = host: {
ifSshAuthorized = lib.mkIf config.sane.hosts.by-name."${config.networking.hostName}".ssh.authorized;
remoteHome = name: { host ? name }: {
sane.programs.sshfs-fuse.enableFor.system = true;
fileSystems."/mnt/${host}/home" = {
device = "colin@${host}:/home/colin";
fsType = "fuse.sshfs";
options = fsOpts.sshColin ++ fsOpts.lazyMount;
system.fsPackages = [
config.sane.programs.sshfs-fuse.package
];
fileSystems."/mnt/${name}/home" = {
device = "sshfs#colin@${host}:/home/colin";
fsType = "fuse3";
options = fsOpts.sshColin ++ fsOpts.lazyMount ++ [
# drop_privileges: after `mount.fuse3` opens /dev/fuse, it will drop all capabilities before invoking sshfs
"drop_privileges"
"auto_unmount" #< ensures that when the fs exits, it releases its mountpoint. then systemd can recognize it as failed.
];
noCheck = true;
};
sane.fs."/mnt/${host}/home" = sane-lib.fs.wanted {
sane.fs."/mnt/${name}/home" = {
dir.acl.user = "colin";
dir.acl.group = "users";
dir.acl.mode = "0700";
wantedBy = [ "default.target" ];
mount.depends = [ "network-online.target" ];
mount.mountConfig.ExecSearchPath = [ "/run/current-system/sw/bin" ];
mount.mountConfig.User = "colin";
mount.mountConfig.AmbientCapabilities = "CAP_SETPCAP CAP_SYS_ADMIN";
# hardening (systemd-analyze security mnt-desko-home.mount):
# TODO: i can't use ProtectSystem=full here, because i can't create a new mount space; but...
# with drop_privileges, i *could* sandbox the actual `sshfs` program using e.g. bwrap
mount.mountConfig.CapabilityBoundingSet = "CAP_SETPCAP CAP_SYS_ADMIN";
mount.mountConfig.LockPersonality = true;
mount.mountConfig.MemoryDenyWriteExecute = true;
mount.mountConfig.NoNewPrivileges = true;
mount.mountConfig.ProtectClock = true;
mount.mountConfig.ProtectHostname = true;
mount.mountConfig.RemoveIPC = true;
mount.mountConfig.RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6";
#VVV this includes anything it reads from, e.g. /bin/sh; /nix/store/...
# see `systemd-analyze filesystems` for a full list
mount.mountConfig.RestrictFileSystems = "@common-block @basic-api fuse";
mount.mountConfig.RestrictRealtime = true;
mount.mountConfig.RestrictSUIDSGID = true;
mount.mountConfig.SystemCallArchitectures = "native";
mount.mountConfig.SystemCallFilter = [
"@system-service"
"@mount"
"~@chown"
"~@cpu-emulation"
"~@keyring"
# could remove almost all io calls, however one has to keep `open`, and `write`, to communicate with the fuse device.
# so that's pretty useless as a way to prevent write access
];
mount.mountConfig.IPAddressDeny = "any";
mount.mountConfig.IPAddressAllow = "10.0.0.0/8";
mount.mountConfig.DevicePolicy = "closed"; # only allow /dev/{null,zero,full,random,urandom}
mount.mountConfig.DeviceAllow = "/dev/fuse";
# mount.mountConfig.RestrictNamespaces = true; #< my sshfs sandboxing uses bwrap
};
};
remoteServo = subdir: let
@@ -126,36 +139,122 @@ let
systemdName = utils.escapeSystemdPath localPath;
in {
sane.programs.curlftpfs.enableFor.system = true;
sane.fs."${localPath}" = sane-lib.fs.wanted {
system.fsPackages = [
config.sane.programs.curlftpfs.package
];
fileSystems."${localPath}" = {
device = "curlftpfs#ftp://servo-hn:/${subdir}";
noCheck = true;
fsType = "fuse3";
options = fsOpts.ftp ++ fsOpts.noauto ++ [
# drop_privileges: after `mount.fuse3` opens /dev/fuse, it will drop all capabilities before invoking sshfs
"drop_privileges"
"auto_unmount" #< ensures that when the fs exits, it releases its mountpoint. then systemd can recognize it as failed.
];
};
sane.fs."${localPath}" = {
dir.acl.user = "colin";
dir.acl.group = "users";
dir.acl.mode = "0750";
};
fileSystems."${localPath}" = {
device = "ftp://servo-hn:/${subdir}";
noCheck = true;
fsType = "fuse.curlftpfs";
options = fsOpts.ftp ++ fsOpts.noauto;
# fsType = "nfs";
# options = fsOpts.nfs ++ fsOpts.lazyMount;
};
systemd.mounts = let
fsEntry = config.fileSystems."${localPath}";
in [{
#VVV repeat what systemd would ordinarily scrape from /etc/fstab
where = localPath;
what = fsEntry.device;
type = fsEntry.fsType;
options = lib.concatStringsSep "," fsEntry.options;
after = [ "network-online.target" ];
requires = [ "network-online.target" ];
wantedBy = [ "default.target" ]; #< TODO: move this into nixos fileSystems
wantedBy = [ "default.target" ];
mount.depends = [ "network-online.target" "${systemdName}-reachable.service" ];
#VVV patch so that when the mount fails, we start a timer to remount it.
# and for a disconnection after a good mount (onSuccess), restart the timer to be more aggressive
onFailure = [ "${systemdName}.timer" ];
onSuccess = [ "${systemdName}-restart-timer.target" ];
}];
mount.unitConfig.OnFailure = [ "${systemdName}.timer" ];
mount.unitConfig.OnSuccess = [ "${systemdName}-restart-timer.target" ];
mount.mountConfig.TimeoutSec = "10s";
mount.mountConfig.ExecSearchPath = [ "/run/current-system/sw/bin" ];
mount.mountConfig.User = "colin";
mount.mountConfig.AmbientCapabilities = "CAP_SETPCAP CAP_SYS_ADMIN";
# hardening (systemd-analyze security mnt-servo-playground.mount)
mount.mountConfig.CapabilityBoundingSet = "CAP_SETPCAP CAP_SYS_ADMIN";
mount.mountConfig.LockPersonality = true;
mount.mountConfig.MemoryDenyWriteExecute = true;
mount.mountConfig.NoNewPrivileges = true;
mount.mountConfig.ProtectClock = true;
mount.mountConfig.ProtectHostname = true;
mount.mountConfig.RemoveIPC = true;
mount.mountConfig.RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6";
#VVV this includes anything it reads from, e.g. /bin/sh; /nix/store/...
# see `systemd-analyze filesystems` for a full list
mount.mountConfig.RestrictFileSystems = "@common-block @basic-api fuse";
mount.mountConfig.RestrictRealtime = true;
mount.mountConfig.RestrictSUIDSGID = true;
mount.mountConfig.SystemCallArchitectures = "native";
mount.mountConfig.SystemCallFilter = [
"@system-service"
"@mount"
"~@chown"
"~@cpu-emulation"
"~@keyring"
# could remove almost all io calls, however one has to keep `open`, and `write`, to communicate with the fuse device.
# so that's pretty useless as a way to prevent write access
];
mount.mountConfig.IPAddressDeny = "any";
mount.mountConfig.IPAddressAllow = "10.0.10.5";
mount.mountConfig.DevicePolicy = "closed"; # only allow /dev/{null,zero,full,random,urandom}
mount.mountConfig.DeviceAllow = "/dev/fuse";
# mount.mountConfig.RestrictNamespaces = true;
};
systemd.services."${systemdName}-reachable" = {
serviceConfig.ExecSearchPath = [ "/run/current-system/sw/bin" ];
serviceConfig.ExecStart = lib.escapeShellArgs [
"curlftpfs"
"ftp://servo-hn:/${subdir}"
"/dev/null"
"-o"
(lib.concatStringsSep "," ([
"exit_after_connect"
] ++ config.fileSystems."${localPath}".options))
];
serviceConfig.RemainAfterExit = true;
serviceConfig.Type = "oneshot";
unitConfig.BindsTo = [ "${systemdName}.mount" ];
# hardening (systemd-analyze security mnt-servo-playground-reachable.service)
serviceConfig.AmbientCapabilities = "";
serviceConfig.CapabilityBoundingSet = "";
serviceConfig.DynamicUser = true;
serviceConfig.LockPersonality = true;
serviceConfig.MemoryDenyWriteExecute = true;
serviceConfig.NoNewPrivileges = true;
serviceConfig.PrivateDevices = true;
serviceConfig.PrivateMounts = true;
serviceConfig.PrivateTmp = true;
serviceConfig.PrivateUsers = true;
serviceConfig.ProcSubset = "all";
serviceConfig.ProtectClock = true;
serviceConfig.ProtectControlGroups = true;
serviceConfig.ProtectHome = true;
serviceConfig.ProtectKernelModules = true;
serviceConfig.ProtectProc = "invisible";
serviceConfig.ProtectSystem = "strict";
serviceConfig.RemoveIPC = true;
serviceConfig.RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6";
# serviceConfig.RestrictFileSystems = "@common-block @basic-api"; #< NOPE
serviceConfig.RestrictRealtime = true;
serviceConfig.RestrictSUIDSGID = true;
serviceConfig.SystemCallArchitectures = "native";
serviceConfig.SystemCallFilter = [
"@system-service"
"@mount"
"~@chown"
"~@cpu-emulation"
"~@keyring"
# "~@privileged" #< NOPE
"~@resources"
# could remove some more probably
];
serviceConfig.IPAddressDeny = "any";
serviceConfig.IPAddressAllow = "10.0.10.5";
serviceConfig.DevicePolicy = "closed";
# exceptions
serviceConfig.ProtectHostname = false;
serviceConfig.ProtectKernelLogs = false;
serviceConfig.ProtectKernelTunables = false;
};
systemd.targets."${systemdName}-restart-timer" = {
# hack unit which, when started, stops the timer (if running), and then starts it again.
after = [ "${systemdName}.timer" ];
@@ -212,19 +311,14 @@ lib.mkMerge [
# but it decreases working memory under the heaviest of loads by however much space the compressed memory occupies (e.g. 50% if 2:1; 25% if 4:1)
zramSwap.memoryPercent = 100;
# environment.pathsToLink = [
# # needed to achieve superuser access for user-mounted filesystems (see sshRoot above)
# # we can only link whole directories here, even though we're only interested in pkgs.openssh
# "/libexec"
# ];
programs.fuse.userAllowOther = true; #< necessary for `allow_other` or `allow_root` options.
}
(remoteHome "crappy")
(remoteHome "desko")
(remoteHome "lappy")
(remoteHome "moby")
(ifSshAuthorized (remoteHome "crappy" {}))
(ifSshAuthorized (remoteHome "desko" {}))
(ifSshAuthorized (remoteHome "lappy" {}))
(ifSshAuthorized (remoteHome "moby" { host = "moby-hn"; }))
(ifSshAuthorized (remoteHome "servo" {}))
# this granularity of servo media mounts is necessary to support sandboxing:
# for flaky mounts, we can only bind the mountpoint itself into the sandbox,
# so it's either this or unconditionally bind all of media/.

View File

@@ -9,12 +9,10 @@
"Books/local"
"Music"
# these are persisted simply to save on RAM.
# ~/.cache/nix can become several GB.
# mesa_shader_cache is < 10 MB.
# this is persisted simply to save on RAM. mesa_shader_cache is < 10 MB per boot.
# TODO: integrate with sane.programs.sandbox?
".cache/mesa_shader_cache"
".cache/nix"
".cache/mesa_shader_cache_db"
];
sane.user.persist.byStore.private = [
"archive"

View File

@@ -45,8 +45,8 @@
sane.ids.pict-rs.gid = 2409;
sane.ids.sftpgo.uid = 2410;
sane.ids.sftpgo.gid = 2410;
sane.ids.trust-dns.uid = 2411;
sane.ids.trust-dns.gid = 2411;
sane.ids.hickory-dns.uid = 2411; #< previously "trust-dns"
sane.ids.hickory-dns.gid = 2411; #< previously "trust-dns"
sane.ids.export.gid = 2412;
sane.ids.nfsuser.uid = 2413;
sane.ids.media.gid = 2414;
@@ -63,6 +63,8 @@
sane.ids.nix-serve.uid = 2420;
sane.ids.nix-serve.gid = 2420;
sane.ids.plugdev.gid = 2421;
sane.ids.ollama.uid = 2422;
sane.ids.ollama.gid = 2422;
sane.ids.colin.uid = 1000;
sane.ids.guest.uid = 1100;

View File

@@ -1,4 +1,4 @@
{ lib, ... }:
{ ... }:
{
imports = [

View File

@@ -23,16 +23,16 @@
{ config, lib, pkgs, ... }:
lib.mkMerge [
{
sane.services.trust-dns.enable = lib.mkDefault config.sane.services.trust-dns.asSystemResolver;
sane.services.trust-dns.asSystemResolver = lib.mkDefault true;
sane.services.hickory-dns.enable = lib.mkDefault config.sane.services.hickory-dns.asSystemResolver;
sane.services.hickory-dns.asSystemResolver = lib.mkDefault true;
}
(lib.mkIf (!config.sane.services.trust-dns.asSystemResolver) {
(lib.mkIf (!config.sane.services.hickory-dns.asSystemResolver) {
# use systemd's stub resolver.
# /etc/resolv.conf isn't sophisticated enough to use different servers per net namespace (or link).
# instead, running the stub resolver on a known address in the root ns lets us rewrite packets
# in servo's ovnps namespace to use the provider's DNS resolvers.
# a weakness is we can only query 1 NS at a time (unless we were to clone the packets?)
# TODO: improve trust-dns recursive resolver and then remove this
# TODO: improve hickory-dns recursive resolver and then remove this
services.resolved.enable = true; #< to disable, set ` = lib.mkForce false`, as other systemd features default to enabling `resolved`.
# without DNSSEC:
# - dig matrix.org => works
@@ -40,7 +40,7 @@ lib.mkMerge [
# with default DNSSEC:
# - dig matrix.org => works
# - curl https://matrix.org => fails
# i don't know why. this might somehow be interfering with the DNS run on this device (trust-dns)
# i don't know why. this might somehow be interfering with the DNS run on this device (hickory-dns)
services.resolved.dnssec = "false";
networking.nameservers = [
# use systemd-resolved resolver
@@ -74,7 +74,7 @@ lib.mkMerge [
sane.silencedAssertions = [''.*Loading NSS modules from system.nssModules.*requires services.nscd.enable being set to true.*''];
# add NSS modules into their own subdirectory.
# then i can add just the NSS modules library path to the global LD_LIBRARY_PATH, rather than ALL of /run/current-system/sw/lib.
# TODO: i'm doing this so as to achieve mdns DNS resolution (avahi). it would be better to just have trust-dns delegate .local to avahi
# TODO: i'm doing this so as to achieve mdns DNS resolution (avahi). it would be better to just have hickory-dns delegate .local to avahi
# (except avahi doesn't act as a local resolver over DNS protocol -- only dbus).
environment.systemPackages = [(pkgs.symlinkJoin {
name = "nss-modules";

View File

@@ -37,7 +37,11 @@
# serviceConfig.RestrictAddressFamilies = "AF_NETLINK AF_UNIX AF_QIPCRTR";
# serviceConfig.NoNewPrivileges = true;
serviceConfig.CapabilityBoundingSet = [ "CAP_NET_ADMIN" ]; #< TODO: make sure this is *really* taking effect, and isn't supplemental to upstream's `CAP_SYS_ADMIN` setting
serviceConfig.CapabilityBoundingSet = [
"" #< reset upstream capabilities
"CAP_NET_ADMIN"
"CAP_SYS_ADMIN" #< TODO: remove CAP_SYS_ADMIN!
];
serviceConfig.LockPersonality = true;
# serviceConfig.PrivateUsers = true; #< untried, not likely to work since it needs capabilities
serviceConfig.PrivateTmp = true;

View File

@@ -48,7 +48,9 @@ in {
# allow the bus to owned by either root or networkmanager users
# use the group here, that way ordinary users can be elevated to control networkmanager
# (via e.g. `nmcli`)
for f in org.freedesktop.NetworkManager.conf nm-dispatcher.conf ; do
confs=(nm-dispatcher.conf)
confs+=(org.freedesktop.NetworkManager.conf)
for f in "''${confs[@]}" ; do
substitute $out/share/dbus-1/system.d/$f \
$out/share/dbus-1/system.d/networkmanager-$f \
--replace-fail 'user="root"' 'group="networkmanager"'
@@ -66,6 +68,11 @@ in {
serviceConfig.User = "networkmanager";
serviceConfig.Group = "networkmanager";
serviceConfig.AmbientCapabilities = [
"CAP_NET_ADMIN"
"CAP_NET_RAW"
"CAP_NET_BIND_SERVICE"
];
serviceConfig.CapabilityBoundingSet = [
# "CAP_DAC_OVERRIDE"
"CAP_NET_ADMIN"
"CAP_NET_RAW" #< required, else `libndp: ndp_sock_open: Failed to create ICMP6 socket.`
@@ -76,6 +83,7 @@ in {
];
serviceConfig.LockPersonality = true;
serviceConfig.NoNewPrivileges = true;
serviceConfig.MemoryDenyWriteExecute = true;
serviceConfig.PrivateDevices = true; # remount /dev with just the basics, syscall filter to block @raw-io
serviceConfig.PrivateIPC = true;
serviceConfig.PrivateTmp = true;
@@ -86,8 +94,11 @@ in {
serviceConfig.ProtectHostname = true; # probably not upstreamable: prevents changing hostname
serviceConfig.ProtectKernelLogs = true; # disable /proc/kmsg, /dev/kmsg
serviceConfig.ProtectKernelModules = true; # syscall filter to prevent module calls (probably not upstreamable: NM will want to load modules like `ppp`)
serviceConfig.ProtectKernelTunables = true; # but NM might need to write /proc/sys/net/...
# serviceConfig.ProtectKernelTunables = true; # causes errors/warnings when opening files in /proc/sys/net/...; also breaks IPv6 SLAAC / link-local address creation!
serviceConfig.ProtectProc = "invisible";
serviceConfig.ProcSubset = "all";
serviceConfig.ProtectSystem = "strict"; # makes read-only: all but /dev, /proc, /sys.
serviceConfig.RemoveIPC = true;
serviceConfig.RestrictAddressFamilies = [
"AF_INET"
"AF_INET6"
@@ -98,19 +109,25 @@ in {
# AF_BLUETOOTH ?
# AF_BRIDGE ?
];
serviceConfig.RestrictNamespaces = true;
serviceConfig.RestrictSUIDSGID = true;
serviceConfig.SystemCallArchitectures = "native"; # prevents e.g. aarch64 syscalls in the event that the kernel is multi-architecture.
serviceConfig.SystemCallFilter = [
"@system-service"
# TODO: restrict SystemCallFilter more aggressively
];
# TODO: restrict `DeviceAllow`
# from earlier `landlock` sandboxing, i know it needs these directories:
# - "/proc/net"
# - "/proc/sys/net"
# - "/run/NetworkManager"
# - "/run/systemd" # for trust-dns-nmhook
# - "/run/systemd" # for hickory-dns-nmhook
# - "/run/udev"
# - # "/run/wg-home.priv"
# - "/sys/class"
# - "/sys/devices"
# - "/var/lib/NetworkManager"
# - "/var/lib/trust-dns" #< for trust-dns-nmhook
# - "/var/lib/hickory-dns" #< for hickory-dns-nmhook
# - "/run/systemd"
};
@@ -122,7 +139,12 @@ in {
# fix NetworkManager-dispatcher to actually run as a daemon,
# and sandbox it a bit
systemd.services.NetworkManager-dispatcher = {
after = [ "trust-dns-localhost.service" ]; #< so that /var/lib/trust-dns will exist
#VVV so that /var/lib/hickory-dns will exist (the hook needs to write here).
# but this creates a cycle: hickory-dns-localhost > network.target > NetworkManager-dispatcher > hickory-dns-localhost.
# (seemingly) impossible to remove the network.target dep on NetworkManager-dispatcher.
# beffore would be to have the dispatcher not write hickory-dns files
# but rather just its own, and create a .path unit which restarts hickory-dns appropriately.
# after = [ "hickory-dns-localhost.service" ];
# serviceConfig.ExecStart = [
# "" # first blank line is to clear the upstream `ExecStart` field.
# "${cfg.package}/libexec/nm-dispatcher --persist" # --persist is needed for it to actually run as a daemon
@@ -130,7 +152,7 @@ in {
# serviceConfig.Restart = "always";
# serviceConfig.RestartSec = "1s";
# serviceConfig.DynamicUser = true; #< not possible, else we lose group perms (so can't write to `trust-dns`'s files in the nm hook)
# serviceConfig.DynamicUser = true; #< not possible, else we lose group perms (so can't write to `hickory-dns`'s files in the nm hook)
serviceConfig.User = "networkmanager"; # TODO: should arguably use `DynamicUser`
serviceConfig.Group = "networkmanager";
serviceConfig.LockPersonality = true;
@@ -146,7 +168,7 @@ in {
serviceConfig.ProtectKernelLogs = true; # disable /proc/kmsg, /dev/kmsg
serviceConfig.ProtectKernelModules = true; # syscall filter to prevent module calls
serviceConfig.ProtectKernelTunables = true;
serviceConfig.ProtectSystem = "full"; # makes read-only: /boot, /etc/, /usr. `strict` isn't possible due to trust-dns hook
serviceConfig.ProtectSystem = "full"; # makes read-only: /boot, /etc/, /usr. `strict` isn't possible due to hickory-dns hook
serviceConfig.RestrictAddressFamilies = [
"AF_UNIX" # required, probably for dbus or systemd connectivity
];
@@ -214,7 +236,7 @@ in {
# 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.trust-dns.enable && config.sane.services.trust-dns.asSystemResolver then
else if config.sane.services.hickory-dns.enable && config.sane.services.hickory-dns.asSystemResolver then
"none"
else
"internal"
@@ -256,7 +278,7 @@ in {
users.users.networkmanager = {
isSystemUser = true;
group = "networkmanager";
extraGroups = [ "trust-dns" ];
extraGroups = [ "hickory-dns" ];
};
# there is, unfortunately, no proper interface by which to plumb wpa_supplicant into the NixOS service, except by overlay.

View File

@@ -16,5 +16,9 @@
${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
${iptables}/bin/ip6tables -A INPUT -p udp -m set --match-set upnp6 dst,dst -j ACCEPT
'';
}

View File

@@ -5,7 +5,7 @@
# - generate config @ OVPN.com
# - copy the Address, PublicKey, Endpoint from OVPN's config
{ config, lib, pkgs, ... }:
{ config, lib, ... }:
let
# N.B.: OVPN issues each key (i.e. device) a different IP (addrV4), and requires you use it.
# the IP it issues can be used to connect to any of their VPNs.

View File

@@ -64,7 +64,12 @@
# it's an impurity that touches way more than i need and tends to cause hard-to-debug eval issues
# 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"
# "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"
];
# ensure new deployments have a source of this repo with which they can bootstrap.

View File

@@ -6,7 +6,6 @@ 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.
# TODO: add a `package` option to the nixos' pam module and substitute it that way.
postPatch = (if upstream.postPatch != null then upstream.postPatch else "") + ''
substituteInPlace modules/pam_unix/Makefile.am --replace-fail \
"/run/wrappers/bin/unix_chkpwd" "$out/bin/unix_chkpwd"
@@ -39,8 +38,7 @@ in
]));
};
options.security.pam.services = lib.mkOption {
apply = services: let
filtered = lib.filterAttrs (name: _: !(builtins.elem name [
apply = lib.filterAttrs (name: _: !(builtins.elem name [
# from <repo:nixos/nixpkgs:nixos/modules/security/pam.nix>
"i3lock"
"i3lock-color"
@@ -62,13 +60,7 @@ in
"usermod"
# from <repo:nixos/nixpkgs:nixos/modules/system/boot/systemd/user.nix>
"systemd-user" #< N.B.: this causes the `systemd --user` service manager to not be started!
])) services;
in lib.mapAttrs (_serviceName: service: service // {
# replace references with the old pam_unix, which calls into /run/wrappers/bin/unix_chkpwd,
# with a pam_unix that calls into unix_chkpwd via the nix store.
# TODO: use `security.pam.package` instead once <https://github.com/NixOS/nixpkgs/pull/314791> lands.
text = lib.replaceStrings [" pam_unix.so" ] [ " ${suidlessPam}/lib/security/pam_unix.so" ] service.text;
}) filtered;
]));
};
options.environment.systemPackages = lib.mkOption {
@@ -225,5 +217,7 @@ in
# systemd.packages = [ pkgs.lvm2 ];
# systemd.tmpfiles.packages = [ pkgs.lvm2.out ];
# environment.systemPackages = [ pkgs.lvm2 ];
security.pam.package = suidlessPam;
};
}

View File

@@ -3,8 +3,8 @@
{
sane.programs.aerc = {
sandbox.method = "bwrap";
sandbox.wrapperType = "inplace"; #< /share/aerc/aerc.conf refers to other /share files by absolute path
sandbox.method = "bunpen";
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;
mime.associations."x-scheme-handler/mailto" = "aerc.desktop";

View File

@@ -15,8 +15,9 @@ in
};
# upstream alsa ships with PinePhone audio configs, but they don't actually produce sound.
# - still true as of 2024-05-26
# - still true as of 2024-08-20
# - see: <https://github.com/alsa-project/alsa-ucm-conf/pull/134>
# - see: <https://gitlab.com/postmarketOS/pmaports/-/issues/2115>
#
# we can substitute working UCM conf in two ways:
# 1. nixpkgs' override for the `alsa-ucm-conf` package

View File

@@ -32,7 +32,7 @@
buildCost = 1;
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.whitelistWayland = true;
persist.byStore.plaintext = [

File diff suppressed because it is too large Load Diff

View File

@@ -16,7 +16,7 @@
buildCost = 1;
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.whitelistAudio = true;
sandbox.whitelistWayland = true;
sandbox.autodetectCliPaths = "existingFile";

View File

@@ -4,7 +4,7 @@
sane.programs.ausyscall = {
packageUnwrapped = pkgs.linkBinIntoOwnPackage pkgs.audit "ausyscall";
sandbox.method = "landlock";
sandbox.method = "bunpen";
};
}

View File

@@ -10,19 +10,33 @@
# - `LD_LIBRARY_PATH=/nix/store/ngwj3jqmxh8k4qji2z0lj7y1f8vzqrn2-nss-mdns-0.15.1/lib getent hosts desko.local`
# nss-mdns goes through avahi-daemon, so there IS caching here
#
{ config, lib, ... }:
{ config, lib, pkgs, ... }:
let
cfg = config.sane.programs.avahi;
in
{
sane.programs.avahi = {
sandbox.method = "bwrap";
packageUnwrapped = pkgs.avahi.overrideAttrs (upstream: {
# avahi wants to do its own sandboxing opaque to systemd & maybe in conflict with my bwrap.
# --no-drop-root disables that, so that i can e.g. run it as User=avahi, etc.
# 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
'';
nativeBuildInputs = upstream.nativeBuildInputs ++ [
pkgs.makeBinaryWrapper
];
});
sandbox.method = "bunpen";
sandbox.whitelistDbus = [ "system" ];
sandbox.net = "all"; #< otherwise it will show 'null' in place of each interface name.
sandbox.extraPaths = [
"/" #< else the daemon exits immediately. TODO: decrease this scope.
];
# sandbox.extraPaths = [ ]; #< may be missing some paths; only tried service discovery, not service advertisement.
};
services.avahi = lib.mkIf config.sane.programs.avahi.enabled {
services.avahi = lib.mkIf cfg.enabled {
enable = true;
package = config.sane.programs.avahi.package;
package = cfg.packageUnwrapped; #< use systemd sandboxing... not my own
publish.enable = true;
publish.userServices = true;
nssmdns4 = true;
@@ -40,4 +54,54 @@
"wlp4s0" #< desko
];
};
# fix "rpfilter drop ..." dmesg logspam.
# this might not be necessary?
networking.firewall.extraCommands = lib.mkIf cfg.enabled (with pkgs; ''
# after an outgoing mDNS query to the multicast address, open FW for incoming responses.
# ipset -! means "don't fail if set already exists"
${ipset}/bin/ipset create -! mdns hash:ip,port timeout 10
${iptables}/bin/iptables -A OUTPUT -d 239.255.255.250/32 -p udp -m udp --dport 5353 -j SET --add-set mdns src,src --exist
${iptables}/bin/iptables -A INPUT -p udp -m set --match-set mdns 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 -! mdns6 hash:ip,port timeout 10 family inet6
${iptables}/bin/ip6tables -A OUTPUT -d ff02::/16 -p udp -m udp --dport 5353 -j SET --add-set mdns6 src,src --exist
${iptables}/bin/ip6tables -A INPUT -p udp -m set --match-set mdns6 dst,dst -j ACCEPT
'');
systemd.services.avahi-daemon = lib.mkIf cfg.enabled {
# hardening: see `systemd-analyze security avahi-daemon`
serviceConfig.User = "avahi";
serviceConfig.Group = "avahi";
serviceConfig.AmbientCapabilities = "";
serviceConfig.CapabilityBoundingSet = "";
serviceConfig.LockPersonality = true;
serviceConfig.MemoryDenyWriteExecute = true;
serviceConfig.NoNewPrivileges = true;
serviceConfig.PrivateDevices = true;
serviceConfig.PrivateMounts = true;
serviceConfig.PrivateTmp = true;
serviceConfig.PrivateUsers = true;
serviceConfig.ProcSubset = "all";
serviceConfig.ProtectClock = true;
serviceConfig.ProtectControlGroups = true;
serviceConfig.ProtectHome = true;
serviceConfig.ProtectHostname = true;
serviceConfig.ProtectKernelLogs = true;
serviceConfig.ProtectKernelModules = true;
serviceConfig.ProtectKernelTunables = true;
serviceConfig.ProtectProc = "noaccess";
serviceConfig.ProtectSystem = "strict";
serviceConfig.RemoveIPC = true; #< this *might* slow down the initial connection?
serviceConfig.RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6 AF_NETLINK";
serviceConfig.RestrictRealtime = true;
serviceConfig.RestrictSUIDSGID = true;
serviceConfig.SystemCallArchitectures = "native";
serviceConfig.SystemCallFilter = [
"@system-service"
"@mount"
"~@resources"
# "~@privileged"
];
};
}

View File

@@ -24,7 +24,7 @@ let
in
{
sane.programs.blast-ugjka = {
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.whitelistAudio = true;
sandbox.net = "clearnet";
};
@@ -36,12 +36,12 @@ in
pkgs = [ "blast-ugjka" ];
srcRoot = ./.;
};
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.whitelistAudio = true;
sandbox.net = "clearnet";
#v else it fails to reap its children (or, maybe, it fails to hook its parent's death signal?)
#v might be possible to remove this, but kinda hard to see a clean way.
sandbox.isolatePids = false;
sandbox.keepPidsAndProc = true;
suggestedPrograms = [ "blast-ugjka" "sane-die-with-parent" ];
};

View File

@@ -113,7 +113,7 @@ in
fs.".config/bonsai/bonsai_tree.json".symlink.target = pkgs.writers.writeJSON "bonsai_tree.json" cfg.config.transitions;
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.extraRuntimePaths = [
"bonsai"
];

View File

@@ -3,12 +3,18 @@
sane.programs.brave = {
# convert eval error to build failure
packageUnwrapped = if (builtins.tryEval pkgs.brave).success then
pkgs.brave
pkgs.brave.overrideAttrs (upstream: {
# brave does crimes with `$0` which break under transparent wrapping
preFixup = (upstream.preFixup or "") + ''
substituteInPlace $out/opt/brave.com/brave/brave-browser \
--replace '$0' "$out/opt/brave.com/brave/brave-browser"
'';
})
else
pkgs.runCommandLocal "brave-not-supported" {} "false"
;
sandbox.method = "bwrap";
sandbox.wrapperType = "inplace"; # /opt/share/brave.com vendor-style packaging
sandbox.method = "bunpen";
sandbox.wrapperType = "inplace"; #< package contains dangling symlinks which my wrapper doesn't understand
sandbox.net = "all";
sandbox.extraHomePaths = [
"dev" # for developing anything web-related

View File

@@ -4,7 +4,7 @@ let
in
{
sane.programs.brightnessctl = {
sandbox.method = "landlock"; # also bwrap, but landlock is more responsive
sandbox.method = "bunpen";
sandbox.extraPaths = [
"/sys/class/backlight"
"/sys/class/leds"

View File

@@ -0,0 +1,19 @@
{ config, lib, pkgs, ... }:
let
cfg = config.sane.programs.bunpen;
in
{
sane.programs.bunpen = {
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 = ''
mkdir -p $out/libexec/bunpen
ln -s $out/bin/bunpen $out/libexec/bunpen/bunpen
'';
});
sandbox.enable = false;
};
environment.pathsToLink = lib.mkIf cfg.enabled [ "/libexec/bunpen" ];
}

View File

@@ -8,6 +8,23 @@
# - the bot will reply with auto-generated username/password plus a SIP server endpoint.
# just copy those into gnome-calls' GUI configurator
# - now gnome-calls can do outbound calls. inbound calls can be routed by messaging the bot: "configure calls"
#
# user guide:
# - "Use for Calls" means, "when i click a tel: URI, use this account": <https://gitlab.gnome.org/GNOME/calls/-/issues/513>
# - `calls -vvv` for verbosity
# - `SOFIA_DEBUG=9 NEA_DEBUG=9 NUA_DEBUG=9 NTA_DEBUG=9 SU_DEBUG=8 gnome-calls` to debug SIP related stuff
#
# LIMITATIONS, COMPATIBILITY (as of 2024-08-20):
# - when switching from wifi -> wwan (4g), may experience about a minute of audio loss.
# the call stays alive, but no sound in either direction.
# this appears to be ~40s of general net loss to servo-hn (NetworkManager being slow to switch the default device? wireguard being slow to refresh?),
# unknown how much time is lost in the upper layers (e.g. dns being refreshed)
# - wwan -> wifi switching is (near) flawless. prefer to keep modem powered until end of call, because of audio routing, but OK to power it off.
# - audio is not always routed to a good device when the modem is powered.
# solve by opening `pavucontrol`, go to "configuration" tab, change "Built-in audio" to anything and then back to "Make a phone call (Earpiece, Mic)".
# i expect my eg25-control-powered script messes with the audio routing.
# - `gnome-calls` takes about 2 minutes after launch until it shows the UI.
# seems to be sandbox related.
{ config, lib, pkgs, ... }:
let
cfg = config.sane.programs.calls;
@@ -24,18 +41,62 @@ in
};
};
packageUnwrapped = pkgs.rmDbusServicesInPlace (pkgs.calls.overrideAttrs (upstream: {
packageUnwrapped = pkgs.rmDbusServicesInPlace ((pkgs.calls.override {
gtk3 = pkgs.gtk4;
libpeas = pkgs.libpeas2;
wrapGAppsHook3 = pkgs.wrapGAppsHook4;
sofia_sip = pkgs.sofia_sip.overrideAttrs (upstream: {
# use linphone's sofia_sip.
# Freeswitch sofia_sip has a bug where a failed DNS query will never return to the caller.
# see `outgoing_answer_a`: in linphone's this already calls the user's callback; in Freeswitch there's a branch which leaves the caller hanging.
version = "1.13.45bc-unstable-2024-08-05";
src = pkgs.fetchFromGitLab {
domain = "gitlab.linphone.org";
owner = "BC/public/external";
repo = "sofia-sip";
rev = "b924a57e8eeb24e8b9afc5fd0fb9b51d5993fe5d";
hash = "sha256-1VbKV+eAJ80IMlubNl7774B7QvLv4hE8SXANDSD9sRU=";
};
});
}).overrideAttrs (upstream: {
# XXX(2024-08-08): v46.3 has a bug where if it has no network connection on launch, it forever stays disconnected & never retries
version = "47_beta.0-unstable-2024-08-08";
src = lib.warnIf (lib.versionOlder "47.0" upstream.version) "gnome-calls outdated; remove src override? (keep UI patches though!)" pkgs.fetchFromGitLab {
domain = "gitlab.gnome.org";
owner = "GNOME";
repo = "calls";
fetchSubmodules = true;
# rev = "main";
rev = "ff213579a52222e7c95e585843d97b5b817b2a8b";
hash = "sha256-0QYC8FJpfg/X2lIjBDooba2idUfpJNQhcpv8Z5I/B4k=";
};
patches = (upstream.patches or []) ++ [
(pkgs.fetchpatch {
# usability improvement... if the UI is visible, then i can receive calls. otherwise, i can't!
# usability improvement... ties the UI visibility to the connection state, so if the UI is gone, then i can't receive calls (and will hopefully notice that more easily!)
url = "https://git.uninsane.org/colin/gnome-calls/commit/a19166d85927e59662fae189a780eed18bf876ce.patch";
name = "exit on close (i.e. never daemonize)";
hash = "sha256-NoVQV2TlkCcsBt0uwSyK82hBKySUW4pADrJVfLFvWgU=";
})
(pkgs.fetchpatch {
# solves the issue where flakey DNS (especially at boot) could take down call connectivity indefinitely.
# see: <https://gitlab.gnome.org/GNOME/calls/-/issues/659>
url = "https://git.uninsane.org/colin/gnome-calls/commit/db9192a69cff2b20b5e8870e34a9b1e694a81c7f.patch";
name = "sip: attempt reconnection anytime network is routable, not just when routability changes";
hash = "sha256-agPM3XKXiP5Rxrl26DNA+pnhEPTBEBQBxZe3CoptgII=";
})
];
nativeBuildInputs = upstream.nativeBuildInputs ++ [
pkgs.dbus #< for dbus-run-session (should be test only, but it's not)
];
buildInputs = upstream.buildInputs ++ [
pkgs.libadwaita
];
}));
sandbox.method = "bwrap";
sandbox.method = "bunpen";
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
@@ -55,6 +116,10 @@ in
"gnome-keyring" # to remember the password
];
mime.associations."x-scheme-handler/tel" = "org.gnome.Calls.desktop";
mime.associations."x-scheme-handler/sip" = "org.gnome.Calls.desktop";
mime.associations."x-scheme-handler/sips" = "org.gnome.Calls.desktop";
services.gnome-calls = {
description = "gnome-calls daemon to monitor incoming SIP calls";
partOf = lib.mkIf cfg.config.autostart [ "graphical-session" ];

View File

@@ -0,0 +1,7 @@
{ pkgs, ... }:
{
sane.programs.capsh = {
packageUnwrapped = pkgs.linkBinIntoOwnPackage pkgs.libcap "capsh";
sandbox.enable = false; #< i use `capsh` as a sandboxer.
};
}

View File

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

View File

@@ -3,7 +3,7 @@
sane.programs.celeste64 = {
buildCost = 1;
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.whitelistAudio = true;
sandbox.whitelistDri = true;
sandbox.whitelistWayland = true;

View File

@@ -1,7 +1,7 @@
{ pkgs, ... }:
{ ... }:
{
sane.programs.conky = {
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.net = "clearnet"; #< for the scripts it calls (weather)
sandbox.extraPaths = [
"/sys/class/power_supply"

View File

@@ -15,7 +15,7 @@
buildCost = 1;
sandbox.method = "bwrap"; # landlock gives: _multiprocessing.SemLock: Permission Denied
sandbox.method = "bwrap";
sandbox.whitelistAudio = true;
sandbox.whitelistDbus = [ "user" ]; # mpris
sandbox.whitelistWayland = true;

View File

@@ -1,7 +1,7 @@
{ ... }:
{
sane.programs.curl = {
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.net = "all";
sandbox.autodetectCliPaths = "parent"; #< for `-o` option
};

View File

@@ -1,35 +1,10 @@
{ pkgs, ... }:
{
sane.programs.curlftpfs = {
packageUnwrapped = pkgs.curlftpfs.overrideAttrs (upstream: {
# my fork includes:
# - per-operation timeouts (CURLOPT_TIMEOUT; would use CURLOPT_LOW_SPEED_TIME/CURLOPT_LOW_SPEED_LIMIT but they don't apply)
# - exit on timeout (so that one knows to abort the mount, instead of waiting indefinitely)
# - support for "meta" keys found in /etc/fstab
src = pkgs.fetchFromGitea {
domain = "git.uninsane.org";
owner = "colin";
repo = "curlftpfs";
rev = "0890d32e709b5a01153f00d29ed4c00299744f5d";
hash = "sha256-M28PzHqEAkezQdtPeL16z56prwl3BfMZqry0dlpXJls=";
};
# `mount` clears PATH before calling the mount helper (see util-linux/lib/env.c),
# so the traditional /etc/fstab approach of fstype=fuse and device = curlftpfs#URI doesn't work.
# instead, install a `mount.curlftpfs` mount helper. this is what programs like `gocryptfs` do.
postInstall = (upstream.postInstall or "") + ''
ln -s curlftpfs $out/bin/mount.fuse.curlftpfs
ln -s curlftpfs $out/bin/mount.curlftpfs
'';
});
# TODO: try to sandbox this better? maybe i can have fuse (unsandboxed) invoke curlftpfs (sandboxed)?
# - landlock gives EPERM
# - bwrap just silently doesn't mount it, maybe because of setuid stuff around fuse?
# sandbox.method = "capshonly";
# sandbox.net = "all";
# sandbox.capabilities = [
# "sys_admin"
# "sys_module"
# ];
packageUnwrapped = pkgs.curlftpfs-sane;
sandbox.method = "bunpen";
sandbox.net = "all";
sandbox.autodetectCliPaths = "existing";
sandbox.keepPids = true;
};
}

View File

@@ -32,13 +32,13 @@ in
'';
});
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.extraRuntimePaths = [
"/" #< it needs to create a file in the root. TODO: move the bus handle into a sandboxable subdirectory
"dbus"
];
sandbox.isolatePids = false; #< not actually sure *why* this is necessary, but it is
sandbox.keepPids = true; #< not actually sure *why* this is necessary, but it is
env.DBUS_SESSION_BUS_ADDRESS = "unix:path=$XDG_RUNTIME_DIR/bus";
env.DBUS_SESSION_BUS_ADDRESS = "unix:path=$XDG_RUNTIME_DIR/dbus/bus";
# normally systemd would create a dbus session for us, but if you configure it not to do that
# then we can create our own. not sure if there's a dependency ordering issue here: lots
@@ -47,8 +47,12 @@ in
services.dbus = {
description = "dbus user session";
partOf = lib.mkIf cfg.config.autostart [ "default" ];
command = "dbus-daemon --session --nofork --address=$DBUS_SESSION_BUS_ADDRESS";
readiness.waitExists = [ "$XDG_RUNTIME_DIR/bus" ];
command = pkgs.writeShellScript "dbus-start" ''
# have to create the dbus directory before launching so that it's available in the sandbox
mkdir -p "$XDG_RUNTIME_DIR/dbus"
dbus-daemon --session --nofork --address="$DBUS_SESSION_BUS_ADDRESS"
'';
readiness.waitExists = [ "$XDG_RUNTIME_DIR/dbus/bus" ];
};
};
}

View File

@@ -25,8 +25,7 @@ in
};
packageUnwrapped = pkgs.rmDbusServicesInPlace pkgs.dconf;
sandbox.method = "bwrap";
sandbox.wrapperType = "inplace"; #< dbus/systemd services live in `.out` but point to `.lib` data.
sandbox.method = "bunpen";
sandbox.whitelistDbus = [ "user" ];
persist.byStore.private = [
".config/dconf"

View File

@@ -18,9 +18,12 @@
./brave.nix
./brightnessctl.nix
./bubblewrap.nix
./bunpen.nix
./callaudiod.nix
./calls.nix
./cantata.nix
./capsh.nix
./captree.nix
./catt.nix
./celeste64.nix
./chatty.nix
@@ -37,6 +40,7 @@
./dissent.nix
./dtrx.nix
./eg25-control.nix
./eg25-manager.nix
./element-desktop.nix
./engrampa.nix
./epiphany.nix
@@ -45,8 +49,10 @@
./exiftool.nix
./fcitx5.nix
./feedbackd.nix
./firefox.nix
./firefox
./firefox-xdg-open.nix
./flare-signal.nix
./foliate.nix
./fontconfig.nix
./fractal.nix
./free.nix
@@ -66,31 +72,38 @@
./gnome-maps.nix
./gnome-weather.nix
./go2tv.nix
./gocryptfs.nix
./gpodder.nix
./gpsd.nix
./gps-share.nix
./grimshot.nix
./gst-device-monitor.nix
./gst-launch.nix
./gthumb.nix
./gvfs.nix
./handbrake.nix
./haredoc.nix
./helix.nix
./htop
./iio-sensor-proxy.nix
./imagemagick.nix
./inkscape.nix
./jellyfin-media-player.nix
./kdenlive.nix
./keymapp.nix
./komikku.nix
./koreader
./krita.nix
./less.nix
./lftp.nix
./lgtrombetta-compass.nix
./libcamera.nix
./libreoffice.nix
./lemoa.nix
./loupe.nix
./mako.nix
./megapixels.nix
./megapixels-next.nix
./mepo.nix
./mimeo
./mimetype.nix
@@ -99,7 +112,7 @@
./mpv
./msmtp.nix
./nautilus.nix
./neovim.nix
./neovim
./networkmanager_dmenu
./newsflash.nix
./nheko.nix
@@ -116,6 +129,7 @@
./ols.nix
./open-in-mpv.nix
./pactl.nix
./papers.nix
./pidof.nix
./pipewire
./pkill.nix
@@ -146,6 +160,9 @@
./sfeed.nix
./shadow.nix
./signal-desktop.nix
./sm64ex-coop.nix
./sm64ex-coop-deluxe.nix
./soundconverter.nix
./splatmoji.nix
./spot.nix
./spotify.nix
@@ -165,6 +182,7 @@
./tor-browser.nix
./tuba.nix
./unl0kr
./v4l-utils.nix
./via.nix
./visidata.nix
./vlc.nix
@@ -179,11 +197,13 @@
./wvkbd.nix
./xarchiver.nix
./xdg-desktop-portal.nix
./xdg-desktop-portal-gnome
./xdg-desktop-portal-gtk.nix
./xdg-desktop-portal-wlr.nix
./xdg-terminal-exec.nix
./xdg-utils.nix
./youtube-tui.nix
./yt-dlp.nix
./zathura.nix
./zeal.nix
./zecwallet-lite.nix

View File

@@ -14,7 +14,7 @@
buildCost = 1;
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.wrapperType = "inplace"; # share/search_providers/ calls back into the binary, weird wrap semantics
sandbox.whitelistWayland = true;
sandbox.net = "clearnet";

View File

@@ -58,7 +58,7 @@ in
webrtc-audio-processing = null;
};
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.net = "clearnet";
sandbox.whitelistAudio = true;
sandbox.whitelistDbus = [ "user" ]; # notifications

View File

@@ -31,7 +31,7 @@ in
--replace-fail '"login"' '"Default_keyring"'
'';
});
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.net = "clearnet";
sandbox.whitelistAudio = true;
sandbox.whitelistDbus = [ "user" ]; # notifications

View File

@@ -9,7 +9,7 @@
# build without rpm support, since `rpm` package doesn't cross-compile.
rpm = null;
};
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.whitelistPwd = true;
sandbox.autodetectCliPaths = "existing"; #< for the archive
};

View File

@@ -6,8 +6,9 @@ in
sane.programs.eg25-control = {
suggestedPrograms = [ "mmcli" ];
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.extraPaths = [
"/dev/gpiochip1"
"/sys/class/modem-power"
"/sys/devices"
# "/var/lib/eg25-control"

View File

@@ -0,0 +1,13 @@
{ config, lib, ... }:
let
cfg = config.sane.programs.eg25-manager;
in
{
sane.programs.eg25-manager = {
# it has to be enabled system-wide for its udev rules to make it into /run/current-system/sw/lib/udev/rules.d.
enableFor.system = lib.mkIf (builtins.any (en: en) (builtins.attrValues cfg.enableFor.user)) true;
};
# not sure if this is required or if it's enough that eg25-manager is on system.packages.
services.udev.packages = lib.mkIf cfg.enabled [ cfg.package ];
}

View File

@@ -27,7 +27,7 @@
buildCost = 1;
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.net = "clearnet";
sandbox.whitelistAudio = true;
sandbox.whitelistDbus = [ "user" ]; # notifications

View File

@@ -2,7 +2,7 @@
{
sane.programs."mate.engrampa" = {
packageUnwrapped = pkgs.rmDbusServices pkgs.mate.engrampa;
sandbox.method = "bwrap"; # TODO:sandbox: untested
sandbox.method = "bunpen";
sandbox.whitelistWayland = true;
sandbox.autodetectCliPaths = "existingOrParent";
sandbox.extraHomePaths = [

View File

@@ -8,7 +8,7 @@
{ pkgs, ... }:
{
sane.programs.epiphany = {
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.wrapperType = "inplace"; # /share/epiphany/default-bookmarks.rdf refers back to /share; dbus files to /libexec
sandbox.net = "clearnet";
sandbox.whitelistAudio = true;

View File

@@ -12,6 +12,6 @@
buildInputs = []; #< errno has no runtime perl deps, and they don't cross compile, so disable them.
});
sandbox.method = "landlock";
sandbox.method = "bunpen";
};
}

View File

@@ -1,7 +1,7 @@
{ ... }:
{
sane.programs.exiftool = {
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.autodetectCliPaths = "existingFile";
};
}

View File

@@ -24,7 +24,7 @@
# - nixpkgs has a few themes: `fcitx5-{material-color,nord,rose-pine}`
# - NUR has a few themes
# - <https://github.com/catppuccin/fcitx5>
{ lib, pkgs, ... }:
{ pkgs, ... }:
{
sane.programs.fcitx5 = {
packageUnwrapped = pkgs.fcitx5-with-addons.override {
@@ -34,7 +34,7 @@
];
};
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.whitelistDbus = [ "user" ];
sandbox.whitelistWayland = true; # for `fcitx5-configtool, if nothing else`
sandbox.extraHomePaths = [

View File

@@ -0,0 +1,13 @@
{ pkgs, ... }:
{
sane.programs.firefox-xdg-open = {
packageUnwrapped = pkgs.firefox-extensions.firefox-xdg-open.systemComponent;
sandbox.method = "bunpen";
sandbox.whitelistDbus = [ "user" ]; # for xdg-open/portals
mime.associations."x-scheme-handler/xdg-open" = "xdg-open.desktop";
suggestedPrograms = [ "xdg-utils" ];
};
}

View File

@@ -1,405 +0,0 @@
# common settings to toggle (at runtime, in about:config):
# > security.ssl.require_safe_negotiation
# librewolf is a forked firefox which patches firefox to allow more things
# (like default search engines) to be configurable at runtime.
# many of the settings below won't have effect without those patches.
# see: https://gitlab.com/librewolf-community/settings/-/blob/master/distribution/policies.json
{ config, lib, pkgs, ...}:
with lib;
let
cfg = config.sane.programs.firefox.config;
mobile-prefs = lib.optionals false pkgs.librewolf-pmos-mobile.extraPrefsFiles;
# allow easy switching between firefox and librewolf with `defaultSettings`, below
librewolfSettings = {
browser = pkgs.librewolf-unwrapped.overrideAttrs (upstream: {
# TEMP(2023/11/21): fix eval bug in wrapFirefox
# see: <https://github.com/NixOS/nixpkgs/pull/244591>
passthru = upstream.passthru // {
requireSigning = false;
allowAddonSideload = true;
};
});
extraPrefsFiles = pkgs.librewolf-unwrapped.extraPrefsFiles ++ mobile-prefs;
libName = "librewolf";
dotDir = ".librewolf";
cacheDir = ".cache/librewolf";
desktop = "librewolf.desktop";
};
firefoxSettings = {
browser = pkgs.firefox-esr-unwrapped;
extraPrefsFiles = mobile-prefs;
libName = "firefox";
dotDir = ".mozilla/firefox";
cacheDir = ".cache/mozilla";
desktop = "firefox.desktop";
};
# defaultSettings = firefoxSettings;
defaultSettings = librewolfSettings;
packageUnwrapped = (pkgs.wrapFirefox cfg.browser.browser {
# inherit the default librewolf.cfg
# it can be further customized via ~/.librewolf/librewolf.overrides.cfg
inherit (cfg.browser) extraPrefsFiles libName;
nativeMessagingHosts = lib.optionals cfg.addons.browserpass-extension.enable [
pkgs.browserpass
] ++ lib.optionals cfg.addons.fxCast.enable [
pkgs.fx-cast-bridge
];
nixExtensions = concatMap (ext: optional ext.enable ext.package) (attrValues cfg.addons);
extraPolicies = {
FirefoxHome = {
Search = true;
Pocket = false;
Snippets = false;
TopSites = false;
Highlights = false;
};
NoDefaultBookmarks = true;
OfferToSaveLogins = false;
OfferToSaveLoginsDefault = false;
PasswordManagerEnabled = false;
SearchEngines = {
Default = "DuckDuckGo";
};
UserMessaging = {
ExtensionRecommendations = false;
FeatureRecommendations = false;
SkipOnboarding = true;
UrlbarInterventions = false;
WhatsNew = false;
};
# these were taken from Librewolf
AppUpdateURL = "https://localhost";
DisableAppUpdate = true;
OverrideFirstRunPage = "";
OverridePostUpdatePage = "";
DisableSystemAddonUpdate = true;
DisableFirefoxStudies = true;
DisableTelemetry = true;
DisableFeedbackCommands = true;
DisablePocket = true;
DisableSetDesktopBackground = false;
# remove many default search providers
# XXX this seems to prevent the `nixExtensions` from taking effect
# Extensions.Uninstall = [
# "google@search.mozilla.org"
# "bing@search.mozilla.org"
# "amazondotcom@search.mozilla.org"
# "ebay@search.mozilla.org"
# "twitter@search.mozilla.org"
# ];
# XXX doesn't seem to have any effect...
# docs: https://github.com/mozilla/policy-templates#homepage
# Homepage = {
# HomepageURL = "https://uninsane.org/";
# StartPage = "homepage";
# };
# NewTabPage = true;
};
# extraPrefs = ...
}).overrideAttrs (base: {
nativeBuildInputs = (base.nativeBuildInputs or []) ++ [
pkgs.copyDesktopItems
];
desktopItems = (base.desktopItems or []) ++ [
(pkgs.makeDesktopItem {
name = "${cfg.browser.libName}-in-vpn";
desktopName = "${cfg.browser.libName} (VPN)";
genericName = "Web Browser";
# N.B.: --new-instance ensures we don't reuse an existing non-vpn instance.
# OTOH, it may error about "only one instance can run at a time": close the non-VPN instance if you see that.
exec = "${lib.getExe pkgs.sane-scripts.vpn} do - -- ${cfg.browser.libName} --new-instance";
icon = cfg.browser.libName;
categories = [ "Network" "WebBrowser" ];
type = "Application";
})
];
# de-associate `ctrl+shift+c` from activating the devtools.
# based on <https://stackoverflow.com/a/54260938>
# TODO: could use `zip -f` to only update the one changed file, instead of rezipping everything.
buildCommand = (base.buildCommand or "") + ''
mkdir omni
echo "omni.ja BEFORE:"
ls -l $(readlink $out/lib/${cfg.browser.libName}/browser/omni.ja)
echo "unzipping omni.ja"
# N.B. `zip` exits non-zero even on successful extraction, if the file didn't 100% obey spec
${pkgs.buildPackages.unzip}/bin/unzip $out/lib/${cfg.browser.libName}/browser/omni.ja -d omni || true
echo "removing old omni.ja"
rm $out/lib/${cfg.browser.libName}/browser/omni.ja
echo "patching omni.ja"
${pkgs.buildPackages.gnused}/bin/sed -i s'/devtools-commandkey-inspector = C/devtools-commandkey-inspector = VK_F12/' omni/localization/en-US/devtools/startup/key-shortcuts.ftl
echo "re-zipping omni.ja"
pushd omni; ${pkgs.buildPackages.zip}/bin/zip $out/lib/${cfg.browser.libName}/browser/omni.ja -r ./*; popd
echo "omni.ja AFTER:"
ls -l $out/lib/${cfg.browser.libName}/browser/omni.ja
runHook postBuild
runHook postInstall
runHook postFixup
'';
});
addonOpts = types.submodule {
options = {
package = mkOption {
type = types.package;
};
enable = mkOption {
type = types.bool;
};
};
};
configOpts = {
options = {
browser = mkOption {
default = defaultSettings;
type = types.anything;
};
persistData = mkOption {
description = "optional store name to which persist browsing data (like history)";
type = types.nullOr types.str;
default = null;
};
persistCache = mkOption {
description = "optional store name to which persist browser cache";
type = types.nullOr types.str;
default = "ephemeral";
};
addons = mkOption {
type = types.attrsOf addonOpts;
default = {};
};
};
};
in
{
config = mkMerge [
({
sane.programs.firefox.configOption = mkOption {
type = types.submodule configOpts;
default = {};
};
sane.programs.firefox.config.addons = {
fxCast = {
# add a menu to cast to chromecast devices, but it doesn't seem to work very well.
# right click (or shift+rc) a video, then select "cast".
# - asciinema.org: icon appears, but glitches when clicked.
# - youtube.com: no icon appears, even when site is whitelisted.
# future: maybe better to have browser open all videos in mpv, and then use mpv for casting.
# see e.g. `ff2mpv`, `open-in-mpv` (both are packaged in nixpkgs)
package = pkgs.firefox-extensions.fx_cast;
enable = lib.mkDefault false;
};
browserpass-extension = {
package = pkgs.firefox-extensions.browserpass-extension;
enable = lib.mkDefault true;
};
bypass-paywalls-clean = {
package = pkgs.firefox-extensions.bypass-paywalls-clean;
enable = lib.mkDefault true;
};
ctrl-shift-c-should-copy = {
package = pkgs.firefox-extensions.ctrl-shift-c-should-copy;
enable = lib.mkDefault false; # prefer patching firefox source code, so it works in more places
};
ether-metamask = {
package = pkgs.firefox-extensions.ether-metamask;
enable = lib.mkDefault false; # until i can disable the first-run notification
};
i2p-in-private-browsing = {
package = pkgs.firefox-extensions.i2p-in-private-browsing;
enable = lib.mkDefault config.services.i2p.enable;
};
i-still-dont-care-about-cookies = {
package = pkgs.firefox-extensions.i-still-dont-care-about-cookies;
enable = lib.mkDefault false; #< obsoleted by uBlock Origin annoyances/cookies lists
};
open-in-mpv = {
# test: `open-in-mpv 'mpv:///open?url=https://www.youtube.com/watch?v=dQw4w9WgXcQ'`
package = pkgs.firefox-extensions.open-in-mpv;
enable = lib.mkDefault config.sane.programs.open-in-mpv.enabled;
};
sidebery = {
package = pkgs.firefox-extensions.sidebery;
enable = lib.mkDefault true;
};
sponsorblock = {
package = pkgs.firefox-extensions.sponsorblock;
enable = lib.mkDefault true;
};
ublacklist = {
package = pkgs.firefox-extensions.ublacklist;
enable = lib.mkDefault false;
};
ublock-origin = {
package = pkgs.firefox-extensions.ublock-origin;
enable = lib.mkDefault true;
};
};
})
({
sane.programs.firefox = {
inherit packageUnwrapped;
sandbox.method = "bwrap"; # landlock works, but requires all of /proc to be linked
sandbox.wrapperType = "inplace"; # trivial package; cheap enough to wrap inplace
sandbox.net = "all";
sandbox.whitelistAudio = true;
sandbox.whitelistDbus = [ "user" ]; # mpris
sandbox.whitelistWayland = true;
sandbox.extraHomePaths = [
"dev" # for developing anything web-related
# for uploads/downloads.
# it still needs these paths despite using the portal's file-chooser :?
"tmp"
"Pictures/albums"
"Pictures/cat"
"Pictures/from"
"Pictures/Photos"
"Pictures/Screenshots"
"Pictures/servo-macros"
] ++ lib.optionals cfg.addons.browserpass-extension.enable [
# browserpass needs these paths:
# - knowledge/secrets/accounts: where the encrypted account secrets live
# at least one of:
# - .config/sops: for the sops key which can decrypt account secrets
# - .ssh: to unlock the sops key, if not unlocked (`sane-secrets-unlock`)
# TODO: find a way to not expose ~/.ssh to firefox
# - unlock sops at login (or before firefox launch)?
# - see if ssh has a more formal type of subkey system?
# ".ssh/id_ed25519"
# ".config/sops"
"knowledge/secrets/accounts"
];
fs.".config/sops".dir = lib.mkIf cfg.addons.browserpass-extension.enable {}; #< needs to be created, not *just* added to the sandbox
suggestedPrograms = [
"open-in-mpv"
];
mime.associations = let
inherit (cfg.browser) desktop;
in {
"text/html" = desktop;
"x-scheme-handler/http" = desktop;
"x-scheme-handler/https" = desktop;
"x-scheme-handler/about" = desktop;
"x-scheme-handler/unknown" = desktop;
};
# env.BROWSER = "${package}/bin/${cfg.browser.libName}";
env.BROWSER = cfg.browser.libName; # used by misc tools like xdg-email, as fallback
# uBlock configuration:
fs."${cfg.browser.dotDir}/managed-storage/uBlock0@raymondhill.net.json".symlink.target = cfg.addons.ublock-origin.package.makeConfig {
# more filter lists are available here:
# - <https://easylist.to>
# - <https://github.com/easylist/easylist.git>
# - <https://github.com/yokoffing/filterlists>
filterFiles = let
getUasset = n: "${pkgs.uassets}/share/filters/${n}.txt";
in [
# default ublock filters:
(getUasset "ublock-filters")
(getUasset "ublock-badware")
(getUasset "ublock-privacy")
(getUasset "ublock-quick-fixes")
(getUasset "ublock-unbreak")
(getUasset "easylist")
(getUasset "easyprivacy")
# (getUasset "urlhaus-1") #< TODO: i think this is the same as urlhaus-filter-online
(getUasset "urlhaus-filter-online")
# (getUasset "plowe-0") #< TODO: where does this come from?
# (getUasset "ublock-cookies-adguard") #< TODO: where does this come from?
# filters i've added:
(getUasset "easylist-annoyances") #< blocks in-page popups, "social media content" (e.g. FB like button; improves loading time)
(getUasset "easylist-cookies") #< blocks GDPR cookie consent popovers (e.g. at stackoverflow.com)
# (getUasset "ublock-annoyances-others")
# (getUasset "ublock-annoyances-cookies")
];
};
# TODO: this is better suited in `extraPrefs` during `wrapFirefox` call
fs."${cfg.browser.dotDir}/${cfg.browser.libName}.overrides.cfg".symlink.text = ''
// if we can't query the revocation status of a SSL cert because the issuer is offline,
// treat it as unrevoked.
// see: <https://librewolf.net/docs/faq/#im-getting-sec_error_ocsp_server_error-what-can-i-do>
defaultPref("security.OCSP.require", false);
// scrollbar configuration, see: <https://artemis.sh/2023/10/12/scrollbars.html>
// style=4 gives rectangular scrollbars
// could also enable "always show scrollbars" in about:preferences -- not sure what the actual pref name for that is
// note that too-large scrollbars (like 50px wide, even 20px) tend to obscure content (and make buttons unclickable)
defaultPref("widget.non-native-theme.scrollbar.size.override", 14);
defaultPref("widget.non-native-theme.scrollbar.style", 4);
// disable inertial/kinetic/momentum scrolling because it just gets in the way on touchpads
// source: <https://kparal.wordpress.com/2019/10/31/disabling-kinetic-scrolling-in-firefox/>
defaultPref("apz.gtk.kinetic_scroll.enabled", false);
// open external URIs/files via xdg-desktop-portal.
defaultPref("widget.use-xdg-desktop-portal.mime-handler", 1);
defaultPref("widget.use-xdg-desktop-portal.open-uri", 1);
defaultPref("browser.toolbars.bookmarks.visibility", "never");
// configure which extensions are visible by default (TODO: requires a lot of trial and error)
// defaultPref("browser.uiCustomization.state", ...);
// auto-open mpv:// URIs without prompting.
// can do this with other protocols too (e.g. matrix?). see about:config for common handlers.
defaultPref("network.protocol-handler.external.mpv", true);
// element:// for Element matrix client
defaultPref("network.protocol-handler.external.element", true);
// matrix: for Nheko matrix client
defaultPref("network.protocol-handler.external.matrix", true);
'';
# instruct Firefox to put the profile in a predictable directory (so we can do things like persist just it).
# XXX: the directory *must* exist, even if empty; Firefox will not create the directory itself.
fs."${cfg.browser.dotDir}/profiles.ini".symlink.text = ''
[Profile0]
Name=default
IsRelative=1
Path=default
Default=1
[General]
StartWithLastProfile=1
'';
# TODO: env.PASSWORD_STORE_DIR only needs to be present within the browser session.
env.PASSWORD_STORE_DIR = "/home/colin/knowledge/secrets/accounts";
# alternative to PASSWORD_STORE_DIR:
# fs.".password-store".symlink.target = lib.mkIf cfg.addons.browserpass-extension.enable "knowledge/secrets/accounts";
# flush the cache to disk to avoid it taking up too much tmp.
persist.byPath."${cfg.browser.cacheDir}".store =
if (cfg.persistData != null) then
cfg.persistData
else
"ephemeral"
;
persist.byPath."${cfg.browser.dotDir}/default".store =
if (cfg.persistData != null) then
cfg.persistData
else
"ephemeral"
;
};
})
];
}

View File

@@ -0,0 +1,128 @@
{ config, lib, pkgs, ... }:
let
cfg = config.sane.programs.firefox.config;
in
{
sane.programs.firefox = {
config.addons = {
fxCast = {
# add a menu to cast to chromecast devices, but it doesn't seem to work very well.
# right click (or shift+rc) a video, then select "cast".
# - asciinema.org: icon appears, but glitches when clicked.
# - youtube.com: no icon appears, even when site is whitelisted.
# future: maybe better to have browser open all videos in mpv, and then use mpv for casting.
# see e.g. `ff2mpv`, `open-in-mpv` (both are packaged in nixpkgs)
package = pkgs.firefox-extensions.fx_cast;
enable = lib.mkDefault false;
};
browserpass-extension = {
package = pkgs.firefox-extensions.browserpass-extension;
enable = lib.mkDefault true;
};
bypass-paywalls-clean = {
package = pkgs.firefox-extensions.bypass-paywalls-clean;
enable = lib.mkDefault true;
};
ctrl-shift-c-should-copy = {
package = pkgs.firefox-extensions.ctrl-shift-c-should-copy;
enable = lib.mkDefault false; # prefer patching firefox source code, so it works in more places
};
ether-metamask = {
package = pkgs.firefox-extensions.ether-metamask;
enable = lib.mkDefault false; # until i can disable the first-run notification
};
firefox-xdg-open = {
# test: `xdg-open xdg-open:https://uninsane.org`
package = pkgs.firefox-extensions.firefox-xdg-open;
enable = lib.mkDefault true;
};
i2p-in-private-browsing = {
package = pkgs.firefox-extensions.i2p-in-private-browsing;
enable = lib.mkDefault config.services.i2p.enable;
};
i-still-dont-care-about-cookies = {
package = pkgs.firefox-extensions.i-still-dont-care-about-cookies;
enable = lib.mkDefault false; #< obsoleted by uBlock Origin annoyances/cookies lists
};
open-in-mpv = {
# test: `open-in-mpv 'mpv:///open?url=https://www.youtube.com/watch?v=dQw4w9WgXcQ'`
package = pkgs.firefox-extensions.open-in-mpv;
enable = lib.mkDefault false;
};
sidebery = {
package = pkgs.firefox-extensions.sidebery;
enable = lib.mkDefault true;
};
sponsorblock = {
package = pkgs.firefox-extensions.sponsorblock;
enable = lib.mkDefault true;
};
ublacklist = {
package = pkgs.firefox-extensions.ublacklist;
enable = lib.mkDefault false;
};
ublock-origin = {
package = pkgs.firefox-extensions.ublock-origin;
enable = lib.mkDefault true;
};
};
suggestedPrograms = lib.optionals cfg.addons.firefox-xdg-open.enable [
"firefox-xdg-open"
] ++ lib.optionals cfg.addons.open-in-mpv.enable [
"open-in-mpv"
];
sandbox.extraHomePaths = lib.optionals cfg.addons.browserpass-extension.enable [
# browserpass needs these paths:
# - knowledge/secrets/accounts: where the encrypted account secrets live
# at least one of:
# - .config/sops: for the sops key which can decrypt account secrets
# - .ssh: to unlock the sops key, if not unlocked (`sane-secrets-unlock`)
# TODO: find a way to not expose ~/.ssh to firefox
# - unlock sops at login (or before firefox launch)?
# - see if ssh has a more formal type of subkey system?
# ".ssh/id_ed25519"
# ".config/sops"
"knowledge/secrets/accounts"
];
fs.".config/sops".dir = lib.mkIf cfg.addons.browserpass-extension.enable {}; #< needs to be created, not *just* added to the sandbox
# uBlock configuration:
fs.".mozilla/firefox/managed-storage/uBlock0@raymondhill.net.json".symlink.target = cfg.addons.ublock-origin.package.makeConfig {
# more filter lists are available here:
# - <https://easylist.to>
# - <https://github.com/easylist/easylist.git>
# - <https://github.com/yokoffing/filterlists>
filterFiles = let
getUasset = n: "${pkgs.uassets}/share/filters/${n}.txt";
in [
# default ublock filters:
(getUasset "ublock-filters")
(getUasset "ublock-badware")
(getUasset "ublock-privacy")
(getUasset "ublock-quick-fixes")
(getUasset "ublock-unbreak")
(getUasset "easylist")
(getUasset "easyprivacy")
# (getUasset "urlhaus-1") #< TODO: i think this is the same as urlhaus-filter-online
(getUasset "urlhaus-filter-online")
# (getUasset "plowe-0") #< TODO: where does this come from?
# (getUasset "ublock-cookies-adguard") #< TODO: where does this come from?
# filters i've added:
(getUasset "easylist-annoyances") #< blocks in-page popups, "social media content" (e.g. FB like button; improves loading time)
(getUasset "easylist-cookies") #< blocks GDPR cookie consent popovers (e.g. at stackoverflow.com)
# (getUasset "ublock-annoyances-others")
# (getUasset "ublock-annoyances-cookies")
];
};
env = lib.mkIf cfg.addons.browserpass-extension.enable {
# TODO: env.PASSWORD_STORE_DIR only needs to be present within the browser session.
# alternative to PASSWORD_STORE_DIR:
# fs.".password-store".symlink.target = lib.mkIf cfg.addons.browserpass-extension.enable "knowledge/secrets/accounts";
PASSWORD_STORE_DIR = "/home/colin/knowledge/secrets/accounts";
};
};
}

View File

@@ -0,0 +1,25 @@
<!DOCTYPE NETSCAPE-Bookmark-file-1>
<!-- This is an automatically generated file.
It will be read and overwritten.
DO NOT EDIT! -->
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
<meta http-equiv="Content-Security-Policy"
content="default-src 'self'; script-src 'none'; img-src data: *; object-src 'none'"></meta>
<TITLE>Bookmarks</TITLE>
<H1>Bookmarks Menu</H1>
<DL><p>
<DT><H3 ADD_DATE="1" LAST_MODIFIED="1" UNFILED_BOOKMARKS_FOLDER="true">Other Bookmarks</H3>
<DL><p>
<DT><A HREF="https://en.wikipedia.org/wiki/Special:Search?search=%s" ADD_DATE="1" LAST_MODIFIED="1" SHORTCUTURL="w">Search Wikipedia</A>
<DT><A HREF="https://duckduckgo.com/?t=h_&q=%s" ADD_DATE="1" LAST_MODIFIED="1" SHORTCUTURL="ddg">Search DuckDuckGo</A>
<DT><A HREF="https://www.youtube.com/results?search_query=%s" ADD_DATE="1" LAST_MODIFIED="1" SHORTCUTURL="yt">Search YouTube</A>
<DT><A HREF="https://search.nixos.org/options?channel=unstable&query=%s" ADD_DATE="1" LAST_MODIFIED="1" SHORTCUTURL="opt">Search NixOS Options</A>
<DT><A HREF="https://wiki.archlinux.org/index.php?title=Special%3ASearch&search=%s" ADD_DATE="1" LAST_MODIFIED="1" SHORTCUTURL="arch">Search ArchWiki</A>
<DT><A HREF="https://www.amazon.com/s/?url=search-alias%3Daps&field-keywords=%s" ADD_DATE="1" LAST_MODIFIED="1" SHORTCUTURL="am">Search Amazon.com</A>
<DT><A HREF="https://www.ebay.com/sch/i.html?_sacat=0&_nkw=%s" ADD_DATE="1" LAST_MODIFIED="1" SHORTCUTURL="ebay">Search eBay</A>
<DT><A HREF="https://github.com/nixos/nixpkgs/pulls?q=%s" ADD_DATE="1" LAST_MODIFIED="1" SHORTCUTURL="pr">Search nixpkgs PRs</A>
<DT><A HREF="https://repology.org/projects/?maintainer=&category=&inrepo=&notinrepo=&repos=&families=&repos_newest=&families_newest=&search=%s" ADD_DATE="1" LAST_MODIFIED="1" SHORTCUTURL="repo">Search Repology - packages</A>
<DT><A HREF="https://myanimelist.net/?type=all&topkeyword=%s" ADD_DATE="1" LAST_MODIFIED="1" SHORTCUTURL="mal">Search MyAnimeList.net</A>
</DL><p>
</DL>

View File

@@ -0,0 +1,319 @@
# common settings to toggle (at runtime, in about:config):
# > security.ssl.require_safe_negotiation
# librewolf is a forked firefox which patches firefox to allow more things
# (like default search engines) to be configurable at runtime.
# many of the settings below won't have effect without those patches.
# see: https://gitlab.com/librewolf-community/settings/-/blob/master/distribution/policies.json
{ config, lib, pkgs, ...}:
with lib;
let
cfg = config.sane.programs.firefox.config;
mobile-prefs = lib.optionals false pkgs.librewolf-pmos-mobile.extraPrefsFiles;
# allow easy switching between firefox and librewolf with `defaultSettings`, below
librewolfSettings = {
browser = pkgs.librewolf-unwrapped;
extraPrefsFiles = pkgs.librewolf-unwrapped.extraPrefsFiles ++ mobile-prefs;
libName = "librewolf";
dotDir = ".librewolf";
cacheDir = ".cache/librewolf";
desktop = "librewolf.desktop";
};
firefoxSettings = {
browser = pkgs.firefox-esr-unwrapped;
extraPrefsFiles = mobile-prefs;
libName = "firefox";
dotDir = ".mozilla/firefox";
cacheDir = ".cache/mozilla";
desktop = "firefox.desktop";
};
# defaultSettings = firefoxSettings;
defaultSettings = librewolfSettings;
packageUnwrapped = (pkgs.wrapFirefox cfg.browser.browser {
# inherit the default librewolf.cfg
# it can be further customized via ~/.librewolf/librewolf.overrides.cfg
inherit (cfg.browser) extraPrefsFiles libName;
nativeMessagingHosts = lib.optionals cfg.addons.browserpass-extension.enable [
pkgs.browserpass
] ++ lib.optionals cfg.addons.fxCast.enable [
pkgs.fx-cast-bridge
];
nixExtensions = concatMap (ext: optional ext.enable ext.package) (attrValues cfg.addons);
# extraPolicies: only really required if using firefox; else, easier to configure this via overrides.cfg.
# extraPolicies = {
# FirefoxHome = {
# Search = true;
# Pocket = false;
# Snippets = false;
# TopSites = false;
# Highlights = false;
# };
# NoDefaultBookmarks = true;
# OfferToSaveLogins = false;
# OfferToSaveLoginsDefault = false;
# PasswordManagerEnabled = false;
# SearchEngines = {
# Default = "DuckDuckGo";
# };
# UserMessaging = {
# ExtensionRecommendations = false;
# FeatureRecommendations = false;
# SkipOnboarding = true;
# UrlbarInterventions = false;
# WhatsNew = false;
# };
# # these were taken from Librewolf
# AppUpdateURL = "https://localhost";
# DisableAppUpdate = true;
# OverrideFirstRunPage = "";
# OverridePostUpdatePage = "";
# DisableSystemAddonUpdate = true;
# DisableFirefoxStudies = true;
# DisableTelemetry = true;
# DisableFeedbackCommands = true;
# DisablePocket = true;
# DisableSetDesktopBackground = false;
# # remove many default search providers
# # XXX this seems to prevent the `nixExtensions` from taking effect
# # Extensions.Uninstall = [
# # "google@search.mozilla.org"
# # "bing@search.mozilla.org"
# # "amazondotcom@search.mozilla.org"
# # "ebay@search.mozilla.org"
# # "twitter@search.mozilla.org"
# # ];
# # XXX doesn't seem to have any effect...
# # docs: https://github.com/mozilla/policy-templates#homepage
# # Homepage = {
# # HomepageURL = "https://uninsane.org/";
# # StartPage = "homepage";
# # };
# # NewTabPage = true;
# };
# extraPrefs = ...
}).overrideAttrs (base: {
nativeBuildInputs = (base.nativeBuildInputs or []) ++ [
pkgs.copyDesktopItems
];
desktopItems = (base.desktopItems or []) ++ [
(pkgs.makeDesktopItem {
name = "${cfg.browser.libName}-in-vpn";
desktopName = "${cfg.browser.libName} (VPN)";
genericName = "Web Browser";
# N.B.: --new-instance ensures we don't reuse an existing differenty-namespaced instance.
# OTOH, it may error about "only one instance can run at a time": close the other instance if you see that.
exec = "${lib.getExe pkgs.sane-scripts.vpn} do default -- ${cfg.browser.libName} --new-instance";
icon = cfg.browser.libName;
categories = [ "Network" "WebBrowser" ];
type = "Application";
})
(pkgs.makeDesktopItem {
name = "${cfg.browser.libName}-stub-dns";
desktopName = "${cfg.browser.libName} (stub DNS)";
genericName = "Web Browser";
# N.B.: --new-instance ensures we don't reuse an existing differently-namespaced instance.
# OTOH, it may error about "only one instance can run at a time": close the other instance if you see that.
exec = "${lib.getExe pkgs.sane-scripts.vpn} do none -- ${cfg.browser.libName} --new-instance";
icon = cfg.browser.libName;
categories = [ "Network" "WebBrowser" ];
type = "Application";
})
];
# TODO: could use `zip -f` to only update the one changed file, instead of rezipping everything.
buildCommand = (base.buildCommand or "") + ''
mkdir omni
echo "omni.ja BEFORE:"
ls -l $(readlink $out/lib/${cfg.browser.libName}/browser/omni.ja)
echo "unzipping omni.ja"
# N.B. `zip` exits non-zero even on successful extraction, if the file didn't 100% obey spec
${pkgs.buildPackages.unzip}/bin/unzip $out/lib/${cfg.browser.libName}/browser/omni.ja -d omni || true
echo "removing old omni.ja"
rm $out/lib/${cfg.browser.libName}/browser/omni.ja
echo "patching omni.ja"
# de-associate `ctrl+shift+c` from activating the devtools.
# see: <https://stackoverflow.com/a/54260938>
${lib.getExe pkgs.buildPackages.gnused} -i s'/devtools-commandkey-inspector = C/devtools-commandkey-inspector = VK_F12/' omni/localization/en-US/devtools/startup/key-shortcuts.ftl
# remap Close Tab shortcut from Ctrl+W to Ctrl+Shift+W
# see: <https://www.math.cmu.edu/~gautam/sj/blog/20220329-firefox-disable-ctrl-w.html>
${lib.getExe pkgs.buildPackages.gnused} -i s'/command="cmd_close" modifiers="accel"/command="cmd_close" modifiers="accel,shift"/' omni/chrome/browser/content/browser/browser.xhtml
echo "re-zipping omni.ja"
pushd omni; ${pkgs.buildPackages.zip}/bin/zip $out/lib/${cfg.browser.libName}/browser/omni.ja -r ./*; popd
echo "omni.ja AFTER:"
ls -l $out/lib/${cfg.browser.libName}/browser/omni.ja
runHook postBuild
runHook postInstall
runHook postFixup
'';
});
in
{
imports = [
./addons.nix
];
sane.programs.firefox = {
configOption = mkOption {
default = {};
type = types.submodule {
options = {
browser = mkOption {
default = defaultSettings;
type = types.anything;
};
persistData = mkOption {
description = "optional store name to which persist browsing data (like history)";
type = types.nullOr types.str;
default = null;
};
persistCache = mkOption {
description = "optional store name to which persist browser cache";
type = types.nullOr types.str;
default = "ephemeral";
};
addons = mkOption {
default = {};
type = types.attrsOf (types.submodule {
options = {
package = mkOption {
type = types.package;
};
enable = mkOption {
type = types.bool;
};
};
});
};
};
};
};
inherit packageUnwrapped;
sandbox.method = "bunpen";
sandbox.net = "all";
sandbox.whitelistAudio = true;
sandbox.whitelistAvDev = true; #< it doesn't seem to use pipewire, but direct /dev/videoN (as of 2024/09/12)
sandbox.whitelistDbus = [ "user" ]; # mpris
sandbox.whitelistWayland = true;
sandbox.extraHomePaths = [
"dev" # for developing anything web-related
# for uploads/downloads.
# it still needs these paths despite using the portal's file-chooser :?
"tmp"
"Pictures/albums"
"Pictures/cat"
"Pictures/from"
"Pictures/Photos"
"Pictures/Screenshots"
"Pictures/servo-macros"
];
mime.associations = let
inherit (cfg.browser) desktop;
in {
"text/html" = desktop;
"x-scheme-handler/http" = desktop;
"x-scheme-handler/https" = desktop;
"x-scheme-handler/about" = desktop;
"x-scheme-handler/unknown" = desktop;
};
env.BROWSER = cfg.browser.libName; # used by misc tools like xdg-email, as fallback
# redirect librewolf configs to the firefox configs; this way addons don't have to care about the firefox/librewolf distinction.
fs.".librewolf/librewolf.overrides.cfg".symlink.target = "../.mozilla/firefox/firefox.overrides.cfg";
fs.".librewolf/profiles.ini".symlink.target = "../.mozilla/firefox/profiles.ini";
fs.".librewolf/managed-storage".symlink.target = "../.mozilla/firefox/managed-storage";
# N.B.: `overrides.cfg` might be librewolf-specific -- not supported by mainline firefox.
# firefox does support per-profile `user.js` files which have similar functionality.
fs.".mozilla/firefox/firefox.overrides.cfg".symlink.text = ''
// use `pref(...)` to force a preference
// use `defaultPref(...)` to allow runtime reconfiguration
// discover preference names via the `about:config` page
//
// if we can't query the revocation status of a SSL cert because the issuer is offline,
// treat it as unrevoked.
// see: <https://librewolf.net/docs/faq/#im-getting-sec_error_ocsp_server_error-what-can-i-do>
defaultPref("security.OCSP.require", false);
// scrollbar configuration, see: <https://artemis.sh/2023/10/12/scrollbars.html>
// style=4 gives rectangular scrollbars
// could also enable "always show scrollbars" in about:preferences -- not sure what the actual pref name for that is
// note that too-large scrollbars (like 50px wide, even 20px) tend to obscure content (and make buttons unclickable)
defaultPref("widget.non-native-theme.scrollbar.size.override", 14);
defaultPref("widget.non-native-theme.scrollbar.style", 4);
// disable inertial/kinetic/momentum scrolling because it just gets in the way on touchpads
// source: <https://kparal.wordpress.com/2019/10/31/disabling-kinetic-scrolling-in-firefox/>
defaultPref("apz.gtk.kinetic_scroll.enabled", false);
// open external URIs/files via xdg-desktop-portal.
defaultPref("widget.use-xdg-desktop-portal.mime-handler", 1);
defaultPref("widget.use-xdg-desktop-portal.open-uri", 1);
defaultPref("browser.toolbars.bookmarks.visibility", "never");
// configure which extensions are visible by default (TODO: requires a lot of trial and error)
// defaultPref("browser.uiCustomization.state", ...);
// auto-open specific URI schemes without prompting:
defaultPref("network.protocol-handler.external.xdg-open", true); // for firefox-xdg-open extension
defaultPref("network.protocol-handler.external.mpv", true); // for open-in-mpv extension
defaultPref("network.protocol-handler.external.element", true); // for Element matrix client
defaultPref("network.protocol-handler.external.matrix", true); // for Nheko matrix client
// statically configure bookmarks.
// notably, these bookmarks have "shortcut url" fields:
// - type `w thing` into the URL bar to search "thing" on Wikipedia.
// - to add a search shortcut: right-click any search box => "Add a keyword for this search".
// - to update the static bookmarks, export via Hamburger => bookmarks => manage bookmarks => Import and Backup => Export Bookmarks To HTML
defaultPref("browser.places.importBookmarksHTML", true);
defaultPref("browser.bookmarks.file", "${./bookmarks.html}");
defaultPref("browser.startup.homepage", "https://uninsane.org/places");
'';
# instruct Firefox to put the profile in a predictable directory (so we can do things like persist just it).
# XXX: the directory *must* exist, even if empty; Firefox will not create the directory itself.
fs.".mozilla/firefox/profiles.ini".symlink.text = ''
[Profile0]
Name=default
IsRelative=1
Path=default
Default=1
[General]
StartWithLastProfile=1
'';
# flush the cache to disk to avoid it taking up too much tmp.
persist.byPath."${cfg.browser.cacheDir}".store =
if (cfg.persistData != null) then
cfg.persistData
else
"ephemeral"
;
persist.byPath."${cfg.browser.dotDir}/default".store =
if (cfg.persistData != null) then
cfg.persistData
else
"ephemeral"
;
};
}

View File

@@ -1,12 +1,16 @@
# Flare is a 3rd-party GTK4 Signal app.
# UI is effectively a clone of Fractal.
#
### compatibility:
### compatibility (2023-10-30):
# - desko: works fine. pairs, and exchanges contact list (but not message history) with the paired device. exchanges future messages fine.
# - moby (cross compiled flare-signal-nixified): nope. it pairs, but can only *receive* messages and never *send* them.
# - even `rsync`ing the data and keyrings from desko -> moby, still fails in that same manner.
# - console shows error messages. quite possibly an endianness mismatch somewhere
# - moby (partially-emulated flare-signal): works! pairs and can send/receive messages, same as desko.
### compatibility (2024-08-07):
# - linking flare to iOS signal "works", but neither side can exchange messages nor contacts
# in iOS i see "A message from Colin could not be delivered"
# - registering as primary device does not work ("you are not authorized", or some such)
#
### debugging:
# - `RUST_LOG=flare=trace flare`
@@ -18,7 +22,7 @@
# ERROR presage::manager] Error opening envelope: ProtobufDecodeError(DecodeError { description: "invalid tag value: 0", stack: [("Content", "data_message")] }), message will be skipped!
# ERROR presage::manager] Error opening envelope: ProtobufDecodeError(DecodeError { description: "invalid tag value: 0", stack: [("Content", "data_message")] }), message will be skipped!
# ```
# - this occurs on moby, desko, `flare-signal` and `flare-signal-nixified`
# - this occurs on moby, desko, `flare-signal` and `flare-signal-nixified` (2023-12-14)
# - the Websocket error seems to be unrelated, occurs during normal/good operation
# - related issues: <https://github.com/whisperfish/presage/issues/152>
#
@@ -28,7 +32,7 @@
# No current session
# ERROR presage::manager] Error opening envelope: SignalProtocolError(InvalidKyberPreKeyId), message will be skipped!
# ```
# - but signal iOS will still read it.
# - but signal iOS will still read it (2023-12-14).
#
#### HTTP 405 when linking flare to iOS signal:
# [DEBUG libsignal_service_hyper::push_service] HTTP request PUT https://chat.signal.org/v1/devices/{uuid}.{timestamp?}:{b64-string}
@@ -43,7 +47,7 @@
# ),
# ),
# )
# flare matrix suggests the signal endpoint has changed:
# flare matrix suggests the signal endpoint has changed (2023-12-14):
# - "/v1/device/link instead of confirming via /v1/devices/{I'd}"
# - this endpoint is declared in libsignal-service-rs (used both by flare and presage)
# - libsignal-service/src/provisioning/manager.rs
@@ -73,5 +77,13 @@
# and it persists some dconf settings (e.g. device name). reset with:
# - `dconf reset -f /de/schmidhuberj/Flare/`.
];
#VVV flare complains if its data directory is a symlink, so put it in a subdirectory behind my persistence symlink.
env.FLARE_DATA_PATH = "$HOME/.local/share/flare/data";
# sandbox.method = "bwrap";
# sandbox.net = "clearnet";
# sandbox.whitelistWayland = true;
# sandbox.whitelistDbus = [
# "user" # so i can click on links, at least
# ];
};
}

View File

@@ -0,0 +1,42 @@
# foliate: <https://johnfactotum.github.io/foliate/>
{ ... }:
{
sane.programs.foliate = {
sandbox.method = "bunpen";
sandbox.net = "clearnet"; #< for dictionary, wikipedia, online book libraries
sandbox.whitelistDbus = [ "user" ]; #< when clicking on links
sandbox.whitelistDri = true; # reduces startup time and subjective page flip time
sandbox.whitelistWayland = true;
sandbox.extraHomePaths = [
"Books/local"
"Books/servo"
"tmp" #< for downloaded files
];
sandbox.extraPaths = [
# foliate sandboxes itself with bwrap, which needs these.
# but it actually only cares that /sys/{block,bus,class/block} *exist*: it doesn't care if there's anything in them.
# so bind empty (sub)directories
# and it looks like i might need to keep IPC namespace if i want TTS.
"/sys/block/loop7"
"/sys/bus/container/devices"
"/sys/class/block/loop7"
];
sandbox.autodetectCliPaths = "existing";
persist.byStore.plaintext = [
".local/share/com.github.johnfactotum.Foliate" #< books added, reading position
".cache/com.github.johnfactotum.Foliate" #< webkit cache
];
buildCost = 2; #< webkitgtk 6.0
# these associations were taken from its .desktop file
mime.associations."application/epub+zip" = "com.github.johnfactotum.Foliate.desktop";
mime.associations."application/x-mobipocket-ebook" = "com.github.johnfactotum.Foliate.desktop";
mime.associations."application/vnd.amazon.mobi8-ebook" = "com.github.johnfactotum.Foliate.desktop";
mime.associations."application/x-fictionbook+xml" = "com.github.johnfactotum.Foliate.desktop";
mime.associations."application/x-zip-compressed-fb2" = "com.github.johnfactotum.Foliate.desktop";
mime.associations."application/vnd.comicbook+zip" = "com.github.johnfactotum.Foliate.desktop"; # .cbz
mime.associations."x-scheme-handler/opds" = "com.github.johnfactotum.Foliate.desktop";
mime.priority = 120; #< default is 100; fallback to more specialized cbz handlers, e.g., but keep specializations for epub
};
}

View File

@@ -55,7 +55,7 @@ let
in
{
sane.programs.fontconfig = {
sandbox.method = "bwrap"; # TODO:sandbox: untested
sandbox.method = "bunpen";
sandbox.autodetectCliPaths = "existingOrParent"; #< this might be overkill; or, how many programs reference fontconfig internally?
# persist.byStore.plaintext = [

View File

@@ -26,7 +26,7 @@ in
packageUnwrapped = pkgs.fractal-nixified.optimized;
# packageUnwrapped = pkgs.fractal;
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.net = "clearnet";
sandbox.whitelistAudio = true;
sandbox.whitelistDbus = [ "user" ]; # notifications
@@ -65,6 +65,9 @@ in
suggestedPrograms = [ "gnome-keyring" ];
# direct room links opened from other programs, to fractal.
mime.urlAssociations."^https?://matrix.to/#/.+$" = "org.gnome.Fractal.desktop";
services.fractal = {
description = "fractal Matrix client";
partOf = lib.mkIf cfg.config.autostart [ "graphical-session" ];

View File

@@ -2,8 +2,7 @@
{
sane.programs.free = {
packageUnwrapped = pkgs.linkBinIntoOwnPackage pkgs.procps "free";
sandbox.method = "bwrap";
sandbox.isolatePids = false;
sandbox.method = "bunpen";
sandbox.extraPaths = [ "/proc/meminfo" ];
};
}

View File

@@ -11,7 +11,7 @@
});
buildCost = 1;
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.net = "clearnet"; # net play
sandbox.whitelistAudio = true;
sandbox.whitelistWayland = true;

View File

@@ -10,7 +10,7 @@
sane.programs.g4music = {
buildCost = 1;
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.whitelistAudio = true;
sandbox.whitelistDbus = [ "user" ]; # mpris
sandbox.whitelistWayland = true;

View File

@@ -3,8 +3,7 @@
sane.programs.gdbus = {
packageUnwrapped = pkgs.linkBinIntoOwnPackage pkgs.glib "gdbus";
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.whitelistDbus = [ "user" ]; #< XXX: maybe future users will also want system access
};
}

View File

@@ -14,15 +14,23 @@ in
type = types.submodule {
options.autostart = mkOption {
type = types.bool;
default = false;
default = true;
};
};
};
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.wrapperType = "inplace"; #< XXX(2024-08-20): if executed from a directory different than the configured prefix, it fails to locate its sql migration files
sandbox.net = "clearnet";
sandbox.whitelistDbus = [ "user" ]; # notifications
sandbox.whitelistWayland = true;
sandbox.extraHomePaths = [
# it shouldn't need these, but portal integration seems incomplete?
"tmp"
"Pictures/from"
"Pictures/Photos"
"Pictures/Screenshots"
];
sandbox.extraPaths = [
# geary sandboxes *itself* with bwrap, and dbus-proxy which, confusingly, causes it to *require* these paths.
# TODO: these could maybe be mounted empty. or maybe there's an env-var to disable geary's dbus-proxy.

View File

@@ -7,7 +7,7 @@
path = "${config.sane.programs.geoclue2.packageUnwrapped}/libexec/geoclue-2.0/demos/agent";
}];
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.whitelistDbus = [
"system"
];

View File

@@ -18,7 +18,7 @@ in
rm "$out/bin/git-jump"
'';
});
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.net = "clearnet";
sandbox.whitelistPwd = true;
sandbox.autodetectCliPaths = true; # necessary for git-upload-pack

View File

@@ -1,6 +1,6 @@
{ pkgs, ... }: {
sane.programs."gnome.gnome-clocks" = {
packageUnwrapped = pkgs.gnome.gnome-clocks.overrideAttrs (upstream: {
sane.programs.gnome-clocks = {
packageUnwrapped = pkgs.gnome-clocks.overrideAttrs (upstream: {
# TODO: upstream this
buildInputs = upstream.buildInputs ++ (with pkgs; [
# gnome-clocks needs `playbin` (gst-plugins-base) and `scaletempo` (gst-plugins-good)
@@ -12,7 +12,7 @@
});
buildCost = 1;
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.whitelistAudio = true;
sandbox.whitelistDbus = [ "user" ]; #< required (alongside .config/dconf) to remember timers
sandbox.whitelistWayland = true;

View File

@@ -1,8 +1,9 @@
{ lib, pkgs, ... }:
# TODO: gnome-keyring has portal integration? ($out/share/xdg-desktop-portal)
{ pkgs, ... }:
{
sane.programs.gnome-keyring = {
packageUnwrapped = pkgs.rmDbusServices pkgs.gnome-keyring;
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.whitelistDbus = [ "user" ];
sandbox.extraRuntimePaths = [
"keyring" #< only needs keyring/control, but has to *create* that.
@@ -10,16 +11,12 @@
];
sandbox.capabilities = [
# ipc_lock: used to `mlock` the secrets so they don't get swapped out.
# this is optional, and systemd likely doesn't propagate it anyway
# this is optional, and user namespacing (bwrap) likely doesn't propagate it anyway
"ipc_lock"
];
persist.byStore.private = [
# N.B.: BE CAREFUL WITH THIS.
# gnome-keyring-daemon likes to turn symlinks into dirs. i.e. if it detects that `~/.local/share/keyrings` is a symlink
# it WILL try to `unlink` it and recreate it as an empty directory.
# the only reason i can get away with a symlink here is because gkd is sandboxed... with ~/.local/share/keyrings as an explicit mountpoint instead of as a symlink.
# remove the sandbox, and this breaks.
# N.B.: gnome-keyring-daemon used to remove symlinks and replace them with empty directories, but as of 2024-09-05 that seems no longer the case.
".local/share/keyrings"
];
@@ -51,6 +48,9 @@
partOf = [ "graphical-session" ];
command = let
gkr-start = pkgs.writeShellScriptBin "gnome-keyring-daemon-start" ''
set -eu
# XXX(2024-09-05): this service races with the creation of the keyrings directory, so wait for it to appear
test -e ~/.local/share/keyrings
mkdir -m 0700 -p $XDG_RUNTIME_DIR/keyring
exec gnome-keyring-daemon --start --foreground --components=secrets
'';

View File

@@ -10,22 +10,34 @@
# TIPS:
# - use "Northwest" instead of "NW", and "Street" instead of "St", etc.
# otherwise, it might not find your destination!
#
# TODO:
# - get gnome-maps to access location services via the xdg-desktop-portal.
# with it not using the portal, it can't open links via the web browser.
# additionally, that prevents OpenStreetMap sign-in.
# even temporarily enabling the portal for OSM doesn't work *after* the portal has been disabled -- because then gnome-maps can't access its passwords (?)
{ pkgs, ... }:
{
sane.programs."gnome.gnome-maps" = {
packageUnwrapped = pkgs.rmDbusServicesInPlace (pkgs.gnome.gnome-maps.overrideAttrs (base: {
sane.programs.gnome-maps = {
packageUnwrapped = pkgs.rmDbusServicesInPlace (pkgs.gnome-maps.overrideAttrs (base: {
# default .desktop file is trying to do some dbus launch (?) which fails even *if* i install `gapplication` (glib.bin)
postPatch = (base.postPatch or "") + ''
substituteInPlace data/org.gnome.Maps.desktop.in.in \
--replace-fail 'Exec=gapplication launch @app-id@ %U' 'Exec=gnome-maps %U'
'';
# TODO: set up portal-based location services, but until that works, explicitly disable portals here.
preFixup = (base.preFixup or "") + ''
gappsWrapperArgs+=(
--unset GIO_USE_PORTALS
)
'';
}));
suggestedPrograms = [
"geoclue2"
];
sandbox.wrapperType = "inplace"; #< /share directory contains Gir info which references libgnome-maps.so by path
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.whitelistDri = true; # for perf
sandbox.whitelistDbus = [
"system" # system is required for non-portal location services
@@ -33,11 +45,10 @@
];
sandbox.whitelistWayland = true;
sandbox.net = "clearnet";
sandbox.usePortal = false; # TODO: set up portal-based location services
persist.byStore.plaintext = [ ".cache/shumate" ];
persist.byStore.private = [
({ path = ".local/share/maps-places.json"; type = "file"; })
{ path = ".local/share/maps-places.json"; type = "file"; }
];
};
}

View File

@@ -2,10 +2,10 @@
# cache dir is just for weather data (or maybe a http cache)
{ ... }:
{
sane.programs."gnome.gnome-weather" = {
sane.programs.gnome-weather = {
buildCost = 1;
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.wrapperType = "inplace"; #< /share/org.gnome.Weather/org.gnome.Weather file refers to bins by full path
sandbox.whitelistWayland = true;
sandbox.net = "clearnet";

View File

@@ -42,13 +42,13 @@
# - mkv container + H.265 video + E-AC-3/48k stereo audio:
# - LGTV: no transcoding needed
#
{ config, lib, pkgs, ... }:
{ config, lib, ... }:
let
cfg = config.sane.programs.go2tv;
in
{
sane.programs.go2tv = {
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.net = "clearnet";
sandbox.autodetectCliPaths = "existingFile";
# for GUI invocation, allow the common media directories

View File

@@ -0,0 +1,27 @@
{ ... }:
{
sane.programs.gocryptfs = {
sandbox.method = "bunpen";
sandbox.autodetectCliPaths = "existing";
sandbox.capabilities = [
# CAP_SYS_ADMIN is only required if directly invoking gocryptfs.
# it's not *necessarily* required if using a mount helper like `mount.fuse3-sane`
# however if using a namespace-based sandbox method (bunpen, bwrap), and you wish
# to preserve user mappings, it's still required.
"sys_admin"
"chown"
"dac_override"
"dac_read_search"
"fowner"
"lease"
"mknod"
"setgid"
"setuid"
];
sandbox.tryKeepUsers = true;
sandbox.keepPids = true;
suggestedPrograms = [
"util-linux" #< gocryptfs complains that it can't exec `logger`, otherwise. TODO(2024-09-09): is this still needed?
];
};
}

View File

@@ -22,7 +22,7 @@ in {
];
});
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.whitelistDbus = [ "user" ]; # it won't launch without it, dunno exactly why.
sandbox.whitelistWayland = true;
sandbox.net = "clearnet";

View File

@@ -25,6 +25,12 @@ in
"jq"
# and systemd, for udevadm
];
sandbox.method = "bunpen";
sandbox.net = "all";
sandbox.autodetectCliPaths = "existing"; #< N.B.: `test -f /dev/ttyUSB1` fails, we can't use `existingFile`
sandbox.whitelistDbus = [ "system" ]; #< to register with Avahi
services.gps-share = {
description = "gps-share: make local GPS serial readings available over Avahi";
# usage:
@@ -46,10 +52,6 @@ in
partOf = [ "gps" ];
depends = [ "eg25-control-powered" ];
};
sandbox.method = "bwrap";
sandbox.net = "all";
sandbox.autodetectCliPaths = "existing"; #< N.B.: `test -f /dev/ttyUSB1` fails, we can't use `existingFile`
};
# TODO: restrict this to just LAN devices!!

View File

@@ -3,7 +3,7 @@
sane.programs."sway-contrib.grimshot" = {
packageUnwrapped = pkgs.sway-contrib.grimshot.override {
# my `sway` is heavily patched to be cross compatible
sway-unwrapped = config.sane.programs.sway.package.sway-unwrapped;
sway-unwrapped = config.sane.programs.sway.package;
};
suggestedPrograms = [
# runtime dependencies (grimshot is just a trivial shell script)
@@ -14,7 +14,8 @@
# "sway"
"wl-clipboard"
];
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.keepPids = true; #< needed by wl-clipboard
sandbox.whitelistWayland = true;
sandbox.whitelistDbus = [ "user" ];
sandbox.autodetectCliPaths = "existingFileOrParent";

View File

@@ -2,6 +2,9 @@
# - `gst-device-monitor-1.0 Audio/Sink` #< show all audio sinks
# - `gst-device-monitor-1.0 Audio/Source` #< show all audio sources (microphones)
# - `gst-device-monitor-1.0 Video/Source` #< show all video sources (cameras)
# the output will include things like
# `gst-launch-1.0 pipewiresrc target-object=90 ! ...`
# in which case, view it like (for a camera): `gst-launch-1.0 pipewiresrc target-object=90 ! glimagesink`
{ pkgs, ... }:
{
sane.programs.gst-device-monitor = {
@@ -20,7 +23,7 @@
];
});
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.whitelistAudio = true;
sandbox.extraPaths = [
"/dev" # tried, but failed to narrow this down (moby)

View File

@@ -0,0 +1,24 @@
# basic environment tests:
# - `gst-launch-1.0 audiotestsrc ! autoaudiosink`
# - `gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink`
# more usage here: <https://github.com/matthew1000/gstreamer-cheat-sheet>
{ pkgs, ... }:
{
sane.programs.gst-launch = {
packageUnwrapped = (
pkgs.linkBinIntoOwnPackage pkgs.gst_all_1.gstreamer "gst-launch-1.0"
).overrideAttrs (base: {
# XXX the binaries need `GST_PLUGIN_SYSTEM_PATH_1_0` set to function,
# but nixpkgs doesn't set those.
nativeBuildInputs = (base.nativeBuildInputs or []) ++ [
pkgs.wrapGAppsNoGuiHook
];
buildInputs = (base.buildInputs or []) ++ (with pkgs; [
gst_all_1.gst-plugins-base
gst_all_1.gst-plugins-good
gst_all_1.gst-libav # for H.264 decoding
pipewire
]);
});
};
}

View File

@@ -3,7 +3,7 @@
sane.programs.handbrake = {
buildCost = 1;
sandbox.method = "landlock"; #< also supports bwrap, but landlock ensures we don't write to non-mounted tmpfs dir
sandbox.method = "bunpen"; #< untested
sandbox.whitelistDbus = [ "user" ]; # notifications
sandbox.whitelistWayland = true;
sandbox.extraHomePaths = [

View File

@@ -0,0 +1,9 @@
# use like `haredoc bufio::read_line`
{ pkgs, ... }:
{
sane.programs.haredoc = {
sandbox.method = "bunpen";
sandbox.whitelistPwd = true; #< search for function documentation below the current directory
env.HAREPATH = "${pkgs.hare}/src/hare/stdlib";
};
}

View File

@@ -1,9 +1,9 @@
{ ... }:
{
sane.programs.htop = {
sandbox.method = "landlock";
sandbox.method = "bunpen";
sandbox.keepPidsAndProc = true;
sandbox.extraPaths = [
"/proc"
"/sys/devices"
];
fs.".config/htop/htoprc".symlink.target = ./htoprc;

View File

@@ -3,7 +3,7 @@
sane.programs.imagemagick = {
buildCost = 1;
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.wrapperType = "inplace"; # /etc/ImageMagick-7/delegates.xml refers to bins by absolute path
sandbox.whitelistPwd = true;
sandbox.autodetectCliPaths = "existingOrParent"; #< arg formatting is complicated enough that this won't always work.

View File

@@ -0,0 +1,21 @@
{ ... }:
{
sane.programs.inkscape = {
buildCost = 1;
sandbox.method = "bunpen";
sandbox.whitelistWayland = true;
sandbox.extraHomePaths = [
".config/dconf" #< else opening images fails
"Pictures/albums"
"Pictures/cat"
"Pictures/from"
"Pictures/Photos"
"Pictures/Screenshots"
"Pictures/servo-macros"
"dev"
"ref"
"tmp"
];
sandbox.autodetectCliPaths = true;
};
}

View File

@@ -1,9 +1,9 @@
{ pkgs, ... }:
{ ... }:
{
sane.programs.kdenlive = {
buildCost = 1;
sandbox.method = "bwrap";
sandbox.method = "bunpen";
sandbox.extraHomePaths = [
"Music"
"Pictures/from" # e.g. Videos taken from my phone
@@ -16,5 +16,6 @@
sandbox.whitelistDbus = [ "user" ]; # notifications
sandbox.whitelistDri = true;
sandbox.whitelistWayland = true;
sandbox.whitelistX = true;
};
}

View File

@@ -10,13 +10,13 @@
'' + (upstream.preFixup or "");
});
sandbox.method = "bwrap"; # TODO:sandbox untested
sandbox.method = "bunpen";
sandbox.net = "clearnet";
sandbox.whitelistDbus = [ "user" ]; # needs to connect to dconf via dbus
sandbox.whitelistDri = true; #< required
sandbox.whitelistWayland = true;
buildCost = 2;
buildCost = 2; # webkitgtk
secrets.".local/share/komikku/keyrings/plaintext.keyring" = ../../../secrets/common/komikku_accounts.json.bin;
# downloads end up here, and without the toplevel database komikku doesn't know they exist.
@@ -27,5 +27,8 @@
persist.byStore.ephemeral = [
".cache/komikku"
];
# XXX(2024-08-08): komikku can handle URLs from sources it understands (maybe), but not files (even if encoded as file:// URI)
# mime.associations."application/vnd.comicbook+zip" = "info.febvre.Komikku.desktop"; # .cbz
};
}

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