Compare commits

...

586 Commits

Author SHA1 Message Date
1796d3c259 sxmo-utils: call out (but dont apply) the lock-state perf patch 2023-07-31 02:22:16 +00:00
b565a719fb sxmo-utils: fetch upstreamed xkb path patch instead of using local patch 2023-07-31 02:13:15 +00:00
f7ac46fd30 refactor: don't hardcode the libreoffice 'fresh' variant 2023-07-31 02:03:19 +00:00
61cf801983 nixpatches: use the dtrx from upstream PR 2023-07-31 01:59:53 +00:00
ae9a81919f replace unar with dtrx
the former is costly to (cross-)compile
2023-07-31 01:13:15 +00:00
9ca8c74ed7 feeds: add wireshark podcast 2023-07-31 00:11:47 +00:00
fd58896c0c cross: no longer emulate perl packages 2023-07-31 00:03:21 +00:00
d2a46e88f6 gui: disable chromium 2023-07-31 00:02:09 +00:00
5cd05d8762 programs: split consoleUtils into separate normal/desktop sets 2023-07-30 11:59:38 +00:00
a35f3e238d jellyfin: switch back to stock qt5 upstream 2023-07-30 11:30:17 +00:00
039d685e3c flake: deploy-moby: deploy to the wireguard address, to handle when the device is docked 2023-07-30 11:23:02 +00:00
da42b3ddd7 sxmo: address fonts.fonts -> fonts.packages deprecation warning 2023-07-30 02:26:17 +00:00
51eaf83be8 komikku: downgrade to nixpkgs source, keeping my upstreamed patch 2023-07-30 01:49:12 +00:00
d8a6a1df41 cross fixes 2023-07-30 01:48:29 +00:00
36176abdf3 libwacom, pipewire: fix build/remove qt5 dep 2023-07-30 01:45:37 +00:00
085c38ea47 moby: ship portfolio instead of nautilus file browser 2023-07-30 01:44:49 +00:00
9adaece9d6 sane.programs.nheko: split to own file 2023-07-30 01:44:08 +00:00
df8e572a8f sane.programs.megapixels: ship w/o qt deps 2023-07-30 01:43:35 +00:00
d39b698066 sane.programs.fractal: split to separate file 2023-07-30 01:42:58 +00:00
83c483395c fractal-lated: bump 2023-07-30 01:41:47 +00:00
2e08321016 cross: leave notes for what blocks each fix from being upstreamed 2023-07-29 10:57:55 +00:00
abf80d765c cross: fix nautilus; reduce emulation for tracker{,-miners} 2023-07-29 10:57:05 +00:00
8c0b215832 overlays: disable-flakey-tests: remove dead code 2023-07-28 10:49:05 +00:00
28c9bd3cac overlays: disable-flakey-tests: remove ell/libwacom (not flakey); add elfutils 2023-07-28 10:49:05 +00:00
e1e40332f7 cross: reduce gtk-related emulation (esp wrapGAppsHook) 2023-07-28 10:49:05 +00:00
28ef8141f7 nixpkgs: 2023-07-24 -> 2023-07-25; uninsane-dot-org
```
• Updated input 'nixpkgs-unpatched':
    'github:nixos/nixpkgs/b12803b6d90e2e583429bb79b859ca53c348b39a' (2023-07-24)
  → 'github:nixos/nixpkgs/ef99fa5c5ed624460217c31ac4271cfb5cb2502c' (2023-07-25)
• Updated input 'uninsane-dot-org':
    'git+https://git.uninsane.org/colin/uninsane?ref=refs/heads/master&rev=1542323cfb46a8950c17a3afa5f7cd2e62dd9672' (2023-07-02)
  → 'git+https://git.uninsane.org/colin/uninsane?ref=refs/heads/master&rev=fcec1d09b6c469d9425a716b11b4f4995a285774' (2023-07-25)
```
2023-07-28 01:20:25 +00:00
ad6b0ea75e nixpkgs: 2023-07-22 -> 2023-07-24
```
• Updated input 'nixpkgs-unpatched':
    'github:nixos/nixpkgs/12303c652b881435065a98729eb7278313041e49' (2023-07-22)
  → 'github:nixos/nixpkgs/b12803b6d90e2e583429bb79b859ca53c348b39a' (2023-07-24)
• Updated input 'sops-nix':
    'github:Mic92/sops-nix/bd695cc4d0a5e1bead703cc1bec5fa3094820a81' (2023-07-16)
  → 'github:Mic92/sops-nix/c36df4fe4bf4bb87759b1891cab21e7a05219500' (2023-07-24)
• Updated input 'sops-nix/nixpkgs-stable':
    'github:NixOS/nixpkgs/13231eccfa1da771afa5c0807fdd73e05a1ec4e6' (2023-07-16)
  → 'github:NixOS/nixpkgs/ce45b591975d070044ca24e3003c830d26fea1c8' (2023-07-22)
```
2023-07-28 01:20:25 +00:00
f59da7ad0f feeds: add minding our way 2023-07-28 01:14:28 +00:00
183457444c feeds: add Ezra Klein show 2023-07-28 01:08:19 +00:00
28a91723b8 feeds: add Atlas Obscura podcast 2023-07-28 01:06:15 +00:00
9b53a28920 lemmy-server: remove useless override 2023-07-28 00:57:08 +00:00
49e33d7238 mpv-uosc-latest: warn once next release hits nixpkgs 2023-07-28 00:55:37 +00:00
6572557b5b flake: add help program 2023-07-28 00:49:44 +00:00
e18fb2ce4e mpv: change reverse seek from 30s to 10s 2023-07-28 00:34:49 +00:00
027e7cb074 cross: fix mpvScripts.mpris compilation 2023-07-27 12:16:23 +00:00
13ae0b798c mpv-uosc-latest: fix fonts 2023-07-27 12:16:09 +00:00
d8675b544a mpv: uosc: fix for touchscreen support 2023-07-27 11:45:28 +00:00
5bf5d82d30 mpv: add the mpris plugin 2023-07-27 05:47:21 +00:00
0c92f3695a mpv: switch to uosc interface 2023-07-26 12:36:01 +00:00
558258c367 moby: switch to mpv
needs some more tuning, but ditching vlc means no more Qt, and it looks
like i can tune the mpv UI to be substantially better for my wants
2023-07-26 09:56:35 +00:00
7f13c482e5 cross compilation: support clapper 2023-07-26 08:51:51 +00:00
7b21ede5c4 moby: enable gpsd 2023-07-25 12:05:41 +00:00
219bb02cb8 refactor: moby: cleaner way to disable gestures 2023-07-25 10:56:29 +00:00
2df59f7c7d moby: rename firmware.nix -> bootloader.nix 2023-07-25 10:52:58 +00:00
11a7370a76 moby: sxmo: dont auto-start gestures daemon 2023-07-24 21:46:23 +00:00
44e3b01e7c moby: sxmo: waybar: remove the 2px shadows 2023-07-24 21:11:48 +00:00
c7f0e5c8b5 moby: sxmo: waybar: use consistent left/right padding 2023-07-24 21:11:08 +00:00
7ce33340f9 moby: sxmo: style titlebars 2023-07-24 10:50:08 +00:00
8f77b1db94 moby: sxmo: swaybar: decrease animations 0.3s -> 0.2s 2023-07-24 09:36:21 +00:00
f4cac0c158 moby: sxmo: swaybar: shrink from 32 px -> 28 px 2023-07-24 09:33:02 +00:00
04106e660e moby: sxmo: stylize the waybar to match other colors 2023-07-24 08:13:56 +00:00
6ed550b813 moby: theme bemenu to match desktop background 2023-07-24 03:33:50 +00:00
1cfd0fab6a sxmo: patch over duplicated lisgd services 2023-07-24 01:36:13 +00:00
5a31a0b415 koreader-from-src: clean up some dead code/comments 2023-07-23 23:44:33 +00:00
eb82268eee nipkgs: 2023-07-21 -> 2023-07-22; mobile-nixos 2023-05-07 -> 2023-07-22
```
• Updated input 'mobile-nixos':
    'github:nixos/mobile-nixos/ba4638836e94a8f16d1d1f9e8c0530b86078029c' (2023-05-07)
  → 'github:nixos/mobile-nixos/56fc9f9619f305f0865354975a98d22410eed127' (2023-07-22)
• Updated input 'nixpkgs-unpatched':
    'github:nixos/nixpkgs/9ca785644d067445a4aa749902b29ccef61f7476' (2023-07-21)
  → 'github:nixos/nixpkgs/12303c652b881435065a98729eb7278313041e49' (2023-07-22)
```
2023-07-23 21:04:46 +00:00
86964f6fde koreader: ship the from-src build 2023-07-23 21:00:43 +00:00
3121a6a7e9 cross: koreader-from-src: fix by emulating luajit 2023-07-23 11:37:18 +00:00
c353f06832 koreader-from-src: support cross compilation (cross luajit fails due to table.pack == nil) 2023-07-23 01:29:20 +00:00
b6a878757c sane-bt-search: implement --h265 flag 2023-07-22 21:56:00 +00:00
c862b559e7 sane-bt-search: error on bad --top=N usage 2023-07-22 21:55:24 +00:00
64c8dabaf2 nixpkgs: 2023-07-16 -> 2023-07-21
```
• Updated input 'nixpkgs-unpatched':
    'github:nixos/nixpkgs/6cee3b5893090b0f5f0a06b4cf42ca4e60e5d222' (2023-07-16)
  → 'github:nixos/nixpkgs/9ca785644d067445a4aa749902b29ccef61f7476' (2023-07-21)
```
2023-07-22 10:57:43 +00:00
512b5d78d4 moby: update bg, and add the blur/fade to the image instead of to conky 2023-07-22 10:56:06 +00:00
0479a43f2d koreader-from-src: remove some unneeded buildInputs 2023-07-22 09:32:15 +00:00
307e93de3b koreader: RSS: specify download_full_article=true by default 2023-07-22 08:55:05 +00:00
13d623201e koreader-from-src: it runs! 2023-07-22 08:44:11 +00:00
f223af584d koreader: build to install
launch doesn't work because it fails to load libSDL.so
2023-07-22 06:03:54 +00:00
9a2f648463 koreader-from-src: get the entire buildPhase working
fails in install: bash: line 1: /build/koreader/platform/debian/do_debian_package.sh: cannot execute: required file not found
2023-07-22 06:03:54 +00:00
e29361f05e koreader-from-src: get glib input working 2023-07-22 06:03:54 +00:00
439eeeeb45 koreader-from-src: get lua-Spore, libzmq, czmq, libffi deps passing 2023-07-22 06:03:54 +00:00
6a6276c2e0 koreader-from-src: get deps compiling: lua-htmlparser, lpeg 2023-07-22 06:03:54 +00:00
e5d311188e koreader-from-src: get a few more dependencies to succeed 2023-07-22 06:03:54 +00:00
98ef5d77c3 koreader-from-src: get mupdf to build 2023-07-22 06:03:54 +00:00
f3edafd11c koreader-from-src: add most remaining sources 2023-07-22 06:03:54 +00:00
2fdf95cea6 koreader-from-src: add more sources 2023-07-22 06:03:54 +00:00
7b8af3e719 koreader-from-src: remove deepClone and keepDotGit options 2023-07-22 06:03:54 +00:00
f95c45fb8e koreader-from-src: enable freetype2, fbink sources
it seems we still check out submodules even if deepClone is false?
2023-07-22 06:03:54 +00:00
0be20351a1 koreader-from-src: add fribidi source 2023-07-22 06:03:54 +00:00
519ee152b9 koreader-from-src: sort the thirdparty sources alphabetically 2023-07-22 06:03:54 +00:00
5baba0378f koreader-from-src: add curl, zstd sources 2023-07-22 06:03:54 +00:00
3ac193f9b4 koreader-from-src: specify thirdparty sources as attrs instead of list 2023-07-22 06:03:54 +00:00
8b72338f3a koreader-from-src: add sources for libk2pdfopt 2023-07-22 06:03:54 +00:00
c82e445e07 koreader-from-src: add sources for tesseract/leptonica 2023-07-22 06:03:54 +00:00
5ce0805046 koreader-from-src: nit: tidy fetchgit impl 2023-07-22 06:03:54 +00:00
7e5904c073 koreader-from-src: add libpng dep 2023-07-22 06:03:54 +00:00
cc50ad172c koreader-from-src: vendor zlib 2023-07-22 06:03:54 +00:00
29a4466750 koreader-from-src: get further into the build; split sources into own file 2023-07-22 06:03:54 +00:00
ba9eebcda8 koreader-from-src: tidy up 2023-07-22 06:03:54 +00:00
44ba0adacc koreader-from-src: advance the build past luajit (the following jpeg dep fails) 2023-07-22 06:03:54 +00:00
695ff8d057 WIP: build koreader from source 2023-07-22 06:03:54 +00:00
c71136c315 sxmo: conky: tune the shade colors 2023-07-21 23:07:52 +00:00
e7d5b14ab0 sxmo: battery_estimate: improve edge cases 2023-07-21 22:51:24 +00:00
6d216c14fa moby: conky: update config to work better with nixos bg 2023-07-21 22:46:59 +00:00
f037e0b5a4 sxmo: update docs links 2023-07-21 22:46:14 +00:00
75fe6226c8 moby: use librewolf as default browser again 2023-07-21 21:29:48 +00:00
556664f10d sxmo: start lisgd by default again
patching it out the way i was is incompatible with the upstream patch which
makes its enablement status persistent
2023-07-21 21:28:42 +00:00
bc46dc310d sxmo: define a background 2023-07-21 21:28:26 +00:00
94bae57411 gthumb: add svg mime association 2023-07-21 20:00:45 +00:00
bd16aaa884 sxmo-utils: fix so auto-rotate does not restart gestures 2023-07-21 10:17:21 +00:00
777d1a1588 add todo: pkgs.impure-cached set 2023-07-21 09:13:15 +00:00
a73937c32c complete a todo: webkitgtk mem use/swap 2023-07-21 09:10:13 +00:00
ee284901ff firefox-extensions: bypass-paywalls-clean: disable nag pages 2023-07-18 22:38:30 +00:00
0cb81bb86f browserpass-extension: nit: remove unused parameter 2023-07-18 22:08:27 +00:00
10bdd3c05a firefox: ship bypass-paywalls-clean extension 2023-07-18 22:08:27 +00:00
5ed33d90cf moby: fix sidebery disable type 2023-07-18 20:06:36 +00:00
535bbd2c0b sane.{programs,user}.fs: pass fs values onto sane.fs unmerged
notably, this allows ~/.config/zsh/.zshrc to be specified by more than one location, and for the values to not overwrite one another
2023-07-18 11:25:27 +00:00
ad16e50081 sxmo: configure screenshot directory 2023-07-18 10:40:54 +00:00
9f6760a37f moby: doc: add resources 2023-07-18 10:39:44 +00:00
ef203c3215 sxmo-utils: use makeBinaryWrapper for better perf 2023-07-18 10:18:15 +00:00
e3b7896169 zsh/starship: improve padding on ssh line 2023-07-18 10:17:13 +00:00
91f47f863d zsh: factor out the colors to avoid repeating them 2023-07-18 10:14:13 +00:00
532a78e2b2 desko: disable wpa_supplicant 2023-07-18 10:02:25 +00:00
11a4b7006e upnp-forwards: fix timer to actually run every hour 2023-07-18 09:54:06 +00:00
a907fa1ca7 flake: rework so deploy scripts can be run in parallel 2023-07-18 09:10:25 +00:00
90279efebb sxmo-utils: add missing grim dep (for wayland screenshots) 2023-07-18 08:29:42 +00:00
5c1eaf273e zsh/starship: fix bg color for ssh prompt 2023-07-18 08:28:53 +00:00
f12737b1f9 starship: try some other status symbols (but stay as is) 2023-07-18 03:51:03 +00:00
254b248bf3 starship: configure bg color for username section 2023-07-18 03:41:45 +00:00
431b1054e6 complete starship/zsh perf todo 2023-07-18 03:32:31 +00:00
e6b5223e2e zsh: starship: theme 2023-07-18 03:26:51 +00:00
d583d5db4f cross: emulate less of gnustep 2023-07-18 02:50:35 +00:00
1709f64a69 zsh/starship: fix init 2023-07-18 02:17:44 +00:00
23e95ba2ba modules: fs: symlink.text: allow specifying it multiple times 2023-07-18 02:17:25 +00:00
1dfd894568 cross: gnustep: emulate only gnustep.base 2023-07-18 01:32:50 +00:00
13d3a5ba6b cross: silence qt.overrideScope' warning 2023-07-18 01:32:06 +00:00
2716c0398b zsh: switch to starship prompt 2023-07-18 01:30:53 +00:00
0ba1a9f984 zsh: factor p10k stuff out of the main module; minimal support for starship prompt 2023-07-18 01:28:30 +00:00
1ddd79fdf0 complete todos: sway super; firefox first run prompts 2023-07-18 00:43:58 +00:00
761d60a7f4 cross: fix browserpass-extension compilation 2023-07-17 22:28:05 +00:00
82f141c0df firefox-extensions: make it a scope 2023-07-17 22:27:49 +00:00
6ce10b00af firefox-extensions: refactor to be more amenable to overrides 2023-07-17 22:19:29 +00:00
ff17ed599d firefox: disable metamask 2023-07-17 21:33:15 +00:00
96d0c52d28 refactor: firefox-extensions: patch in preferences at the same place we define how to build the addon 2023-07-17 21:32:10 +00:00
007c13f975 sponsorblock: remove the goddamn first-run popup
fuck javascript/typescript/whatever

y'all started with a low-complexity ecosystem and then drove the whole thing with some apparent goal of maximizing complexity

minified js? WHY? compile to native/wasm if you care about perf, else optimize for readability/patchability and leave compression to gzip like a normal fucking person
2023-07-17 21:22:24 +00:00
2b9de91540 firefox-extensions: make the patching logic even more pluggable 2023-07-17 20:47:55 +00:00
0175adbf27 firefox-extensions: make the patching logic more pluggable 2023-07-17 20:41:04 +00:00
83bc056ceb nixpkgs: 2023-07-15 -> 2023-07-16
```
• Updated input 'nixpkgs-unpatched':
    'github:nixos/nixpkgs/8acef304efe70152463a6399f73e636bcc363813' (2023-07-15)
  → 'github:nixos/nixpkgs/6cee3b5893090b0f5f0a06b4cf42ca4e60e5d222' (2023-07-16)
• Updated input 'sops-nix':
    'github:Mic92/sops-nix/cfe47aff8660fd760b1db89613a3205c2c4ba7b6' (2023-07-15)
  → 'github:Mic92/sops-nix/bd695cc4d0a5e1bead703cc1bec5fa3094820a81' (2023-07-16)
• Updated input 'sops-nix/nixpkgs-stable':
    'github:NixOS/nixpkgs/3dc2bc15956db2ff2316af45eefd45803fc1372b' (2023-07-15)
  → 'github:NixOS/nixpkgs/13231eccfa1da771afa5c0807fdd73e05a1ec4e6' (2023-07-16)
```
2023-07-17 20:12:50 +00:00
0e5cb3ada9 nixpkgs: 2023-07-14 -> 2023-07-15
```
• Updated input 'nixpkgs-unpatched':
    'github:nixos/nixpkgs/dfdbcc428f365071f0ca3888f6ec8c25c3792885' (2023-07-14)
  → 'github:nixos/nixpkgs/8acef304efe70152463a6399f73e636bcc363813' (2023-07-15)
```
2023-07-17 19:53:29 +00:00
b4d58a1515 sxmo: do restart lisgd on rotation, but don't enable lisgd by default
the restart logic is racy, and lisgd with autorotate becomes unusable after long enough
2023-07-17 19:53:19 +00:00
88153fe7a1 lemoa: 0.2.0 -> 0.3.0 2023-07-17 06:12:46 +00:00
ad67f7b13e browserpass-extension: move to firefox-extensions scope 2023-07-17 05:25:12 +00:00
40cc0367d8 zsh: switch(): add keep-going flag 2023-07-17 05:22:12 +00:00
a10e31257a sxmo-utils: sxmo_rotate: don't restart lisgd on sway 2023-07-17 05:21:46 +00:00
d7929ed06a firefox: generalize the facility to remove permissions from an extension 2023-07-17 03:57:42 +00:00
2c96ecfd0d firefox-extensions: factor out into own file 2023-07-17 03:12:04 +00:00
7c9664270d sane-wipe-browser: also kill browser processes that might be sticking around in ram 2023-07-17 01:55:32 +00:00
6f5c5a5113 browserpass-extension: disable startup/install notification 2023-07-17 01:55:32 +00:00
ebcc0c269e trust-dns: remove from this repo
it's fully upstreamed into nixpkgs now
2023-07-16 12:27:23 +00:00
57681bfa6d moby: re-enable firefox, but still default to epiphany 2023-07-16 12:26:31 +00:00
9058caac1d moby: firefox: disable sideberry 2023-07-16 12:25:42 +00:00
60650f82fe firefox: switch back to the default UI -- not pmos-mobile 2023-07-16 12:25:12 +00:00
11b4d2d66a doc: mime: show how to go from scheme -> .desktop association 2023-07-16 12:17:54 +00:00
0111d4220e nixos/trust-dns: add myself as maintainer 2023-07-16 04:13:19 +00:00
83b76dc47e moby: fix occasional blank screen on boot 2023-07-16 00:37:09 +00:00
c7ca3ad563 wifi: add new network 2023-07-15 22:40:18 +00:00
1c891f45df wifi: add new network 2023-07-15 22:36:53 +00:00
dc6790e168 nixpkgs: 2023-07-13 -> 2023-07-14
```
• Updated input 'nixpkgs-unpatched':
    'github:nixos/nixpkgs/e74e68449c385db82de3170288a28cd0f608544f' (2023-07-13)
  → 'github:nixos/nixpkgs/dfdbcc428f365071f0ca3888f6ec8c25c3792885' (2023-07-14)
```
2023-07-15 22:13:14 +00:00
3bbbb6c714 sxmo-utils: sxmo_wmmenu: respect SXMO_WORKSPACE_WRAPPING 2023-07-15 22:10:15 +00:00
8788a8c67a servo: upnp-forwards.timer: fix to invoke upnp-forwards.target instead of upnp-forwards.service 2023-07-15 22:08:55 +00:00
6ae73bdf87 lemmy-server: 0.18.1 -> 0.18.2 2023-07-15 21:04:19 +00:00
47a973b603 sops-nix: 2023-07-12 -> 2023-07-15
```
• Updated input 'sops-nix':
    'github:Mic92/sops-nix/88b964df6981e4844c07be8c192aa6bdca768a10' (2023-07-12)
  → 'github:Mic92/sops-nix/cfe47aff8660fd760b1db89613a3205c2c4ba7b6' (2023-07-15)
• Updated input 'sops-nix/nixpkgs-stable':
    'github:NixOS/nixpkgs/510d721ce097150ae3b80f84b04b13b039186571' (2023-07-09)
  → 'github:NixOS/nixpkgs/3dc2bc15956db2ff2316af45eefd45803fc1372b' (2023-07-15)
```
2023-07-15 10:12:29 +00:00
20b8e2934c moby: don't ship firefox 2023-07-15 10:11:45 +00:00
088286d8f7 mime: support multiple implementors of the same association, with different priorities 2023-07-15 10:11:31 +00:00
29b53d934f trust-dns: apply PR feedback 2023-07-15 09:07:57 +00:00
77e5f82b31 programs: rename web-browser -> firefox 2023-07-15 08:51:36 +00:00
55d64eb598 programs: factor out a sane.programs.<foo>.mime schema 2023-07-15 08:44:18 +00:00
d459dd0f85 net: switch from iwd back to stock NetworkManager/wpa_supplicant 2023-07-15 07:16:10 +00:00
9594c03d66 net: port iwd secrets to a .json file that i can make backend agnostic 2023-07-15 06:38:50 +00:00
7391ce0b05 programs: move the guiApps category up to hosts/modules/gui 2023-07-15 01:02:41 +00:00
2822dd6137 programs: update tor-browser bug info 2023-07-15 00:44:24 +00:00
e5cca42717 servo: fix sane.nixcache path 2023-07-15 00:40:31 +00:00
799c53adf4 sway/waybar: remove font specification (it's probably not used by the bar i have actually deployed, anyway?) 2023-07-15 00:38:57 +00:00
0ed9394fff sway: define the secret snippets more idiomatically 2023-07-15 00:23:14 +00:00
e6a989bc92 nginx/pleroma: correct an old todo 2023-07-15 00:08:05 +00:00
2385984152 duplicity: restrict readability 2023-07-15 00:02:22 +00:00
809c9f74c3 phosh: remove dead code 2023-07-14 23:59:35 +00:00
44b15ba8ed users: apply default permissions to any user who goes through the sane.users module 2023-07-14 23:56:01 +00:00
ab7068c819 lappy: remove some dead ipfs code 2023-07-14 23:44:47 +00:00
746af067dc moby: increase menu lines in landscape mode 2023-07-14 23:41:52 +00:00
918febe884 nixpkgs: 2023-07-12 -> 2023-07-13 2023-07-14 22:58:19 +00:00
b5d1baf3ee zramSwap: increase capacity to 100% of uncompressed RAM 2023-07-14 22:57:19 +00:00
2f5c33b2b4 nixcache: tidy up substituter config 2023-07-14 22:33:33 +00:00
fdc18821ca servo: matrix-appservice-irc: remove completed todo 2023-07-14 22:11:59 +00:00
2a537cd3b1 splatmoji: port fully to wayland 2023-07-14 22:09:43 +00:00
9aa4e6c0f2 remove completed todo's 2023-07-14 21:35:25 +00:00
6b1baefaa7 moby: link to some config references 2023-07-14 06:48:02 +00:00
85483cde79 moby: allow video group to write to front-facing LEDs 2023-07-14 06:47:32 +00:00
8feafbb615 pinephone: fix flashlight permissions, the proper way (udev) 2023-07-14 05:55:44 +00:00
e1bb0de76f sxmo: fix pinephone LED permissions 2023-07-14 00:30:53 +00:00
d7fb1b615a feeds: add boginjr.com 2023-07-14 00:02:37 +00:00
8aa2712956 feeds: disable LessWrong (too noisy/too AI) and SimonWillison (too bro) 2023-07-13 23:48:50 +00:00
962ffeab7e re-enable zramSwap on all devices
this is critical on moby, though even with this swap, we run out of CMA (videoram) instead -- just later
2023-07-13 23:37:30 +00:00
e5072c8837 linux-megous: update docs 2023-07-13 23:36:22 +00:00
992ae37ccf sxmo: cleanup use of sane-lib.fs.wantedText 2023-07-13 22:20:26 +00:00
1642734aa3 hosts/common: cleanup uses of sane-lib.fs.wantedText 2023-07-13 22:19:18 +00:00
a8382fed12 hosts/common: move /var/lib/private defn into fs.nix 2023-07-13 22:18:45 +00:00
cfa50500ac hosts/common: remove commented-out code 2023-07-13 22:09:53 +00:00
d3d9b30f29 consolidate /tmp fs into hosts/modules/roles 2023-07-13 22:04:28 +00:00
4b99331e5a nixpkgs: 2023-07-11 -> 2023-07-12
```
• Updated input 'nixpkgs-unpatched':
    'github:nixos/nixpkgs/f2406198ea0e4e37d4380d0e20336c575b8f8ef9' (2023-07-11)
  → 'github:nixos/nixpkgs/2de8efefb6ce7f5e4e75bdf57376a96555986841' (2023-07-12)
```
2023-07-13 20:19:02 +00:00
76347309bc sxmo: disable Xwayland 2023-07-13 10:50:40 +00:00
1347199a87 sxmo: group these statements more logically 2023-07-13 10:50:40 +00:00
c8a59d9986 trust-dns: grab from nixpkgs PR 2023-07-13 10:49:12 +00:00
41f4d8e85a trust-dns: specify zone via shorthand 2023-07-13 10:04:20 +00:00
e38bf42506 trust-dns: migrate module to nixpkgs repo 2023-07-13 09:57:11 +00:00
ffec91a52c moby: disable zsh deadlines 2023-07-13 08:12:05 +00:00
f54f972056 vlc: move persisted data to ~/private, and add .cache/vlc, for artwork 2023-07-13 07:20:13 +00:00
f2eba95dfc users/colin: persist some notable cache directories 2023-07-13 07:17:27 +00:00
8b3521d08f fixup sxmo persistence (prev two commits don't build 2023-07-13 07:17:09 +00:00
5e07882568 sxmo: back the superd log directory with a store 2023-07-13 06:58:48 +00:00
abb4492897 sxmo: persist the /var/lib/lightdm directory 2023-07-13 06:56:03 +00:00
427e6bb696 /root: back by a physical store 2023-07-13 06:50:46 +00:00
d4ed4ae9f1 librewolf: *always* back the dot dir by a real disk
this saves ram on memory-constrained devices
2023-07-13 06:44:22 +00:00
fe5be03e0a readme: mention the doc/ folder 2023-07-13 06:35:11 +00:00
0875b6fd22 readme: suggest how to send patches 2023-07-13 06:34:19 +00:00
527607e38f desko: use sane.programs.steam 2023-07-13 06:27:54 +00:00
e416405f44 nixpkgs: 2023-07-10 -> 2023-07-11
```
• Updated input 'nixpkgs-unpatched':
    'github:nixos/nixpkgs/4a729ce4b1fe5ec4fffc71c67c96aa5184ebb462' (2023-07-10)
  → 'github:nixos/nixpkgs/f2406198ea0e4e37d4380d0e20336c575b8f8ef9' (2023-07-11)
```
2023-07-13 02:05:01 +00:00
5090340189 sxmo: battery_estimate: zero-pad the minutes 2023-07-13 02:02:25 +00:00
7dc0899784 sxmo: conky: tune config 2023-07-13 02:00:15 +00:00
19b697cc52 conky-config: remove trailing whitespace 2023-07-13 01:36:24 +00:00
cd011d845a sxmo: include superd on path 2023-07-13 01:35:37 +00:00
67a52eca86 sxmo: conky: include battery estimate 2023-07-13 01:35:31 +00:00
29bf9d410f sxmo: customize the conky display 2023-07-13 01:35:23 +00:00
694a5383cb sane-bt-search: ignore the uhd tag 2023-07-13 01:35:12 +00:00
96b3896017 sane-vpn-up/down: fix sane-ip-check invocation to not use UPNP 2023-07-13 01:33:52 +00:00
4a7398da2f trust-dns: finish hardening 2023-07-13 01:33:31 +00:00
ceef95cbe3 fix komikku patch hash 2023-07-13 00:59:30 +00:00
99d97af742 sops-nix: 2023-07-09 -> 2023-07-12
```
• Updated input 'sops-nix':
    'github:Mic92/sops-nix/b2047c8fc963407916ad3834165309007dc5a1f7' (2023-07-09)
  → 'github:Mic92/sops-nix/88b964df6981e4844c07be8c192aa6bdca768a10' (2023-07-12)
```
2023-07-12 11:38:16 +00:00
545babe86c sxmo: document waybar-config defaults 2023-07-12 11:36:50 +00:00
ba7078527a sway: fix config symlink 2023-07-12 11:34:41 +00:00
c2b2d5eaa9 sxmo: switch to waybar 2023-07-12 11:28:54 +00:00
58be04b632 cross: get waybar to compile 2023-07-12 10:27:08 +00:00
f0d396543f sxmo: set mod key to alt instead of logo 2023-07-12 10:10:03 +00:00
6d21c917d5 sxmo: import the default sway config 2023-07-12 10:03:58 +00:00
ec277d1347 sxmo: move to subdirectory 2023-07-12 09:42:23 +00:00
f5264508eb komikku: fix cross compilation 2023-07-12 09:16:32 +00:00
0d6a10bc3a komikku: don't crash when crop_borders fails to find borders 2023-07-12 08:58:35 +00:00
33c6330cbc gui: delete plasma-mobile 2023-07-12 08:25:09 +00:00
ece02f35c6 gui: delete plasma 2023-07-12 08:24:55 +00:00
d4e6001431 moby: increase workspaces from 4 -> 5 2023-07-12 08:24:13 +00:00
cded837255 moby: sort sxmo prefs alphabetically 2023-07-12 08:24:13 +00:00
2ae187ea62 komikku: update to latest rev 2023-07-12 08:24:13 +00:00
e317cc4c12 refactor: sway: fix config indentation 2023-07-12 08:24:01 +00:00
83275ed0b6 komikku: 1.21.1 -> 1.22.0 2023-07-12 07:51:42 +00:00
e5a81f0a45 moby: update env tunables 2023-07-12 06:45:47 +00:00
e4d0cabd13 conky: enable Wayland support; 1.18.0 -> 1.19.2 2023-07-12 02:09:34 +00:00
a2a2db1611 cross: Tangram: reduce emulated inputs 2023-07-12 01:25:46 +00:00
586b181714 snippets: update firewall address 2023-07-12 00:13:10 +00:00
a51817625a sandboxing todo: mention nixpak 2023-07-11 22:26:12 +00:00
ddec0cae7a nixpkgs: 2023-07-09 -> 2023-07-10
```
• Updated input 'nixpkgs-unpatched':
    'github:nixos/nixpkgs/408c0e8c15a1c9cf5c3226931b6f283c9867c484' (2023-07-09)
  → 'github:nixos/nixpkgs/4a729ce4b1fe5ec4fffc71c67c96aa5184ebb462' (2023-07-10)
```
2023-07-11 21:13:11 +00:00
4cc4c3293b programs: don't ship ncdu 2023-07-11 21:12:25 +00:00
615e9befb3 document some dconf findings 2023-07-11 10:05:46 +00:00
9502fb34c7 tangram: don't need to create the dconf db: dconf will do that for us if need-be 2023-07-11 10:04:03 +00:00
17951be995 tangram: persist dconf files
with this, saved tabs are *actually* saved
2023-07-11 10:02:47 +00:00
281116bc7d document how to ship programs 2023-07-11 08:11:48 +00:00
70fcf179d5 programs: ship ncdu 2023-07-11 08:11:10 +00:00
3f81370879 install-iwd: allow the paths to be omitted 2023-07-11 07:32:54 +00:00
f71fd4565b sane-ip-reconnect: be more resilient to errors 2023-07-11 07:24:46 +00:00
79fca6c5e5 sane-ip-reconnect: add type annotations to compound types 2023-07-11 07:13:16 +00:00
3bbc4aecbb fix derived secrets (all were failing) 2023-07-11 05:15:56 +00:00
464db2c118 complete UPNP service split todo 2023-07-11 01:57:47 +00:00
8e94d77b0f ports: create a separate systemd service per port forward
this allows one failed forward to not take down all forwards
2023-07-11 01:56:59 +00:00
307121ec2c sane_ssdp: cache the UPNP root device
i could also cache the lan and wan... future work, i guess
2023-07-11 01:18:47 +00:00
8bd7fa8a3f sway: use Super modifier instead of Alt
this allows applications to use the Alt key
2023-07-11 00:55:17 +00:00
41aa13621d add a TODO for using Starship prompt 2023-07-11 00:55:17 +00:00
f765e3d030 sane-ip-check: also store the upnp gateway 2023-07-11 00:55:04 +00:00
798f467128 sane_bt: add return type annotations 2023-07-10 22:42:39 +00:00
35431f5b53 sane_ssdp: add more type annotations 2023-07-10 22:41:06 +00:00
0bc1082596 Merge branch 'staging/nixpkgs-2023-07-09' 2023-07-10 22:32:44 +00:00
c23cb8470f sane-bt-search: document --manga flag 2023-07-10 21:53:55 +00:00
d46ee21ce0 nixpkgs: 2023-07-06 -> 2023-07-09
```
• Updated input 'nixpkgs-unpatched':
    'github:nixos/nixpkgs/3c7487575d9445185249a159046cc02ff364bff8' (2023-07-06)
  → 'github:nixos/nixpkgs/408c0e8c15a1c9cf5c3226931b6f283c9867c484' (2023-07-09)
```
2023-07-10 21:38:01 +00:00
abc9f4c464 moby: sxmo: switch SXMO_SWAY_SCALE back to default of 2 2023-07-10 09:07:17 +00:00
e92b621e09 sxmo: configure user prefs via ~/.config/sxmo/profile
rather than the system environment
2023-07-10 09:07:16 +00:00
d593349717 sane-ip-reconnect: repopulate secrets if necessary
sometimes iwd just... deletes them
2023-07-10 09:06:23 +00:00
452260f7c7 trust-dns: don't run as root 2023-07-10 09:00:37 +00:00
b648aca505 trust-dns: link to docs in service file 2023-07-10 08:12:07 +00:00
8c4af55f82 trust-dns: apply some hardening (still need more) 2023-07-10 08:00:45 +00:00
384428756d tangram/epiphany: preserve desktop files when patching 2023-07-10 06:49:27 +00:00
069f7b4616 sxmo: use ~/.config/sxmo/profile instead of system environment, for settings 2023-07-10 06:08:17 +00:00
c44756874a git: add todo for using toGitINI 2023-07-10 06:07:47 +00:00
23fb37a3e9 fs: have nodes require their parent instead of the weaker want
this may fix it so spurious (failed) mounts of ~/private *don't* create a bunch of directories that later cause a real mount to be impossible
2023-07-10 05:58:30 +00:00
5188ddf398 keyrings: answer a todo 2023-07-10 01:21:57 +00:00
db93bd42ed moby: ship megapixels camera app 2023-07-10 01:18:40 +00:00
b76d326da3 megapixels: fix cross compilation 2023-07-10 01:14:00 +00:00
3fa3091143 sxmo-utils: fix Tangram icon 2023-07-09 22:13:46 +00:00
81f527070f build machines: disable ccache 2023-07-09 18:55:37 +00:00
445bc08a0c desko: disable guest account 2023-07-09 18:49:36 +00:00
213e738305 sops-nix: 2023-07-02 -> 2023-07-09
```
• Updated input 'sops-nix':
    'github:Mic92/sops-nix/5ed3c22c1fa0515e037e36956a67fe7e32c92957' (2023-07-02)
  → 'github:Mic92/sops-nix/b2047c8fc963407916ad3834165309007dc5a1f7' (2023-07-09)
• Updated input 'sops-nix/nixpkgs-stable':
    'github:NixOS/nixpkgs/f553c016a31277246f8d3724d3b1eee5e8c0842c' (2023-07-02)
  → 'github:NixOS/nixpkgs/510d721ce097150ae3b80f84b04b13b039186571' (2023-07-09)
```
2023-07-09 18:38:54 +00:00
3c309b65af programs: ship tangram to gui platforms 2023-07-09 11:17:54 +00:00
c751268f62 epiphany: leave a note about missing .desktop files 2023-07-09 11:17:07 +00:00
1bd815d2ef tangram: disable sandbox (same reason as with epiphany) 2023-07-09 11:16:08 +00:00
b3db579deb add todos for sway/firefox/helix 2023-07-09 10:50:37 +00:00
b152794cb6 get tangram to cross compile 2023-07-09 10:50:01 +00:00
96ddc9513d sxmo-utils: apply upstreamed patches via fetchpatch instead of storing in-repo 2023-07-09 07:48:10 +00:00
158f978f19 sxmo-utils: add icon for Tangram 2023-07-09 07:29:10 +00:00
963e59070d programs: define persistence for Tangram 2023-07-09 07:20:38 +00:00
5e66bad3dd epiphany: fix to launch on moby 2023-07-09 03:13:17 +00:00
a3a3da4c62 implement a ldd-aarch64 package & ship it for dev hosts 2023-07-09 00:32:22 +00:00
a0473782f9 nixpkgs: 2023-07-05 -> 2023-07-06
```
• Updated input 'nixpkgs-unpatched':
    'github:nixos/nixpkgs/f292b4964cb71f9dfbbd30dc9f511d6165cd109b' (2023-07-05)
  → 'github:nixos/nixpkgs/3c7487575d9445185249a159046cc02ff364bff8' (2023-07-06)
```
2023-07-08 18:18:28 +00:00
640d9be83d derived-secrets: fix broken encoding 2023-07-08 11:20:28 +00:00
db72f5e11f fs: generated.script.scriptArgs -> generated.command 2023-07-08 11:15:23 +00:00
8753e5e0c6 fs: remove legacy generated.script.script option 2023-07-08 11:15:23 +00:00
558b35fee0 prepare fs.generated.script users to not assume a shell 2023-07-08 11:15:23 +00:00
3ce2716fbe fs: factor out the ensureSymlink/ensureDir/ensurePerms scripts 2023-07-08 10:35:10 +00:00
e9293dbe07 fs: fix raciness that was causing ensure-xyz services to run multiple times per boot 2023-07-08 09:08:59 +00:00
f18d624fd9 fs: avoid creating a new script for every fs entry 2023-07-08 09:00:49 +00:00
43aadef3b3 remove completed items from todo.md; add moby related improvements 2023-07-08 03:03:05 +00:00
6e3e45a9f6 fontconfig: re-enable
i'm not sure why this failed with lib.mkDefault
2023-07-08 02:27:21 +00:00
36dbf696e7 fontconfig: only enable for system, not user 2023-07-08 02:23:50 +00:00
e57efbcb21 zsh: fix history file persistence 2023-07-08 02:22:29 +00:00
8f57394cd2 persist: create the backing path as a dependency of the VFS path 2023-07-08 02:08:18 +00:00
01b8a28a52 programs.fs: remove extraneous wantedBeforeBy clause
it's provided by `sane.user.fs`
2023-07-08 02:06:44 +00:00
b42207882e programs.persist: fix to allow any options that underlying persist allows 2023-07-08 02:06:18 +00:00
b8ccc271fc mepo: fix savestate to be persisted as a file -- not a directory 2023-07-08 01:35:36 +00:00
95c105367c ~/.ssh/id_ed25519: correctly persist as a file -- not a directory 2023-07-08 01:35:23 +00:00
0a519eddb4 persist: allow persisting of individual files, not just directories
i actually do already, with ~/.ssh/id_ed25519 -- it works only as a fluke
2023-07-08 01:31:14 +00:00
8e4dc0c6ae helix: render whitespace 2023-07-08 00:54:51 +00:00
a257d8d1a1 helix: enable soft line wrapping 2023-07-08 00:27:12 +00:00
38411617ef fontconfig: only ship on GUI systems 2023-07-07 23:44:45 +00:00
c21efa005f show package changes during nixos-rebuild switch 2023-07-07 23:34:12 +00:00
24a3c22edc revoke ssh access from servo/moby into any other system (by default) 2023-07-07 21:15:00 +00:00
54b74498b6 helix: don't persist the grammars directory anymore 2023-07-07 11:05:13 +00:00
05f375a5f8 neovim: try to ship nix-shell highlighting (fail) 2023-07-07 10:45:41 +00:00
975bdd64cb helix: ship nix-shell syntax highlighting 2023-07-07 10:43:13 +00:00
62907acedc tree-sitter-nix-shell: init at 0.1.0 2023-07-07 08:33:15 +00:00
7004fb8f4e sane-bt-search: clean up type annotations (thanks Ben for the tips!) 2023-07-07 07:12:48 +00:00
5aeb6a5525 sane-bt-search: fix: parse --top as an integer 2023-07-07 07:11:47 +00:00
ad4631a5a8 sane-bt-search: add (limited) ability to search by category 2023-07-07 07:08:17 +00:00
799cbccdbe desko: disable devPkgs 2023-07-07 06:30:19 +00:00
1f82679f62 add a deploy-servo nix script, like deploy-moby 2023-07-06 22:40:25 +00:00
d318d61895 sxmo-utils: send a couple more patches upstream 2023-07-06 20:16:50 +00:00
e3b853e7f0 nixpkgs: 2023-07-04 -> 2023-07-05
```
• Updated input 'nixpkgs-unpatched':
    'github:nixos/nixpkgs/78419edadf0fabbe5618643bd850b2f2198ed060' (2023-07-04)
  → 'github:nixos/nixpkgs/f292b4964cb71f9dfbbd30dc9f511d6165cd109b' (2023-07-05)
```
2023-07-06 20:16:50 +00:00
8fa9815b10 sane-bt-search: fix usage for top flag 2023-07-06 20:16:50 +00:00
b7a77375b2 pleroma: block FB/IG/Meta's threads.net instance 2023-07-05 21:36:55 +00:00
d6ccd7d1cb nixpkgs: 2023-07-02 -> 2023-07-04
```
• Updated input 'nixpkgs-unpatched':
    'github:nixos/nixpkgs/0fbe93c5a7cac99f90b60bdf5f149383daaa615f' (2023-07-02)
  → 'github:nixos/nixpkgs/78419edadf0fabbe5618643bd850b2f2198ed060' (2023-07-04)
```
2023-07-05 09:14:51 +00:00
5c75f8c0e3 add todo for port 53 forward 2023-07-05 09:07:20 +00:00
07d7994176 pleroma: simplify proxy settings & make log level configurable 2023-07-05 09:04:50 +00:00
9e7930cb6e nixpatches: fix hashes 2023-07-05 09:04:50 +00:00
1d11c9b342 servo: persist media/datasets
it has to be under media so that transmission can see it
2023-07-05 09:04:50 +00:00
adb04c46f5 nixpkgs: 2023-07-01 -> 2023-07-02
```
• Updated input 'nixpkgs-unpatched':
    'github:nixos/nixpkgs/645ff62e09d294a30de823cb568e9c6d68e92606' (2023-07-01)
  → 'github:nixos/nixpkgs/0fbe93c5a7cac99f90b60bdf5f149383daaa615f' (2023-07-02)
```
2023-07-04 18:57:27 +00:00
43740c3b9b neovim: nit: fix "tex" -> "viml" typo 2023-07-04 10:28:44 +00:00
2131e638aa desko: enable some dev-related packages
useful as i hack on Helix
2023-07-04 10:27:59 +00:00
8bd2ad0456 zsh: add switch function 2023-07-04 03:31:13 +00:00
61cbdc2c85 add helix text editor 2023-07-04 03:28:54 +00:00
ebf6f46948 persist ~/Books 2023-07-03 22:38:30 +00:00
29e03d59f3 sxmo: cleaner terminal and keyboard config computation 2023-07-03 22:27:29 +00:00
e6cdd5450c moby: specify wvkbd layers explicitly 2023-07-03 22:19:50 +00:00
32e20cdda0 programs: enable epiphany web browser for all gui platforms 2023-07-03 08:16:40 +00:00
8600934755 programs: more cleanup 2023-07-03 08:03:55 +00:00
787b58b284 programs: reorder package groups 2023-07-03 07:58:02 +00:00
acf89a041e modules/programs: cleanup with statements 2023-07-03 07:55:05 +00:00
9340d5f391 programs: remove explicit default definitions 2023-07-03 07:49:44 +00:00
9f1d61c781 programs: remove quadratic behavior 2023-07-03 07:16:24 +00:00
83e48eabad WIP: decrease quadratic operations in modules/programs.nix 2023-07-03 07:04:57 +00:00
9b9273b725 programs: call out some quadratic behavior; i can try to fix it in the future 2023-07-03 06:41:48 +00:00
ccaff668c1 sane-lib: path: fix from bug; tidy 2023-07-03 05:28:53 +00:00
4c44101a83 add a todo for theming adwaita 2023-07-03 05:08:26 +00:00
85b7596763 enable cross-compilation of epiphany web browser 2023-07-03 03:00:46 +00:00
dfbf30912f add a todo for shipping camera app on moby 2023-07-02 23:16:59 +00:00
27964c9c40 moby: mark kernel compression todo item as complete 2023-07-02 23:14:18 +00:00
262592b26a programs: better way to ship jellyfin-media-player only on desktops 2023-07-02 23:12:12 +00:00
7b0e4caa16 programs: ship blanket ambient noise generator 2023-07-02 23:10:05 +00:00
9546908dbf remove unused sane-mount-* helpers 2023-07-02 23:01:56 +00:00
3961923599 scripts: move these to more appropriate places 2023-07-02 22:49:17 +00:00
6b55faec0c install-bluetooth: port to nix-shell 2023-07-02 22:42:52 +00:00
67bf15cca2 nixpkgs: 2023-06-29 -> 2023-07-01; sops-nix -> 2023-07-02; uninsane-dot-org
```
• Updated input 'nixpkgs-unpatched':
    'github:nixos/nixpkgs/4bc72cae107788bf3f24f30db2e2f685c9298dc9' (2023-06-29)
  → 'github:nixos/nixpkgs/645ff62e09d294a30de823cb568e9c6d68e92606' (2023-07-01)
• Updated input 'sops-nix':
    'github:Mic92/sops-nix/2ff6973350682f8d16371f8c071a304b8067f192' (2023-06-22)
  → 'github:Mic92/sops-nix/5ed3c22c1fa0515e037e36956a67fe7e32c92957' (2023-07-02)
• Updated input 'sops-nix/nixpkgs-stable':
    'github:NixOS/nixpkgs/e2e2059d19668dab1744301b8b0e821e3aae9c99' (2023-06-17)
  → 'github:NixOS/nixpkgs/f553c016a31277246f8d3724d3b1eee5e8c0842c' (2023-07-02)
• Updated input 'uninsane-dot-org':
    'git+https://git.uninsane.org/colin/uninsane?ref=refs/heads/master&rev=ae27eb61b55b6c6d83c25384fb163df398a80265' (2023-06-26)
  → 'git+https://git.uninsane.org/colin/uninsane?ref=refs/heads/master&rev=1542323cfb46a8950c17a3afa5f7cd2e62dd9672' (2023-07-02)
```
2023-07-02 12:00:24 +00:00
a62852072e sane-reclaim-disk-space: include delete-older-than 30d argument 2023-07-02 11:59:37 +00:00
83f2438739 moby: fix gtk icons 2023-07-02 11:58:57 +00:00
bad0e9cc53 gui: remove dead code 2023-07-02 11:35:03 +00:00
9aea0945a5 gtk: fix icons, and apply Tokyonight as default theme 2023-07-02 11:33:01 +00:00
cce87eb6fb WIP: theme gtk apps 2023-07-02 09:37:07 +00:00
9777e5f83c trust-dns: rework the module to be more suitable for upstreaming
still need to do hardening and docs
2023-07-02 08:21:33 +00:00
154711432f pleroma: link to docs 2023-07-02 04:33:34 +00:00
b8460b7524 refine moby todos 2023-07-02 03:00:46 +00:00
fa427ad7ea add todo for offline uninsane.org 2023-07-02 02:54:07 +00:00
7be7d5d938 sxmo-utils: add lemoa app listing (and change Tuba icon) 2023-07-02 01:52:26 +00:00
7c5ab7d253 ship lemoa on gui hosts 2023-07-02 01:40:36 +00:00
48adaa832e lemoa: 0.1.0 -> 0.2.0 2023-07-01 23:39:50 +00:00
38b44a31e4 sxmo-utils: link to upstreamed patches 2023-07-01 00:58:43 +00:00
9ad72af979 add todo for better email 2023-07-01 00:57:36 +00:00
2a2ce34bd8 git: sendemail: always annotate and confirm 2023-07-01 00:55:43 +00:00
b2e70c0210 programs: ship msmtp sendmail implementation 2023-07-01 00:28:59 +00:00
3d4cbbf005 git: add br -> branch alias 2023-06-30 23:13:56 +00:00
b18bdc4e3e sxmo-utils: fix typo in gthumb app 2023-06-30 21:17:12 +00:00
2f88ba92d1 nixpkgs: 2023-06-27 -> 2023-06-29
```
• Updated input 'nixpkgs-unpatched':
    'github:nixos/nixpkgs/e18dc963075ed115afb3e312b64643bf8fd4b474' (2023-06-27)
  → 'github:nixos/nixpkgs/4bc72cae107788bf3f24f30db2e2f685c9298dc9' (2023-06-29)
```
2023-06-30 20:29:58 +00:00
f25dbdd4d2 aerc: change name to match git name 2023-06-30 11:09:10 +00:00
3da58f1d41 kitty: set the TERMINAL env var by default 2023-06-30 11:02:53 +00:00
e519c1c629 patch prefered terminal into glib/gio apps like firefox
now i can type mailto:foo@bar.com into firefox urlbar and it opens in aerc in a new terminal
2023-06-30 11:02:53 +00:00
3df165593c web browser: set $BROWSER environment variable
this gets used as fallback by e.g. xdg-email
2023-06-30 08:50:58 +00:00
daabe09bb4 overlays: disable webkitgtk "separateDebugInfo = false;" override 2023-06-30 03:45:27 +00:00
dfbfae90a5 lemmy: remove db migration hack
all my lemmy patches can be removed from this repo, but i'll wait for some stability before actually doing that
2023-06-30 03:45:09 +00:00
ef9f62ed13 sxmo-utils: fix cozy appname 2023-06-29 23:21:24 +00:00
2c49dfa642 refactor: remove overlays/pins.nix 2023-06-29 22:47:51 +00:00
6ddc943a39 add todos for sxmo module & zsh optimizations 2023-06-29 22:45:25 +00:00
5c50243d23 git: allow common dif typo 2023-06-29 22:45:07 +00:00
556600e54b zsh: disable command suggestions 2023-06-29 22:43:49 +00:00
5db9c4f558 nix-index/nix-locate: re-enable 2023-06-29 21:24:32 +00:00
e22fb2f4f5 mime associations: add aerc for email (but... it doesnt work from gui) 2023-06-29 21:08:50 +00:00
71971a050c sxmo-utils: ship app icon for gThumb 2023-06-29 20:37:30 +00:00
ac97accd32 moby: ship gThumb 2023-06-29 20:23:53 +00:00
f391e467c2 networkmanager: remove the default plugins 2023-06-29 10:58:18 +00:00
fa5d4c467c sway: replace gnome-control-center with wdisplays
mostly this is driven to reduce my desktop's dependencies (particularly
on webkitgtk), but it also looks a little nicer than gnome's displays
panel.
2023-06-29 10:56:56 +00:00
4c5333c9ed desko/lappy: don't ship font-manager
with this i no longer ship webkitgtk4_0
2023-06-29 09:45:15 +00:00
6fdb7059e3 gthumb: build without webkitgtk 2023-06-29 09:43:17 +00:00
28f7823077 nixpatches: fix nmap/lua54 hash 2023-06-29 09:14:15 +00:00
9e972d21b4 Merge branch 'master' of git.uninsane.org:colin/nix-files 2023-06-29 09:12:24 +00:00
42f194f447 keyring: fix bad dep ordering that prevented ~/private from being mounted 2023-06-29 09:11:22 +00:00
dbd312e9bd guest: enable access to shelvacu 2023-06-29 09:11:22 +00:00
9be5604c40 nixpkgs: 2023-06-26 -> 2023-06-27
```
• Updated input 'nixpkgs-unpatched':
    'github:nixos/nixpkgs/6b3d1b1cf13f407fef5e634b224d575eb7211975' (2023-06-26)
  → 'github:nixos/nixpkgs/e18dc963075ed115afb3e312b64643bf8fd4b474' (2023-06-27)
```
2023-06-29 00:49:09 +00:00
97ce93cac6 fs: allow mounting /mnt/* as ordinary user 2023-06-28 10:50:39 +00:00
56c637d4d3 enable systemd-oomd on nix builds 2023-06-28 10:47:53 +00:00
89160f68e8 mention systemd-run in app containerization todo 2023-06-28 10:30:57 +00:00
316eb59071 nixpkgs: 2023-06-22 -> 2023-06-26; uninsane-dot-org -> 2023-06-26
```
• Updated input 'nixpkgs-unpatched':
    'github:nixos/nixpkgs/e603dc5f061ca1d8a19b3ede6a8cf9c9fcba6cdc' (2023-06-22)
  → 'github:nixos/nixpkgs/6b3d1b1cf13f407fef5e634b224d575eb7211975' (2023-06-26)
• Updated input 'uninsane-dot-org':
    'git+https://git.uninsane.org/colin/uninsane?ref=refs/heads/master&rev=0e0aa12aca143639f158b3a5c0c00349fcc2166c' (2023-06-16)
  → 'git+https://git.uninsane.org/colin/uninsane?ref=refs/heads/master&rev=ae27eb61b55b6c6d83c25384fb163df398a80265' (2023-06-26)
• Updated input 'uninsane-dot-org/flake-utils':
    'github:numtide/flake-utils/93a2b84fc4b70d9e089d029deacc3583435c2ed6' (2023-03-15)
  → 'github:numtide/flake-utils/dbabf0ca0c0c4bce6ea5eaf65af5cb694d2082c7' (2023-06-25)
• Added input 'uninsane-dot-org/flake-utils/systems':
    'github:nix-systems/default/da67096a3b9bf56a91d16901293e51ba5b49a27e' (2023-04-09)
```
2023-06-28 06:45:02 +00:00
c19a0af6d7 desko: enable distccd 2023-06-28 04:16:20 +00:00
038d252f7d guest: allow external configuration of authorized ssh keys 2023-06-28 03:53:19 +00:00
68cda2006b cleanup/refactor users 2023-06-28 03:46:29 +00:00
ddf79e54e9 users: split colin and guest apart 2023-06-28 03:34:15 +00:00
ac5e2cc023 users.nix: move to subdir 2023-06-28 03:21:05 +00:00
48eece548f add todo: gitea CI 2023-06-28 03:09:54 +00:00
8e16cd6d32 feeds: link to a place where i might find more 2023-06-28 03:09:23 +00:00
6676935ee1 feeds: add The Linux Experiment 2023-06-28 03:05:45 +00:00
c09b2d0d63 elaborate todo about securing programs 2023-06-28 01:08:53 +00:00
f12672b197 linux-megous: note about stability 2023-06-28 00:20:14 +00:00
8717a91467 programs: git: add alias for diff summary 2023-06-28 00:20:02 +00:00
b43b8a3a22 zsh: disable "command not found" corrections 2023-06-27 22:41:27 +00:00
c1df32695b build-machine: increase the number of nix build users 2023-06-27 22:41:23 +00:00
b98eca1d84 add TODO: remove overlays/pins.nix 2023-06-27 22:41:20 +00:00
7bc718bf15 dev-machine: don't ship docs until i resume development 2023-06-27 22:41:16 +00:00
dbb1d16617 web-browser: update extension hashes 2023-06-27 22:41:14 +00:00
771f482d84 EDITOR, GIT_EDITOR: lift into vim.nix 2023-06-27 10:26:11 +00:00
40ec4d6ce0 programs: allow programs to ship system-level environment variables 2023-06-27 10:24:48 +00:00
b90bc1058d git: add aliases: cp -> cherry-pick; rb -> rebase 2023-06-27 08:54:17 +00:00
0fcddf8970 web-browser: leave myself a todo for cleaning up prefs 2023-06-27 08:10:01 +00:00
cffb54c293 sxmo: give a little more time before transitioning from screen lock -> screen off 2023-06-27 08:10:01 +00:00
36c181c147 matrix-irc: fix oftc connection 2023-06-27 08:08:27 +00:00
cdbd3c2fd8 lemoa: remove excess buildInputs 2023-06-27 07:12:32 +00:00
530163c853 nixpatches: fix mepo hash
probably most of these hashes are outdated, after switching to fetchpatch2
2023-06-27 06:41:03 +00:00
516459b351 lemoa: unstable-2023-06-25 -> 0.1.0 2023-06-27 06:36:45 +00:00
05e37a4557 formatting 2023-06-27 01:59:49 +00:00
4006765387 cross: fix firefox-pmos-mobile cross compilation 2023-06-27 01:59:04 +00:00
db0ce6eadd web-browser: don't apply librewolf prefs to firefox deployments 2023-06-26 23:22:45 +00:00
f188229379 nixpatches: switch to fetchpatch2
fewer edgecases
2023-06-26 10:12:00 +00:00
f0d7d6877b web-browser: clean up some dead comments, defaults 2023-06-26 10:11:22 +00:00
a8025550d5 web-browser: apply pmos styling
on desktop, this doesn't respond to mouse input.
on mobile, not tested.
2023-06-26 10:10:26 +00:00
acd803d5bc patches: import firefox-pmos-mobile 2023-06-26 10:09:32 +00:00
59111b95b3 sane-wipe-browser: also wipe firefox 2023-06-26 08:04:45 +00:00
b5feeb1792 complete TODO: fix NUR evaluation 2023-06-26 01:27:53 +00:00
325398ec28 sane-scripts: rename nix-shell-scripts -> sane-bin 2023-06-26 01:27:35 +00:00
9b3ee537a8 flake: add "check-nur" app to validate that my repo passes NUR checks 2023-06-26 01:26:13 +00:00
7aa0c5e3ea pkgs: fix python3Packages.sane-lib eval outside of flake (i.e. NUR) 2023-06-26 01:25:46 +00:00
8c586bd0db cargo-docset: remove. it's been upstreamed 2023-06-26 01:12:29 +00:00
ec0e8ce38b pkgs: fix error that prevented gpodder-adaptive-configured from being evaluated on its own 2023-06-26 01:09:27 +00:00
be0d5fd7c2 gpodder-configured: name the package based on the input gPodder pname 2023-06-26 01:08:30 +00:00
e7fadbe965 gpodder-configured: name the resulting binary gpodder so it can be started with anything expecting normal gpodder API (e.g. sxmo) 2023-06-26 00:52:11 +00:00
054af010bd add new TODO: neovim LSP 2023-06-26 00:32:47 +00:00
ee5a2ff986 neovim: fix auto-indent for nix files 2023-06-26 00:32:47 +00:00
cb7f84e2b7 neovim: order plugins lexicographically 2023-06-26 00:32:47 +00:00
e5124fd0d6 lemoa: init at unstable-2023-06-25 2023-06-26 00:32:45 +00:00
0751e748ea feeds: add PostmarketOS podcast 2023-06-25 22:22:32 +00:00
afce50b56d jellyfin-media-player-qt6: bump 2023-06-25 22:04:54 +00:00
71e0942cc2 git: configure git stash show to actually... SHOW the stash
OMFG
2023-06-25 21:45:47 +00:00
049ded2a0d firefox-pmos-mobile: rebase patch 2023-06-25 18:05:06 +00:00
4854b8b409 sxmo-utils: ship mepo dependency 2023-06-25 18:04:34 +00:00
55e90f531b mepo: enable cross compilation (via emulation) 2023-06-25 18:04:19 +00:00
3a6bb5a787 add new TODO: better sane.persist behavior esp for ~/private 2023-06-25 02:15:58 +00:00
aae5e40e92 complete todo: librewolf and jellyfin are displayed in sxmo appmenu 2023-06-25 02:14:39 +00:00
5d464b3c64 sxmo: apps: add jellyfin 2023-06-25 02:14:35 +00:00
9b389416cd programs: git: add st and stat aliases 2023-06-25 02:09:25 +00:00
bd57bb7934 programs: add mepo 2023-06-25 02:05:50 +00:00
db2d4ca78e nixpatches: try (and abandon) the firefox-pmos-mobile patch 2023-06-25 01:17:14 +00:00
3812d935a7 sxmo: fix Tuba app entry 2023-06-25 00:42:41 +00:00
bc993d1139 add TODO: fix NUR eval 2023-06-25 00:37:08 +00:00
ec62b5f664 sxmo: leave a TODO about reducing nerdfonts size 2023-06-25 00:36:58 +00:00
71e96fff18 sxmo: add missing gnugrep dependency 2023-06-25 00:03:36 +00:00
33eaa00957 sxmo: add app entry for Sublime Music 2023-06-25 00:03:36 +00:00
a5af1e0893 sxmo: fix MPRIS detection so that any active player will block suspend 2023-06-24 23:54:39 +00:00
be21ac57f8 sxmo-utils: add some missing runtime deps 2023-06-24 23:43:00 +00:00
63a773d8a9 sxmo-utils: add missing dbus dependency 2023-06-24 23:14:57 +00:00
505fcf5111 sxmo-utils: add missing modemmanager dependency (for mmcli) 2023-06-24 23:13:15 +00:00
f0e76ef11f sxmo-utils: add app entries for Librewolf and Tuba 2023-06-24 23:02:43 +00:00
cb721ac70e elaborate TODO about OOM: consider placing nix builds in their own subdir 2023-06-24 22:13:23 +00:00
aae783876b delete completed TODOs 2023-06-24 22:11:19 +00:00
5e3a8cf702 cross: fix tuba compilation for moby 2023-06-24 19:43:09 +00:00
d9b9349572 programs: disable a few that i don't actually use 2023-06-24 19:43:09 +00:00
b6b0e65ef6 flake/nixpkgs: 2023-06-17 -> 2023-06-22
```
• Updated input 'nix-serve':
    'github:edolstra/nix-serve/e6e3d09438e803daa5374ad8edf1271289348456' (2023-05-17)
  → 'github:edolstra/nix-serve/d6df5bd8584f37e22cff627db2fc4058a4aab5ee' (2023-06-20)
• Updated input 'nixpkgs-unpatched':
    'github:nixos/nixpkgs/04af42f3b31dba0ef742d254456dc4c14eedac86' (2023-06-17)
  → 'github:nixos/nixpkgs/e603dc5f061ca1d8a19b3ede6a8cf9c9fcba6cdc' (2023-06-22)
• Updated input 'sops-nix':
    'github:Mic92/sops-nix/1634d2da53f079e7f5924efa7a96511cd9596f81' (2023-06-18)
  → 'github:Mic92/sops-nix/2ff6973350682f8d16371f8c071a304b8067f192' (2023-06-22)
```
2023-06-24 19:43:09 +00:00
a723d1274b all: ship Tuba mastodon/pleroma client 2023-06-24 09:50:12 +00:00
d41ad9db01 lappy: fix build (syntax error) 2023-06-24 09:39:58 +00:00
d6720f3601 sxmo: lift device-specific config out of the sxmo-utils & into the hosts 2023-06-23 10:24:47 +00:00
0b0d453916 sxmo: remove cfg.{deviceHooks,hooks}
seems sxmo is able to find them through XDG_DATA_DIR
2023-06-23 09:13:57 +00:00
59adddafc7 sxmo: make the package a config option 2023-06-23 08:38:23 +00:00
50fa70ca56 sxmo-utils: leave note about which hooks to lift out of package 2023-06-23 08:31:53 +00:00
86855b0c40 sxmo: run upstream set-permissions script at boot
this doesn't seem to do much in practice.
ideally upstream would include the logic for LEDs here too, but they
don't.
2023-06-23 08:31:53 +00:00
931838fb0d sxmo: ship deps via package instead of at the DE level 2023-06-23 08:31:48 +00:00
ec3a7067b6 modules/programs.nix: fix eval error when a program is suggestedBy multiple enabled packages 2023-06-23 02:05:26 +00:00
8cb236b0a9 users: add self to transmission group 2023-06-23 00:27:48 +00:00
5f47372f6a sane-bt: add --freeleech and --archive flags to control torrent location 2023-06-23 00:02:51 +00:00
afe27fd9cb sane-bt-add: support moving torrents to new directories 2023-06-22 23:48:00 +00:00
e8265807a9 NIX_PATH: point overlays to ~/nixos, not /nix/store/... 2023-06-22 23:34:15 +00:00
85ecaf64e9 sane-scripts: tidy up python deps 2023-06-22 23:33:49 +00:00
33b33a9237 sane-bt-*: remove extraneous nix-shell dep 2023-06-22 22:39:02 +00:00
fecd2fa7d3 sane-bt-*: add top-level docs 2023-06-22 22:37:02 +00:00
74ec65c8a9 sane-bt-show: allow showing multiple torrents (again) 2023-06-22 22:32:38 +00:00
21a060d856 sane-scripts: lift the transmission runtime dependency into sane-lib.bt 2023-06-22 22:29:52 +00:00
6249f7553c sane-bt-*: refactor: executor -> bt_api rename 2023-06-22 22:25:13 +00:00
96c976a3b0 sane-bt-show: port to Python 2023-06-22 22:24:49 +00:00
d48d3a979f sane-scripts: leave comment about cleaning up setup.py 2023-06-22 21:35:45 +00:00
ab8ee51321 sane-ip-port-forward: fix broken import 2023-06-22 21:34:59 +00:00
74891fb2f0 sane-scripts: split sane-lib-ssdp into an actual, nix-level library 2023-06-22 09:58:56 +00:00
f62bd83eb8 sane-scripts: split sane-lib-bt into an actual, nix-level library
a bit less hacky, i think
2023-06-22 09:53:30 +00:00
c977665214 sane-scripts: port sane-bt-rm to python
also fix missing lib in sane-bt-add
2023-06-22 07:24:08 +00:00
b3a605c76b sane-ip-port-forward: remind why we sys.path.insert 2023-06-22 02:28:10 +00:00
2cbd44b2b3 sane-bt-add: port to Python (and add a dry-run option) 2023-06-22 02:27:47 +00:00
689c63a905 record my attempt at updating matrix-appservice-irc in case i try again in the future 2023-06-21 06:13:27 +00:00
ed2480f48c matrix-appservice-irc: fix permissions errors 2023-06-21 06:12:08 +00:00
7aad3a62ba koreader: ship RSS feeds 2023-06-20 19:58:02 +00:00
1583b213f1 fs: ensure directories for remote filesystems are created 2023-06-20 08:40:25 +00:00
db851d960c sxmo: include sfeed, for use by sxmo_rss.sh
note that sxmo_rss.sh needs to be run from a terminal,
and i'm not sure it's totally wired up "correct".
2023-06-20 08:38:18 +00:00
fb7cb091e3 tuiApps: add sfeed 2023-06-20 08:38:11 +00:00
048dbc5809 moby/linux: 6.3.0 -> 6.4.0-rc7
this supposedly brings better power usage during sleep
by powering off the touchscreen
2023-06-20 03:01:10 +00:00
bb1a2c9dcb moby: remove ~/.config/sxmo/profile in favor of the nixos-level config options
note that this reverts from a SXMO_SWAY_SCALE of 2.0 -> 1.5

there may be other idiomatic ways to tune that
2023-06-20 00:33:10 +00:00
86c8fe1466 sane-bt-search: remove jackett hostname hack 2023-06-20 00:29:16 +00:00
95f6fd7082 jackett: use recommendedProxySettings so that returned URLs are correct 2023-06-20 00:28:46 +00:00
5fb52ba38e sxmo: show battery percentage by default; idle timeout to 5min, both configurable 2023-06-20 00:13:39 +00:00
4f8d0023ef sxmo: make an option with which to configure noidle 2023-06-20 00:05:06 +00:00
280c4aa2e8 sxmo: add missing j4-dmenu-desktop
this adds the "all apps" option to the app menu
2023-06-19 23:58:04 +00:00
fd270dd0b8 sxmo-utils: 1.14.1 -> 1.14.2 2023-06-19 23:57:44 +00:00
8e17e2beb2 lemmy: remove unsupported settings.federation.enabled option 2023-06-19 21:17:59 +00:00
d68704474d sane-bt-search: include links to the tracker page 2023-06-19 21:01:52 +00:00
0fa5b5bf52 flake/nixpkgs: 2023-06-15 -> 2023-06-17
```
• Updated input 'nixpkgs-unpatched':
    'github:nixos/nixpkgs/7c67f006ea0e7d0265f16d7df07cc076fdffd91f' (2023-06-15)
  → 'github:nixos/nixpkgs/04af42f3b31dba0ef742d254456dc4c14eedac86' (2023-06-17)
• Updated input 'sops-nix':
    'github:Mic92/sops-nix/1e2bae54870a06aa9364f8d33a5b9a0869d792fc' (2023-06-16)
  → 'github:Mic92/sops-nix/1634d2da53f079e7f5924efa7a96511cd9596f81' (2023-06-18)
• Updated input 'sops-nix/nixpkgs-stable':
    'github:NixOS/nixpkgs/aa4b53f79d961a7cbba0b24f791401a34c18011a' (2023-06-16)
  → 'github:NixOS/nixpkgs/e2e2059d19668dab1744301b8b0e821e3aae9c99' (2023-06-17)
```
2023-06-19 19:33:51 +00:00
9caa2a0a17 koreader: note to self that the os.execute bug may affect other features 2023-06-19 09:48:57 +00:00
023e28fb03 koreader: fix that "isOnline" check was failing and preventing FTP access 2023-06-19 09:21:30 +00:00
bed33fae60 koreader: 2023.04 -> 2023.05.1 2023-06-19 08:02:54 +00:00
3b958ba356 sftp: allow read-only anonymous FTP 2023-06-19 03:49:51 +00:00
adb6ff4c66 remove dead code: resholve-prologue 2023-06-18 21:48:12 +00:00
931c76c2e7 unftp: init at 0.14.3 2023-06-18 06:38:01 +00:00
d95042ab65 servo: partially enable a FTP server
disabled as i tidy it
strugging to enable an anonymous FTP user -- might not be possible without using the web admin interface
2023-06-17 10:15:30 +00:00
0605094461 Merge branch 'staging/nixpkgs-2023-06-15' 2023-06-17 10:13:21 +00:00
4eb6c1fd7d flake/nixpkgs: 2023-06-12 -> 2023-06-15
```
• Updated input 'nixpkgs-unpatched':
    'github:nixos/nixpkgs/0eeebd64de89e4163f4d3cf34ffe925a5cf67a05' (2023-06-12)
  → 'github:nixos/nixpkgs/7c67f006ea0e7d0265f16d7df07cc076fdffd91f' (2023-06-15)
• Updated input 'sops-nix':
    'github:Mic92/sops-nix/cb85e297937af1bd1434cf5f85a3f86a21dc8207' (2023-06-11)
  → 'github:Mic92/sops-nix/1e2bae54870a06aa9364f8d33a5b9a0869d792fc' (2023-06-16)
• Updated input 'sops-nix/nixpkgs-stable':
    'github:NixOS/nixpkgs/ef24b2fa0c5f290a35064b847bc211f25cb85c88' (2023-06-10)
  → 'github:NixOS/nixpkgs/aa4b53f79d961a7cbba0b24f791401a34c18011a' (2023-06-16)
• Updated input 'uninsane-dot-org':
    'git+https://git.uninsane.org/colin/uninsane?ref=refs/heads/master&rev=f3747a1dad3d34880613821faf26357ba432d3d7' (2023-05-19)
  → 'git+https://git.uninsane.org/colin/uninsane?ref=refs/heads/master&rev=0e0aa12aca143639f158b3a5c0c00349fcc2166c' (2023-06-16)
```
2023-06-17 10:07:59 +00:00
c553e74cd6 common: fs: remove invalid "nofail" option from ssh mounts 2023-06-17 10:03:44 +00:00
4eb6f59b01 sane-ip-reconnect: add some logging 2023-06-16 07:17:31 +00:00
9f55a8288d ship koreader ebook reader (and persist relevant data) 2023-06-16 01:23:55 +00:00
feb299eb22 cross: fix koreader build 2023-06-16 01:23:55 +00:00
b21c79a0b4 cross: fix nautilus 2023-06-16 01:23:55 +00:00
c819bc2d95 cross: fix cozy unable to load FileChooser at runtime 2023-06-16 01:23:55 +00:00
21006e52dc sane-bt-search: add a --help option 2023-06-15 10:25:59 +00:00
5562d60cbb fs mounts: add nofail and mount-timeout to reduce shutdown hangs on nfs 2023-06-15 10:08:54 +00:00
17041384e9 fs mounts: reduce nfs timeouts, for faster shutdown
it still takes 90s; maybe the issue is nested mounts?
2023-06-15 09:25:48 +00:00
9eb36441e1 fs mounts: don't auto-mount ssh; try to specify correct net dependencies for better shutdown 2023-06-15 08:40:21 +00:00
0d0a9fce6a associate ssh pubkeys to my hosts' wireguard names 2023-06-15 07:54:31 +00:00
847e618dee cozy: persist data 2023-06-15 06:34:50 +00:00
c4e345e2e7 cozy: ship on all gui devices 2023-06-15 06:08:10 +00:00
c75719e751 /mnt/servo-media: default to the nfs mount
maybe i remove the ssh mounts if/when nfs proves stable
2023-06-15 02:31:17 +00:00
7a57cf5327 clients: fs: mount servo over nfs 2023-06-15 02:14:42 +00:00
b81642ccc9 servo/nfs: fix netmask typo 2023-06-15 02:13:29 +00:00
57ca3e67b3 servo/nfs: export rw if the source is wireguard 2023-06-15 01:52:15 +00:00
bcca6b6096 servo: export some read-only NFS mounts 2023-06-15 01:38:09 +00:00
79772d4e3d cozy: fix launch 2023-06-14 22:27:03 +00:00
339c0a47ab flake/nixpkgs: 2023-06-11 -> 2023-06-12
```
• Updated input 'nixpkgs-unpatched':
    'github:nixos/nixpkgs/75a5ebf473cd60148ba9aec0d219f72e5cf52519' (2023-06-11)
  → 'github:nixos/nixpkgs/0eeebd64de89e4163f4d3cf34ffe925a5cf67a05' (2023-06-12)
```
2023-06-14 20:38:43 +00:00
b1be78529b gpodder: apply update via upstream PR 2023-06-14 07:39:18 +00:00
cce53b968b sequoia: apply update via upstream PR 2023-06-14 07:35:50 +00:00
1d55b98cd1 sequoia: 0.28.0 -> 0.30.1 2023-06-14 07:16:21 +00:00
e9d45c3b31 snippets: update 2023-06-14 02:30:29 +00:00
32dde42ee2 zecwallet-light-cli: init at 1.7.7 2023-06-14 00:32:54 +00:00
b60986cfb8 update snippets 2023-06-13 22:10:59 +00:00
60ef232bc0 flake/nixpkgs: 2023-06-10 -> 2023-06-11
```
• Updated input 'nixpkgs-unpatched':
    'github:nixos/nixpkgs/21951114383770f96ae528d0ae68824557768e81' (2023-06-10)
  → 'github:nixos/nixpkgs/75a5ebf473cd60148ba9aec0d219f72e5cf52519' (2023-06-11)
```
2023-06-13 08:49:55 +00:00
7f7bc33be5 sane-bt-search: report errors for unexpected options 2023-06-13 08:01:52 +00:00
f52f56a34c moby: no longer ship Jellyfin 2023-06-13 07:05:21 +00:00
425de71583 komikuu: ship on all GUI platforms 2023-06-13 07:04:43 +00:00
0bd87077c1 komikku: fix for cross compilation 2023-06-13 07:04:26 +00:00
601bf567eb gpodder: ship the gpodder-adaptive branch
better mobile experience
2023-06-13 05:30:10 +00:00
4f74078423 komikku: persist downloaded comics 2023-06-13 05:30:10 +00:00
f170351de7 ship komikku (comic/manga viewer) 2023-06-13 05:30:10 +00:00
bee9dab513 gpodder: 3.10.21 -> 3.11.1 2023-06-13 05:30:10 +00:00
16c3d4289e cross: jellyfin-media-player-qt6: fix wrapQtAppsHook 2023-06-13 05:30:10 +00:00
21e0c0d00f sane_ssdp: fix get_ips_from_location return value on failure 2023-06-12 20:11:02 +00:00
fdf85156bc lemmy: re-enable the version pin 2023-06-11 12:12:41 +00:00
79a7daca12 lemmy: more debugging 2023-06-11 11:24:15 +00:00
3996e1be08 lemmy-ui: no need to patch nodejs version after upstream nixpkgs update 2023-06-11 10:51:05 +00:00
8b1dbd42da roles/dev-machine: disable docs for lemmy-server 2023-06-11 10:51:05 +00:00
a2c7edf340 flake/nixpkgs: 2023-06-07 -> 2023-06-10
```
• Updated input 'nixpkgs-unpatched':
    'github:nixos/nixpkgs/381e92a35e2d196fdd6077680dca0cd0197e75cb' (2023-06-07)
  → 'github:nixos/nixpkgs/21951114383770f96ae528d0ae68824557768e81' (2023-06-10)
• Updated input 'sops-nix':
    'github:Mic92/sops-nix/a522e12ee35e50fa7d902a164a9796e420e6e75b' (2023-06-04)
  → 'github:Mic92/sops-nix/cb85e297937af1bd1434cf5f85a3f86a21dc8207' (2023-06-11)
• Updated input 'sops-nix/nixpkgs-stable':
    'github:NixOS/nixpkgs/eaf03591711b46d21abc7082a8ebee4681f9dbeb' (2023-06-03)
  → 'github:NixOS/nixpkgs/ef24b2fa0c5f290a35064b847bc211f25cb85c88' (2023-06-10)
```
2023-06-11 10:51:05 +00:00
9b365d1771 sxmo: fix volume controls for pipewire 2023-06-11 09:57:47 +00:00
8cf3402be4 add new TODOs for better sxmo experiences 2023-06-11 08:34:20 +00:00
a92fa489cb complete todos: sxmo auto-rotation 2023-06-11 08:32:56 +00:00
837f20e892 lemmy: apply PR feedback 2023-06-11 03:43:35 +00:00
3d56117d65 gocryptfs: remove "defaults" flag 2023-06-10 23:21:42 +00:00
1724ac60e5 feeds: update URL for The Intercept 2023-06-10 23:08:51 +00:00
bf168c7f0f feeds: update URL for Deconstructed 2023-06-10 22:59:44 +00:00
37cafcf610 moby: re-enable nautilus file browser 2023-06-10 22:54:27 +00:00
261 changed files with 15646 additions and 3675 deletions

View File

@@ -16,6 +16,8 @@ directly here; even the sources for those packages is often kept here too.
[uninsane-org]: https://uninsane.org
## Layout
- `doc/`
- instructions for tasks i find myself doing semi-occasionally in this repo.
- `hosts/`
- the bulk of config which isn't factored with external use in mind.
- that is, if you were to add this repo to a flake.nix for your own use,
@@ -37,9 +39,7 @@ directly here; even the sources for those packages is often kept here too.
- inline code for wholly custom packages (e.g. `pkgs/additional/sane-scripts/` for CLI tools
that are highly specific to my setup).
- `scripts/`
- scripts which are referenced by other things in this repo.
- these aren't generally user-facing, but they're factored out so that they can
be invoked directly when i need to debug.
- scripts which aren't reachable on a deployed system, but may aid manual deployments
- `secrets/`
- encrypted keys, API tokens, anything which one or more of my machines needs
read access to but shouldn't be world-readable.
@@ -106,3 +106,6 @@ this repo exists in a few known locations:
if you want to contact me for questions, or collaborate to split something useful into a shared repo, etc,
you can reach me via any method listed [here](https://uninsane.org/about).
patches, for this repo or any other i host, will be warmly welcomed in any manner you see fit:
`git send-email`, DM'ing the patch over Matrix/Lemmy/ActivityPub/etc, even a literal PR where you
link me to your own clone.

54
TODO.md
View File

@@ -1,8 +1,10 @@
## BUGS
- why i need to manually restart `wireguard-wg-ovpns` on servo periodically
- else DNS fails
- else DNS fails
- fix epiphany URL bar input on moby
## REFACTORING:
### sops/secrets
- attach secrets to the thing they're used by (sane.programs)
- rework secrets to leverage `sane.fs`
@@ -13,14 +15,11 @@
- will make it easier to test new services?
### upstreaming
- split out a trust-dns module
- see: <https://github.com/NixOS/nixpkgs/pull/205866#issuecomment-1575753054>
- split out a sxmo module usable by NUR consumers
- bump nodejs version in lemmy-ui
- add updateScripts to all my packages in nixpkgs
- fix lightdm-mobile-greeter for newer libhandy
- port zecwallet-lite to a from-source build
- fix or abandon Whalebird
- FIX failed CI on bonsai PR: <https://github.com/NixOS/nixpkgs/pull/233892>
- REVIEW/integrate jellyfin dataDir config: <https://github.com/NixOS/nixpkgs/pull/233617>
- remove `libsForQt5.callPackage` broadly: <https://github.com/NixOS/nixpkgs/issues/180841>
@@ -33,47 +32,50 @@
- have `sane.programs` be wrapped such that they run in a cgroup?
- at least, only give them access to the portion of the fs they *need*.
- Android takes approach of giving each app its own user: could hack that in here.
- **systemd-run** takes a command and runs it in a temporary scope (cgroup)
- presumably uses the same options as systemd services
- see e.g. <https://github.com/NixOS/nixpkgs/issues/113903#issuecomment-857296349>
- flatpak does this, somehow
- apparmor? SElinux? (desktop) "portals"?
- see Spectrum OS; Alyssa Ross; etc
- bubblewrap-based sandboxing: <https://github.com/nixpak/nixpak>
- canaries for important services
- e.g. daily email checks; daily backup checks
- integrate `nix check` into Gitea actions?
### user experience
- firefox/librewolf: don't show browserpass/sponsorblock/metamask "first run" on every boot
- neovim: set up language server (lsp; rnix-lsp; nvim-lspconfig)
- Helix: make copy-to-system clipboard be the default
- firefox/librewolf: persist history
- just not cookies or tabs
- moby: improve gPodder launch time
- moby: replace jellyfin-desktop with jellyfin-vue?
- allows (maybe) to cache media for offline use
- "newer" jellyfin client
- not packaged for nix
- find a nice desktop ActivityPub client
- 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/>
- package Nix/NixOS docs for Zeal
- install [doc-browser](https://github.com/qwfy/doc-browser)
- this supports both dash (zeal) *and* the datasets from <https://devdocs.io> (which includes nix!)
- install [devhelp](https://wiki.gnome.org/Apps/Devhelp) (gnome)
- auto-mount servo
- have xdg-open parse `<repo:...> URIs (or adjust them so that it _can_ parse)
- `sane.programs`: auto-populate defaults with everything from `pkgs`
- zsh: disable "command not found" corrections
- sxmo: allow rotation to the upside-down position
- see: <repo:mil/sxmo-utils:scripts/core/sxmo_autorotate.sh>
- all orientations *except* upside down are supported
- sxmo: launch with auto-rotation enabled
- sane-bt-search: show details like 5.1 vs stereo, h264 vs h265
- uninsane.org: make URLs relative to allow local use (and as offline homepage)
- email: fix so that local mail doesn't go to junk
- git sendmail flow adds the DKIM signatures, but gets delivered locally w/o having the sig checked, so goes into Junk
- could change junk filter from "no DKIM success" to explicit "DKIM failed"
### perf
- add `pkgs.impure-cached.<foo>` package set to build things with ccache enabled
- every package here can be auto-generated, and marked with some env var so that it doesn't pollute the pure package set
- would be super handy for package prototyping!
- why does nixos-rebuild switch take 5 minutes when net is flakey?
- trying to auto-mount servo?
- something to do with systemd services restarting/stalling
- maybe wireguard & its refresh operation, specifically?
- fix OOM for large builds like webkitgtk
- these use significant /tmp space.
- either place /tmp on encrypted-cleared-at-boot storage
- which probably causes each CPU load for the encryption
- **or set up encrypted swap**
- encrypted swap could remove the need for my encrypted-cleared-at-boot stuff
- get moby to build without binfmt emulation (i.e. make all emulation explicit)
- then i can distribute builds across servo + desko, and also allow servo to pull packages from desko w/o worrying about purity
## NEW FEATURES:
- add a FTP-accessible file share to servo
- just /var/www?
- migrate MAME cabinet to nix
- boot it from PXE from servo?
- enable IPv6

13
doc/adding-a-program.md Normal file
View File

@@ -0,0 +1,13 @@
to ship `pkgs.foo` on some host, either:
- add it as an entry in `suggestedPrograms` to the appropriate category in `hosts/common/programs/assorted.nix`, or
- `sane.programs.foo.enableFor.user.colin = true` in `hosts/by-name/myhost/default.nix`
if the program needs customization (persistence, configs, secrets):
- add a file for it at `hosts/common/programs/<foo>.nix`
- set the options, `sane.programs.foo.{fs,persist}`
if it's unclear what fs paths a program uses:
- run one of these commands, launch the program, run it again, and `diff`:
- `du -x --apparent-size ~`
- `find ~ -xdev`
- or, inspect the whole tmpfs root with `ncdu -x /`

64
flake.lock generated
View File

@@ -1,12 +1,15 @@
{
"nodes": {
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1678901627,
"narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=",
"lastModified": 1687709756,
"narHash": "sha256-Y5wKlQSkgEK2weWdOu4J3riRd+kV/VCgHsqLNTTWQ/0=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6",
"rev": "dbabf0ca0c0c4bce6ea5eaf65af5cb694d2082c7",
"type": "github"
},
"original": {
@@ -18,11 +21,11 @@
"mobile-nixos": {
"flake": false,
"locked": {
"lastModified": 1683422260,
"narHash": "sha256-79zaClbubRkBNlJ04OSADILuLQHH48N5fu296hEWYlw=",
"lastModified": 1690059310,
"narHash": "sha256-4zcoDp8wwZVfGSzXltC5x+eH4kDWC/eJpyQNgr7shAA=",
"owner": "nixos",
"repo": "mobile-nixos",
"rev": "ba4638836e94a8f16d1d1f9e8c0530b86078029c",
"rev": "56fc9f9619f305f0865354975a98d22410eed127",
"type": "github"
},
"original": {
@@ -36,11 +39,11 @@
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1684319086,
"narHash": "sha256-5wwlkWqP1cQUPXp/PJsi09FkgAule5yBghngRZZbUQg=",
"lastModified": 1687251388,
"narHash": "sha256-E9cVlgeCvzPbA/G3mCDCzz8TdRwXyGYzIjmwcvIfghg=",
"owner": "edolstra",
"repo": "nix-serve",
"rev": "e6e3d09438e803daa5374ad8edf1271289348456",
"rev": "d6df5bd8584f37e22cff627db2fc4058a4aab5ee",
"type": "github"
},
"original": {
@@ -66,27 +69,27 @@
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1685758009,
"narHash": "sha256-IT4Z5WGhafrq+xbDTyuKrRPRQ1f+kVOtE+4JU1CHFeo=",
"lastModified": 1690066826,
"narHash": "sha256-6L2qb+Zc0BFkh72OS9uuX637gniOjzU6qCDBpjB2LGY=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "eaf03591711b46d21abc7082a8ebee4681f9dbeb",
"rev": "ce45b591975d070044ca24e3003c830d26fea1c8",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "release-22.11",
"ref": "release-23.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-unpatched": {
"locked": {
"lastModified": 1686135559,
"narHash": "sha256-pY8waAV8K/sbHBdLn5diPFnQKpNg0YS9w03MrD2lUGE=",
"lastModified": 1690272529,
"narHash": "sha256-MakzcKXEdv/I4qJUtq/k/eG+rVmyOZLnYNC2w1mB59Y=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "381e92a35e2d196fdd6077680dca0cd0197e75cb",
"rev": "ef99fa5c5ed624460217c31ac4271cfb5cb2502c",
"type": "github"
},
"original": {
@@ -113,11 +116,11 @@
"nixpkgs-stable": "nixpkgs-stable"
},
"locked": {
"lastModified": 1685848844,
"narHash": "sha256-Iury+/SVbAwLES76QJSiKFiQDzmf/8Hsq8j54WF2qyw=",
"lastModified": 1690199016,
"narHash": "sha256-yTLL72q6aqGmzHq+C3rDp3rIjno7EJZkFLof6Ika7cE=",
"owner": "Mic92",
"repo": "sops-nix",
"rev": "a522e12ee35e50fa7d902a164a9796e420e6e75b",
"rev": "c36df4fe4bf4bb87759b1891cab21e7a05219500",
"type": "github"
},
"original": {
@@ -126,6 +129,21 @@
"type": "github"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"uninsane-dot-org": {
"inputs": {
"flake-utils": "flake-utils",
@@ -134,11 +152,11 @@
]
},
"locked": {
"lastModified": 1684528780,
"narHash": "sha256-QdYxjcTCCLPv++1v9tJBL98nn/AFx0fmzlgzcLK6KRE=",
"lastModified": 1690326573,
"narHash": "sha256-UgsGOTx00sp4Oev6QNN2u+4AMVehgGO/8yODF++8bwM=",
"ref": "refs/heads/master",
"rev": "f3747a1dad3d34880613821faf26357ba432d3d7",
"revCount": 194,
"rev": "fcec1d09b6c469d9425a716b11b4f4995a285774",
"revCount": 204,
"type": "git",
"url": "https://git.uninsane.org/colin/uninsane"
},

View File

@@ -23,9 +23,6 @@
# preferably, i would rewrite the human-readable https URLs to nix-specific github: URLs with a helper,
# but `inputs` is required to be a strict attrset: not an expression.
inputs = {
# <https://github.com/nixos/nixpkgs/tree/nixos-22.11>
# nixpkgs-stable.url = "github:nixos/nixpkgs?ref=nixos-22.11";
# branch workflow:
# - daily:
# - nixos-unstable cut from master after enough packages have been built in caches.
@@ -180,12 +177,6 @@
optimizations = final: prev: import ./overlays/optimizations.nix final prev;
passthru = final: prev:
let
stable =
if inputs ? "nixpkgs-stable" then (
final': prev': {
stable = inputs.nixpkgs-stable.legacyPackages."${prev'.stdenv.hostPlatform.system}";
}
) else (final': prev': {});
mobile = (import "${mobile-nixos}/overlay/overlay.nix");
uninsane = uninsane-dot-org.overlay;
# nix-serve' = nix-serve.overlay;
@@ -196,11 +187,10 @@
inherit (nix-serve.packages."${next.system}") nix-serve;
};
in
(stable final prev)
// (mobile final prev)
// (uninsane final prev)
// (nix-serve' final prev)
;
(mobile final prev)
// (uninsane final prev)
// (nix-serve' final prev)
;
};
nixosModules = rec {
@@ -249,32 +239,74 @@
apps."x86_64-linux" =
let
pkgs = self.legacyPackages."x86_64-linux";
deployScript = action: pkgs.writeShellScript "deploy-moby" ''
nixos-rebuild --flake '.#moby' build $@
sudo nix sign-paths -r -k /run/secrets/nix_serve_privkey $(readlink ./result)
nixos-rebuild --flake '.#moby' ${action} --target-host colin@moby-hn --use-remote-sudo $@
deployScript = host: addr: action: pkgs.writeShellScript "deploy-${host}" ''
nix build '.#nixosConfigurations.${host}.config.system.build.toplevel' --out-link ./result-${host} $@
sudo nix sign-paths -r -k /run/secrets/nix_serve_privkey $(readlink ./result-${host})
# XXX: this triggers another config eval & (potentially) build.
# if the config changed between these invocations, the above signatures might not apply to the deployed config.
# let the user handle that edge case by re-running this whole command
nixos-rebuild --flake '.#${host}' ${action} --target-host colin@${addr} --use-remote-sudo $@
'';
in {
help = {
type = "app";
program = let
helpMsg = builtins.toFile "nixos-config-help-message" ''
commands:
- `nix run '.#help'`
- show this message
- `nix run '.#update-feeds'`
- updates metadata for all feeds
- `nix run '.#init-feed' <url>`
- `nix run '.#deploy-{lappy,moby,moby-test,servo}' [nixos-rebuild args ...]`
- `nix run '.#check-nur'`
'';
in builtins.toString (pkgs.writeShellScript "nixos-config-help" ''
cat ${helpMsg}
'');
};
update-feeds = {
type = "app";
program = "${pkgs.feeds.updateScript}";
};
init-feed = {
# use like `nix run '.#init-feed' uninsane.org`
type = "app";
program = "${pkgs.feeds.initFeedScript}";
};
deploy-moby-test = {
# `nix run '.#deploy-moby-test'`
deploy-lappy = {
type = "app";
program = ''${deployScript "test"}'';
program = ''${deployScript "lappy" "lappy" "switch"}'';
};
deploy-moby-test = {
type = "app";
program = ''${deployScript "moby" "moby-hn" "test"}'';
};
deploy-moby = {
# `nix run '.#deploy-moby-switch'`
type = "app";
program = ''${deployScript "switch"}'';
program = ''${deployScript "moby" "moby-hn" "switch"}'';
};
deploy-servo = {
type = "app";
program = ''${deployScript "servo" "servo" "switch"}'';
};
check-nur = {
# `nix run '.#check-nur'`
# validates that my repo can be included in the Nix User Repository
type = "app";
program = builtins.toString (pkgs.writeShellScript "check-nur" ''
cd ${./.}/integrations/nur
NIX_PATH= NIXPKGS_ALLOW_UNSUPPORTED_SYSTEM=1 nix-env -f . -qa \* --meta --xml \
--allowed-uris https://static.rust-lang.org \
--option restrict-eval true \
--option allow-import-from-derivation true \
--drv-path --show-trace \
-I nixpkgs=$(nix-instantiate --find-file nixpkgs) \
-I ../../
'');
};
};

View File

@@ -4,6 +4,11 @@
./fs.nix
];
# sane.guest.enable = true;
# services.distccd.enable = true;
# sane.programs.distcc.enableFor.user.guest = true;
sops.secrets.colin-passwd.neededForUsers = true;
sane.roles.build-machine.enable = true;
@@ -17,9 +22,11 @@
sane.gui.sway.enable = true;
sane.programs.iphoneUtils.enableFor.user.colin = true;
sane.programs.steam.enableFor.user.colin = true;
sane.programs.guiApps.suggestedPrograms = [ "desktopGuiApps" ];
sane.programs.consoleUtils.suggestedPrograms = [ "consoleMediaUtils" ];
sane.programs.consoleUtils.suggestedPrograms = [ "consoleMediaUtils" "desktopConsoleUtils" ];
# sane.programs.devPkgs.enableFor.user.colin = true;
boot.loader.efi.canTouchEfiVariables = false;
sane.image.extraBootFiles = [ pkgs.bootpart-uefi-x86_64 ];
@@ -29,6 +36,7 @@
# don't enable wifi by default: it messes with connectivity.
systemd.services.iwd.enable = false;
systemd.services.wpa_supplicant.enable = false;
# default config: https://man.archlinux.org/man/snapper-configs.5
# defaults to something like:
@@ -42,17 +50,6 @@
ALLOW_USERS = [ "colin" ];
};
programs.steam = {
enable = true;
# not sure if needed: stole this whole snippet from the wiki
remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
};
sane.user.persist.plaintext = [
".steam"
".local/share/Steam"
];
# docs: https://nixos.org/manual/nixos/stable/options.html#opt-system.stateVersion
system.stateVersion = "21.05";
}

View File

@@ -2,17 +2,10 @@
{
sane.persist.root-on-tmpfs = true;
# we need a /tmp for building large nix things.
# increase /tmp space (defaults to 50% of RAM) for building large nix things.
# a cross-compiled kernel, particularly, will easily use 30+GB of tmp
fileSystems."/tmp" = {
device = "none";
fsType = "tmpfs";
options = [
"mode=777"
"size=64G"
"defaults"
];
};
fileSystems."/tmp".options = [ "size=64G" ];
fileSystems."/nix" = {
# device = "/dev/disk/by-uuid/985a0a32-da52-4043-9df7-615adec2e4ff";
device = "/dev/disk/by-uuid/0ab0770b-7734-4167-88d9-6e4e20bb2a56";

View File

@@ -19,7 +19,7 @@
"desktopGuiApps"
"stepmania"
];
sane.programs.consoleUtils.suggestedPrograms = [ "consoleMediaUtils" ];
sane.programs.consoleUtils.suggestedPrograms = [ "consoleMediaUtils" "desktopConsoleUtils" ];
sops.secrets.colin-passwd.neededForUsers = true;
@@ -34,9 +34,6 @@
ALLOW_USERS = [ "colin" ];
};
# TODO: only here for debugging
# services.ipfs.enable = true;
# docs: https://nixos.org/manual/nixos/stable/options.html#opt-system.stateVersion
system.stateVersion = "21.05";
}

View File

@@ -2,15 +2,6 @@
{
sane.persist.root-on-tmpfs = true;
# we need a /tmp of default size (half RAM) for building large nix things
fileSystems."/tmp" = {
device = "none";
fsType = "tmpfs";
options = [
"mode=777"
"defaults"
];
};
fileSystems."/nix" = {
device = "/dev/disk/by-uuid/75230e56-2c69-4e41-b03e-68475f119980";

View File

@@ -1,6 +1,6 @@
# doesn't actually *enable* anything,
# but sets up any modules such that if they *were* enabled, they'll act as expected.
{ ... }:
{ pkgs, ... }:
{
sane.gui.sxmo = {
greeter = "sway";
@@ -28,5 +28,11 @@
# see <repo:mil/sxmo-utils:scripts/deviceprofiles>
# SXMO_DEVICE_NAME = "pine64,pinephone-1.2";
};
package = pkgs.sxmo-utils.overrideAttrs (base: {
postPatch = (base.postPatch or "") + ''
# after volume-button navigation mode, restore full keyboard functionality
cp ${./xkb_mobile_normal_buttons} ./configs/xkb/xkb_mobile_normal_buttons
'';
});
};
}

View File

@@ -1,13 +1,26 @@
# Pinephone
# other setups to reference:
# - <https://hamblingreen.gitlab.io/2022/03/02/my-pinephone-setup.html>
# - sxmo Arch user. lots of app recommendations
#
# wikis, resources, ...:
# - Linux Phone Apps: <https://linuxphoneapps.org/>
# - massive mobile-friendly app database
# - Mobian wiki: <https://wiki.mobian-project.org/doku.php?id=start>
# - recommended apps, chatrooms
{ config, pkgs, lib, ... }:
{
imports = [
./firmware.nix
./bootloader.nix
./fs.nix
./gps.nix
./kernel.nix
./polyfill.nix
];
sane.roles.client = true;
sane.zsh.showDeadlines = false; # unlikely to act on them when in shell
sane.services.wg-home.enable = true;
sane.services.wg-home.ip = config.sane.hosts.by-name."moby".wg-home.ip;
@@ -18,35 +31,31 @@
sops.secrets.colin-passwd.neededForUsers = true;
sane.programs.web-browser.config = {
# compromise impermanence for the sake of usability
persistCache = "private";
persistData = "private";
# i don't do crypto stuff on moby
addons.ether-metamask.enable = false;
# addons.sideberry.enable = false;
};
sane.user.persist.plaintext = [
# TODO: make this just generally conditional upon pulse being enabled?
".config/pulse" # persist pulseaudio volume
];
sane.gui.sxmo.enable = true;
sane.programs.guiApps.suggestedPrograms = [ "handheldGuiApps" ];
# sane.programs.consoleUtils.enableFor.user.colin = false;
# sane.programs.guiApps.enableFor.user.colin = false;
sane.programs.sequoia.enableFor.user.colin = false;
sane.programs.tuiApps.enableFor.user.colin = false; # visidata, others, don't compile well
# disabled for faster deploys (gthumb depends on webkitgtk, particularly)
# disabled for faster deploys
sane.programs.soundconverter.enableFor.user.colin = false;
sane.programs."gnome.nautilus".enableFor.user.colin = false;
sane.programs.gthumb.enableFor.user.colin = false;
# sane.programs.firefox.mime.priority = 300; # prefer other browsers when possible
# HACK/TODO: make `programs.P.env.VAR` behave according to `mime.priority`
# sane.programs.firefox.env = lib.mkForce {};
# sane.programs.epiphany.env.BROWSER = "epiphany";
# sane.programs.firefox.enableFor.user.colin = false; # use epiphany instead
# sane.programs.mpv.enableFor.user.colin = true;
boot.loader.efi.canTouchEfiVariables = false;
# /boot space is at a premium. default was 20.
# even 10 can be too much
# TODO: compress moby kernels!
boot.loader.generic-extlinux-compatible.configurationLimit = 8;
# mobile.bootloader.enable = false;
# mobile.boot.stage-1.enable = false;
@@ -105,6 +114,50 @@
services.wireplumber.environment.ALSA_CONFIG_UCM2 = ucm-env;
};
services.udev.extraRules = let
chmod = "${pkgs.coreutils}/bin/chmod";
chown = "${pkgs.coreutils}/bin/chown";
in ''
# make Pinephone flashlight writable by user.
# taken from postmarketOS: <repo:postmarketOS/pmaports:device/main/device-pine64-pinephone/60-flashlight.rules>
SUBSYSTEM=="leds", DEVPATH=="*/*:flash", RUN+="${chmod} g+w /sys%p/brightness /sys%p/flash_strobe", RUN+="${chown} :video /sys%p/brightness /sys%p/flash_strobe"
# make Pinephone front LEDs writable by user.
SUBSYSTEM=="leds", DEVPATH=="*/*:indicator", RUN+="${chmod} g+w /sys%p/brightness", RUN+="${chown} :video /sys%p/brightness"
'';
hardware.opengl.driSupport = true;
services.xserver.displayManager.job.preStart = let
dmesg = "${pkgs.util-linux}/bin/dmesg";
grep = "${pkgs.gnugrep}/bin/grep";
modprobe = "${pkgs.kmod}/bin/modprobe";
in ''
# common boot failure:
# blank screen (no backlight even), with the following log:
# ```syslog
# sun8i-dw-hdmi 1ee0000.hdmi: Couldn't get the HDMI PHY
# ...
# sun4i-drm display-engine: Couldn't bind all pipelines components
# ...
# sun8i-dw-hdmi: probe of 1ee0000.hdmi failed with error -17
# ```
#
# in particular, that `probe ... failed` occurs *only* on failed boots
# (the other messages might sometimes occur even on successful runs?)
#
# reloading the sun8i hdmi driver usually gets the screen on, showing boot text.
# then restarting display-manager.service gets us to the login.
#
# NB: the above log is default level. though less specific, there's a `err` level message that also signals this:
# sun4i-drm display-engine: failed to bind 1ee0000.hdmi (ops sun8i_dw_hdmi_ops [sun8i_drm_hdmi]): -17
if (${dmesg} --kernel --level err --color=never --notime | ${grep} -q 'sun4i-drm display-engine: failed to bind 1ee0000.hdmi')
then
echo "reprobing sun8i_drm_hdmi"
# if a command here fails it errors the whole service, so prefer to log instead
${modprobe} -r sun8i_drm_hdmi || echo "failed to unload sun8i_drm_hdmi"
${modprobe} sun8i_drm_hdmi || echo "failed to load sub8i_drm_hdmi"
fi
'';
}

View File

@@ -0,0 +1,24 @@
# pinephone GPS happens in EG25 modem
# serial control interface to modem is /dev/ttyUSB2
# after enabling GPS, readout is /dev/ttyUSB1
#
# minimal process to enable modem and GPS:
# - `echo 1 > /sys/class/modem-power/modem-power/device/powered`
# - `screen /dev/ttyUSB2 115200`
# - `AT+QGPSCFG="nmeasrc",1`
# - `AT+QGPS=1`
#
# now, something like `gpsd` can directly read from /dev/ttyUSB1.
#
# initial GPS fix can take 15+ minutes.
# meanwhile, services like eg25-manager can speed this up by uploading assisted GPS data to the modem.
#
# geoclue somehow fits in here as a geospatial provider that leverages GPS and also other sources like radio towers
{ ... }:
{
services.gpsd.enable = true;
services.gpsd.devices = [ "/dev/ttyUSB1" ];
# TODO: enable eg25-manager, and bring online both the modem and GPS on boot
}

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 118 KiB

View File

@@ -1,23 +1,179 @@
{ sane-lib, ... }:
# this file configures preferences per program, without actually enabling any programs.
# the goal is to separate the place where we decide *what* to use (i.e. `sane.programs.firefox.enable = true` -- at the toplevel)
# from where we specific how that thing should behave *if* it's in use.
#
# NixOS backgrounds:
# - <https://github.com/NixOS/nixos-artwork>
# - <https://github.com/NixOS/nixos-artwork/issues/50> (colorful; unmerged)
# - <https://github.com/NixOS/nixos-artwork/pull/60/files> (desktop-oriented; clean; unmerged)
# - <https://itsfoss.com/content/images/2023/04/nixos-tutorials.png>
{ lib, pkgs, sane-lib, ... }:
let
# TODO: generate this from the .svg
# bg = ./nixos-bg-02.png;
bg = pkgs.runCommand "nixos-bg.png" { nativeBuildInputs = [ pkgs.inkscape ]; } ''
inkscape ${./nixos-bg-02.svg} -o $out
'';
in
{
sane.programs.firefox.config = {
# compromise impermanence for the sake of usability
persistCache = "private";
persistData = "private";
# i don't do crypto stuff on moby
addons.ether-metamask.enable = false;
# sidebery UX doesn't make sense on small screen
addons.sidebery.enable = false;
};
sane.gui.sxmo = {
nogesture = true;
settings = {
# touch screen
### hardware: touch screen
SXMO_LISGD_INPUT_DEVICE = "/dev/input/by-path/platform-1c2ac00.i2c-event";
# vol and power are detected correctly by upstream
### preferences
# notable bemenu options:
# - see `bemenu --help` for all
# -P, --prefix text to show before highlighted item.
# --scrollbar display scrollbar. (none (default), always, autohide)
# -H, --line-height defines the height to make each menu line (0 = default height). (wx)
# -M, --margin defines the empty space on either side of the menu. (wx)
# -W, --width-factor defines the relative width factor of the menu (from 0 to 1). (wx)
# -B, --border defines the width of the border in pixels around the menu. (wx)
# -R --border-radius defines the radius of the border around the menu (0 = no curved borders).
# --ch defines the height of the cursor (0 = scales with line height). (wx)
# --cw defines the width of the cursor. (wx)
# --hp defines the horizontal padding for the entries in single line mode. (wx)
# --fn defines the font to be used ('name [size]'). (wx)
# --tb defines the title background color. (wx)
# --tf defines the title foreground color. (wx)
# --fb defines the filter background color. (wx)
# --ff defines the filter foreground color. (wx)
# --nb defines the normal background color. (wx)
# --nf defines the normal foreground color. (wx)
# --hb defines the highlighted background color. (wx)
# --hf defines the highlighted foreground color. (wx)
# --fbb defines the feedback background color. (wx)
# --fbf defines the feedback foreground color. (wx)
# --sb defines the selected background color. (wx)
# --sf defines the selected foreground color. (wx)
# --ab defines the alternating background color. (wx)
# --af defines the alternating foreground color. (wx)
# --scb defines the scrollbar background color. (wx)
# --scf defines the scrollbar foreground color. (wx)
# --bdr defines the border color. (wx)
#
# colors are specified as `#RRGGBB`
# defaults:
# --ab "#222222"
# --af "#bbbbbb"
# --bdr "#005577"
# --border 3
# --cb "#222222"
# --center
# --cf "#bbbbbb"
# --fb "#222222"
# --fbb "#eeeeee"
# --fbf "#222222"
# --ff "#bbbbbb"
# --fixed-height
# --fn 'Sxmo 14'
# --hb "#005577"
# --hf "#eeeeee"
# --line-height 20
# --list 16
# --margin 40
# --nb "#222222"
# --nf "#bbbbbb"
# --no-overlap
# --no-spacing
# --sb "#323232"
# --scb "#005577"
# --scf "#eeeeee"
# --scrollbar autohide
# --tb "#005577"
# --tf "#eeeeee"
# --wrap
BEMENU_OPTS = let
bg = "#1d1721"; # slight purple
fg0 = "#d8d8d8"; # inactive text (light grey)
fg1 = "#ffffff"; # active text (white)
accent0 = "#1f5e54"; # darker but saturated teal
accent1 = "#418379"; # teal (matches nixos-bg)
accent2 = "#5b938a"; # brighter but muted teal
in lib.concatStringsSep " " [
"--wrap --scrollbar autohide --fixed-height"
"--center --margin 45"
"--no-spacing"
# XXX: font size doesn't seem to take effect (would prefer larger)
"--fn 'Sxmo 14' --line-height 22 --border 3"
"--bdr '${accent0}'" # border
"--scf '${accent2}' --scb '${accent0}'" # scrollbar
"--tb '${accent0}' --tf '${fg0}'" # title
"--fb '${accent0}' --ff '${fg1}'" # filter (i.e. text that's been entered)
"--hb '${accent1}' --hf '${fg1}'" # selected item
"--nb '${bg}' --nf '${fg0}'" # normal lines (even)
"--ab '${bg}' --af '${fg0}'" # alternated lines (odd)
"--cf '${accent0}' --cb '${accent0}'" # cursor (not very useful)
];
DEFAULT_COUNTRY = "US";
# BEMENU lines (wayland DMENU):
# - camera is 9th entry
# - flashlight is 10th entry
# - config is 14th entry. inside that:
# - autorotate is 11th entry
# - system menu is 19th entry
# - close is 20th entry
# - power is 15th entry
# - close is 16th entry
SXMO_BEMENU_LANDSCAPE_LINES = "11"; # default 8
SXMO_BEMENU_PORTRAIT_LINES = "16"; # default 16
SXMO_BG_IMG = "${bg}";
SXMO_LOCK_IDLE_TIME = "15"; # how long between screenoff -> lock -> back to screenoff (default: 8)
# gravity: how far to tilt the device before the screen rotates
# for a given setting, normal <-> invert requires more movement then left <-> right
# i.e. the settingd doesn't feel completely symmetric
# SXMO_ROTATION_GRAVITY default is 16374
# SXMO_ROTATION_GRAVITY = "12800"; # uncomfortably high
# SXMO_ROTATION_GRAVITY = "12500"; # kinda uncomfortable when walking
SXMO_ROTATION_GRAVITY = "12000";
SXMO_SCREENSHOT_DIR = "/home/colin/Pictures"; # default: "$HOME"
# test new scales by running `swaymsg -- output DSI-1 scale x.y`
# SXMO_SWAY_SCALE = "1.5"; # hard to press gPodder icons
SXMO_SWAY_SCALE = "1.8";
# SXMO_SWAY_SCALE = "2";
SXMO_WORKSPACE_WRAPPING = "5"; # how many workspaces. default: 4
# wvkbd layers:
# - full
# - landscape
# - special (e.g. coding symbols like ~)
# - emoji
# - nav
# - simple (like landscape, but no parens/tab/etc; even fewer chars)
# - simplegrid (simple, but grid layout)
# - dialer (digits)
# - cyrillic
# - arabic
# - persian
# - greek
# - georgian
WVKBD_LANDSCAPE_LAYERS = "landscape,special,emoji";
WVKBD_LAYERS = "full,special,emoji";
};
package = pkgs.sxmo-utils.overrideAttrs (base: {
postPatch = (base.postPatch or "") + ''
cat <<EOF >> ./configs/default_hooks/sxmo_hook_start.sh
# rotate UI based on physical display angle by default
sxmo_daemons.sh start autorotate sxmo_autorotate.sh
EOF
'';
});
};
# TODO: only populate this if sxmo is enabled?
sane.user.fs.".config/sxmo/profile" = sane-lib.fs.wantedText ''
# sourced by sxmo_init.sh
. sxmo_common.sh
export SXMO_SWAY_SCALE=1.5
export SXMO_ROTATION_GRAVITY=12800
export DEFAULT_COUNTRY=US
export BROWSER=librewolf
export SXMO_BG_IMG="$(xdg_data_path sxmo/background.jpg)"
'';
}

View File

@@ -18,10 +18,13 @@
sane.roles.build-machine.enable = true;
sane.roles.build-machine.emulation = false;
sane.zsh.showDeadlines = false; # ~/knowledge doesn't always exist
sane.programs.consoleUtils.suggestedPrograms = [ "desktopConsoleUtils" ];
sane.services.dyn-dns.enable = true;
sane.services.wg-home.enable = true;
sane.services.wg-home.enableWan = true;
sane.services.wg-home.ip = config.sane.hosts.by-name."servo".wg-home.ip;
sane.nixcache.substituters.servo = false;
sane.nixcache.substituters.desko = false;
# sane.services.duplicity.enable = true; # TODO: re-enable after HW upgrade
# automatically log in at the virtual consoles.

View File

@@ -2,15 +2,6 @@
{
sane.persist.root-on-tmpfs = true;
# we need a /tmp for building large nix things
fileSystems."/tmp" = {
device = "none";
fsType = "tmpfs";
options = [
"mode=777"
"defaults"
];
};
fileSystems."/nix" = {
device = "/dev/disk/by-uuid/cc81cca0-3cc7-4d82-a00c-6243af3e7776";
@@ -44,7 +35,7 @@
sane.persist.sys.plaintext = [
# TODO: this is overly broad; only need media and share directories to be persisted
{ user = "colin"; group = "users"; directory = "/var/lib/uninsane"; }
{ user = "colin"; group = "users"; path = "/var/lib/uninsane"; }
];
# make sure large media is stored to the HDD
sane.persist.sys.ext = [
@@ -52,21 +43,22 @@
user = "colin";
group = "users";
mode = "0777";
directory = "/var/lib/uninsane/media/Videos";
path = "/var/lib/uninsane/media/Videos";
}
{
user = "colin";
group = "users";
mode = "0777";
directory = "/var/lib/uninsane/media/freeleech";
path = "/var/lib/uninsane/media/freeleech";
}
{
user = "colin";
group = "users";
mode = "0777";
path = "/var/lib/uninsane/media/datasets";
}
];
# in-memory compressed RAM (seems to be dynamically sized)
# zramSwap = {
# enable = true;
# };
# btrfs doesn't easily support swapfiles
# swapDevices = [
# { device = "/nix/persist/swapfile"; size = 4096; }

View File

@@ -13,7 +13,7 @@ in
lib.mkIf false
{
sane.persist.sys.plaintext = [
{ inherit user group; mode = "0700"; directory = svc-dir; }
{ inherit user group; mode = "0700"; path = svc-dir; }
];
services.calibre-web.enable = true;

View File

@@ -7,6 +7,7 @@
./email
./ejabberd.nix
./freshrss.nix
./ftp
./gitea.nix
./goaccess.nix
./ipfs.nix
@@ -17,6 +18,7 @@
./lemmy.nix
./matrix
./navidrome.nix
./nfs.nix
./nixserve.nix
./nginx.nix
./pict-rs.nix

View File

@@ -20,7 +20,7 @@
# lib.mkIf false
{
sane.persist.sys.plaintext = [
{ user = "ejabberd"; group = "ejabberd"; directory = "/var/lib/ejabberd"; }
{ user = "ejabberd"; group = "ejabberd"; path = "/var/lib/ejabberd"; }
];
sane.ports.ports."3478" = {
protocol = [ "tcp" "udp" ];

View File

@@ -20,9 +20,9 @@ in
{
sane.persist.sys.plaintext = [
# TODO: mode? could be more granular
{ user = "opendkim"; group = "opendkim"; directory = "/var/lib/opendkim"; }
{ user = "root"; group = "root"; directory = "/var/lib/postfix"; }
{ user = "root"; group = "root"; directory = "/var/spool/mail"; }
{ user = "opendkim"; group = "opendkim"; path = "/var/lib/opendkim"; }
{ user = "root"; group = "root"; path = "/var/lib/postfix"; }
{ user = "root"; group = "root"; path = "/var/spool/mail"; }
# *probably* don't need these dirs:
# "/var/lib/dhparams" # https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/security/dhparams.nix
# "/var/lib/dovecot"

View File

@@ -16,7 +16,7 @@
mode = "0400";
};
sane.persist.sys.plaintext = [
{ user = "freshrss"; group = "freshrss"; directory = "/var/lib/freshrss"; }
{ user = "freshrss"; group = "freshrss"; path = "/var/lib/freshrss"; }
];
services.freshrss.enable = true;

View File

@@ -0,0 +1,70 @@
# docs:
# - <https://github.com/drakkan/sftpgo>
# - config options: <https://github.com/drakkan/sftpgo/blob/main/docs/full-configuration.md>
# - config defaults: <https://github.com/drakkan/sftpgo/blob/main/sftpgo.json>
# - nixos options: <repo:nixos/nixpkgs:nixos/modules/services/web-apps/sftpgo.nix>
#
# sftpgo is a FTP server that also supports WebDAV, SFTP, and web clients.
{ lib, pkgs, sane-lib, ... }:
let
authProgram = pkgs.static-nix-shell.mkBash {
pname = "sftpgo_external_auth_hook";
src = ./.;
};
in
{
# Client initiates a FTP "control connection" on port 21.
# - this handles the client -> server commands, and the server -> client status, but not the actual data
# - file data, directory listings, etc need to be transferred on an ephemeral "data port".
# - 50000-50100 is a common port range for this.
sane.ports.ports = {
"21" = {
protocol = [ "tcp" ];
visibleTo.lan = true;
description = "colin-FTP server";
};
} // (sane-lib.mapToAttrs
(port: {
name = builtins.toString port;
value = {
protocol = [ "tcp" ];
visibleTo.lan = true;
description = "colin-FTP server data port range";
};
})
(lib.range 50000 50100)
);
services.sftpgo = {
enable = true;
settings = {
ftpd = {
bindings = [{
address = "10.0.10.5";
port = 21;
debug = true;
}];
# active mode is susceptible to "bounce attacks", without much benefit over passive mode
disable_active_mode = true;
hash_support = true;
passive_port_range = {
start = 50000;
end = 50100;
};
banner = ''
Welcome, friends, to Colin's read-only FTP server! Also available via NFS on the same host.
Please let me know if anything's broken or not as it should be. Otherwise, browse and DL freely :)
'';
};
data_provider = {
driver = "memory";
external_auth_hook = "${authProgram}/bin/sftpgo_external_auth_hook";
};
};
};
}

View File

@@ -0,0 +1,55 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash
# vim: set filetype=bash :
#
# available environment variables:
# - SFTPGO_AUTHD_USERNAME
# - SFTPGO_AUTHD_USER
# - SFTPGO_AUTHD_IP
# - SFTPGO_AUTHD_PROTOCOL = { "DAV", "FTP", "HTTP", "SSH" }
# - SFTPGO_AUTHD_PASSWORD
# - SFTPGO_AUTHD_PUBLIC_KEY
# - SFTPGO_AUTHD_KEYBOARD_INTERACTIVE
# - SFTPGO_AUTHD_TLS_CERT
#
# user permissions:
# - see <repo:drakkan/sftpgo:internal/dataprovider/user.go>
# - "*" = grant all permissions
# - read-only perms:
# - "list" = list files and directories
# - "download"
# - rw perms:
# - "upload"
# - "overwrite" = allow uploads to replace existing files
# - "delete" = delete files and directories
# - "delete_files"
# - "delete_dirs"
# - "rename" = rename files and directories
# - "rename_files"
# - "rename_dirs"
# - "create_dirs"
# - "create_symlinks"
# - "chmod"
# - "chown"
# - "chtimes" = change atime/mtime (access and modification times)
#
# home_dir:
# - it seems (empirically) that a user can't cd above their home directory.
# though i don't have a reference for that in the docs.
# TODO: don't reuse /var/nfs/export here. formalize this some other way.
if [ "$SFTPGO_AUTHD_USERNAME" = "anonymous" ]; then
echo '{'
echo ' "status":1,'
echo ' "username":"anonymous","expiration_date":0,'
echo ' "home_dir":"/var/nfs/export","uid":65534,"gid":65534,"max_sessions":0,"quota_size":0,"quota_files":100000,'
echo ' "permissions":{'
echo ' "/":["list", "download"]'
echo ' },'
echo ' "upload_bandwidth":0,"download_bandwidth":0,'
echo ' "filters":{"allowed_ip":[],"denied_ip":[]},"public_keys":[]'
echo '}'
else
echo '{"username":""}'
fi

View File

@@ -4,7 +4,7 @@
{
sane.persist.sys.plaintext = [
# TODO: mode? could be more granular
{ user = "git"; group = "gitea"; directory = "/var/lib/gitea"; }
{ user = "git"; group = "gitea"; path = "/var/lib/gitea"; }
];
services.gitea.enable = true;
services.gitea.user = "git"; # default is 'gitea'

View File

@@ -12,7 +12,7 @@ lib.mkIf false # i don't actively use ipfs anymore
{
sane.persist.sys.plaintext = [
# TODO: mode? could be more granular
{ user = "261"; group = "261"; directory = "/var/lib/ipfs"; }
{ user = "261"; group = "261"; path = "/var/lib/ipfs"; }
];
networking.firewall.allowedTCPPorts = [ 4001 ];

View File

@@ -3,7 +3,7 @@
{
sane.persist.sys.plaintext = [
# TODO: mode? we only need this to save Indexer creds ==> migrate to config?
{ user = "root"; group = "root"; directory = "/var/lib/jackett"; }
{ user = "root"; group = "root"; path = "/var/lib/jackett"; }
];
services.jackett.enable = true;
@@ -24,6 +24,7 @@
locations."/" = {
# proxyPass = "http://ovpns.uninsane.org:9117";
proxyPass = "http://10.0.1.6:9117";
recommendedProxySettings = true;
};
};

View File

@@ -41,7 +41,7 @@
};
sane.persist.sys.plaintext = [
{ user = "jellyfin"; group = "jellyfin"; mode = "0700"; directory = "/var/lib/jellyfin"; }
{ user = "jellyfin"; group = "jellyfin"; mode = "0700"; path = "/var/lib/jellyfin"; }
];
sane.fs."/var/lib/jellyfin/config/logging.json" = {
# "Emby.Dlna" logging: <https://jellyfin.org/docs/general/networking/dlna>

View File

@@ -5,7 +5,7 @@ let
in
{
sane.persist.sys.plaintext = [
{ inherit user group; mode = "0700"; directory = stateDir; }
{ inherit user group; mode = "0700"; path = stateDir; }
];
services.komga.enable = true;

View File

@@ -14,8 +14,8 @@ in {
services.lemmy = {
enable = true;
settings.hostname = "lemmy.uninsane.org";
settings.federation.enabled = true;
# federation.debug forces outbound federation queries to be run synchronously
# N.B.: this option might not be read for 0.17.0+? <https://github.com/LemmyNet/lemmy/blob/c32585b03429f0f76d1e4ff738786321a0a9df98/RELEASES.md#upgrade-instructions>
# settings.federation.debug = true;
settings.port = backendPort;
ui.port = uiPort;
@@ -32,6 +32,7 @@ in {
systemd.services.lemmy.environment = {
RUST_BACKTRACE = "full";
# RUST_LOG = "debug";
# RUST_LOG = "trace";
# upstream defaults LEMMY_DATABASE_URL = "postgres:///lemmy?host=/run/postgresql";
# - Postgres complains that we didn't specify a user
# lemmy formats the url as:

View File

@@ -11,7 +11,7 @@
];
sane.persist.sys.plaintext = [
{ user = "matrix-synapse"; group = "matrix-synapse"; directory = "/var/lib/matrix-synapse"; }
{ user = "matrix-synapse"; group = "matrix-synapse"; path = "/var/lib/matrix-synapse"; }
];
services.matrix-synapse.enable = true;
# this changes the default log level from INFO to WARN.

View File

@@ -6,7 +6,7 @@
lib.mkIf false
{
sane.persist.sys.plaintext = [
{ user = "matrix-synapse"; group = "matrix-synapse"; directory = "/var/lib/mx-puppet-discord"; }
{ user = "matrix-synapse"; group = "matrix-synapse"; path = "/var/lib/mx-puppet-discord"; }
];
services.matrix-synapse.settings.app_service_config_files = [

View File

@@ -1,16 +1,14 @@
# config docs:
# - <https://github.com/matrix-org/matrix-appservice-irc/blob/develop/config.sample.yaml>
# TODO: /quit message for bridged users reveals to IRC users that i'm using a bridge;
# probably want to remove that.
{ config, lib, ... }:
let
ircServer = { name, additionalAddresses ? [], sasl ? true }: let
ircServer = { name, additionalAddresses ? [], sasl ? true, port ? 6697 }: let
lowerName = lib.toLower name;
in {
# XXX sasl: appservice doesn't support NickServ identification (only SASL, or PASS if sasl = false)
inherit name additionalAddresses sasl;
port = 6697;
inherit name additionalAddresses sasl port;
ssl = true;
botConfig = {
# bot has no presence in IRC channel; only real Matrix users
@@ -105,9 +103,15 @@ in
sane.persist.sys.plaintext = [
# TODO: mode?
{ user = "matrix-appservice-irc"; group = "matrix-appservice-irc"; directory = "/var/lib/matrix-appservice-irc"; }
{ user = "matrix-appservice-irc"; group = "matrix-appservice-irc"; path = "/var/lib/matrix-appservice-irc"; }
];
# XXX: matrix-appservice-irc PreStart tries to chgrp the registration.yml to matrix-synapse,
# which requires matrix-appservice-irc to be of that group
users.users.matrix-appservice-irc.extraGroups = [ "matrix-synapse" ];
# weird race conditions around registration.yml mean we want matrix-synapse to be of matrix-appservice-irc group too.
users.users.matrix-synapse.extraGroups = [ "matrix-appservice-irc" ];
services.matrix-synapse.settings.app_service_config_files = [
"/var/lib/matrix-appservice-irc/registration.yml" # auto-created by irc appservice
];
@@ -145,6 +149,7 @@ in
};
"irc.oftc.net" = ircServer {
name = "oftc";
sasl = false;
# notable channels:
# - #sxmo
# - #sxmo-offtopic
@@ -153,4 +158,10 @@ in
};
};
};
systemd.services.matrix-appservice-irc.serviceConfig = {
# XXX 2023/06/20: nixos specifies this + @aio and @memlock as forbidden
# 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";
};
}

View File

@@ -3,8 +3,8 @@
{ config, pkgs, ... }:
{
sane.persist.sys.plaintext = [
{ user = "mautrix-signal"; group = "mautrix-signal"; directory = "/var/lib/mautrix-signal"; }
{ user = "signald"; group = "signald"; directory = "/var/lib/signald"; }
{ user = "mautrix-signal"; group = "mautrix-signal"; path = "/var/lib/mautrix-signal"; }
{ user = "signald"; group = "signald"; path = "/var/lib/signald"; }
];
# allow synapse to read the registration file

View File

@@ -2,7 +2,7 @@
{
sane.persist.sys.plaintext = [
{ user = "navidrome"; group = "navidrome"; directory = "/var/lib/navidrome"; }
{ user = "navidrome"; group = "navidrome"; path = "/var/lib/navidrome"; }
];
services.navidrome.enable = true;
services.navidrome.settings = {

View File

@@ -0,0 +1,67 @@
# docs:
# - <https://nixos.wiki/wiki/NFS>
# - <https://wiki.gentoo.org/wiki/Nfs-utils>
{ ... }:
{
services.nfs.server.enable = true;
# see which ports NFS uses with:
# - `rpcinfo -p`
sane.ports.ports."111" = {
protocol = [ "tcp" "udp" ];
visibleTo.lan = true;
description = "NFS server portmapper";
};
sane.ports.ports."2049" = {
protocol = [ "tcp" ];
visibleTo.lan = true;
description = "NFS server";
};
sane.ports.ports."4000" = {
protocol = [ "udp" ];
visibleTo.lan = true;
description = "NFS server status daemon";
};
sane.ports.ports."4001" = {
protocol = [ "tcp" "udp" ];
visibleTo.lan = true;
description = "NFS server lock daemon";
};
sane.ports.ports."4002" = {
protocol = [ "tcp" "udp" ];
visibleTo.lan = true;
description = "NFS server mount daemon";
};
# NFS4 allows these to float, but NFS3 mandates specific ports, so fix them for backwards compat.
services.nfs.server.lockdPort = 4001;
services.nfs.server.mountdPort = 4002;
services.nfs.server.statdPort = 4000;
# format:
# fspoint visibility(options)
# options:
# - see: <https://wiki.gentoo.org/wiki/Nfs-utils#Exports>
# - see [man 5 exports](https://linux.die.net/man/5/exports)
# - insecure: require clients use src port > 1024
# - rw, ro (default)
# - async, sync (default)
# - no_subtree_check (default), subtree_check: verify not just that files requested by the client live
# in the expected fs, but also that they live under whatever subdirectory of that fs is exported.
# - no_root_squash, root_squash (default): map requests from uid 0 to user `nobody`.
# - crossmnt: reveal filesystems that are mounted under this endpoint
# - fsid: must be zero for the root export
# - mountpoint[=/path]: only export the directory if it's a mountpoint. used to avoid exporting failed mounts.
#
# 10.0.0.0/8 to export (readonly) both to LAN (unencrypted) and wg vpn (encrypted)
services.nfs.server.exports = ''
/var/nfs/export 10.78.79.0/22(ro,crossmnt,fsid=0,subtree_check) 10.0.10.0/24(rw,no_root_squash,crossmnt,fsid=0,subtree_check)
'';
fileSystems."/var/nfs/export/media" = {
# everything in here could be considered publicly readable (based on the viewer's legal jurisdiction)
device = "/var/lib/uninsane/media";
options = [ "rbind" ];
};
}

View File

@@ -101,7 +101,8 @@ in
};
# allow ActivityPub clients to discover how to reach @user@uninsane.org
# TODO: waiting on https://git.pleroma.social/pleroma/pleroma/-/merge_requests/3361/
# see: https://git.pleroma.social/pleroma/pleroma/-/merge_requests/3361/
# not sure this makes sense while i run multiple AP services (pleroma, lemmy)
# locations."/.well-known/nodeinfo" = {
# proxyPass = "http://127.0.0.1:4000";
# extraConfig = pleromaExtraConfig;
@@ -134,8 +135,8 @@ in
sane.persist.sys.plaintext = [
# TODO: mode?
{ user = "acme"; group = "acme"; directory = "/var/lib/acme"; }
{ user = "colin"; group = "users"; directory = "/var/www/sites"; }
{ user = "acme"; group = "acme"; path = "/var/lib/acme"; }
{ user = "colin"; group = "users"; path = "/var/www/sites"; }
];
# let's encrypt default chain looks like:

View File

@@ -6,7 +6,7 @@ let
in
{
sane.persist.sys.plaintext = lib.mkIf cfg.enable [
{ user = "pict-rs"; group = "pict-rs"; directory = cfg.dataDir; }
{ user = "pict-rs"; group = "pict-rs"; path = cfg.dataDir; }
];
systemd.services.pict-rs.serviceConfig = {

View File

@@ -1,14 +1,21 @@
# docs:
# - https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/services/networking/pleroma.nix
# - https://docs.pleroma.social/backend/configuration/cheatsheet/
# - <https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/services/networking/pleroma.nix>
# - <https://docs.pleroma.social/backend/configuration/cheatsheet/>
# example config:
# - <https://git.pleroma.social/pleroma/pleroma/-/blob/develop/config/config.exs>
#
# to run it in a oci-container: https://github.com/barrucadu/nixfiles/blob/master/services/pleroma.nix
# to run it in a oci-container: <https://github.com/barrucadu/nixfiles/blob/master/services/pleroma.nix>
#
# admin frontend: <https://fed.uninsane.org/pleroma/admin>
{ config, pkgs, ... }:
let
logLevel = "warn";
# logLevel = "debug";
in
{
sane.persist.sys.plaintext = [
# TODO: mode? could be more granular
{ user = "pleroma"; group = "pleroma"; directory = "/var/lib/pleroma"; }
{ user = "pleroma"; group = "pleroma"; path = "/var/lib/pleroma"; }
];
services.pleroma.enable = true;
services.pleroma.secretConfigFile = config.sops.secrets.pleroma_secrets.path;
@@ -96,10 +103,22 @@
backends: [{ExSyslogger, :ex_syslogger}]
config :logger, :ex_syslogger,
level: :warn
# level: :debug
level: :${logLevel}
# policies => list of message rewriting facilities to be enabled
# transparence => whether to publish these rules in node_info (and /about)
config :pleroma, :mrf,
policies: [Pleroma.Web.ActivityPub.MRF.SimplePolicy],
transparency: true
# reject => { host, reason }
config :pleroma, :mrf_simple,
reject: [ {"threads.net", "megacorp"}, {"*.threads.net", "megacorp"} ]
# reject: [ [host: "threads.net", reason: "megacorp"], [host: "*.threads.net", reason: "megacorp"] ]
# XXX colin: not sure if this actually _does_ anything
# better to steal emoji from other instances?
# - <https://docs.pleroma.social/backend/configuration/cheatsheet/#mrf_steal_emoji>
config :pleroma, :emoji,
shortcode_globs: ["/emoji/**/*.png"],
groups: [
@@ -148,6 +167,7 @@
# inherit kTLS;
locations."/" = {
proxyPass = "http://127.0.0.1:4000";
recommendedProxySettings = true;
# documented: https://git.pleroma.social/pleroma/pleroma/-/blob/develop/installation/pleroma.nginx
extraConfig = ''
# XXX colin: this block is in the nixos examples: i don't understand all of it
@@ -166,17 +186,18 @@
add_header Referrer-Policy same-origin;
add_header X-Download-Options noopen;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# proxy_set_header Host $http_host;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_http_version 1.1;
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection "upgrade";
# # proxy_set_header Host $http_host;
# proxy_set_header Host $host;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# colin: added this due to Pleroma complaining in its logs
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-Proto $scheme;
# NB: this defines the maximum upload size
client_max_body_size 16m;
'';
};

View File

@@ -3,7 +3,7 @@
{
sane.persist.sys.plaintext = [
# TODO: mode?
{ user = "postgres"; group = "postgres"; directory = "/var/lib/postgresql"; }
{ user = "postgres"; group = "postgres"; path = "/var/lib/postgresql"; }
];
services.postgresql.enable = true;
# services.postgresql.dataDir = "/opt/postgresql/13";

View File

@@ -10,7 +10,7 @@
lib.mkIf false
{
sane.persist.sys.plaintext = [
{ user = "prosody"; group = "prosody"; directory = "/var/lib/prosody"; }
{ user = "prosody"; group = "prosody"; path = "/var/lib/prosody"; }
];
sane.ports.ports."5222" = {
protocol = [ "tcp" ];

View File

@@ -3,7 +3,7 @@
{
sane.persist.sys.plaintext = [
# TODO: mode? we need this specifically for the stats tracking in .config/
{ user = "transmission"; group = "transmission"; directory = "/var/lib/transmission"; }
{ user = "transmission"; group = "transmission"; path = "/var/lib/transmission"; }
];
services.transmission.enable = true;
services.transmission.settings = {

View File

@@ -1,15 +1,25 @@
{ config, lib, pkgs, ... }:
{
sane.services.trust-dns.enable = true;
services.trust-dns.enable = true;
sane.services.trust-dns.listenAddrsIPv4 = [
services.trust-dns.settings.listen_addrs_ipv4 = [
# specify each address explicitly, instead of using "*".
# this ensures responses are sent from the address at which the request was received.
config.sane.hosts.by-name."servo".lan-ip
"10.0.1.5"
];
sane.services.trust-dns.quiet = true;
# don't bind to IPv6 until i explicitly test that stack
services.trust-dns.settings.listen_addrs_ipv6 = [];
services.trust-dns.quiet = true;
# services.trust-dns.debug = true;
sane.ports.ports."53" = {
protocol = [ "udp" "tcp" ];
visibleTo.lan = true;
visibleTo.wan = true;
description = "colin-dns-hosting";
};
sane.dns.zones."uninsane.org".TTL = 900;
@@ -51,18 +61,15 @@
];
};
# we need trust-dns to load our zone by relative path instead of /nix/store path
# because we generate it at runtime.
sane.services.trust-dns.zones."uninsane.org".file = lib.mkForce "uninsane.org.zone";
sane.services.trust-dns.zonedir = null;
services.trust-dns.settings.zones = [ "uninsane.org" ];
sane.services.trust-dns.package =
services.trust-dns.package =
let
sed = "${pkgs.gnused}/bin/sed";
zone-dir = "/var/lib/trust-dns";
zone-wan = "${zone-dir}/wan/uninsane.org.zone";
zone-lan = "${zone-dir}/lan/uninsane.org.zone";
zone-template = pkgs.writeText "uninsane.org.zone.in" config.sane.services.trust-dns.zones."uninsane.org".text;
zone-template = pkgs.writeText "uninsane.org.zone.in" config.sane.dns.zones."uninsane.org".rendered;
in pkgs.writeShellScriptBin "named" ''
# compute wan/lan values
mkdir -p ${zone-dir}/{ovpn,wan,lan}
@@ -93,6 +100,17 @@
exit 1
'';
systemd.services.trust-dns.serviceConfig = {
DynamicUser = lib.mkForce false;
User = "trust-dns";
Group = "trust-dns";
};
users.groups.trust-dns = {};
users.users.trust-dns = {
group = "trust-dns";
isSystemUser = true;
};
sane.services.dyn-dns.restartOnChange = [ "trust-dns.service" ];
networking.nat.enable = true;

View File

@@ -13,7 +13,7 @@
./programs
./secrets.nix
./ssh.nix
./users.nix
./users
./vpn.nix
];
@@ -23,9 +23,6 @@
sane.programs.sysadminUtils.enableFor.system = lib.mkDefault true;
sane.programs.consoleUtils.enableFor.user.colin = lib.mkDefault true;
# some services which use private directories error if the parent (/var/lib/private) isn't 700.
sane.fs."/var/lib/private".dir.acl.mode = "0700";
nixpkgs.config.allowUnfree = true;
nixpkgs.config.allowBroken = true; # NIXPKGS_ALLOW_BROKEN
@@ -43,48 +40,39 @@
# does the builder use some content-addressed db to efficiently dedupe?
nix.settings.auto-optimise-store = true;
fonts = {
enableDefaultFonts = true;
fonts = with pkgs; [ font-awesome noto-fonts-emoji hack-font ];
fontconfig.enable = true;
fontconfig.defaultFonts = {
emoji = [ "Font Awesome 6 Free" "Noto Color Emoji" ];
monospace = [ "Hack" ];
serif = [ "DejaVu Serif" ];
sansSerif = [ "DejaVu Sans" ];
};
systemd.services.nix-daemon.serviceConfig = {
# the nix-daemon manages nix builders
# kill nix-daemon subprocesses when systemd-oomd detects an out-of-memory condition
# see:
# - nixos PR that enabled systemd-oomd: <https://github.com/NixOS/nixpkgs/pull/169613>
# - systemd's docs on these properties: <https://www.freedesktop.org/software/systemd/man/systemd.resource-control.html#ManagedOOMSwap=auto%7Ckill>
#
# systemd's docs warn that without swap, systemd-oomd might not be able to react quick enough to save the system.
# see `man oomd.conf` for further tunables that may help.
#
# alternatively, apply this more broadly with `systemd.oomd.enableSystemSlice = true` or `enableRootSlice`
# TODO: also apply this to the guest user's slice (user-1100.slice)
# TODO: also apply this to distccd
ManagedOOMMemoryPressure = "kill";
ManagedOOMSwap = "kill";
};
# XXX: twitter-color-emoji doesn't cross-compile; but not-fonts-emoji does
# fonts = {
# enableDefaultFonts = true;
# fonts = with pkgs; [ font-awesome twitter-color-emoji hack-font ];
# fontconfig.enable = true;
# fontconfig.defaultFonts = {
# emoji = [ "Font Awesome 6 Free" "Twitter Color Emoji" ];
# monospace = [ "Hack" ];
# serif = [ "DejaVu Serif" ];
# sansSerif = [ "DejaVu Sans" ];
# };
# };
system.activationScripts.nixClosureDiff = {
supportsDryActivation = true;
text = ''
# show which packages changed versions or are new/removed in this upgrade
# source: <https://github.com/luishfonseca/dotfiles/blob/32c10e775d9ec7cc55e44592a060c1c9aadf113e/modules/upgrade-diff.nix>
${pkgs.nvd}/bin/nvd --nix-bin-dir=${pkgs.nix}/bin diff /run/current-system "$systemConfig"
'';
};
# disable non-required packages like nano, perl, rsync, strace
environment.defaultPackages = [];
# programs.vim.defaultEditor = true;
environment.variables = {
EDITOR = "vim";
# git claims it should use EDITOR, but it doesn't!
GIT_EDITOR = "vim";
# TODO: these should be moved to `home.sessionVariables` (home-manager)
# Electron apps should use native wayland backend:
# https://nixos.wiki/wiki/Slack#Wayland
# Discord under sway crashes with this.
# NIXOS_OZONE_WL = "1";
# LIBGL_ALWAYS_SOFTWARE = "1";
};
# dconf docs: <https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/desktop_migration_and_administration_guide/profiles>
# this lets programs temporarily write user-level dconf settings (aka gsettings).
# they're written to ~/.config/dconf/user, unless `DCONF_PROFILE` is set to something other than the default of /etc/dconf/profile/user
# find keys/values with `dconf dump /`
programs.dconf.enable = true;
programs.dconf.packages = [
@@ -97,6 +85,7 @@
'';
})
];
# sane.programs.glib.enableFor.user.colin = true; # for `gsettings`
# link debug symbols into /run/current-system/sw/lib/debug
# hopefully picked up by gdb automatically?

View File

@@ -1,3 +1,6 @@
# where to find good stuff?
# - podcast rec thread: <https://lemmy.ml/post/1565858>
#
# candidates:
# - The Nonlinear Library (podcast): <https://forum.effectivealtruism.org/posts/JTZTBienqWEAjGDRv/listen-to-more-ea-content-with-the-nonlinear-library>
# - has ~10 posts per day, text-to-speech; i would need better tagging before adding this
@@ -79,12 +82,14 @@ let
(fromDb "feeds.transistor.fm/acquired" // tech)
## ACQ2 - more "Acquired" episodes
(fromDb "acquiredlpbonussecretsecret.libsyn.com" // tech)
# The Intercept - Deconstructed; also available: <rss.acast.com/deconstructed>
(fromDb "rss.prod.firstlook.media/deconstructed/podcast.rss" // pol)
# The Intercept - Deconstructed
(fromDb "rss.acast.com/deconstructed")
# (fromDb "rss.prod.firstlook.media/deconstructed/podcast.rss" // pol) #< possible URL rot
## The Daily
(mkPod "https://feeds.simplecast.com/54nAGcIl" // pol // daily)
# The Intercept - Intercepted; also available: <https://rss.acast.com/intercepted-with-jeremy-scahill>
(fromDb "rss.prod.firstlook.media/intercepted/podcast.rss" // pol)
# The Intercept - Intercepted
(fromDb "rss.acast.com/intercepted-with-jeremy-scahill")
# (fromDb "rss.prod.firstlook.media/intercepted/podcast.rss" // pol) #< possible URL rot
(fromDb "podcast.posttv.com/itunes/post-reports.xml" // pol)
## Eric Weinstein
(fromDb "rss.art19.com/the-portal" // rat)
@@ -102,6 +107,8 @@ let
(fromDb "feeds.megaphone.fm/recodedecode" // tech)
## Matrix (chat) Live
(fromDb "feed.podbean.com/matrixlive/feed.xml" // tech)
(fromDb "cast.postmarketos.org" // tech)
(fromDb "podcast.thelinuxexp.com" // tech)
## Michael Malice - Your Welcome -- also available here: <https://origin.podcastone.com/podcast?categoryID2=2232>
(fromDb "rss.art19.com/your-welcome" // pol)
(fromDb "seattlenice.buzzsprout.com" // pol)
@@ -112,12 +119,18 @@ let
## The Witch Trials of J.K. Rowling
## - <https://www.thefp.com/witchtrials>
(mkPod "https://feeds.megaphone.fm/RUNMED9919162779" // pol // infrequent)
## Atlas Obscura
(fromDb "feeds.simplecast.com/xKJ93w_w" // uncat)
## Ezra Klein Show
(fromDb "feeds.simplecast.com/82FI35Px" // pol)
## Wireshark Podcast o_0
(fromDb "sharkbytes.transistor.fm" // tech)
];
texts = [
# AGGREGATORS (> 1 post/day)
(fromDb "lwn.net" // tech)
(fromDb "lesswrong.com" // rat)
# (fromDb "lesswrong.com" // rat)
# (fromDb "econlib.org" // pol)
# AGGREGATORS (< 1 post/day)
@@ -159,10 +172,11 @@ let
(fromDb "ianthehenry.com" // tech)
(fromDb "bitbashing.io" // tech)
(fromDb "idiomdrottning.org" // uncat)
(mkText "http://boginjr.com/feed" // tech // infrequent)
(mkText "https://anish.lakhwara.com/home.html" // tech // weekly)
(fromDb "jefftk.com" // tech)
(fromDb "pomeroyb.com" // tech)
(mkText "https://til.simonwillison.net/tils/feed.atom" // tech // weekly)
# (mkText "https://til.simonwillison.net/tils/feed.atom" // tech // weekly)
# TECH PROJECTS
(fromDb "blog.rust-lang.org" // tech)
@@ -212,6 +226,7 @@ let
(fromDb "preposterousuniverse.com" // rat)
(mkSubstack "eliqian" // rat // weekly)
(mkText "https://acoup.blog/feed" // rat // weekly)
(fromDb "mindingourway.com" // rat)
## mostly dating topics. not advice, or humor, but looking through a social lens
(fromDb "putanumonit.com" // rat)

View File

@@ -1,72 +1,134 @@
{ pkgs, ... }:
# docs
# - x-systemd options: <https://www.freedesktop.org/software/systemd/man/systemd.mount.html>
let sshOpts = rec {
fsType = "fuse.sshfs";
optionsBase = [
"x-systemd.automount"
{ pkgs, sane-lib, ... }:
let fsOpts = rec {
common = [
"_netdev"
"user"
"noatime"
"user" # allow any user with access to the device to mount the fs
"x-systemd.requires=network-online.target"
"x-systemd.after=network-online.target"
"x-systemd.mount-timeout=10s" # how long to wait for mount **and** how long to wait for unmount
];
auto = [ "x-systemd.automount" ];
noauto = [ "noauto" ]; # don't mount as part of remote-fs.target
wg = [
"x-systemd.requires=wireguard-wg-home.service"
"x-systemd.after=wireguard-wg-home.service"
];
ssh = common ++ [
"identityfile=/home/colin/.ssh/id_ed25519"
"allow_other"
"default_permissions"
];
optionsColin = optionsBase ++ [
sshColin = ssh ++ [
"transform_symlinks"
"idmap=user"
"uid=1000"
"gid=100"
];
optionsRoot = optionsBase ++ [
sshRoot = ssh ++ [
# 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
# soft = on "major timeout", report I/O error to userspace
# 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.
nfs = common ++ [
# "actimeo=10"
"bg"
"retrans=4"
"retry=0"
"soft"
"timeo=15"
"nofail" # don't fail remote-fs.target when this mount fails (not an option for sshfs else would be common)
];
};
in
{
# some services which use private directories error if the parent (/var/lib/private) isn't 700.
sane.fs."/var/lib/private".dir.acl.mode = "0700";
# in-memory compressed RAM
# defaults to compressing at most 50% size of RAM
# claimed compression ratio is about 2:1
# - but on moby w/ zstd default i see 4-7:1 (ratio lowers as it fills)
# note that idle overhead is about 0.05% of capacity (e.g. 2B per 4kB page)
# docs: <https://www.kernel.org/doc/Documentation/blockdev/zram.txt>
#
# to query effectiveness:
# `cat /sys/block/zram0/mm_stat`. whitespace separated fields:
# - *orig_data_size* (bytes)
# - *compr_data_size* (bytes)
# - mem_used_total (bytes)
# - mem_limit (bytes)
# - mem_used_max (bytes)
# - *same_pages* (pages which are e.g. all zeros (consumes no additional mem))
# - *pages_compacted* (pages which have been freed thanks to compression)
# - huge_pages (incompressible)
#
# see also:
# - `man zramctl`
zramSwap.enable = true;
# how much ram can be swapped into the zram device.
# this shouldn't be higher than the observed compression ratio.
# the default is 50% (why?)
# 100% should be "guaranteed" safe so long as the data is even *slightly* compressible.
# 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;
# fileSystems."/mnt/servo-nfs" = {
# device = "servo-hn:/";
# noCheck = true;
# fsType = "nfs";
# options = fsOpts.nfs ++ fsOpts.auto ++ fsOpts.wg;
# };
fileSystems."/mnt/servo-nfs/media" = {
device = "servo-hn:/media";
noCheck = true;
fsType = "nfs";
options = fsOpts.nfs ++ fsOpts.auto ++ fsOpts.wg;
};
# fileSystems."/mnt/servo-media-nfs" = {
# device = "servo-hn:/media";
# noCheck = true;
# fsType = "nfs";
# options = fsOpts.common ++ fsOpts.auto;
# };
sane.fs."/mnt/servo-media" = sane-lib.fs.wantedSymlinkTo "/mnt/servo-nfs/media";
fileSystems."/mnt/desko-home" = {
device = "colin@desko:/home/colin";
fsType = "fuse.sshfs";
options = fsOpts.sshColin ++ fsOpts.noauto;
noCheck = true;
};
sane.fs."/mnt/desko-home" = sane-lib.fs.wantedDir;
fileSystems."/mnt/desko-root" = {
device = "colin@desko:/";
fsType = "fuse.sshfs";
options = fsOpts.sshRoot ++ fsOpts.noauto;
noCheck = true;
};
sane.fs."/mnt/desko-root" = sane-lib.fs.wantedDir;
environment.pathsToLink = [
# needed to achieve superuser access for user-mounted filesystems (see optionsRoot above)
# we can only link whole directories here, even though we're only interested in pkgs.openssh
"/libexec"
];
fileSystems."/mnt/servo-media-wan" = {
device = "colin@uninsane.org:/var/lib/uninsane/media";
inherit (sshOpts) fsType;
options = sshOpts.optionsColin;
noCheck = true;
};
fileSystems."/mnt/servo-media-lan" = {
device = "colin@servo:/var/lib/uninsane/media";
inherit (sshOpts) fsType;
options = sshOpts.optionsColin;
noCheck = true;
};
fileSystems."/mnt/servo-root-wan" = {
device = "colin@uninsane.org:/";
inherit (sshOpts) fsType;
options = sshOpts.optionsRoot;
noCheck = true;
};
fileSystems."/mnt/servo-root-lan" = {
device = "colin@servo:/";
inherit (sshOpts) fsType;
options = sshOpts.optionsRoot;
noCheck = true;
};
fileSystems."/mnt/desko-home" = {
device = "colin@desko:/home/colin";
inherit (sshOpts) fsType;
options = sshOpts.optionsColin;
noCheck = true;
};
fileSystems."/mnt/desko-root" = {
device = "colin@desko:/";
inherit (sshOpts) fsType;
options = sshOpts.optionsRoot;
noCheck = true;
};
environment.systemPackages = [
pkgs.sshfs-fuse
];

View File

@@ -1,7 +1,7 @@
{ ... }:
{
imports = [
./keyring.nix
./keyring
./mime.nix
./ssh.nix
./xdg-dirs.nix

View File

@@ -1,11 +0,0 @@
{ config, sane-lib, ... }:
{
sane.user.persist.private = [ ".local/share/keyrings" ];
sane.user.fs."private/.local/share/keyrings/default" = {
generated.script.script = builtins.readFile ../../../scripts/init-keyring;
# TODO: is this `wantedBy` needed? can we inherit it?
wantedBy = [ config.sane.fs."/home/colin/private".unit ];
};
}

View File

@@ -0,0 +1,17 @@
{ config, pkgs, sane-lib, ... }:
let
init-keyring = pkgs.static-nix-shell.mkBash {
pname = "init-keyring";
src = ./.;
};
in
{
sane.user.persist.private = [ ".local/share/keyrings" ];
sane.user.fs."private/.local/share/keyrings/default" = {
generated.command = [ "${init-keyring}/bin/init-keyring" ];
wantedBy = [ config.sane.fs."/home/colin/private".unit ];
wantedBeforeBy = [ ]; # don't created this as part of `multi-user.target`
};
}

View File

@@ -1,4 +1,5 @@
#!/bin/sh
#!/usr/bin/env nix-shell
#!nix-shell -i bash
# initializes the default libsecret keyring (used by gnome-keyring) if not already initialized.
# this initializes it to be plaintext/unencrypted.

View File

@@ -1,43 +1,28 @@
{ config, sane-lib, ...}:
{ config, lib, ...}:
let
www = config.sane.programs.web-browser.config.browser.desktop;
pdf = "org.gnome.Evince.desktop";
md = "obsidian.desktop";
thumb = "org.gnome.gThumb.desktop";
video = "vlc.desktop";
# audio = "mpv.desktop";
audio = "vlc.desktop";
# ProgramConfig -> { "<mime-type>" = { priority, desktop }; }
weightedMimes = prog: builtins.mapAttrs (_key: desktop: { priority = prog.mime.priority; desktop = desktop; }) prog.mime.associations;
# [ { "<mime-type>" = { priority, desktop } ]; } ] -> { "<mime-type>" = [ { priority, desktop } ... ]; }
mergeMimes = mimes: lib.foldAttrs (item: acc: [item] ++ acc) [] mimes;
# [ { priority, desktop } ... ] -> Self
sortOneMimeType = associations: builtins.sort (l: r: assert l.priority != r.priority; l.priority < r.priority) associations;
sortMimes = mimes: builtins.mapAttrs (_k: sortOneMimeType) mimes;
removePriorities = mimes: builtins.mapAttrs (_k: associations: builtins.map (a: a.desktop) associations) mimes;
# [ ProgramConfig ]
enabledPrograms = builtins.filter (p: p.enabled) (builtins.attrValues config.sane.programs);
# [ { "<mime-type>" = { prority, desktop } ]
enabledWeightedMimes = builtins.map weightedMimes enabledPrograms;
in
{
# the xdg mime type for a file can be found with:
# - `xdg-mime query filetype path/to/thing.ext`
# the default handler for a mime type can be found with:
# - `xdg-mime query default <mimetype>` (e.g. x-scheme-handler/http)
#
# we can have single associations or a list of associations.
# there's also options to *remove* [non-default] associations from specific apps
xdg.mime.enable = true;
xdg.mime.defaultApplications = {
# AUDIO
"audio/flac" = audio;
"audio/mpeg" = audio;
"audio/x-vorbis+ogg" = audio;
# IMAGES
"image/heif" = thumb; # apple codec
"image/png" = thumb;
"image/jpeg" = thumb;
# VIDEO
"video/mp4" = video;
"video/quicktime" = video;
"video/webm" = video;
"video/x-matroska" = video;
# HTML
"text/html" = www;
"x-scheme-handler/http" = www;
"x-scheme-handler/https" = www;
"x-scheme-handler/about" = www;
"x-scheme-handler/unknown" = www;
# RICH-TEXT DOCUMENTS
"application/pdf" = pdf;
"text/markdown" = md;
};
xdg.mime.defaultApplications = removePriorities (sortMimes (mergeMimes enabledWeightedMimes));
}

View File

@@ -1,26 +1,29 @@
{ config, lib, sane-lib, ... }:
# TODO: this should be moved to users/colin.nix
{ config, lib, ... }:
with lib;
let
host = config.networking.hostName;
user-pubkey-full = config.sane.ssh.pubkeys."colin@${host}" or {};
user-pubkey = user-pubkey-full.asUserKey or null;
host-keys = filter (k: k.user == "root") (attrValues config.sane.ssh.pubkeys);
known-hosts-text = concatStringsSep
host-keys = lib.filter (k: k.user == "root") (lib.attrValues config.sane.ssh.pubkeys);
known-hosts-text = lib.concatStringsSep
"\n"
(map (k: k.asHostKey) host-keys)
(builtins.map (k: k.asHostKey) host-keys)
;
in
{
# ssh key is stored in private storage
sane.user.persist.private = [ ".ssh/id_ed25519" ];
sane.user.fs.".ssh/id_ed25519.pub" =
mkIf (user-pubkey != null) (sane-lib.fs.wantedText user-pubkey);
sane.user.fs.".ssh/known_hosts" = sane-lib.fs.wantedText known-hosts-text;
sane.user.persist.private = [
{ type = "file"; path = ".ssh/id_ed25519"; }
];
sane.user.fs.".ssh/id_ed25519.pub" = lib.mkIf (user-pubkey != null) {
symlink.text = user-pubkey;
};
sane.user.fs.".ssh/known_hosts".symlink.text = known-hosts-text;
users.users.colin.openssh.authorizedKeys.keys =
let
user-keys = filter (k: k.user == "colin") (attrValues config.sane.ssh.pubkeys);
user-keys = lib.filter (k: k.user == "colin") (lib.attrValues config.sane.ssh.pubkeys);
in
map (k: k.asUserKey) user-keys;
builtins.map (k: k.asUserKey) user-keys;
}

View File

@@ -1,9 +1,9 @@
{ lib, sane-lib, ...}:
{ ... }:
{
# XDG defines things like ~/Desktop, ~/Downloads, etc.
# these clutter the home, so i mostly don't use them.
sane.user.fs.".config/user-dirs.dirs" = sane-lib.fs.wantedText ''
sane.user.fs.".config/user-dirs.dirs".symlink.text = ''
XDG_DESKTOP_DIR="$HOME/.xdg/Desktop"
XDG_DOCUMENTS_DIR="$HOME/dev"
XDG_DOWNLOAD_DIR="$HOME/tmp"
@@ -16,5 +16,5 @@
# prevent `xdg-user-dirs-update` from overriding/updating our config
# see <https://manpages.ubuntu.com/manpages/bionic/man5/user-dirs.conf.5.html>
sane.user.fs.".config/user-dirs.conf" = sane-lib.fs.wantedText "enabled=False";
sane.user.fs.".config/user-dirs.conf".symlink.text = "enabled=False";
}

View File

@@ -40,6 +40,10 @@
sane.ids.lemmy.gid = 2408;
sane.ids.pict-rs.uid = 2409;
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.colin.uid = 1000;
sane.ids.guest.uid = 1100;

View File

@@ -11,17 +11,37 @@
# - `man iwd.config` for global config
# - `man iwd.network` for per-SSID config
# use `iwctl` to control
networking.networkmanager.wifi.backend = "iwd";
networking.wireless.iwd.enable = true;
networking.wireless.iwd.settings = {
# auto-connect to a stronger network if signal drops below this value
# bedroom -> bedroom connection is -35 to -40 dBm
# bedroom -> living room connection is -60 dBm
General.RoamThreshold = "-52"; # default -70
General.RoamThreshold5G = "-52"; # default -76
};
# networking.networkmanager.wifi.backend = "iwd";
# networking.wireless.iwd.enable = true;
# networking.wireless.iwd.settings = {
# # auto-connect to a stronger network if signal drops below this value
# # bedroom -> bedroom connection is -35 to -40 dBm
# # bedroom -> living room connection is -60 dBm
# General.RoamThreshold = "-52"; # default -70
# General.RoamThreshold5G = "-52"; # default -76
# };
# plugins mostly add support for establishing different VPN connections.
# the default plugin set includes mostly proprietary VPNs:
# - fortisslvpn (Fortinet)
# - iodine (DNS tunnels)
# - l2tp
# - openconnect (Cisco Anyconnect / Juniper / ocserv)
# - openvpn
# - vpnc (Cisco VPN)
# - sstp
#
# i don't use these, and notably they drag in huge dependency sets and don't cross compile well.
# e.g. openconnect drags in webkitgtk (for SSO)!
networking.networkmanager.plugins = lib.mkForce [];
networking.firewall.allowedUDPPorts = [
1900 # to received UPnP advertisements. required by sane-ip-check-upnp
];
# keyfile.path = where networkmanager should look for connection credentials
networking.networkmanager.extraConfig = ''
[keyfile]
path=/var/lib/NetworkManager/system-connections
'';
}

View File

@@ -5,6 +5,9 @@
nix.nixPath = [
"nixpkgs=${pkgs.path}"
# note the import starts at repo root: this allows `./overlay/default.nix` to access the stuff at the root
"nixpkgs-overlays=${../../..}/hosts/common/nix-path/overlay"
# "nixpkgs-overlays=${../../..}/hosts/common/nix-path/overlay"
# as long as my system itself doesn't rely on NIXPKGS at runtime, we can point the overlays to git
# to avoid switching so much during development
"nixpkgs-overlays=/home/colin/dev/nixos/hosts/common/nix-path/overlay"
];
}

View File

@@ -6,13 +6,11 @@
sane.persist.stores.private.prefix = "/home/colin";
sane.persist.sys.plaintext = [
# TODO: these should be private.. somehow
"/var/log"
"/var/backup" # for e.g. postgres dumps
# TODO: move elsewhere
"/var/lib/alsa" # preserve output levels, default devices
"/var/lib/colord" # preserve color calibrations (?)
"/var/lib/machines" # maybe not needed, but would be painful to add a VM and forget.
"/var/lib/systemd/backlight" # backlight brightness
];
sane.persist.sys.cryptClearOnBoot = [
"/var/lib/systemd/coredump"
];
}

View File

@@ -2,5 +2,8 @@
{ ... }:
{
sane.programs.aerc.secrets.".config/aerc/accounts.conf" = ../../../secrets/common/aerc_accounts.conf.bin;
sane.programs.aerc = {
secrets.".config/aerc/accounts.conf" = ../../../secrets/common/aerc_accounts.conf.bin;
mime.associations."x-scheme-handler/mailto" = "aerc.desktop";
};
}

View File

@@ -1,381 +1,226 @@
{ lib, pkgs, ... }:
{ pkgs, ... }:
let
inherit (builtins) attrNames;
flattenedPkgs = pkgs // (with pkgs; {
# XXX can't `inherit` a nested attr, so we move them to the toplevel
"cacert.unbundled" = pkgs.cacert.unbundled;
"gnome.cheese" = gnome.cheese;
"gnome.dconf-editor" = gnome.dconf-editor;
"gnome.file-roller" = gnome.file-roller;
"gnome.gnome-disk-utility" = gnome.gnome-disk-utility;
"gnome.gnome-maps" = gnome.gnome-maps;
"gnome.nautilus" = gnome.nautilus;
"gnome.gnome-system-monitor" = gnome.gnome-system-monitor;
"gnome.gnome-terminal" = gnome.gnome-terminal;
"gnome.gnome-weather" = gnome.gnome-weather;
"gnome.totem" = gnome.totem;
"libsForQt5.plasmatube" = libsForQt5.plasmatube;
});
sysadminPkgs = {
inherit (flattenedPkgs)
btrfs-progs
"cacert.unbundled" # some services require unbundled /etc/ssl/certs
cryptsetup
dig
efibootmgr
fatresize
fd
file
gawk
git
gptfdisk
hdparm
htop
iftop
inetutils # for telnet
iotop
iptables
jq
killall
lsof
miniupnpc
nano
netcat
nethogs
nmap
openssl
parted
pciutils
powertop
pstree
ripgrep
screen
smartmontools
socat
strace
subversion
tcpdump
tree
usbutils
wget
wirelesstools # iwlist
;
};
sysadminExtraPkgs = {
# application-specific packages
inherit (pkgs)
backblaze-b2
duplicity
sqlite # to debug sqlite3 databases
;
};
iphonePkgs = {
inherit (pkgs)
ifuse
ipfs
libimobiledevice
;
};
tuiPkgs = {
inherit (pkgs)
aerc # email client
offlineimap # email mailox sync
visidata # TUI spreadsheet viewer/editor
w3m
;
};
consoleMediaPkgs = {
inherit (pkgs)
ffmpeg
imagemagick
sox
yt-dlp
;
};
# TODO: split these into smaller groups.
# - moby doesn't want a lot of these.
# - categories like
# - dev?
# - debugging?
consolePkgs = {
inherit (pkgs)
alsaUtils # for aplay, speaker-test
cdrtools
clinfo
dmidecode
efivar
flashrom
fwupd
gh # MS GitHub cli
git # needed as a user package, for config.
gnupg
gocryptfs
gopass # TODO: shouldn't be needed here
gopass-jsonapi
kitty # TODO: move to GUI, but `ssh servo` from kitty sets `TERM=xterm-kitty` in the remove and breaks things
libsecret # for managing user keyrings
lm_sensors # for sensors-detect
lshw
# memtester
neovim
# nettools
# networkmanager
nixpkgs-review
# nixos-generators
nmon
# node2nix
# oathToolkit # for oathtool
# ponymix
pulsemixer
python3
ripgrep # needed as a user package so that its user-level config file can be installed
rsync
# python3Packages.eyeD3 # music tagging
sane-scripts
sequoia
snapper
sops
speedtest-cli
# ssh-to-age
sudo
# tageditor # music tagging
unar
wireguard-tools
xdg-utils # for xdg-open
# yarn
zsh
;
};
guiPkgs = {
inherit (flattenedPkgs)
# celluloid # mpv frontend
# emote
evince # works on phosh
# { pkg = fluffychat-moby; persist.plaintext = [ ".local/share/chat.fluffy.fluffychat" ]; } # TODO: ship normal fluffychat on non-moby?
# foliate # e-book reader
# XXX by default fractal stores its state in ~/.local/share/<UUID>.
# after logging in, manually change ~/.local/share/keyrings/... to point it to some predictable subdir.
# then reboot (so that libsecret daemon re-loads the keyring...?)
# { pkg = fractal-latest; persist.private = [ ".local/share/fractal" ]; }
# { pkg = fractal-next; persist.private = [ ".local/share/fractal" ]; }
# "gnome.cheese"
# gnome-feeds # RSS reader (with claimed mobile support)
"gnome.file-roller"
# "gnome.gnome-maps" # works on phosh
"gnome.nautilus"
# gnome-podcasts
# "gnome.gnome-system-monitor"
# "gnome.gnome-terminal" # works on phosh
# "gnome.gnome-weather"
gpodder
gthumb
jellyfin-media-player
# lollypop
# mpv
# networkmanagerapplet
# newsflash
nheko
pavucontrol
# picard # music tagging
# "libsForQt5.plasmatube" # Youtube player
soundconverter
# sublime-music
# tdesktop # broken on phosh
# tokodon
vlc
# pleroma client (Electron). input is broken on phosh. TODO(2023/02/02): fix electron19 input (insecure)
# whalebird
xterm # broken on phosh
;
};
desktopGuiPkgs = {
inherit (flattenedPkgs)
audacity
brave # for the integrated wallet -- as a backup
chromium
dino
electrum
element-desktop
font-manager
gajim # XMPP client
gimp # broken on phosh
"gnome.dconf-editor"
"gnome.gnome-disk-utility"
# "gnome.totem" # video player, supposedly supports UPnP
handbrake
hase
inkscape
kdenlive
kid3 # audio tagging
krita
libreoffice-fresh
mumble
obsidian
slic3r
steam
wireshark # could maybe ship the cli as sysadmin pkg
;
};
x86GuiPkgs = {
inherit (pkgs)
discord
# kaiteki # Pleroma client
# gnome.zenity # for kaiteki (it will use qarma, kdialog, or zenity)
# gpt2tc # XXX: unreliable mirror
# logseq # Personal Knowledge Management
losslesscut-bin
makemkv
monero-gui
signal-desktop
spotify
tor-browser-bundle-bin
zecwallet-lite
;
};
# packages not part of any package set; not enabled by default
otherPkgs = {
inherit (pkgs)
lemmy-server
mx-sanebot
stepmania
;
};
# define -- but don't enable -- the packages in some attrset.
declarePkgs = pkgsAsAttrs: lib.mapAttrs (_n: p: {
# no need to actually define the package here: it's defaulted
# package = mkDefault p;
}) pkgsAsAttrs;
in
{
sane.programs = lib.mkMerge [
(declarePkgs consoleMediaPkgs)
(declarePkgs consolePkgs)
(declarePkgs desktopGuiPkgs)
(declarePkgs guiPkgs)
(declarePkgs iphonePkgs)
(declarePkgs sysadminPkgs)
(declarePkgs sysadminExtraPkgs)
(declarePkgs tuiPkgs)
(declarePkgs x86GuiPkgs)
(declarePkgs otherPkgs)
{
# link the various package sets into their own meta packages
consoleMediaUtils = {
package = null;
suggestedPrograms = attrNames consoleMediaPkgs;
};
consoleUtils = {
package = null;
suggestedPrograms = attrNames consolePkgs;
};
desktopGuiApps = {
package = null;
suggestedPrograms = attrNames desktopGuiPkgs;
};
guiApps = {
package = null;
suggestedPrograms = (attrNames guiPkgs)
++ [ "web-browser" ]
++ [ "tuiApps" ]
++ lib.optional (pkgs.system == "x86_64-linux") "x86GuiApps";
};
iphoneUtils = {
package = null;
suggestedPrograms = attrNames iphonePkgs;
};
sysadminUtils = {
package = null;
suggestedPrograms = attrNames sysadminPkgs;
};
sysadminExtraUtils = {
package = null;
suggestedPrograms = attrNames sysadminExtraPkgs;
};
tuiApps = {
package = null;
suggestedPrograms = attrNames tuiPkgs;
};
x86GuiApps = {
package = null;
suggestedPrograms = attrNames x86GuiPkgs;
};
}
{
# nontrivial package definitions
dino.persist.private = [ ".local/share/dino" ];
# creds, but also 200 MB of node modules, etc
discord.persist.private = [ ".config/discord" ];
# creds/session keys, etc
element-desktop.persist.private = [ ".config/Element" ];
# `emote` will show a first-run dialog based on what's in this directory.
# mostly, it just keeps a LRU of previously-used emotes to optimize display order.
# TODO: package [smile](https://github.com/mijorus/smile) for probably a better mobile experience.
emote.persist.plaintext = [ ".local/share/Emote" ];
# MS GitHub stores auth token in .config
# TODO: we can populate gh's stuff statically; it even lets us use the same oauth across machines
gh.persist.private = [ ".config/gh" ];
# actual monero blockchain (not wallet/etc; safe to delete, just slow to regenerate)
# XXX: is it really safe to persist this? it doesn't have info that could de-anonymize if captured?
monero-gui.persist.plaintext = [ ".bitmonero" ];
mumble.persist.private = [ ".local/share/Mumble" ];
# not strictly necessary, but allows caching articles; offline use, etc.
nheko.persist.private = [
".config/nheko" # config file (including client token)
".cache/nheko" # media cache
".local/share/nheko" # per-account state database
sane.programs = {
# PACKAGE SETS
sysadminUtils = {
package = null;
suggestedPrograms = [
"btrfs-progs"
"cacert.unbundled" # some services require unbundled /etc/ssl/certs
"cryptsetup"
"dig"
"efibootmgr"
"fatresize"
"fd"
"file"
"gawk"
"git"
"gptfdisk"
"hdparm"
"htop"
"iftop"
"inetutils" # for telnet
"iotop"
"iptables"
"jq"
"killall"
"lsof"
"miniupnpc"
"nano"
# "ncdu" # ncurses disk usage. doesn't cross compile (zig)
"neovim"
"netcat"
"nethogs"
"nmap"
"openssl"
"parted"
"pciutils"
"powertop"
"pstree"
"ripgrep"
"screen"
"smartmontools"
"socat"
"strace"
"subversion"
"tcpdump"
"tree"
"usbutils"
"wget"
"wirelesstools" # iwlist
];
};
sysadminExtraUtils = {
package = null;
suggestedPrograms = [
"backblaze-b2"
"duplicity"
"sqlite" # to debug sqlite3 databases
];
};
# settings (electron app)
obsidian.persist.plaintext = [ ".config/obsidian" ];
# TODO: split these into smaller groups.
# - moby doesn't want a lot of these.
# - categories like
# - dev?
# - debugging?
consoleUtils = {
package = null;
suggestedPrograms = [
"alsaUtils" # for aplay, speaker-test
# "cdrtools"
"clinfo"
"dmidecode"
"dtrx" # `unar` alternative, "Do The Right eXtraction"
"efivar"
# "flashrom"
"fwupd"
"git" # needed as a user package, for config.
# "gnupg"
# "gocryptfs"
# "gopass"
# "gopass-jsonapi"
"helix" # text editor
"kitty" # TODO: move to GUI, but `ssh servo` from kitty sets `TERM=xterm-kitty` in the remove and breaks things
"libsecret" # for managing user keyrings. TODO: what needs this? lift into the consumer
"lm_sensors" # for sensors-detect. TODO: what needs this? lift into the consumer
"lshw"
# "memtester"
"neovim" # needed as a user package, for swap persistence
# "nettools"
# "networkmanager"
# "nixos-generators"
"nmon"
# "node2nix"
# "oathToolkit" # for oathtool
# "ponymix"
"pulsemixer"
"python3"
# "python3Packages.eyeD3" # music tagging
"ripgrep" # needed as a user package so that its user-level config file can be installed
"rsync"
"sane-scripts" # TODO: split; moby doesn't need the duplicity related ones
"snapper"
"sops"
"speedtest-cli"
# "ssh-to-age"
"sudo"
# "tageditor" # music tagging
# "unar"
"wireguard-tools"
"xdg-terminal-exec"
"xdg-utils" # for xdg-open
# "yarn"
"zsh"
];
};
# creds, media
signal-desktop.persist.private = [ ".config/Signal" ];
desktopConsoleUtils = {
package = null;
suggestedPrograms = [
"gh" # MS GitHub cli
"nix-index"
"nixpkgs-review"
"sequoia"
];
};
# printer/filament settings
slic3r.persist.plaintext = [ ".Slic3r" ];
consoleMediaUtils = {
package = null;
suggestedPrograms = [
"ffmpeg"
"imagemagick"
"sox"
"yt-dlp"
];
};
# creds, widevine .so download. TODO: could easily manage these statically.
spotify.persist.plaintext = [ ".config/spotify" ];
tuiApps = {
package = null;
suggestedPrograms = [
"aerc" # email client
"msmtp" # sendmail
"offlineimap" # email mailbox sync
"sfeed" # RSS fetcher
"visidata" # TUI spreadsheet viewer/editor
"w3m" # web browser
];
};
tdesktop.persist.private = [ ".local/share/TelegramDesktop" ];
iphoneUtils = {
package = null;
suggestedPrograms = [
"ifuse"
"ipfs"
"libimobiledevice"
];
};
tokodon.persist.private = [ ".cache/KDE/tokodon" ];
devPkgs = {
package = null;
suggestedPrograms = [
"clang"
"nodejs"
"tree-sitter"
];
};
# hardenedMalloc solves a crash at startup
# TODO 2023/02/02: is this safe to remove yet?
tor-browser-bundle-bin.package = pkgs.tor-browser-bundle-bin.override {
useHardenedMalloc = false;
};
whalebird.persist.private = [ ".config/Whalebird" ];
# INDIVIDUAL PACKAGE DEFINITIONS
yarn.persist.plaintext = [ ".cache/yarn" ];
dino.persist.private = [ ".local/share/dino" ];
# zcash coins. safe to delete, just slow to regenerate (10-60 minutes)
zecwallet-lite.persist.private = [ ".zcash" ];
}
];
# creds, but also 200 MB of node modules, etc
discord.persist.private = [ ".config/discord" ];
# creds/session keys, etc
element-desktop.persist.private = [ ".config/Element" ];
# `emote` will show a first-run dialog based on what's in this directory.
# mostly, it just keeps a LRU of previously-used emotes to optimize display order.
# TODO: package [smile](https://github.com/mijorus/smile) for probably a better mobile experience.
emote.persist.plaintext = [ ".local/share/Emote" ];
fluffychat-moby.persist.plaintext = [ ".local/share/chat.fluffy.fluffychat" ];
# MS GitHub stores auth token in .config
# TODO: we can populate gh's stuff statically; it even lets us use the same oauth across machines
gh.persist.private = [ ".config/gh" ];
# actual monero blockchain (not wallet/etc; safe to delete, just slow to regenerate)
# XXX: is it really safe to persist this? it doesn't have info that could de-anonymize if captured?
monero-gui.persist.plaintext = [ ".bitmonero" ];
mumble.persist.private = [ ".local/share/Mumble" ];
# settings (electron app)
obsidian.persist.plaintext = [ ".config/obsidian" ];
# creds, media
signal-desktop.persist.private = [ ".config/Signal" ];
# printer/filament settings
slic3r.persist.plaintext = [ ".Slic3r" ];
# creds, widevine .so download. TODO: could easily manage these statically.
spotify.persist.plaintext = [ ".config/spotify" ];
tdesktop.persist.private = [ ".local/share/TelegramDesktop" ];
tokodon.persist.private = [ ".cache/KDE/tokodon" ];
# hardenedMalloc solves an "unable to connect to Tor" error when pressing the "connect" button
# - still required as of 2023/07/14
tor-browser-bundle-bin.package = pkgs.tor-browser-bundle-bin.override {
useHardenedMalloc = false;
};
whalebird.persist.private = [ ".config/Whalebird" ];
yarn.persist.plaintext = [ ".cache/yarn" ];
# zcash coins. safe to delete, just slow to regenerate (10-60 minutes)
zecwallet-lite.persist.private = [ ".zcash" ];
};
}

View File

@@ -0,0 +1,11 @@
{ ... }:
{
sane.programs.cozy = {
# cozy uses a sqlite db for its config and exposes no CLI options other than --help and --debug
persist.plaintext = [
".local/share/cozy" # sqlite db (config & index?)
".cache/cozy" # offline cache
];
};
}

View File

@@ -4,23 +4,41 @@
imports = [
./aerc.nix
./assorted.nix
./cozy.nix
./epiphany.nix
./evince.nix
./firefox.nix
./fontconfig.nix
./fractal.nix
./git.nix
./gnome-feeds.nix
./gpodder.nix
./gthumb.nix
./helix.nix
./imagemagick.nix
./jellyfin-media-player.nix
./kitty
./komikku.nix
./koreader
./libreoffice.nix
./lemoa.nix
./megapixels.nix
./mepo.nix
./mpv.nix
./msmtp.nix
./neovim.nix
./newsflash.nix
./nheko.nix
./nix-index.nix
./obsidian.nix
./offlineimap.nix
./ripgrep.nix
./sfeed.nix
./splatmoji.nix
./steam.nix
./sublime-music.nix
./tangram.nix
./vlc.nix
./web-browser.nix
./wireshark.nix
./zeal.nix
./zsh

View File

@@ -0,0 +1,45 @@
# epiphany web browser
# - GTK4/webkitgtk
#
# usability notes:
# - touch-based scroll works well (for moby)
# - URL bar constantly resets cursor to the start of the line as i type
# - maybe due to the URLbar suggestions getting in the way
{ pkgs, ... }:
{
sane.programs.epiphany = {
# XXX(2023/07/08): running on moby without this hack fails, with:
# - `bwrap: Can't make symlink at /var/run: File exists`
# this could be due to:
# - epiphany is somewhere following a symlink into /var/run instead of /run
# - (nothing in `env` or in this repo touches /var/run)
# - no xdg-desktop-portal is installed (unlikely)
#
# a few other users have hit this, in different contexts:
# - <https://gitlab.gnome.org/GNOME/gnome-builder/-/issues/1164>
# - <https://github.com/flatpak/flatpak/issues/3477>
# - <https://github.com/NixOS/nixpkgs/issues/197085>
package = pkgs.epiphany.overrideAttrs (upstream: {
preFixup = ''
gappsWrapperArgs+=(
--set WEBKIT_DISABLE_SANDBOX_THIS_IS_DANGEROUS "1"
);
'' + (upstream.preFixup or "");
});
persist.private = [
".cache/epiphany"
".local/share/epiphany"
# also .config/epiphany, but appears empty
];
mime.priority = 200; # default priority is 100: install epiphany only as a fallback
mime.associations = let
desktop = "org.gnome.Epiphany.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;
};
};
}

View File

@@ -0,0 +1,4 @@
{ ... }:
{
sane.programs.evince.mime.associations."application/pdf" = "org.gnome.Evince.desktop";
}

View File

@@ -9,21 +9,20 @@
{ config, lib, pkgs, ...}:
with lib;
let
cfg = config.sane.programs.web-browser.config;
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;
# browser = pkgs.librewolf-unwrapped.overrideAttrs (drv: {
# # this allows side-loading unsigned addons
# MOZ_REQUIRE_SIGNING = false;
# });
extraPrefsFiles = pkgs.librewolf-unwrapped.extraPrefsFiles ++ mobile-prefs;
libName = "librewolf";
dotDir = ".librewolf";
cacheDir = ".cache/librewolf"; # TODO: is it?
cacheDir = ".cache/librewolf";
desktop = "librewolf.desktop";
};
firefoxSettings = {
browser = pkgs.firefox-esr-unwrapped;
extraPrefsFiles = mobile-prefs;
libName = "firefox";
dotDir = ".mozilla/firefox";
cacheDir = ".cache/mozilla";
@@ -47,8 +46,7 @@ let
package = pkgs.wrapFirefox cfg.browser.browser {
# inherit the default librewolf.cfg
# it can be further customized via ~/.librewolf/librewolf.overrides.cfg
inherit (pkgs.librewolf-unwrapped) extraPrefsFiles;
inherit (cfg.browser) libName;
inherit (cfg.browser) extraPrefsFiles libName;
extraNativeMessagingHosts = optional cfg.addons.browserpass-extension.enable pkgs.browserpass;
# extraNativeMessagingHosts = [ pkgs.gopass-native-messaging-host ];
@@ -72,7 +70,10 @@ let
};
UserMessaging = {
ExtensionRecommendations = false;
FeatureRecommendations = false;
SkipOnboarding = true;
UrlbarInterventions = false;
WhatsNew = false;
};
# these were taken from Librewolf
@@ -144,54 +145,62 @@ in
{
config = mkMerge [
({
sane.programs.web-browser.configOption = mkOption {
sane.programs.firefox.configOption = mkOption {
type = types.submodule configOpts;
default = {};
};
sane.programs.web-browser.config.addons = {
# get names from:
# - ~/ref/nix-community/nur-combined/repos/rycee/pkgs/firefox-addons/generated-firefox-addons.nix
# `wget ...xpi`; `unar ...xpi`; `cat */manifest.json | jq '.browser_specific_settings.gecko.id'`
sane.programs.firefox.config.addons = {
browserpass-extension = {
# package = addon "browserpass-ce" "browserpass@maximbaz.com" "sha256-sXgUBbRvMnRpeIW1MTkmTcoqtW/8RDXAkxAq1evFkpc=";
package = localAddon pkgs.browserpass-extension;
package = pkgs.firefox-extensions.browserpass-extension;
enable = lib.mkDefault true;
};
# TODO: build bypass-paywalls from source? it's mysteriously disappeared from the Mozilla store.
# bypass-paywalls-clean.package = addon "bypass-paywalls-clean" "{d133e097-46d9-4ecc-9903-fa6a722a6e0e}" "sha256-oUwdqdAwV3DezaTtOMx7A/s4lzIws+t2f08mwk+324k=";
# bypass-paywalls-clean.enable = lib.mkDefault true;
ether-metamask = {
package = addon "ether-metamask" "webextension@metamask.io" "sha256-G+MwJDOcsaxYSUXjahHJmkWnjLeQ0Wven8DU/lGeMzA=";
bypass-paywalls-clean = {
package = pkgs.firefox-extensions.bypass-paywalls-clean;
enable = lib.mkDefault true;
};
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 = addon "i2p-in-private-browsing" "i2ppb@eyedeekay.github.io" "sha256-dJcJ3jxeAeAkRvhODeIVrCflvX+S4E0wT/PyYzQBQWs=";
package = pkgs.firefox-extensions.i2p-in-private-browsing;
enable = lib.mkDefault config.services.i2p.enable;
};
sidebery = {
package = addon "sidebery" "{3c078156-979c-498b-8990-85f7987dd929}" "sha256-YONfK/rIjlsrTgRHIt3km07Q7KnpIW89Z9r92ZSCc6w=";
package = pkgs.firefox-extensions.sidebery;
enable = lib.mkDefault true;
};
sponsorblock = {
package = addon "sponsorblock" "sponsorBlocker@ajay.app" "sha256-hRsvLaAsVm3dALsTrJqHTNgRFAQcU7XSaGhr5G6+mFs=";
package = pkgs.firefox-extensions.sponsorblock;
enable = lib.mkDefault true;
};
ublacklist = {
package = addon "ublacklist" "@ublacklist" "sha256-RqY5iHzbL2qizth7aguyOKWPyINXmrwOlf/OsfqAS48=";
package = pkgs.firefox-extensions.ublacklist;
enable = lib.mkDefault true;
};
ublock-origin = {
package = addon "ublock-origin" "uBlock0@raymondhill.net" "sha256-eHlQrU/b9X/6sTbHBpGAd+0VsLT7IrVCnd0AQ948lyA=";
package = pkgs.firefox-extensions.ublock-origin;
enable = lib.mkDefault true;
};
};
})
({
sane.programs.web-browser = {
sane.programs.firefox = {
inherit package;
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 filter list configuration.
# specifically, enable the GDPR cookie prompt blocker.
# data.toOverwrite.filterLists is additive (i.e. it supplements the default filters)
@@ -210,6 +219,7 @@ in
}
}
'';
# 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.
@@ -231,16 +241,22 @@ in
'';
};
})
(mkIf config.sane.programs.web-browser.enabled {
(mkIf config.sane.programs.firefox.enabled {
# TODO: move the persistence into the sane.programs API (above)
# flush the cache to disk to avoid it taking up too much tmp
sane.user.persist.byPath."${cfg.browser.cacheDir}" = lib.mkIf (cfg.persistCache != null) {
store = cfg.persistCache;
};
# flush the cache to disk to avoid it taking up too much tmp.
sane.user.persist.byPath."${cfg.browser.cacheDir}".store =
if (cfg.persistData != null) then
cfg.persistData
else
"cryptClearOnBoot"
;
sane.user.persist.byPath."${cfg.browser.dotDir}/default" = lib.mkIf (cfg.persistData != null) {
store = cfg.persistData;
};
sane.user.persist.byPath."${cfg.browser.dotDir}/default".store =
if (cfg.persistData != null) then
cfg.persistData
else
"cryptClearOnBoot"
;
})
];
}

View File

@@ -0,0 +1,15 @@
{ config, lib, pkgs, ... }:
{
fonts = lib.mkIf config.sane.programs.fontconfig.enabled {
fontconfig.enable = true;
fontconfig.defaultFonts = {
emoji = [ "Font Awesome 6 Free" "Noto Color Emoji" ];
monospace = [ "Hack" ];
serif = [ "DejaVu Serif" ];
sansSerif = [ "DejaVu Sans" ];
};
#vvv enables dejavu_fonts, freefont_ttf, gyre-fonts, liberation_ttf, unifont, noto-fonts-emoji
enableDefaultPackages = true;
packages = with pkgs; [ font-awesome noto-fonts-emoji hack-font ];
};
}

View File

@@ -0,0 +1,12 @@
{ pkgs, ... }:
{
sane.programs.fractal = {
# package = pkgs.fractal-latest;
package = pkgs.fractal-next;
# XXX by default fractal stores its state in ~/.local/share/<UUID>.
# after logging in, manually change ~/.local/share/keyrings/... to point it to some predictable subdir.
# then reboot (so that libsecret daemon re-loads the keyring...?)
persist.private = [ ".local/share/fractal" ];
};
}

View File

@@ -1,6 +1,8 @@
{ lib, pkgs, ... }:
let
# TODO: use formats.gitIni or lib.generators.toGitINI
# - see: <repo:nixos/nixpkgs:pkgs/pkgs-lib/formats.nix>
mkCfg = lib.generators.toINI { };
in
{
@@ -11,7 +13,15 @@ in
user.name = "Colin";
user.email = "colin@uninsane.org";
alias.co = "checkout";
alias.br = "branch";
alias.co = "checkout";
alias.cp = "cherry-pick";
alias.d = "difftool";
alias.dif = "diff"; # common typo
alias.difsum = "diff --compact-summary"; #< show only the list of files which changed, not contents
alias.rb = "rebase";
alias.st = "status";
alias.stat = "status";
# difftastic docs:
# - <https://difftastic.wilfred.me.uk/git.html>
@@ -22,5 +32,10 @@ in
# render dates as YYYY-MM-DD HH:MM:SS +TZ
log.date = "iso";
sendemail.annotate = "yes";
sendemail.confirm = "always";
stash.showPatch = true;
};
}

View File

@@ -7,7 +7,8 @@ let
wanted-feeds = feeds.filterByFormat ["podcast"] all-feeds;
in {
sane.programs.gpodder = {
package = pkgs.gpodder-configured;
package = pkgs.gpodder-adaptive-configured;
# package = pkgs.gpodder-configured;
fs.".config/gpodderFeeds.opml".symlink.text = feeds.feedsToOpml wanted-feeds;
# XXX: we preserve the whole thing because if we only preserve gPodder/Downloads

View File

@@ -0,0 +1,13 @@
{ pkgs, ... }:
{
sane.programs.gthumb = {
# compile without webservices to avoid the expensive webkitgtk dependency
package = pkgs.gthumb.override { withWebservices = false; };
mime.associations = {
"image/heif" = "org.gnome.gThumb.desktop"; # apple codec
"image/png" = "org.gnome.gThumb.desktop";
"image/jpeg" = "org.gnome.gThumb.desktop";
"image/svg+xml" = "org.gnome.gThumb.desktop";
};
};
}

View File

@@ -0,0 +1,22 @@
# Helix text editor
# debug log: `~/.cache/helix/helix.log`
# binary name is `hx`
{ ... }:
{
sane.programs.helix = {
# grammars need to be persisted when developing them
# - `hx --grammar fetch` and `hx --grammar build`
# but otherwise, they ship as part of HELIX_RUNTIME, in the nix store
# persist.plaintext = [ ".config/helix/runtime/grammars" ];
fs.".config/helix/config.toml".symlink.text = ''
# docs: <https://docs.helix-editor.com/configuration.html>
[editor.soft-wrap]
enable = true
[editor.whitespace.render]
space = "all"
tab = "all"
newline = "none"
'';
};
}

View File

@@ -6,5 +6,4 @@
};
suggestedPrograms = [ "ghostscript" ];
};
sane.programs.ghostscript = {};
}

View File

@@ -3,7 +3,9 @@
{
sane.programs.jellyfin-media-player = {
# package = pkgs.jellyfin-media-player;
package = pkgs.jellyfin-media-player-qt6;
# qt6 version is slightly buggy, but also most qtwebengine apps (e.g. zeal) are on qt5
# so using qt6 would force yet *another* qtwebengine compile.
# package = pkgs.jellyfin-media-player-qt6;
# jellyfin stores things in a bunch of directories: this one persists auth info.
# it *might* be possible to populate this externally (it's Qt stuff), but likely to

View File

@@ -1,14 +1,17 @@
{ ... }:
{ lib, ... }:
{
sane.programs.kitty.fs.".config/kitty/kitty.conf".symlink.text = ''
# docs: https://sw.kovidgoyal.net/kitty/conf/
# disable terminal bell (when e.g. you backspace too many times)
enable_audio_bell no
sane.programs.kitty = {
fs.".config/kitty/kitty.conf".symlink.text = ''
# docs: https://sw.kovidgoyal.net/kitty/conf/
# disable terminal bell (when e.g. you backspace too many times)
enable_audio_bell no
map ctrl+n new_os_window_with_cwd
include ${./PaperColor_dark.conf}
'';
map ctrl+n new_os_window_with_cwd
include ${./PaperColor_dark.conf}
'';
env.TERMINAL = lib.mkDefault "kitty";
};
# include ${pkgs.kitty-themes}/themes/PaperColor_dark.conf

View File

@@ -0,0 +1,8 @@
{ ... }:
{
sane.programs.komikku = {
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.
persist.plaintext = [ ".local/share/komikku" ];
};
}

View File

@@ -0,0 +1,42 @@
-- as of 2023.05.1, koreader FTP browser always fails to load.
-- it's convinced that it's offline, and asks to connect to wifi.
-- this seems to be because of the following in <frontend/device/sdl/device.lua>:
--
-- function Device:initNetworkManager(NetworkMgr)
-- function NetworkMgr:isWifiOn() return true end
-- function NetworkMgr:isConnected()
-- -- Pull the default gateway first, so we don't even try to ping anything if there isn't one...
-- local default_gw = Device:getDefaultRoute()
-- if not default_gw then
-- return false
-- end
-- return 0 == os.execute("ping -c1 -w2 " .. default_gw .. " > /dev/null")
-- end
-- end
--
-- specifically, `os.execute` is not *expected* to return 0. it returns `true` on success:
-- <https://www.lua.org/manual/5.3/manual.html#pdf-os.execute>
-- this apparently changed from 5.1 -> 5.2
--
-- XXX: this same bug likely applies to `isCommand` and `runCommand` in <frontend/device/sdl/device.lua>
-- - that would manifest as wikipedia links failing to open in external application (xdg-open)
local logger = require("logger")
logger.info("applying colin patch")
local Device = require("device")
logger.info("Device:" .. tostring(Device))
local orig_initNetworkManager = Device.initNetworkManager
Device.initNetworkManager = function(self, NetworkMgr)
logger.info("Device:initNetworkManager")
orig_initNetworkManager(self, NetworkMgr)
function NetworkMgr:isConnected()
logger.info("mocked `NetworkMgr:isConnected` to return true")
return true
-- unpatch to show that the boolean form works
-- local rc = os.execute("ping -c1 -w2 10.78.79.1 > /dev/null")
-- logger.info("ping rc: " .. tostring(rc))
-- return rc
end
end

View File

@@ -0,0 +1,48 @@
{ config, lib, pkgs, sane-lib, ... }:
let
feeds = sane-lib.feeds;
allFeeds = config.sane.feeds;
wantedFeeds = feeds.filterByFormat [ "image" "text" ] allFeeds;
koreaderRssEntries = builtins.map (feed:
# format:
# { "<rss/atom url>", limit = <int>, download_full_article=<bool>, include_images=<bool>, enable_filter=<bool>, filter_element = "<css selector>"},
# limit = 0 => download and keep *all* articles
# download_full_article = true => populate feed by downloading the webpage -- not just what's encoded in the RSS <article> tags
# - use this for articles where the RSS only encodes content previews
# - in practice, most articles don't work with download_full_article = false
# enable_filter = true => only render content that matches the filter_element css selector.
let fields = [
(lib.escapeShellArg feed.url)
"limit = 5"
"download_full_article = true"
"include_images = true"
"enable_filter = false"
"filter_element = \"\""
]; in "{ ${lib.concatStringsSep ", " fields } }"
) wantedFeeds;
in {
sane.programs.koreader = {
package = pkgs.koreader-from-src;
# koreader applies these lua "patches" at boot:
# - <https://github.com/koreader/koreader/wiki/User-patches>
# - TODO: upstream this patch to koreader
# fs.".config/koreader/patches".symlink.target = "${./.}";
fs.".config/koreader/patches/2-colin-NetworkManager-isConnected.lua".symlink.target = "${./2-colin-NetworkManager-isConnected.lua}";
# koreader news plugin, enabled by default. file format described here:
# - <repo:koreader/koreader:plugins/newsdownloader.koplugin/feed_config.lua>
fs.".config/koreader/news/feed_config.lua".symlink.text = ''
return {--do NOT change this line
${lib.concatStringsSep ",\n " koreaderRssEntries}
}--do NOT change this line
'';
# koreader on aarch64 errors if there's no fonts directory (sandboxing thing, i guess)
fs.".local/share/fonts".dir = {};
# history, cache, dictionaries...
# could be more explicit if i symlinked the history.lua file to somewhere it can persist better.
persist.plaintext = [ ".config/koreader" ];
};
}

View File

@@ -0,0 +1,7 @@
{ ... }:
{
sane.programs.lemoa = {
# creds
persist.private = [ ".local/share/io.github.lemmygtk.lemoa" ];
};
}

View File

@@ -1,14 +1,20 @@
{ ... }:
{ pkgs, ... }:
{
# libreoffice: disable first-run stuff
sane.programs.libreoffice-fresh.fs.".config/libreoffice/4/user/registrymodifications.xcu".symlink.text = ''
<?xml version="1.0" encoding="UTF-8"?>
<oor:items xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<item oor:path="/org.openoffice.Office.Common/Misc"><prop oor:name="FirstRun" oor:op="fuse"><value>false</value></prop></item>
<item oor:path="/org.openoffice.Office.Common/Misc"><prop oor:name="ShowTipOfTheDay" oor:op="fuse"><value>false</value></prop></item>
</oor:items>
'';
# <item oor:path="/org.openoffice.Setup/Product"><prop oor:name="LastTimeDonateShown" oor:op="fuse"><value>1667693880</value></prop></item>
# <item oor:path="/org.openoffice.Setup/Product"><prop oor:name="LastTimeGetInvolvedShown" oor:op="fuse"><value>1667693880</value></prop></item>
sane.programs.libreoffice = {
# package = pkgs.libreoffice-bin;
# package = pkgs.libreoffice-still;
package = pkgs.libreoffice-fresh;
# disable first-run stuff
fs.".config/libreoffice/4/user/registrymodifications.xcu".symlink.text = ''
<?xml version="1.0" encoding="UTF-8"?>
<oor:items xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<item oor:path="/org.openoffice.Office.Common/Misc"><prop oor:name="FirstRun" oor:op="fuse"><value>false</value></prop></item>
<item oor:path="/org.openoffice.Office.Common/Misc"><prop oor:name="ShowTipOfTheDay" oor:op="fuse"><value>false</value></prop></item>
</oor:items>
'';
# <item oor:path="/org.openoffice.Setup/Product"><prop oor:name="LastTimeDonateShown" oor:op="fuse"><value>1667693880</value></prop></item>
# <item oor:path="/org.openoffice.Setup/Product"><prop oor:name="LastTimeGetInvolvedShown" oor:op="fuse"><value>1667693880</value></prop></item>
};
}

View File

@@ -0,0 +1,11 @@
{ pkgs, ... }:
{
sane.programs.megapixels.package = pkgs.megapixels.override {
# megapixels uses zbar to read barcodes.
# zbar by default ships zbarcam-gtk and zbarcam-qt, neither of which megapixels needs.
# but the latter takes a dep on qt, which bloats the closure and the build, so disable this feature.
zbar = pkgs.zbar.override {
enableVideo = false;
};
};
}

View File

@@ -0,0 +1,26 @@
# docs: <https://git.sr.ht/~mil/mepo>
# irc #mepo:irc.oftc.net
{ config, lib, ... }:
{
sane.programs.mepo = {
persist.plaintext = [ ".cache/mepo/tiles" ];
# ~/.cache/mepo/savestate has precise coordinates and pins: keep those private
persist.private = [
{ type = "file"; path = ".cache/mepo/savestate"; }
];
# give mepo access to gpsd for location data, if that's enabled.
# same with geoclue2.
suggestedPrograms = lib.optional config.services.gpsd.enable "gpsd"
++ lib.optional config.services.geoclue2.enable "geoclue2-with-demo-agent"
;
};
# programs.mepo = lib.mkIf config.sane.programs.mepo.enabled {
# # enable location services (via geoclue)
# enable = true;
# # more precise, via gpsd ("may require additional config")
# # programs.mepo.gpsd.enable = true
# };
}

View File

@@ -1,13 +1,81 @@
{ ... }:
# mpv docs:
# - <https://mpv.io/manual/master>
# - <https://github.com/mpv-player/mpv/wiki>
# curated mpv mods/scripts/users:
# - <https://github.com/stax76/awesome-mpv>
{ pkgs, ... }:
{
sane.programs.mpv = {
package = pkgs.wrapMpv pkgs.mpv-unwrapped {
scripts = with pkgs.mpvScripts; [
mpris
# uosc
pkgs.mpv-uosc-latest
];
};
persist.plaintext = [ ".config/mpv/watch_later" ];
# format is <key>=%<length>%<value>
fs.".config/mpv/mpv.conf".symlink.text = ''
save-position-on-quit=%3%yes
keep-open=%3%yes
fs.".config/mpv/input.conf".symlink.text = ''
# let volume keys be interpreted by the system.
# this is important for sxmo.
VOLUME_UP ignore
VOLUME_DOWN ignore
'';
fs.".config/mpv/mpv.conf".symlink.text = ''
save-position-on-quit=yes
keep-open=yes
# use uosc instead (for On Screen Controls)
osc=no
# uosc provides its own seeking/volume indicators, so you also don't need this
osd-bar=no
# uosc will draw its own window controls if you disable window border
border=no
'';
fs.".config/mpv/script-opts/osc.conf".symlink.text = ''
# make the on-screen controls *always* visible
# unfortunately, this applies to full-screen as well
# - docs: <https://mpv.io/manual/master/#on-screen-controller-visibility>
# if uosc is installed, this file is unused
visibility=always
'';
fs.".config/mpv/script-opts/uosc.conf".symlink.text = let
play_pause_btn = "cycle:play_arrow:pause:no=pause/yes=play_arrow";
rev_btn = "command:replay_10:seek -10";
fwd_btn = "command:forward_30:seek 30";
in ''
# docs:
# - <https://github.com/tomasklaen/uosc>
# - <https://superuser.com/questions/1775550/add-new-buttons-to-mpv-uosc-ui>
timeline_style=bar
timeline_persistency=paused,audio
controls_persistency=paused,audio
volume_persistency=audio
volume_opacity=0.75
# speed_persistency=paused,audio
# vvv want a close button?
top_bar=always
top_bar_persistency=paused
controls=menu,<video>subtitles,<has_many_audio>audio,<has_many_video>video,<has_many_edition>editions,<stream>stream-quality,space,${rev_btn},${play_pause_btn},${fwd_btn},space,speed:1.0,gap,<video>fullscreen
text_border=6.0
font_bold=yes
background_text=ff8080
foreground=ff8080
ui_scale=1.0
'';
mime.priority = 200; # default = 100; 200 means to yield to other apps
mime.associations."audio/flac" = "mpv.desktop";
mime.associations."audio/mpeg" = "mpv.desktop";
mime.associations."audio/x-vorbis+ogg" = "mpv.desktop";
mime.associations."video/mp4" = "mpv.desktop";
mime.associations."video/quicktime" = "mpv.desktop";
mime.associations."video/webm" = "mpv.desktop";
mime.associations."video/x-matroska" = "mpv.desktop";
};
}

View File

@@ -0,0 +1,25 @@
# docs: <https://nixos.wiki/wiki/Msmtp>
# validate with e.g.
# - `echo -e "Content-Type: text/plain\r\nSubject: Test\r\n\r\nHello World" | sendmail test@uninsane.org`
{ config, lib, ... }:
{
sane.programs.msmtp = {
secrets.".config/msmtp/password.txt" = ../../../secrets/common/msmtp_password.txt.bin;
};
programs.msmtp = lib.mkIf config.sane.programs.msmtp.enabled {
enable = true;
accounts = {
default = {
auth = true;
tls = true;
tls_starttls = false; # needed else sendmail hangs
from = "Colin <colin@uninsane.org>";
host = "mx.uninsane.org";
user = "colin";
passwordeval = "cat ~/.config/msmtp/password.txt";
};
};
};
}

View File

@@ -5,35 +5,21 @@ let
inherit (lib) concatMapStrings mkIf optionalString;
# this structure roughly mirrors home-manager's `programs.neovim.plugins` option
plugins = with pkgs.vimPlugins; [
# docs: surround-nvim: https://github.com/ur4ltz/surround.nvim/
# docs: vim-surround: https://github.com/tpope/vim-surround
{ plugin = vim-surround; }
# docs: fzf-vim (fuzzy finder): https://github.com/junegunn/fzf.vim
{ plugin = fzf-vim; }
({
# docs: tex-conceal-vim: https://github.com/KeitaNakamura/tex-conceal.vim/
plugin = tex-conceal-vim;
type = "viml";
config = ''
" present prettier fractions
let g:tex_conceal_frac=1
'';
})
({
plugin = vim-SyntaxRange;
type = "viml";
config = ''
" enable markdown-style codeblock highlighting for tex code
autocmd BufEnter * call SyntaxRange#Include('```tex', '```', 'tex', 'NonText')
" autocmd Syntax tex set conceallevel=2
'';
})
({
{
# docs: fzf-vim (fuzzy finder): https://github.com/junegunn/fzf.vim
plugin = fzf-vim;
}
{
# treesitter syntax highlighting: https://nixos.wiki/wiki/Tree_sitters
# docs: https://github.com/nvim-treesitter/nvim-treesitter
# config taken from: https://github.com/i077/system/blob/master/modules/home/neovim/default.nix
# this is required for tree-sitter to even highlight
plugin = nvim-treesitter.withAllGrammars;
plugin = nvim-treesitter.withPlugins (_: nvim-treesitter.allGrammars ++ [
# XXX: this is apparently not enough to enable syntax highlighting!
# nvim-treesitter ships its own queries which may be distinct from e.g. helix.
# the queries aren't included when i ship the grammar in this manner
pkgs.tree-sitter-nix-shell
]);
type = "lua";
config = ''
require'nvim-treesitter.configs'.setup {
@@ -64,15 +50,48 @@ let
vim.o.foldmethod = 'expr'
vim.o.foldexpr = 'nvim_treesitter#foldexpr()'
'';
})
}
{
# docs: tex-conceal-vim: https://github.com/KeitaNakamura/tex-conceal.vim/
plugin = tex-conceal-vim;
type = "viml";
config = ''
" present prettier fractions
let g:tex_conceal_frac=1
'';
}
{
# source: <https://github.com/LnL7/vim-nix>
# fixes auto-indent (incl tab size) when editing .nix files
plugin = vim-nix;
}
{
# docs: surround-nvim: https://github.com/ur4ltz/surround.nvim/
# docs: vim-surround: https://github.com/tpope/vim-surround
plugin = vim-surround;
}
{
plugin = vim-SyntaxRange;
type = "viml";
config = ''
" enable markdown-style codeblock highlighting for tex code
autocmd BufEnter * call SyntaxRange#Include('```tex', '```', 'tex', 'NonText')
" autocmd Syntax tex set conceallevel=2
'';
}
];
plugin-packages = map (p: p.plugin) plugins;
plugin-config-tex = concatMapStrings (p: optionalString (p.type or "" == "viml") p.config) plugins;
plugin-config-viml = concatMapStrings (p: optionalString (p.type or "" == "viml") p.config) plugins;
plugin-config-lua = concatMapStrings (p: optionalString (p.type or "" == "lua") p.config) plugins;
in
{
# private because there could be sensitive things in the swap
sane.programs.neovim.persist.private = [ ".cache/vim-swap" ];
sane.programs.neovim = {
persist.private = [ ".cache/vim-swap" ];
env.EDITOR = "vim";
# git claims it should use EDITOR, but it doesn't!
env.GIT_EDITOR = "vim";
};
programs.neovim = mkIf config.sane.programs.neovim.enabled {
# neovim: https://github.com/neovim/neovim
@@ -80,7 +99,7 @@ in
viAlias = true;
vimAlias = true;
configure = {
packages.myVimPackage = {
packages.plugins = {
start = plugin-packages;
};
customRC = ''
@@ -116,8 +135,8 @@ in
set list
set listchars=tab:\·,trail:·,extends:,precedes:,nbsp:
""""" PLUGIN CONFIG (tex)
${plugin-config-tex}
""""" PLUGIN CONFIG (vim)
${plugin-config-viml}
""""" PLUGIN CONFIG (lua)
lua <<EOF

View File

@@ -0,0 +1,9 @@
{ ... }:
{
# not strictly necessary, but allows caching articles; offline use, etc.
sane.programs.nheko.persist.private = [
".config/nheko" # config file (including client token)
".cache/nheko" # media cache
".local/share/nheko" # per-account state database
];
}

View File

@@ -0,0 +1,7 @@
{ config, lib, ... }:
{
# provides `nix-locate`, backed by the manually run `nix-index`
sane.programs.nix-index = {
persist.plaintext = [ ".cache/nix-index" ];
};
}

View File

@@ -0,0 +1,4 @@
{ ... }:
{
sane.programs.obsidian.mime.associations."text/markdown" = "obsidian.desktop";
}

View File

@@ -0,0 +1,28 @@
# simple RSS and Atom parser
# - <https://codemadness.org/sfeed-simple-feed-parser.html>
# - used by sxmo
# - man 5 sfeedrc
#
# call `sfeed_update` to query each feed and populate entries in ~/.sfeed/feeds
{ lib, config, sane-lib, ... }:
let
feeds = sane-lib.feeds;
allFeeds = config.sane.feeds;
wantedFeeds = feeds.filterByFormat ["text"] allFeeds;
sfeedEntries = builtins.map (feed:
# format:
# feed <name> <feedurl> [basesiteurl] [encoding]
lib.escapeShellArgs [ "feed" (if feed.title != null then feed.title else feed.url) feed.url ]
) wantedFeeds;
in {
sane.programs.sfeed = {
fs.".sfeed/sfeedrc".symlink.text = ''
feeds() {
${lib.concatStringsSep "\n " sfeedEntries}
}
'';
# this is where the parsed feed items go
persist.plaintext = [ ".sfeed/feeds" ];
};
}

View File

@@ -10,13 +10,11 @@
# XXX doesn't seem to understand ~ as shorthand for `$HOME`
history_file=/home/colin/.local/state/splatmoji/history
history_length=5
# TODO: wayland equiv
paste_command=xdotool key ctrl+v
paste_command=${pkgs.wtype}/bin/wtype -M Ctrl -k v
# rofi_command=${pkgs.wofi}/bin/wofi --dmenu --insensitive --cache-file /dev/null
rofi_command=${pkgs.fuzzel}/bin/fuzzel -d -i -w 60
xdotool_command=${pkgs.wtype}/bin/wtype
# TODO: wayland equiv
xsel_command=xsel -b -i
xsel_command=${pkgs.findutils}/bin/xargs ${pkgs.wl-clipboard}/bin/wl-copy
'';
};
}

View File

@@ -0,0 +1,42 @@
# Tangram is a GTK/webkit browser
# it views each tab as a distinct application, persisted, and where the 'home' button action is specific to each tab.
# it supports ephemeral tabs, but UX is heavily geared to GCing those as early as possible.
{ pkgs, ... }:
let
dconfProfile = pkgs.writeTextFile {
name = "dconf-tangram-profile";
destination = "/etc/dconf/profile/tangram";
text = ''
user-db:tangram
system-db:site
'';
};
in
{
sane.programs.tangram = {
# XXX(2023/07/08): running on moby without disabling the webkit sandbox fails, with:
# - `bwrap: Can't make symlink at /var/run: File exists`
# see epiphany.nix for more info
package = pkgs.tangram.overrideAttrs (upstream: {
preFixup = ''
gappsWrapperArgs+=(
--set WEBKIT_DISABLE_SANDBOX_THIS_IS_DANGEROUS "1"
--set DCONF_PROFILE "${dconfProfile}/etc/dconf/profile/tangram"
);
'' + (upstream.preFixup or "");
});
persist.private = [
".cache/Tangram"
".local/share/Tangram"
# dconf achieves atomic writes via `mv`, so a symlink doesn't work
# moreover, i have to persist the *whole* directory:
# - `user-db:tangram/user` causes a schema failure
# - bind-mounting `~/private/.config/dconf/tangram` causes dconf to try a cross-fs `mv`, which fails
# - dconf provides no way to specify an alternate ~/.config/dconf dir, except by overriding XDG_CONFIG_HOME
# { type = "file"; path = ".config/dconf/tangram"; method = "bind"; }
".config/dconf"
];
};
}

View File

@@ -10,8 +10,13 @@ let
in
{
sane.programs.vlc = {
# vlc remembers play position in ~/.config/vlc/vlc-qt-interface.conf
persist.plaintext = [ ".config/vlc" ];
persist.private = [
# vlc remembers play position in ~/.config/vlc/vlc-qt-interface.conf
# filenames are stored in plaintext (unlike mpv, which i think hashes them)
".config/vlc"
# vlc caches artwork. i'm not sure where it gets the artwork (internet? embedded metadata?)
".cache/vlc"
];
fs.".config/vlc/vlcrc".symlink.text = ''
[podcast]
podcast-urls=${podcast-urls}
@@ -20,5 +25,13 @@ in
[qt]
qt-privacy-ask=0
'';
mime.associations."audio/flac" = "vlc.desktop";
mime.associations."audio/mpeg" = "vlc.desktop";
mime.associations."audio/x-vorbis+ogg" = "vlc.desktop";
mime.associations."video/mp4" = "vlc.desktop";
mime.associations."video/quicktime" = "vlc.desktop";
mime.associations."video/webm" = "vlc.desktop";
mime.associations."video/x-matroska" = "vlc.desktop";
};
}

View File

@@ -1,5 +1,4 @@
{ config, ... }:
{
sane.programs.wireshark = {};
programs.wireshark.enable = config.sane.programs.wireshark.enabled;
}

View File

@@ -1,39 +1,47 @@
# zsh files/init order
# - see `man zsh` => "STARTUP/SHUTDOWN FILES"
# - /etc/zshenv
# - $ZDOTDIR/.zshenv
# - if login shell:
# - /etc/zprofile
# - $ZDOTDIR/.zprofile
# - if interactive:
# - /etc/zshrc
# - $ZDOTDIR/.zshrc
# - if login (again):
# - /etc/zlogin
# - ZDOTDIR/.zlogin
# - at exit:
# - $ZDOTDIR/.zlogout
# - /etc/zlogout
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkOption types;
cfg = config.sane.zsh;
# powerlevel10k prompt config
# p10k.zsh is the auto-generated config, and i overwrite those defaults here, below.
p10k-overrides = ''
# powerlevel10k launches a gitstatusd daemon to accelerate git prompt queries.
# this keeps open file handles for any git repo i touch for 60 minutes (by default).
# that prevents unmounting whatever device the git repo is on -- particularly problematic for ~/private.
# i can disable gitstatusd and get slower fallback git queries:
# - either universally
# - or selectively by path
# see: <https://github.com/romkatv/powerlevel10k/issues/246>
typeset -g POWERLEVEL9K_VCS_DISABLED_DIR_PATTERN='(/home/colin/private/*|/home/colin/knowledge/*)'
# typeset -g POWERLEVEL9K_DISABLE_GITSTATUS=true
# show user@host also when logged into the current machine.
# default behavior is to show it only over ssh.
typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_CONTENT_EXPANSION='$P9K_CONTENT'
'';
prezto-init = ''
source ${pkgs.zsh-autosuggestions}/share/zsh-autosuggestions/zsh-autosuggestions.zsh
source ${pkgs.zsh-syntax-highlighting}/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
source ${pkgs.zsh-prezto}/share/zsh-prezto/init.zsh
'';
in
{
imports = [
./p10k.nix
./starship.nix
];
options = {
sane.zsh = {
showDeadlines = mkOption {
type = types.bool;
default = true;
description = "show upcoming deadlines (frommy PKM) upon shell init";
description = "show upcoming deadlines (from my PKM) upon shell init";
};
p10k = mkOption {
type = types.bool;
default = false;
description = "enable powerlevel10k prompt and prezto";
};
starship = mkOption {
type = types.bool;
default = true;
description = "enable starship prompt";
};
};
};
@@ -41,106 +49,25 @@ in
config = mkMerge [
({
sane.programs.zsh = {
persist.plaintext = [
persist.private = [
# we don't need to full zsh dir -- just the history file --
# but zsh will sometimes backup the history file and we get fewer errors if we do proper mounts instead of symlinks.
# TODO: should be private?
# but zsh will sometimes backup the history file and symlinking just the file messes things up
".local/share/zsh"
# cache gitstatus otherwise p10k fetched it from the net EVERY BOOT
];
persist.plaintext = [
# cache gitstatus otherwise p10k fetches it from the net EVERY BOOT
".cache/gitstatus"
];
# zsh/prezto complains if zshrc doesn't exist; but it does allow an "empty" file.
fs.".config/zsh/.zshrc".symlink.text = "# ";
# prezto = oh-my-zsh fork; controls prompt, auto-completion, etc.
# see: https://github.com/sorin-ionescu/prezto
# i believe this file is auto-sourced by the prezto init.zsh script.
fs.".config/zsh/.zpreztorc".symlink.text = ''
zstyle ':prezto:*:*' color 'yes'
# modules (they ship with prezto):
# ENVIRONMENT: configures jobs to persist after shell exit; other basic niceties
# TERMINAL: auto-titles terminal (e.g. based on cwd)
# EDITOR: configures shortcuts like Ctrl+U=undo, Ctrl+L=clear
# HISTORY: `history-stat` alias, setopts for good history defaults
# DIRECTORY: sets AUTO_CD, adds `d` alias to list directory stack, and `1`-`9` to cd that far back the stack
# SPECTRUM: helpers for term colors and styling. used by prompts? might be unnecessary
# UTILITY: configures aliases like `ll`, `la`, disables globbing for things like rsync
# adds aliases like `get` to fetch a file. also adds `http-serve` alias??
# COMPLETION: tab completion. requires `utility` module prior to loading
# TODO: enable AUTO_PARAM_SLASH
zstyle ':prezto:load' pmodule \
'environment' \
'terminal' \
'editor' \
'history' \
'directory' \
'spectrum' \
'utility' \
'completion' \
'prompt'
# default keymap. try also `vicmd` (vim normal mode, AKA "cmd mode") or `vi`.
zstyle ':prezto:module:editor' key-bindings 'emacs'
zstyle ':prezto:module:prompt' theme 'powerlevel10k'
# disable `mv` confirmation (and `rm`, too, unfortunately)
zstyle ':prezto:module:utility' safe-ops 'no'
'';
};
})
(mkIf config.sane.programs.zsh.enabled {
# enable zsh completions
environment.pathsToLink = [ "/share/zsh" ];
programs.zsh = {
enable = true;
histFile = "$HOME/.local/share/zsh/history";
shellAliases = {
":q" = "exit";
# common typos
"cd.." = "cd ..";
"cd../" = "cd ../";
};
setOptions = [
# defaults:
"HIST_IGNORE_DUPS"
"SHARE_HISTORY"
"HIST_FCNTL_LOCK"
# disable `rm *` confirmations
"rmstarsilent"
];
# .zshenv config:
shellInit = ''
ZDOTDIR=$HOME/.config/zsh
'';
# .zshrc config:
interactiveShellInit =
(builtins.readFile ./p10k.zsh)
+ p10k-overrides
+ prezto-init
+ ''
# zmv is a way to do rich moves/renames, with pattern matching/substitution.
# see for an example: <https://filipe.kiss.ink/zmv-zsh-rename/>
autoload -Uz zmv
HISTORY_IGNORE='(sane-shutdown *|sane-reboot *|rm *|nixos-rebuild.* switch)'
# extra aliases
# TODO: move to `shellAliases` config?
function nd() {
mkdir -p "$1";
pushd "$1";
}
''
+ lib.optionalString cfg.showDeadlines ''
fs.".config/zsh/.zshrc".symlink.text = ''
# zsh/prezto complains if zshrc doesn't exist or is empty;
# preserve this comment to prevent that from ever happening.
'' + lib.optionalString cfg.showDeadlines ''
${pkgs.sane-scripts.deadlines}/bin/sane-deadlines
''
+ ''
'' + ''
HISTFILE="$HOME/.local/share/zsh/history"
# auto-cd into any of these dirs by typing them and pressing 'enter':
hash -d 3rd="/home/colin/dev/3rd"
hash -d dev="/home/colin/dev"
@@ -153,14 +80,68 @@ in
hash -d uninsane="/home/colin/dev/uninsane"
hash -d Videos="/home/colin/Videos"
'';
};
})
(mkIf config.sane.programs.zsh.enabled {
# enable zsh completions
environment.pathsToLink = [ "/share/zsh" ];
programs.zsh = {
enable = true;
shellAliases = {
":q" = "exit";
# common typos
"cd.." = "cd ..";
"cd../" = "cd ../";
};
setOptions = [
# docs: `man zshoptions`
# nixos defaults:
"HIST_FCNTL_LOCK"
"HIST_IGNORE_DUPS"
"SHARE_HISTORY"
# customizations:
"AUTO_CD" # type directory name to go there
"AUTO_MENU" # show auto-complete menu on double-tab
"CDABLE_VARS" # allow auto-cd to use my `hash` aliases -- not just immediate subdirs
"CLOBBER" # allow `foo > bar.txt` to overwrite bar.txt
"NO_CORRECT" # don't try to correct commands
"PIPE_FAIL" # when `cmd_a | cmd_b`, make $? be non-zero if *any* of cmd_a or cmd_b fail
"RM_STAR_SILENT" # disable `rm *` confirmations
];
# .zshenv config:
shellInit = ''
ZDOTDIR=$HOME/.config/zsh
'';
# system-wide .zshrc config:
interactiveShellInit = ''
# zmv is a way to do rich moves/renames, with pattern matching/substitution.
# see for an example: <https://filipe.kiss.ink/zmv-zsh-rename/>
autoload -Uz zmv
HISTORY_IGNORE='(sane-shutdown *|sane-reboot *|rm *|nixos-rebuild.* switch|switch)'
# extra aliases
# TODO: move to `shellAliases` config?
function nd() {
mkdir -p "$1";
pushd "$1";
}
function switch() {
sudo nixos-rebuild --flake . switch --keep-going;
}
'';
syntaxHighlighting.enable = true;
vteIntegration = true;
};
# enable a command-not-found hook to show nix packages that might provide the binary typed.
programs.nix-index.enable = true;
programs.command-not-found.enable = false; #< mutually exclusive with nix-index
# programs.nix-index.enableZshIntegration = true;
programs.command-not-found.enable = false;
})
];
}

View File

@@ -0,0 +1,75 @@
{ config, lib, pkgs, ...}:
let
# powerlevel10k prompt config
# p10k.zsh is the auto-generated config, and i overwrite those defaults here, below.
p10k-overrides = ''
# powerlevel10k launches a gitstatusd daemon to accelerate git prompt queries.
# this keeps open file handles for any git repo i touch for 60 minutes (by default).
# that prevents unmounting whatever device the git repo is on -- particularly problematic for ~/private.
# i can disable gitstatusd and get slower fallback git queries:
# - either universally
# - or selectively by path
# see: <https://github.com/romkatv/powerlevel10k/issues/246>
typeset -g POWERLEVEL9K_VCS_DISABLED_DIR_PATTERN='(/home/colin/private/*|/home/colin/knowledge/*)'
# typeset -g POWERLEVEL9K_DISABLE_GITSTATUS=true
# show user@host also when logged into the current machine.
# default behavior is to show it only over ssh.
typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_CONTENT_EXPANSION='$P9K_CONTENT'
'';
prezto-init = ''
source ${pkgs.zsh-autosuggestions}/share/zsh-autosuggestions/zsh-autosuggestions.zsh
source ${pkgs.zsh-syntax-highlighting}/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
source ${pkgs.zsh-prezto}/share/zsh-prezto/init.zsh
'';
in {
config = lib.mkIf config.sane.zsh.p10k {
sane.programs.zsh = {
# prezto = oh-my-zsh fork; controls prompt, auto-completion, etc.
# see: https://github.com/sorin-ionescu/prezto
# this file is auto-sourced by the prezto init.zsh script.
# TODO: i should work to move away from prezto:
# - it's FUCKING SLOW to initialize (that might also be powerlevel10k tho)
# - it messes with my other `setopt`s
fs.".config/zsh/.zpreztorc".symlink.text = ''
zstyle ':prezto:*:*' color 'yes'
zstyle ':prezto:module:utility' correct 'no' # prezto: don't setopt CORRECT
# modules (they ship with prezto):
# ENVIRONMENT: configures jobs to persist after shell exit; other basic niceties
# TERMINAL: auto-titles terminal (e.g. based on cwd)
# EDITOR: configures shortcuts like Ctrl+U=undo, Ctrl+L=clear
# HISTORY: `history-stat` alias, setopts for good history defaults
# DIRECTORY: sets AUTO_CD, adds `d` alias to list directory stack, and `1`-`9` to cd that far back the stack. also overrides CLOBBER and some other options
# SPECTRUM: helpers for term colors and styling. used by prompts? might be unnecessary
# UTILITY: configures aliases like `ll`, `la`, disables globbing for things like rsync
# adds aliases like `get` to fetch a file. also adds `http-serve` alias??
# COMPLETION: tab completion. requires `utility` module prior to loading
zstyle ':prezto:load' pmodule \
'environment' \
'terminal' \
'editor' \
'history' \
'spectrum' \
'utility' \
'completion' \
'prompt'
# default keymap. try also `vicmd` (vim normal mode, AKA "cmd mode") or `vi`.
zstyle ':prezto:module:editor' key-bindings 'emacs'
zstyle ':prezto:module:prompt' theme 'powerlevel10k'
# disable `mv` confirmation (and `rm`, too, unfortunately)
zstyle ':prezto:module:utility' safe-ops 'no'
'';
};
programs.zsh.interactiveShellInit = (builtins.readFile ./p10k.zsh)
+ p10k-overrides
+ prezto-init
;
};
}

View File

@@ -0,0 +1,101 @@
# starship prompt: <https://starship.rs/config/#prompt>
# my own config heavily based off:
# - <https://starship.rs/presets/pastel-powerline.html>
{ config, lib, pkgs, ...}:
let
enabled = config.sane.zsh.starship;
toml = pkgs.formats.toml {};
colors = {
# colors sorted by the order they appear in the status bar
_01_purple = "#9A348E";
_02_pink = "#DA627D";
_03_orange = "#FCA17D";
_04_teal = "#86BBD8";
_05_blue = "#06969A";
_06_blue = "#33658A";
};
in {
config = lib.mkIf config.sane.zsh.starship {
sane.programs.zsh = lib.mkIf enabled {
fs.".config/zsh/.zshrc".symlink.text = ''
eval "$(${pkgs.starship}/bin/starship init zsh)"
'';
fs.".config/starship.toml".symlink.target = toml.generate "starship.toml" {
format = builtins.concatStringsSep "" [
"[](${colors._01_purple})"
"$os"
"$username"
"$hostname"
"[](bg:${colors._02_pink} fg:${colors._01_purple})"
"$directory"
"[](fg:${colors._02_pink} bg:${colors._03_orange})"
"$git_branch"
"$git_status"
"[](fg:${colors._03_orange} bg:${colors._04_teal})"
"[](fg:${colors._04_teal} bg:${colors._05_blue})"
"[](fg:${colors._05_blue} bg:${colors._06_blue})"
"$time"
"$status"
"[ ](fg:${colors._06_blue})"
];
add_newline = false; # no blank line before prompt
os.style = "bg:${colors._01_purple}";
os.format = "[$symbol]($style)";
os.disabled = false;
# os.symbols.NixOS = "❄️"; # removes the space after logo
# TODO: tune foreground color of username
username.style_user = "bg:${colors._01_purple}";
username.style_root = "bold bg:${colors._01_purple}";
username.format = "[$user ]($style)";
hostname.style = "bold bg:${colors._01_purple}";
hostname.format = "[$ssh_symbol$hostname ]($style)";
directory.style = "bg:${colors._02_pink} fg:#ffffff";
directory.format = "[ $path ]($style)";
directory.truncation_length = 3;
directory.truncation_symbol = "/";
# git_branch.symbol = ""; # looks good in nerd fonts
git_branch.symbol = "";
git_branch.style = "bg:${colors._03_orange} fg:#ffffff";
# git_branch.style = "bg:#FF8262";
git_branch.format = "[ $symbol $branch ]($style)";
git_status.style = "bold bg:${colors._03_orange} fg:#ffffff";
# git_status.style = "bg:#FF8262";
git_status.format = "[$all_status$ahead_behind ]($style)";
git_status.ahead = "$count";
git_status.behind = "$count";
# git_status.diverged = "⇣$behind_count⇡$ahead_count";
git_status.diverged = "$ahead_count$behind_count";
git_status.modified = "*";
git_status.stashed = "";
git_status.untracked = "";
time.disabled = true;
time.time_format = "%R"; # Hour:Minute Format
time.style = "bg:${colors._06_blue}";
time.format = "[ $time ]($style)";
status.disabled = false;
status.style = "bg:${colors._06_blue}";
# status.success_symbol = "♥ ";
# status.success_symbol = "💖";
# status.success_symbol = "💙";
# status.success_symbol = "💚";
# status.success_symbol = "💜";
# status.success_symbol = "✔️'";
status.success_symbol = "";
status.symbol = "";
# status.symbol = "❗️";
# status.symbol = "‼️";
status.format = "[$symbol]($style)";
};
};
};
}

View File

@@ -29,14 +29,18 @@
let
inherit (lib.strings) hasSuffix removeSuffix;
secretsForHost = host: sane-lib.joinAttrsets (
secretsForHost = host: let
extraAttrsForPath = path: lib.optionalAttrs (sane-lib.path.isChild "guest" path && builtins.hasAttr "guest" config.users.users) {
owner = "guest";
};
in sane-lib.joinAttrsets (
map
(path: lib.optionalAttrs (hasSuffix ".bin" path) (sane-lib.nameValueToAttrs {
name = removeSuffix ".bin" path;
value = {
sopsFile = ../../secrets/${host}/${path};
format = "binary";
};
} // (extraAttrsForPath path);
}))
(sane-lib.enumerateFilePaths ../../secrets/${host})
);
@@ -62,7 +66,7 @@ in
{
"jackett_apikey".owner = config.users.users.colin.name;
"mx-sanebot-env".owner = config.users.users.colin.name;
"snippets".owner = config.users.users.colin.name;
"transmission_passwd".owner = config.users.users.colin.name;
}
];
}

View File

@@ -1,8 +1,7 @@
{ config, lib, sane-data, sane-lib, ... }:
let
inherit (builtins) head map mapAttrs tail;
inherit (lib) concatStringsSep mkMerge reverseList;
inherit (builtins) attrValues head map mapAttrs tail;
in
{
sane.ssh.pubkeys =
@@ -10,21 +9,32 @@ in
# path is a DNS-style path like [ "org" "uninsane" "root" ]
keyNameForPath = path:
let
rev = reverseList path;
rev = lib.reverseList path;
name = head rev;
host = concatStringsSep "." (tail rev);
host = lib.concatStringsSep "." (tail rev);
in
"${name}@${host}";
# [{ path :: [String], value :: String }] for the keys we want to install
globalKeys = sane-lib.flattenAttrs sane-data.keys;
keysForHost = hostCfg: sane-lib.mapToAttrs
(name: {
inherit name;
value = {
root = hostCfg.ssh.host_pubkey;
} // (lib.optionalAttrs hostCfg.ssh.authorized {
colin = hostCfg.ssh.user_pubkey;
});
})
hostCfg.names
;
domainKeys = sane-lib.flattenAttrs (
mapAttrs (host: cfg: {
colin = cfg.ssh.user_pubkey;
root = cfg.ssh.host_pubkey;
}) config.sane.hosts.by-name
sane-lib.joinAttrsets (
map keysForHost (builtins.attrValues config.sane.hosts.by-name)
)
);
in mkMerge (map
in lib.mkMerge (map
({ path, value }: {
"${keyNameForPath path}" = lib.mkIf (value != null) value;
})

View File

@@ -1,133 +0,0 @@
{ config, pkgs, lib, sane-lib, ... }:
# installer docs: https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/profiles/installation-device.nix
with lib;
let
cfg = config.sane.guest;
fs = sane-lib.fs;
in
{
options = {
sane.guest.enable = mkOption {
default = false;
type = types.bool;
};
};
config = {
# Users are exactly these specified here;
# old ones will be deleted (from /etc/passwd, etc) upon upgrade.
users.mutableUsers = false;
# docs: https://nixpkgs-manual-sphinx-markedown-example.netlify.app/generated/options-db.xml.html#users-users
users.users.colin = {
# sets group to "users" (?)
isNormalUser = true;
home = "/home/colin";
createHome = true;
homeMode = "0700";
# i don't get exactly what this is, but nixos defaults to this non-deterministically
# in /var/lib/nixos/auto-subuid-map and i don't want that.
subUidRanges = [
{ startUid=100000; count=1; }
];
group = "users";
extraGroups = [
"dialout" # required for modem access (moby)
"feedbackd"
"input" # for /dev/input/<xyz>: sxmo
"networkmanager"
"nixbuild"
"video" # phosh/mobile. XXX colin: unsure if necessary
"wheel"
"wireshark"
];
# initial password is empty, in case anything goes wrong.
# if `colin-passwd` (a password hash) is successfully found/decrypted, that becomes the password at boot.
initialPassword = lib.mkDefault "";
passwordFile = lib.mkIf (config.sops.secrets ? "colin-passwd") config.sops.secrets.colin-passwd.path;
shell = pkgs.zsh;
# mount encrypted stuff at login
# some other nix pam users:
# - <https://github.com/g00pix/nixconf/blob/32c04f6fa843fed97639dd3f09e157668d3eea1f/profiles/sshfs.nix>
# - <https://github.com/lourkeur/distro/blob/11173454c6bb50f7ccab28cc2c757dca21446d1d/nixos/profiles/users/louis-full.nix>
# - <https://github.com/dnr/sample-nix-code/blob/03494480c1fae550c033aa54fd96aeb3827761c5/nixos/laptop.nix>
pamMount = let
priv = config.fileSystems."/home/colin/private";
in {
fstype = priv.fsType;
path = priv.device;
mountpoint = priv.mountPoint;
options = builtins.concatStringsSep "," priv.options;
};
};
security.pam.mount.enable = true;
sane.users.colin.default = true;
# ensure ~ perms are known to sane.fs module.
# TODO: this is generic enough to be lifted up into sane.fs itself.
sane.fs."/home/colin".dir.acl = {
user = "colin";
group = config.users.users.colin.group;
mode = config.users.users.colin.homeMode;
};
sane.user.persist.plaintext = [
"archive"
"dev"
# TODO: records should be private
"records"
"ref"
"tmp"
"use"
"Music"
"Pictures"
"Videos"
".cache/nix"
".cache/nix-index"
# ".cargo"
# ".rustup"
];
# convenience
sane.user.fs."knowledge" = fs.wantedSymlinkTo "private/knowledge";
sane.user.fs."nixos" = fs.wantedSymlinkTo "dev/nixos";
sane.user.fs."Books/servo" = fs.wantedSymlinkTo "/mnt/servo-media/Books";
sane.user.fs."Videos/servo" = fs.wantedSymlinkTo "/mnt/servo-media/Videos";
sane.user.fs."Videos/servo-incomplete" = fs.wantedSymlinkTo "/mnt/servo-media/incomplete";
sane.user.fs."Music/servo" = fs.wantedSymlinkTo "/mnt/servo-media/Music";
sane.user.fs."Pictures/servo-macros" = fs.wantedSymlinkTo "/mnt/servo-media/Pictures/macros";
# used by password managers, e.g. unix `pass`
sane.user.fs.".password-store" = fs.wantedSymlinkTo "knowledge/secrets/accounts";
sane.persist.sys.plaintext = mkIf cfg.enable [
# intentionally allow other users to write to the guest folder
{ directory = "/home/guest"; user = "guest"; group = "users"; mode = "0775"; }
];
users.users.guest = mkIf cfg.enable {
isNormalUser = true;
home = "/home/guest";
subUidRanges = [
{ startUid=200000; count=1; }
];
group = "users";
initialPassword = lib.mkDefault "";
shell = pkgs.zsh;
openssh.authorizedKeys.keys = [
# TODO: insert pubkeys that should be allowed in
];
};
security.sudo = {
enable = true;
wheelNeedsPassword = false;
};
};
}

View File

@@ -0,0 +1,92 @@
{ config, pkgs, lib, ... }:
{
# docs: https://nixpkgs-manual-sphinx-markedown-example.netlify.app/generated/options-db.xml.html#users-users
users.users.colin = {
# sets group to "users" (?)
isNormalUser = true;
home = "/home/colin";
createHome = true;
homeMode = "0700";
# i don't get exactly what this is, but nixos defaults to this non-deterministically
# in /var/lib/nixos/auto-subuid-map and i don't want that.
subUidRanges = [
{ startUid=100000; count=1; }
];
group = "users";
extraGroups = [
"dialout" # required for modem access (moby)
"feedbackd"
"input" # for /dev/input/<xyz>: sxmo
"networkmanager"
"nixbuild"
"transmission" # servo, to admin /var/lib/uninsane/media
"video" # mobile; for LEDs & maybe for camera?
"wheel"
"wireshark"
];
# initial password is empty, in case anything goes wrong.
# if `colin-passwd` (a password hash) is successfully found/decrypted, that becomes the password at boot.
initialPassword = lib.mkDefault "";
passwordFile = lib.mkIf (config.sops.secrets ? "colin-passwd") config.sops.secrets.colin-passwd.path;
shell = pkgs.zsh;
# mount encrypted stuff at login
# some other nix pam users:
# - <https://github.com/g00pix/nixconf/blob/32c04f6fa843fed97639dd3f09e157668d3eea1f/profiles/sshfs.nix>
# - <https://github.com/lourkeur/distro/blob/11173454c6bb50f7ccab28cc2c757dca21446d1d/nixos/profiles/users/louis-full.nix>
# - <https://github.com/dnr/sample-nix-code/blob/03494480c1fae550c033aa54fd96aeb3827761c5/nixos/laptop.nix>
pamMount = let
priv = config.fileSystems."/home/colin/private";
in {
fstype = priv.fsType;
path = priv.device;
mountpoint = priv.mountPoint;
options = builtins.concatStringsSep "," priv.options;
};
};
security.pam.mount.enable = true;
sane.users.colin = {
default = true;
persist.plaintext = [
"archive"
"dev"
# TODO: records should be private
"records"
"ref"
"tmp"
"use"
"Books"
"Music"
"Pictures"
"Videos"
# these are persisted simply to save on RAM.
# ~/.cache/nix can become several GB.
# fontconfig and mesa_shader_cache are < 10 MB.
".cache/fontconfig"
".cache/mesa_shader_cache"
".cache/nix"
# ".cargo"
# ".rustup"
];
# convenience
fs."knowledge".symlink.target = "private/knowledge";
fs."nixos".symlink.target = "dev/nixos";
fs."Books/servo".symlink.target = "/mnt/servo-media/Books";
fs."Videos/servo".symlink.target = "/mnt/servo-media/Videos";
fs."Videos/servo-incomplete".symlink.target = "/mnt/servo-media/incomplete";
fs."Music/servo".symlink.target = "/mnt/servo-media/Music";
fs."Pictures/servo-macros".symlink.target = "/mnt/servo-media/Pictures/macros";
# used by password managers, e.g. unix `pass`
fs.".password-store".symlink.target = "knowledge/secrets/accounts";
};
}

View File

@@ -0,0 +1,18 @@
{ config, pkgs, lib, sane-lib, ... }:
{
imports = [
./colin.nix
./guest.nix
./root.nix
];
# Users are exactly these specified here;
# old ones will be deleted (from /etc/passwd, etc) upon upgrade.
users.mutableUsers = false;
security.sudo = {
enable = true;
wheelNeedsPassword = false;
};
}

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