Compare commits

..

466 Commits

Author SHA1 Message Date
05b237f49c opencode: ditch chatgpt 2026-02-28 01:37:43 -05:00
daee9c3246 git: add opencode related file to .gitignore 2026-02-27 21:59:01 -05:00
70ca2d3323 steam: fix jovian-nixos (use my fork) 2026-02-27 01:00:27 -05:00
86ac120d54 steam: enable sddm (now required) 2026-02-26 19:22:08 -05:00
201436ef28 audio: disable rtkit to fix mumble 2026-02-26 19:17:26 -05:00
d453bc1bdd steam: upstream fix for switch-to-desktop 2026-02-25 14:39:37 -05:00
b8be06a8c7 opencode: glm-4.7 -> glm-5 2026-02-25 02:19:07 -05:00
d85434dff2 steam: add entry for prism launcher 2026-02-25 01:57:48 -05:00
b0fe816465 steam: fix switch-to-desktop
PR located here: https://github.com/Jovian-Experiments/Jovian-NixOS/pull/550
2026-02-24 22:44:03 -05:00
eaf550ded6 opencode: openrouter + glm 5 -> zai coding plan glm 4.7 2026-02-24 14:23:13 -05:00
a877826a68 update 2026-02-22 01:51:23 -05:00
1b0bd9b7f8 update 2026-02-20 14:15:01 -05:00
6c12b580e3 opencode: change models 2026-02-19 17:09:15 -05:00
fae2e84c99 update 2026-02-19 12:51:01 -05:00
2e11bf7f31 update 2026-02-18 12:47:42 -05:00
b6350e1170 update 2026-02-17 10:48:30 -05:00
00c98599d8 opencode: change multimodel looker model 2026-02-16 20:24:43 -05:00
52af5b3f47 opencode: change opus-model 2026-02-16 16:52:29 -05:00
99d51e77f0 update 2026-02-16 12:35:43 -05:00
32174c3ccb opencode: add note about autoupdate 2026-02-16 12:35:32 -05:00
eab28b1c44 opencode: fix oh-my-opencode build 2026-02-16 00:25:25 -05:00
9d663b346e update 2026-02-15 23:32:38 -05:00
de8da30b71 rust: stable -> nightly 2026-02-15 23:32:11 -05:00
5c7b5c8e9d opencode: fix playwright skill: 2 2026-02-11 19:22:46 -05:00
d8b380a9c0 opencode: fix playwright skill 2026-02-10 18:11:28 -05:00
b0650b59b7 update 2026-02-09 15:26:55 -05:00
ee5bba25b1 wifi: add network 2026-02-08 20:51:31 -05:00
13b65784b0 update 2026-02-07 01:22:32 -05:00
c767e881ba fmt 2026-02-05 15:05:09 -05:00
7d93b84ca5 opencode: fix ultrabrain model 2026-02-05 15:05:03 -05:00
587412b0be update 2026-02-05 13:26:57 -05:00
8950ee4644 emacs: all treesitter grammars 2026-02-04 15:20:29 -05:00
e2b9e27504 update 2026-02-04 14:08:24 -05:00
fc15c1369f opencode: add note about playwright browser_install 2026-02-03 14:45:15 -05:00
c505a71ab1 enable geoclue2 2026-02-03 13:32:46 -05:00
d5eda18b84 noctalia stuff 2026-02-03 13:29:34 -05:00
d6f7dab062 noctalia 2026-02-03 13:20:14 -05:00
d0de943224 opencode: don't use glm-4.7-flash 2026-02-03 12:54:53 -05:00
22823ff55f update 2026-02-03 12:49:33 -05:00
d1ceb9fa6f waydroid -> waydroid-nftables 2026-02-02 13:33:49 -05:00
f776045d82 vm: enable + android 2026-02-02 13:23:10 -05:00
ff4192b3fc update 2026-02-02 13:08:00 -05:00
d8e3ed76ee oh-my-opencode: update 2026-02-02 13:05:18 -05:00
c4656c11d5 Reapply "oh-my-opencode: move to fork and update"
This reverts commit bc6e196548.
2026-02-02 13:05:01 -05:00
f648c7444d update 2026-01-31 00:56:31 -05:00
bc6e196548 Revert "oh-my-opencode: move to fork and update"
This reverts commit 94f98ae34c.
2026-01-31 00:56:23 -05:00
498154eb15 1gb hugepages 2026-01-31 00:53:37 -05:00
83a5e1b278 fmt 2026-01-31 00:53:29 -05:00
70ddbb1bf5 opencode: add note about coordinates and UI interaction 2026-01-29 21:09:48 -05:00
94f98ae34c oh-my-opencode: move to fork and update 2026-01-29 21:09:28 -05:00
aae9549f8a update 2026-01-29 14:51:34 -05:00
1052b54dfb opencode: overhaul oh-my-opencode config 2026-01-28 13:38:41 -05:00
0e3b77cc59 opencode: fix oh-my-opencode Prometheus + Atlas 2026-01-28 12:47:43 -05:00
39352b10bc opencode: add oh-my-opencode as a plugin 2026-01-28 12:22:48 -05:00
c31a6cc09e opencode: use my fork of oh-my-opencode 2026-01-28 12:18:25 -05:00
cb031d3d66 Reapply "add oh-my-opencode"
This reverts commit 8297cd01f4.
2026-01-28 12:16:00 -05:00
5cbb10b245 opencode: move away from claude 2026-01-28 12:04:23 -05:00
8297cd01f4 Revert "add oh-my-opencode"
This reverts commit 2b912cc38e.
2026-01-28 11:49:04 -05:00
2b912cc38e add oh-my-opencode 2026-01-28 11:38:16 -05:00
60317ef61e update 2026-01-28 11:25:26 -05:00
0a868cf3dd opencode: add info about android app UI interaction 2026-01-27 23:26:01 -05:00
3c6c3592a3 grayjay 2026-01-27 13:52:12 -05:00
2b38c0ecdc yarn: set static ip 2026-01-26 17:57:50 -05:00
980f5feadd wlx-overlay-s -> wayvr 2026-01-26 00:46:00 -05:00
3da2197134 update 2026-01-25 00:40:31 -05:00
78a02d9e3d update 2026-01-23 13:09:33 -05:00
91f3c88347 fmt 2026-01-22 14:17:54 -05:00
9571c1a321 move to python313 to fix jaraco-test instead 2026-01-22 14:13:53 -05:00
3614d12466 fix python312 jaraco-test 2026-01-22 14:13:30 -05:00
a29b92984d update 2026-01-22 14:13:03 -05:00
8f3ad44d34 fix hostPlatform 2026-01-22 12:25:57 -05:00
43fce477fd hostPlatform -> targetPlatform 2026-01-21 15:23:01 -05:00
3b5f4b8fa4 opencode: abstract out haiku model name 2026-01-21 15:21:28 -05:00
681cbcb117 yarn: fix impermiance home directory 2026-01-19 23:34:08 -05:00
b52af2bea8 yarn: disable steamos-update 2026-01-19 23:33:50 -05:00
9cc7c52061 opencode: remove molmo model 2026-01-17 23:47:20 -05:00
d83ca9a3f5 opencode: fix molmo model 2026-01-17 23:45:52 -05:00
72cff90ae0 remove power profile things 2026-01-15 14:48:20 -05:00
e34911fda4 opencode: change models 2026-01-14 22:22:43 -05:00
f51e6789f3 mreow: try and fix graphical corruption issue 2026-01-14 11:22:21 -05:00
ac129e39ed opencode: make oh-my-opencode.json declarative also 2026-01-13 14:46:55 -05:00
a022550c4e fix no-gui nixfmt formatter package 2026-01-12 15:31:01 -05:00
237612fd4c fix pkgs.system deprecation 2026-01-12 15:27:12 -05:00
61325ee8d7 nixfmt -> nixfmt-tree 2026-01-12 15:22:16 -05:00
ee4fce8541 nixfmt-rfc-style -> nixfmt 2026-01-12 15:20:00 -05:00
63f6aa0f65 update (without nixpkgs) 2026-01-12 15:17:30 -05:00
896310a2d4 fix opencode + use free model 2026-01-12 14:20:19 -05:00
d2f7e1a376 opencode: minimax m2.1 2026-01-09 12:42:22 -05:00
a6a67b8543 opencode: fix glm4.7 2026-01-09 12:30:18 -05:00
b65bf47e90 flake: inline dependencies 2026-01-08 06:12:50 -05:00
ae0c0f0914 update 2026-01-07 14:18:46 -05:00
507ec8ffd9 update 2026-01-05 16:59:13 -05:00
6c96ba0e0f wifi: re-enable wifi power savings 2025-12-29 15:28:28 -05:00
67102b0967 wifi: move to ensureProfiles 2025-12-29 15:28:04 -05:00
2fc8710264 update 2025-12-29 14:40:05 -05:00
c5c0b7b797 update 2025-12-26 14:00:24 -05:00
fd58681a07 initrd: migrate to systemd-initrd 2025-12-25 04:19:35 -05:00
1d6b1fb341 llama-cpp: remove 2025-12-25 04:00:17 -05:00
6edbeb167b opencode: move to glm 4.7 (free) 2025-12-25 03:59:31 -05:00
fecc2d8652 update 2025-12-25 03:11:44 -05:00
5419adee40 update 2025-12-24 08:00:19 -05:00
9132392d92 fix mullvad version mismatch 2025-12-24 03:05:23 -05:00
9bb15ae4d2 llama.cpp things 2025-12-24 03:00:28 -05:00
8708d16dac update 2025-12-21 22:04:20 -05:00
567657e500 update 2025-12-20 01:18:41 -05:00
85b8906afa update 2025-12-16 03:45:27 -05:00
f6b9e81440 update 2025-12-13 00:39:40 -05:00
7d95bb4a75 update 2025-12-12 15:57:14 -05:00
accb90ca63 yarn: disable suspend + friends 2025-12-10 06:38:26 -05:00
f15f664b4e add tmux 2025-12-10 06:30:17 -05:00
94f261cf6f opencode: move to devstral 2025-12-09 21:52:46 -05:00
c9c98cd6e6 opencode: use llm-agents build 2025-12-09 21:52:29 -05:00
dd9bcc009a update 2025-12-09 18:45:33 -05:00
2c6036f39f update 2025-12-08 17:14:24 -05:00
c3e1e8d1b9 mreow: removed commented out config 2025-12-08 11:23:16 -05:00
9ae8b73a02 mreow: remove unneeded niri-session.desktop file creation 2025-12-07 23:56:21 -05:00
6d7564e860 mreow: disable custom vt used for greetd 2025-12-07 23:11:22 -05:00
f083a22def mreow: enable framework kmod again 2025-12-07 23:11:11 -05:00
c72cc5de43 mreow: re-enable nixos-hardware's audioEnchancement for fw13 2025-12-07 23:10:49 -05:00
bcd65b482f update 2025-12-07 15:02:09 -05:00
f91b94872d opencode: nix remove --rebuild usage 2025-12-05 10:34:54 -05:00
fa1b610684 update 2025-12-04 18:25:59 -05:00
3eaae0b22d cleanup 2025-12-02 15:56:25 -05:00
eb3b4f7531 fix amdgpu ppfeaturemask 2025-12-02 15:39:19 -05:00
c432a022cf opencode: nix specify git add usage 2025-12-02 00:39:29 -05:00
1f6d73234d update 2025-12-02 00:28:02 -05:00
4c1a40a877 update 2025-11-29 23:22:24 -05:00
2e70156bae update 2025-11-26 17:52:58 -05:00
662d8068f9 opencode: use only free models + stuff 2025-11-26 01:53:28 -05:00
b218f3aaea Revert "cachyos + cleanup"
This reverts commit 66b4931d08.
2025-11-25 19:44:29 -05:00
66b4931d08 cachyos + cleanup 2025-11-25 13:29:02 -05:00
594f7abdca update 2025-11-25 13:08:30 -05:00
59278188da update 2025-11-24 18:13:33 -05:00
7532efdc28 Revert "nixpkgs: patching test"
This reverts commit 6204949bdc.
2025-11-24 16:43:16 -05:00
6204949bdc nixpkgs: patching test 2025-11-24 16:43:12 -05:00
2f89e5f8c4 nix: re-enable optimise store 2025-11-24 11:44:39 -05:00
924bd28512 update 2025-11-24 10:35:31 -05:00
85dab64bcd update 2025-11-23 14:59:20 -05:00
71d5a5f44b fmt 2025-11-21 14:14:45 -05:00
26f39cf61e opencode: use gpt-oss 20b for small_model 2025-11-21 13:31:21 -05:00
35900f858d opencode: modify rules 2025-11-21 12:56:19 -05:00
6625a545ea opencode: use llama 3.1 8b for small_model 2025-11-21 12:29:27 -05:00
8a06e4560d etcnixos -> system 2025-11-21 12:19:28 -05:00
946d72b66b update 2025-11-21 10:34:00 -05:00
4e46b7fd3a use jovian-nixos + fixup niri display session handling 2025-11-21 10:14:31 -05:00
236cb914c5 steam: disable mangoapp 2025-11-20 22:35:20 -05:00
426a79f3a1 update 2025-11-20 22:21:25 -05:00
2b16ceb583 opencode: things 2025-11-20 22:20:19 -05:00
6597665864 eww: format 2025-11-20 22:20:16 -05:00
43f069962a update 2025-11-18 13:11:52 -05:00
8359fa14e2 niri-session: just use niri-session, not real path 2025-11-17 23:52:55 -05:00
f9f1e027e4 steam: move session stuff to steam.nix + remove mangohud 2025-11-17 23:52:14 -05:00
b7dc8a7345 delete old steam session work 2025-11-17 22:05:33 -05:00
efa66e7347 opencode: change small_model + add info about Bash timeout in rules 2025-11-17 11:33:54 -05:00
13c0c4926f opencode: use floor model (cheapest) 2025-11-17 10:55:11 -05:00
727fc66b7d cleanup flake inputs follows declarations 2025-11-17 08:14:55 -05:00
aa411bb43b Revert "yarn: disable vr"
This reverts commit ca3242c568.
2025-11-17 08:13:29 -05:00
122f813a48 update 2025-11-17 08:13:18 -05:00
916adf37ee yarn: add session for steam 2025-11-16 23:24:41 -05:00
6d3736c6db yarn: use sshUser for deploy 2025-11-16 20:02:22 -05:00
ca3242c568 yarn: disable vr 2025-11-16 19:30:38 -05:00
ff84a3bb94 yarn: deploy-rs 2025-11-16 19:30:08 -05:00
84136a4af6 yarn: enable ssh as root 2025-11-16 15:52:52 -05:00
9c42e82508 yarn: impermanence 2025-11-16 15:29:25 -05:00
90c2a071cd integrate power_bat into config 2025-11-16 01:43:30 -05:00
ef6d2e2179 greetd: terminal.vt = 2
when vt = 1 (default), some dmesg/systemd log messages spammed and overrided the tuigreet tui.
2025-11-16 01:20:41 -05:00
7a67120d15 vr: remove pr #391367 fix 2025-11-16 01:08:29 -05:00
0758715282 yarn: enable sshd 2025-11-15 23:33:12 -05:00
7bfdc0f222 yarn: delete fancontrol 2025-11-15 23:27:32 -05:00
5806ad0bc0 opencode: add rules 2025-11-14 14:11:18 -05:00
89f2be5a48 opencode: kimi k2 thinking -> glm-4.6 2025-11-14 12:34:43 -05:00
3313cb76cb enable kmscon 2025-11-14 12:08:53 -05:00
2993952882 eww: update bluetooth status command 2025-11-13 00:20:01 -05:00
06a7210579 opencode 2025-11-12 23:51:06 -05:00
8f0492f03b 25.05 -> unstable 2025-11-12 23:51:03 -05:00
1db6fe09da update 2025-11-12 10:11:23 -05:00
8667e9b168 update 2025-11-11 00:51:53 -05:00
ce481fbc9e update 2025-11-10 12:21:21 -05:00
4790958b4d disable global allowUnfree 2025-11-10 10:47:07 -05:00
1b76daf66a update 2025-11-09 23:36:47 -05:00
cc710bc74f update 2025-11-07 13:15:33 -05:00
4d34992d81 update 2025-11-07 08:28:16 -05:00
711aa3e3e0 doom: fix things 2025-11-07 02:23:48 -05:00
1ccafaf534 update 2025-11-05 13:23:52 -05:00
e0d7305d3c update 2025-11-05 00:18:46 -05:00
9723f07d80 add btusb kernel module (maybe fixes bluetooth issues?) 2025-11-03 19:41:51 -05:00
ba23808419 doom: js things 2025-11-03 16:17:30 -05:00
f1faaabd1d update 2025-11-03 13:21:00 -05:00
16c5c65001 doom: enable javascript 2025-11-03 01:13:36 -05:00
13d57aebfa update 2025-11-02 19:31:55 -05:00
8cfb2d4f54 update 2025-10-31 14:50:58 -04:00
ab40e8e3ec update 2025-10-30 14:47:50 -04:00
49166c19b9 niri: update xwayland handling 2025-10-29 12:39:59 -04:00
b7feeff19c add stub for video-trimmer 2025-10-29 12:38:13 -04:00
4509ba8a61 update 2025-10-29 11:51:04 -04:00
d840d5dbca update 2025-10-27 00:42:52 -04:00
a8ec0e6b10 rust: wasm32-unknown-unknown target 2025-10-26 21:09:00 -04:00
d15a13c429 update 2025-10-26 02:14:28 -04:00
181c3780df update 2025-10-24 10:07:31 -04:00
a72524ce22 update 2025-10-23 15:39:40 -04:00
f60d4b9bc9 update 2025-10-22 10:12:14 -04:00
bcf208b08e update 2025-10-21 21:06:26 -04:00
6fa2e207a0 niri: fix screenshots + update 2025-10-20 22:09:20 -04:00
4adbeb5e17 update 2025-10-19 02:14:34 -04:00
8a091a2bfe update + fix emacs 2025-10-18 19:24:59 -04:00
b59ee1ed72 fix doom emacs 2025-10-17 14:06:58 -04:00
9279a2ed8b update 2025-10-17 13:27:19 -04:00
d23aff0cbe Use Doom Emacs unstraightened
Have to disable java lsp because of build issue:
https://github.com/marienz/nix-doom-emacs-unstraightened/issues/96

Need to test it more.
2025-10-17 13:27:16 -04:00
fc3e982361 update 2025-10-17 10:59:55 -04:00
d6c6ac50b8 update 2025-10-17 00:31:55 -04:00
e4e5e1d05c easyeffects: disable 2025-10-16 18:31:55 -04:00
4cc39dffe8 easyeffects: add timeout comment 2025-10-15 10:28:15 -04:00
28f4f66000 easyeffects: TimeoutStopSec 1 -> 0 2025-10-15 10:23:39 -04:00
6a29e1f28c nix: disable auto optimise store 2025-10-15 10:22:28 -04:00
55a71bebe7 update 2025-10-15 10:04:50 -04:00
f23daec694 niri: use unstable 2025-10-14 02:44:20 -04:00
6c19f3e4cc update 2025-10-14 02:43:21 -04:00
4b2d334b10 update 2025-10-13 01:24:30 -04:00
6c9bfe7cc3 update 2025-10-12 18:24:59 -04:00
b6254def9a update 2025-10-10 23:21:45 -04:00
5a723026c5 update 2025-10-07 22:26:04 -04:00
cbcab377a5 flatpak 2025-10-06 22:55:08 -04:00
23bcc73328 update 2025-10-06 01:43:51 -04:00
a2c74228c9 update 2025-10-05 16:11:16 -04:00
f5b62cb53e update 2025-10-04 18:05:36 -04:00
cac8156ba7 niri: edit floating window settings 2025-10-03 13:30:47 -04:00
e0cd3738ad update 2025-10-01 23:45:58 -04:00
5ca0482629 update 2025-09-30 12:23:06 -04:00
5489c00b49 update 2025-09-26 23:47:56 -04:00
d73b0151d8 update wifi password 2025-09-25 15:31:52 -04:00
83ac78a690 python: add types stub for requests 2025-09-24 01:07:54 -04:00
9c4b0705ee update 2025-09-23 20:02:00 -04:00
9ccf97fc44 update 2025-09-21 01:12:24 -04:00
4a409ef44f eww: use awk instead of head -c 2025-09-20 00:25:28 -04:00
5e40304e58 eww: use awk for getVolume zero padding 2025-09-20 00:23:35 -04:00
c4175535b2 update 2025-09-19 13:52:45 -04:00
1cf86b8bd0 eww: improve getSink.sh 2025-09-17 13:11:14 -04:00
0a53c6933e update currentWorkspace 2025-09-17 13:09:14 -04:00
183d351cea eww: remove clipboard 2025-09-17 13:01:07 -04:00
8cd7d14a2c eww: fix currentWindow logic 2025-09-17 12:43:04 -04:00
355c92bd08 eww: delete dashboard 2025-09-17 12:16:33 -04:00
5f73b13b2a eww: format 2025-09-17 12:15:36 -04:00
d01338fd0a update 2025-09-17 10:02:04 -04:00
ca4db80ebb eww: limit size of bluetooth name 2025-09-15 15:06:06 -04:00
6a5afb5e35 niri: make focus ring the inverse of the average of the background color 2025-09-15 14:59:23 -04:00
6d77b3a944 niri: simplify spawn calls 2025-09-15 14:48:48 -04:00
8b07a2c595 update 2025-09-15 05:27:22 -04:00
79f2d70cd4 update 2025-09-12 01:48:40 -04:00
5158b5bca8 update 2025-09-09 15:42:19 -04:00
24605db7d2 update 2025-09-08 22:39:11 -04:00
089bf04648 update 2025-09-08 10:19:34 -04:00
9f736de85c update 2025-09-07 00:27:58 -04:00
acfb7ee3ac update 2025-09-02 23:51:37 -04:00
cf73a64a29 niri: disable middle click paste 2025-09-02 14:33:57 -04:00
6206d9abbf update 2025-08-31 13:09:18 -04:00
d966b53c4f update 2025-08-30 02:13:22 -04:00
c3427e1850 add josm 2025-08-29 13:12:57 -04:00
44188b7c09 update 2025-08-29 00:09:43 -04:00
e13f09d3f2 update 2025-08-26 16:25:05 -04:00
8479fc55eb use tuned instead of tlp or ppd 2025-08-25 10:39:56 -04:00
2bba1763a1 update 2025-08-24 23:12:52 -04:00
8c15cb56d4 update 2025-08-21 18:24:40 -04:00
0248bde57c update 2025-08-19 23:50:03 -04:00
1c00460d78 update 2025-08-18 10:27:34 -04:00
1e3a5cf331 update 2025-08-18 00:01:33 -04:00
dab72b1511 add comment regarding password-hash 2025-08-17 23:37:53 -04:00
6ab2271eeb add upower 2025-08-17 23:37:46 -04:00
13f91cc813 merge system.activationScripts sections 2025-08-17 23:36:37 -04:00
81f0c9ea0b update 2025-08-16 01:39:52 -04:00
d3b3a0aa2f timezone: PST -> EST 2025-08-15 22:12:32 -07:00
465dbce272 update 2025-08-15 01:45:54 -07:00
111e864511 update 2025-08-13 11:53:23 -07:00
54201f002b use lib.concatLists 2025-08-12 01:57:55 -07:00
1cc7af1df8 update 2025-08-12 01:14:28 -07:00
fc88934c60 add jq 2025-08-11 12:41:59 -07:00
355bf7d977 add yt-dlp 2025-08-10 23:05:10 -07:00
8ba623647d update 2025-08-09 13:32:05 -07:00
119deeaa23 add TODO to readme 2025-08-08 20:20:10 -07:00
b3e280ab23 add nodePackages_latest.nodejs 2025-08-08 20:11:47 -07:00
bcfb5772e4 unify desktop and laptop configs 2025-08-07 17:41:18 -07:00
f920b9bb6f use amd.overdrive.ppfeaturemask instead of kernel param 2025-08-06 22:35:07 -07:00
f6e5878ec2 update 2025-08-04 23:50:32 -07:00
937cc9af99 wifi: disable powersave (fixes suspend issue) 2025-08-04 23:44:15 -07:00
4371f44292 format 2025-08-01 22:59:18 -07:00
e2a0989724 update 2025-08-01 20:46:24 -07:00
25748b4f74 update 2025-07-31 19:52:14 -07:00
365037f64b borg: format 2025-07-31 19:51:48 -07:00
70869ff8dd borg: exclude ephemeral.json from signal backup 2025-07-31 19:50:59 -07:00
e079f9abe4 add units command 2025-07-31 19:48:45 -07:00
caaa7405e1 add localsend 2025-07-31 19:46:38 -07:00
98c7d4d641 update 2025-07-29 21:00:22 -07:00
302fe11e1d update 2025-07-28 19:45:04 -07:00
e9fe3fd22e borg: reduce retention 2025-07-24 21:50:05 -07:00
0834ce4711 update 2025-07-24 20:44:32 -07:00
43f8d26936 update 2025-07-23 00:23:25 -07:00
488fbe3518 update 2025-07-19 23:33:26 -07:00
3735cb4e8e remove comment 2025-07-19 14:29:05 -07:00
9e26797617 update 2025-07-19 14:28:36 -07:00
f8ca8299a0 remove mcaselector 2025-07-18 22:12:03 -07:00
cdcdbdea96 add freecad-wayland 2025-07-18 17:52:22 -07:00
d286aa0739 update 2025-07-18 00:05:33 -07:00
ab4bb5da86 fix easyeffects hanging shutdown 2025-07-18 00:04:03 -07:00
ff36737bae update 2025-07-17 08:45:22 -07:00
cd35a5debc update 2025-07-15 18:02:12 -07:00
297cfc700b update 2025-07-14 10:23:56 -07:00
24a5e442ef update 2025-07-11 20:45:38 -07:00
afa8946dbe add pciutils 2025-07-10 00:05:48 -07:00
ec170e2538 update 2025-07-09 18:43:36 -07:00
35ca8b27be add back easyeffects 2025-07-08 10:33:39 -07:00
21e4c5b10d switch back to alacritty 2025-07-07 04:15:28 -07:00
b21d161ed7 update 2025-07-07 03:43:58 -07:00
a373917950 Revert "update"
This reverts commit 2cc9f73f48.
2025-06-30 20:17:31 -07:00
bf6510bdae systemd-boot: configurationLimit 2025-06-30 20:12:09 -07:00
2cc9f73f48 update 2025-06-30 19:53:24 -07:00
01026ee08f update 2025-06-28 23:45:30 -07:00
fa15eb9b08 signal-desktop-bin -> signal-desktop 2025-06-28 11:01:31 -07:00
bcb3ccaf0b update 2025-06-26 09:40:56 -07:00
f21fef1a51 move imports around regarding emacs stuff 2025-06-25 23:20:32 -07:00
1fdc25ca4e 25.05 2025-06-25 19:28:01 -07:00
b370184767 cleanup 2025-06-25 19:18:22 -07:00
e269c50306 simplify some home-manager things 2025-06-24 23:28:25 -07:00
73b56555a6 remove agenix 2025-06-24 23:11:34 -07:00
4560acb90b remove factorio.nix from secrets 2025-06-24 21:41:57 -07:00
3b0d577f3b declarative-nm: remove with lib; 2025-06-24 20:38:23 -07:00
836159960c organize 2025-06-24 20:36:07 -07:00
0058f4553e cleanup 2025-06-23 23:01:59 -07:00
437adced36 cleanup 2025-06-23 22:03:20 -07:00
5fbbd9df03 cleanup + remove rss reader 2025-06-23 20:39:46 -07:00
7c49e1900b remove gpt4all 2025-06-23 20:37:14 -07:00
1979b59b15 amd changes 2025-06-23 20:36:35 -07:00
22458bb31e add powerstat 2025-06-23 18:32:16 -07:00
9088b99862 laptop: amd ai 300 2025-06-23 18:31:01 -07:00
5968147b06 update 2025-06-23 08:28:28 -07:00
b938b8854f update 2025-06-22 02:11:47 -07:00
04b930865a update 2025-06-19 18:07:31 -07:00
f5f30c476a wifi: add network 2025-06-19 18:07:07 -07:00
26ffcc4053 change default terminal emulator to ghostty 2025-06-18 22:55:31 -07:00
154e8a388f use-remote-sudo is deprecated, use --sudo instead 2025-06-18 22:55:12 -07:00
b91dbe924c update 2025-06-18 20:56:37 -07:00
9fe158da7b add deploy-rs command 2025-06-18 20:56:13 -07:00
849903f08d update 2025-06-17 20:12:24 -07:00
e924ce866f update 2025-06-16 19:56:12 -07:00
e394e74094 update 2025-06-14 13:11:25 -07:00
afef5aeb72 update 2025-06-13 17:43:21 -07:00
4388783312 update 2025-06-12 16:24:14 -07:00
009136a417 update 2025-06-11 15:26:04 -07:00
bf59582afd update 2025-06-09 20:32:28 -07:00
a69e21083b update 2025-06-09 18:43:50 -07:00
c685458237 disable vm stuff 2025-06-08 11:32:33 -07:00
e2c4bcacc0 update 2025-06-08 11:25:35 -07:00
44e53e22f2 update 2025-06-07 21:13:02 -07:00
868aa00d7d fix emacs 2025-06-05 21:27:52 -07:00
c008c1234a improve deploy script 2025-06-05 21:27:41 -07:00
e7271c6134 beginning of emacs 2025-06-05 19:22:39 -07:00
f83ef0d7d9 make deploy script better 2025-06-05 19:15:05 -07:00
9d089208a7 Revert "disable secureboot"
This reverts commit c017cfb33d.
2025-06-04 21:08:01 -07:00
8ad4e3bd42 update 2025-06-04 21:07:39 -07:00
c017cfb33d disable secureboot 2025-06-03 23:29:10 -07:00
8bf0b445c7 update 2025-06-01 14:47:52 -07:00
33b805f752 update 2025-05-31 18:26:41 -07:00
3e1d98ccfc add wifi password 2025-05-31 18:26:33 -07:00
354fbd88bc update 2025-05-28 19:28:41 -07:00
ea178718b2 update 2025-05-26 18:01:10 -07:00
61a6fde32d update 2025-05-25 12:37:20 -07:00
ddf86a7f75 update 2025-05-24 09:23:57 -07:00
ee7a650e57 nixos-rebuild boot 2025-05-23 21:56:45 -07:00
52ce9b4cb2 update 2025-05-23 21:43:47 -07:00
2092341d9e niri: Mod+O - overview 2025-05-23 00:49:13 -07:00
22885e8f45 update 2025-05-22 19:35:06 -07:00
cd3220132b update 2025-05-21 20:51:58 -07:00
9510f884f7 cachyos kernel again 2025-05-15 23:18:42 -07:00
a3023f51b7 format wifi passwords file 2025-05-15 23:16:17 -07:00
7733cb5ae7 dunst: theme changes 2025-05-15 23:15:48 -07:00
b2ce27fdf2 niri: override nixpkgs-stable 2025-05-15 22:21:46 -07:00
ef77cf720b some changes 2025-05-15 21:41:58 -07:00
ad4c3ef111 update 2025-05-14 00:37:28 -07:00
b4e08cc659 update 2025-05-13 17:12:51 -07:00
0dcc08f364 update 2025-05-11 18:46:31 -07:00
e0fb9f6c55 laptop: PST time zone 2025-05-11 01:27:37 -04:00
fb890e8fec update 2025-05-10 20:20:29 -04:00
405104d23f add wifi password 2025-05-10 19:12:54 -04:00
7b4bb06da1 update 2025-05-09 19:16:16 -04:00
f51ab5f57b remove db stuff 2025-05-09 19:16:08 -04:00
e875de29d2 update 2025-05-08 21:57:30 -04:00
9b32cf7f0f update 2025-05-08 14:58:01 -04:00
453de9f47d update 2025-05-07 15:03:50 -04:00
812eff873b use dbeaver 2025-05-07 13:28:00 -04:00
e110f60de6 mysql: ensureUsers 2025-05-07 13:10:11 -04:00
75f94963ba add keepassxc 2025-05-07 12:52:20 -04:00
d88d010f72 add mysql/mariadb 2025-05-07 12:38:23 -04:00
b44f259d71 yarn: disable fancontrol 2025-05-05 16:17:20 -04:00
0c387def14 laptop: we no longer use btrfs 2025-05-05 15:18:40 -04:00
9afac0d38c update 2025-05-05 15:16:24 -04:00
16f01a26db add mysql-workbench && remove localsend 2025-05-05 15:16:09 -04:00
cdd8e24424 add localsend 2025-05-04 18:37:20 -04:00
62f7fe6113 disable gpt4all 2025-05-04 18:36:08 -04:00
6178bdafd1 update 2025-05-04 18:33:08 -04:00
aa27a7185e switch to lts kernel 2025-05-01 16:05:15 -04:00
3f1aa0a7ba update 2025-04-30 13:00:27 -04:00
e47a9cba87 update 2025-04-30 00:46:34 -04:00
a1cdc235d6 update 2025-04-29 13:45:30 -04:00
89ffb6300d update 2025-04-28 18:30:33 -04:00
74d03ea71f zen: twilight 2025-04-22 13:23:40 -04:00
eaf2c4cfe6 remove nh 2025-04-22 10:19:35 -04:00
ca135e2181 add comment 2025-04-21 23:36:07 -04:00
fe5fe33f5f update 2025-04-21 23:34:26 -04:00
bf48d7dfb2 fixes of things 2025-04-21 23:34:13 -04:00
a640a63f02 update 2025-04-21 16:16:27 -04:00
9170ab1a0e disable trim + cachyos kernel 2025-04-21 16:16:19 -04:00
26c9deb861 gimp3 2025-04-19 19:25:15 -04:00
bdb20ed5fe update 2025-04-18 23:42:55 -04:00
0e7a6ddcbe signal-desktop-source -> signal-desktop 2025-04-18 23:40:05 -04:00
4b34ceda9c update 2025-04-18 20:20:25 -04:00
8fcea238e5 update 2025-04-18 17:47:33 -04:00
a2d0d747fa update 2025-04-17 14:31:55 -04:00
1e3dc2c586 update 2025-04-17 12:40:06 -04:00
0a34bc0ff4 update 2025-04-14 17:08:42 -04:00
ffe20b83a3 update 2025-04-13 22:32:38 -04:00
81f8759b1a update 2025-04-13 14:42:15 -04:00
ca5061d42c update 2025-04-08 09:44:27 -04:00
89645f6f3a add deploy.sh 2025-04-07 23:03:12 -04:00
9fa5f51236 no gimp3 2025-04-07 22:06:53 -04:00
afe6cc0f5b test 2025-04-07 21:39:19 -04:00
8b95e6e0a0 fix unified config 2025-04-07 21:34:57 -04:00
635b3d4271 work on unifying configs 2025-04-07 21:06:43 -04:00
8d59f140cd home: move around stuff 2025-04-07 20:52:36 -04:00
d13ba86697 simplify and inline a lot of home-manager stuff 2025-04-07 20:50:03 -04:00
7e062aa064 update 2025-04-07 20:39:50 -04:00
d83c115db0 update 2025-04-07 10:32:18 -04:00
9feaf613b6 re-add mullvad 2025-04-07 10:31:40 -04:00
0b4fa1043b re-enable pwvucontrol 2025-04-06 21:49:36 -04:00
b48968f625 update 2025-04-05 13:56:10 -04:00
cc3ca4c68b borg: don't backup justfile 2025-04-03 21:33:19 -04:00
876d111e34 update 2025-04-03 15:10:19 -04:00
6fe19e9f9e update gimp patch 2025-04-03 15:00:48 -04:00
3434088041 update 2025-04-02 23:21:09 -04:00
3ecda9136c switch to vanilla kernel due to issues 2025-04-02 23:20:59 -04:00
108924e571 remove swapfile and lvfs-testing 2025-04-02 13:35:53 -04:00
781df641c6 fix 2025-03-31 08:16:44 -04:00
97588fe9de home: format packages 2025-03-31 02:24:49 -04:00
fab2f50790 update 2025-03-31 00:58:53 -04:00
f5ae145d41 update 2025-03-29 12:24:25 -04:00
09d314f49e update 2025-03-28 10:46:51 -04:00
ee3bfc43d8 cargo-edit 2025-03-28 10:46:42 -04:00
56c4ed4068 gimp: update 3.0 patch 2025-03-28 10:46:30 -04:00
a3583e7f22 gimp: update 3.0 patch 2025-03-27 23:21:53 -04:00
e1061a6fbc lock update 2025-03-27 13:42:59 -04:00
70fed38988 gimp: update 3.0 patch 2025-03-27 13:41:41 -04:00
445723db18 update 2025-03-26 10:04:08 -04:00
c57a4f00d7 home: remove unneeded import 2025-03-26 01:20:21 -04:00
777a6fd9c1 home: cleanup pkgs import and patching 2025-03-26 01:06:51 -04:00
2c5d877a9a update 2025-03-26 00:53:54 -04:00
551a87372f secureboot keys things 2025-03-25 23:43:03 -04:00
9454b2723d flake update 2025-03-25 11:37:04 -04:00
5dbbfc7f74 whoops 2025-03-24 19:58:57 -04:00
e66a57d835 justfile: add format target 2025-03-24 15:23:28 -04:00
f80ba290a0 add mistralrs 2025-03-24 14:37:46 -04:00
4a6d2eaa86 vr: add PR info about OPENCOMPOSITE_SEARCH_PATH 2025-03-24 14:37:40 -04:00
3743a1db68 add delay to fancontrol and lactd to wait for gpu 2025-03-24 13:22:14 -04:00
41c67240e3 update 2025-03-23 23:26:39 -04:00
d89c8d8eae build system from repo instead 2025-03-23 21:55:47 -04:00
6993dcff68 update 2025-03-23 20:00:49 -04:00
23abe3986a use gimp 3.0 2025-03-23 01:51:14 -04:00
1d76c06fac add formatter 2025-03-22 17:40:48 -04:00
0d40e2757a update 2025-03-22 17:39:29 -04:00
efc780aaf5 niri: move scaling to laptop specific config 2025-03-20 02:42:40 -04:00
78 changed files with 2937 additions and 2210 deletions

7
.gitattributes vendored
View File

@@ -1,5 +1,2 @@
home-manager/secrets/factorio.nix filter=git-crypt diff=git-crypt /system/secrets/** filter=git-crypt diff=git-crypt
etcnixos/secrets/secureboot.tar filter=git-crypt diff=git-crypt /home-manager/secrets/** filter=git-crypt diff=git-crypt
etcnixos/secrets/wifi-passwords.nix filter=git-crypt diff=git-crypt
etcnixos/secrets/disk-password filter=git-crypt diff=git-crypt
etcnixos/secrets/password-hash filter=git-crypt diff=git-crypt

View File

@@ -1,14 +1,10 @@
# My Dotfiles ✨ # My Dotfiles ✨
These are my dotfiles for my laptop and desktop (which I use [NixOS](https://nixos.org/) and [home-manager](https://github.com/nix-community/home-manager) on). These are my dotfiles for my laptop and desktop (which I use [NixOS](https://nixos.org/) and [home-manager](https://github.com/nix-community/home-manager) on).
## Structure
The `nix` folder contains two sub directories, `etcnixos` and `home-manager`. The former is the contents of `/etc/nixos` (hence the name), whereas the latter is the contents of `~/.config/home-manager`.
`justfile` is the [just](https://github.com/casey/just) script I use for updating my NixOS system and syncing the changes with this repo.
## What do I use? ## What do I use?
Browser: Firefox 🦊 (actually [Zen Browser](https://github.com/zen-browser/desktop) :p) Browser: Firefox 🦊 (actually [Zen Browser](https://github.com/zen-browser/desktop) :p)
Text Editor: [helix](https://github.com/helix-editor/helix) Text Editor: [Doom Emacs](https://github.com/doomemacs/doomemacs)
Terminal: [alacritty](https://github.com/alacritty/alacritty) Terminal: [alacritty](https://github.com/alacritty/alacritty)
@@ -20,3 +16,7 @@ There is more that I'm using, but those are the main ones! Read my configs to ge
### Background ### Background
- Got my background from [here](https://old.reddit.com/r/celestegame/comments/11dtgwg/all_most_of_the_backgrounds_in_celeste_edited/) and used the command `magick input.png -filter Point -resize 2880x1920! output.png` to upscale it bilinearly - Got my background from [here](https://old.reddit.com/r/celestegame/comments/11dtgwg/all_most_of_the_backgrounds_in_celeste_edited/) and used the command `magick input.png -filter Point -resize 2880x1920! output.png` to upscale it bilinearly
## TODO!
- [ ] further unify desktop and laptop configs
- [ ] Seperate out common shell utilities into a module or some sort (could be used on other machines)

8
deploy.sh Executable file
View File

@@ -0,0 +1,8 @@
#!/bin/sh
ARG="$*"
if [ "$ARG" = "" ]; then
ARG="boot"
fi
nixos-rebuild "$ARG" --flake . --use-remote-sudo

View File

@@ -1,52 +0,0 @@
{
config,
lib,
pkgs,
...
}:
with lib;
# from: https://discourse.nixos.org/t/imperative-declarative-wifi-networks-with-wpa-supplicant/12394/6
let
cfg = config.networking.networkmanager;
getFileName = stringAsChars (x: if x == " " then "-" else x);
createWifi = ssid: opt: {
name = "NetworkManager/system-connections/${getFileName ssid}.nmconnection";
value = {
mode = "0400";
source = pkgs.writeText "${ssid}.nmconnection" ''
[connection]
id=${ssid}
type=wifi
[wifi]
ssid=${ssid}
[wifi-security]
${optionalString (opt.psk != null) ''
key-mgmt=wpa-psk
psk=${opt.psk}''}
'';
};
};
keyFiles = mapAttrs' createWifi config.networking.wireless.networks;
in
{
config = mkIf cfg.enable {
environment.etc = keyFiles;
systemd.services.NetworkManager-predefined-connections = {
restartTriggers = mapAttrsToList (name: value: value.source) keyFiles;
serviceConfig = {
Type = "oneshot";
RemainAfterExit = true;
ExecStart = "${pkgs.coreutils}/bin/true";
ExecReload = "${pkgs.networkmanager}/bin/nmcli connection reload";
};
reloadIfChanged = true;
wantedBy = [ "multi-user.target" ];
};
};
}

View File

@@ -1,11 +0,0 @@
{ pkgs, ... }:
{
virtualisation.podman = {
enable = true;
};
environment.systemPackages = [
pkgs.distrobox
pkgs.podman-compose
];
}

440
etcnixos/flake.lock generated
View File

@@ -1,440 +0,0 @@
{
"nodes": {
"agenix": {
"inputs": {
"darwin": "darwin",
"home-manager": "home-manager",
"nixpkgs": [
"nixpkgs"
],
"systems": "systems"
},
"locked": {
"lastModified": 1736955230,
"narHash": "sha256-uenf8fv2eG5bKM8C/UvFaiJMZ4IpUFaQxk9OH5t/1gA=",
"owner": "ryantm",
"repo": "agenix",
"rev": "e600439ec4c273cf11e06fe4d9d906fb98fa097c",
"type": "github"
},
"original": {
"owner": "ryantm",
"repo": "agenix",
"type": "github"
}
},
"chaotic": {
"inputs": {
"fenix": "fenix",
"flake-schemas": "flake-schemas",
"home-manager": "home-manager_2",
"jovian": "jovian",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1742229917,
"narHash": "sha256-ldvWOI1F90HBTvJBkF/09d8GLgWnIPlKpkNYotmu2wY=",
"owner": "chaotic-cx",
"repo": "nyx",
"rev": "5104a4c520e33bf59468875ab58d9ad37431a5bb",
"type": "github"
},
"original": {
"owner": "chaotic-cx",
"ref": "nyxpkgs-unstable",
"repo": "nyx",
"type": "github"
}
},
"crane": {
"locked": {
"lastModified": 1741148495,
"narHash": "sha256-EV8KUaIZ2/CdBXlutXrHoZYbWPeB65p5kKZk71gvDRI=",
"owner": "ipetkov",
"repo": "crane",
"rev": "75390a36cd0c2cdd5f1aafd8a9f827d7107f2e53",
"type": "github"
},
"original": {
"owner": "ipetkov",
"repo": "crane",
"type": "github"
}
},
"darwin": {
"inputs": {
"nixpkgs": [
"agenix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1700795494,
"narHash": "sha256-gzGLZSiOhf155FW7262kdHo2YDeugp3VuIFb4/GGng0=",
"owner": "lnl7",
"repo": "nix-darwin",
"rev": "4b9b83d5a92e8c1fbfd8eb27eda375908c11ec4d",
"type": "github"
},
"original": {
"owner": "lnl7",
"ref": "master",
"repo": "nix-darwin",
"type": "github"
}
},
"disko": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1736864502,
"narHash": "sha256-ItkIZyebGvNH2dK9jVGzJHGPtb6BSWLN8Gmef16NeY0=",
"owner": "nix-community",
"repo": "disko",
"rev": "0141aabed359f063de7413f80d906e1d98c0c123",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "latest",
"repo": "disko",
"type": "github"
}
},
"fenix": {
"inputs": {
"nixpkgs": [
"chaotic",
"nixpkgs"
],
"rust-analyzer-src": "rust-analyzer-src"
},
"locked": {
"lastModified": 1741847799,
"narHash": "sha256-muvsng8/+e9AC+xg5HuHgHwuQ/etKlTevNgr8fw5r9s=",
"owner": "nix-community",
"repo": "fenix",
"rev": "05f331e61277f70f55769060f783457fdacf8da1",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "fenix",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1733328505,
"narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": [
"lanzaboote",
"nixpkgs"
]
},
"locked": {
"lastModified": 1740872218,
"narHash": "sha256-ZaMw0pdoUKigLpv9HiNDH2Pjnosg7NBYMJlHTIsHEUo=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "3876f6b87db82f33775b1ef5ea343986105db764",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-schemas": {
"locked": {
"lastModified": 1721999734,
"narHash": "sha256-G5CxYeJVm4lcEtaO87LKzOsVnWeTcHGKbKxNamNWgOw=",
"rev": "0a5c42297d870156d9c57d8f99e476b738dcd982",
"revCount": 75,
"type": "tarball",
"url": "https://api.flakehub.com/f/pinned/DeterminateSystems/flake-schemas/0.1.5/0190ef2f-61e0-794b-ba14-e82f225e55e6/source.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://flakehub.com/f/DeterminateSystems/flake-schemas/%3D0.1.5.tar.gz"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"lanzaboote",
"pre-commit-hooks-nix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
"agenix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1703113217,
"narHash": "sha256-7ulcXOk63TIT2lVDSExj7XzFx09LpdSAPtvgtM7yQPE=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "3bfaacf46133c037bb356193bd2f1765d9dc82c1",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"home-manager_2": {
"inputs": {
"nixpkgs": [
"chaotic",
"nixpkgs"
]
},
"locked": {
"lastModified": 1741879521,
"narHash": "sha256-GylyCwdUe2Kd69bC8txEX+A3H/DXBZl2a+GcmTcJw/g=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "1b0efe3d335f452595512c7b275e5dddfbfb28a5",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"jovian": {
"inputs": {
"nix-github-actions": "nix-github-actions",
"nixpkgs": [
"chaotic",
"nixpkgs"
]
},
"locked": {
"lastModified": 1741874414,
"narHash": "sha256-gtIrDkG/iap32MYyaSAlWaixshiqMyFB9eKyhcF66eM=",
"owner": "Jovian-Experiments",
"repo": "Jovian-NixOS",
"rev": "662d117ac0ffc81f3e91b5f0fb800c3effd904a1",
"type": "github"
},
"original": {
"owner": "Jovian-Experiments",
"repo": "Jovian-NixOS",
"type": "github"
}
},
"lanzaboote": {
"inputs": {
"crane": "crane",
"flake-compat": "flake-compat",
"flake-parts": "flake-parts",
"nixpkgs": [
"nixpkgs"
],
"pre-commit-hooks-nix": "pre-commit-hooks-nix",
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1741442524,
"narHash": "sha256-tVcxLDLLho8dWcO81Xj/3/ANLdVs0bGyCPyKjp70JWk=",
"owner": "nix-community",
"repo": "lanzaboote",
"rev": "d8099586d9a84308ffedac07880e7f07a0180ff4",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "lanzaboote",
"type": "github"
}
},
"nix-github-actions": {
"inputs": {
"nixpkgs": [
"chaotic",
"jovian",
"nixpkgs"
]
},
"locked": {
"lastModified": 1729697500,
"narHash": "sha256-VFTWrbzDlZyFHHb1AlKRiD/qqCJIripXKiCSFS8fAOY=",
"owner": "zhaofengli",
"repo": "nix-github-actions",
"rev": "e418aeb728b6aa5ca8c5c71974e7159c2df1d8cf",
"type": "github"
},
"original": {
"owner": "zhaofengli",
"ref": "matrix-name",
"repo": "nix-github-actions",
"type": "github"
}
},
"nixos-hardware": {
"locked": {
"lastModified": 1742217307,
"narHash": "sha256-3fwpN7KN226ghLlpO9TR0/WpgQOmOj1e8bieUxpIYSk=",
"owner": "NixOS",
"repo": "nixos-hardware",
"rev": "4f4d97d7b7be387286cc9c988760a7ebaa5be1f1",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "master",
"repo": "nixos-hardware",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1742069588,
"narHash": "sha256-C7jVfohcGzdZRF6DO+ybyG/sqpo1h6bZi9T56sxLy+k=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "c80f6a7e10b39afcc1894e02ef785b1ad0b0d7e5",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"pre-commit-hooks-nix": {
"inputs": {
"flake-compat": [
"lanzaboote",
"flake-compat"
],
"gitignore": "gitignore",
"nixpkgs": [
"lanzaboote",
"nixpkgs"
]
},
"locked": {
"lastModified": 1740915799,
"narHash": "sha256-JvQvtaphZNmeeV+IpHgNdiNePsIpHD5U/7QN5AeY44A=",
"owner": "cachix",
"repo": "pre-commit-hooks.nix",
"rev": "42b1ba089d2034d910566bf6b40830af6b8ec732",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "pre-commit-hooks.nix",
"type": "github"
}
},
"root": {
"inputs": {
"agenix": "agenix",
"chaotic": "chaotic",
"disko": "disko",
"lanzaboote": "lanzaboote",
"nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs"
}
},
"rust-analyzer-src": {
"flake": false,
"locked": {
"lastModified": 1741807049,
"narHash": "sha256-/tH4gSW/0ePa2+0DAzk5xuHAa5qeaB4T8RnmiG3Ex4w=",
"owner": "rust-lang",
"repo": "rust-analyzer",
"rev": "3fc655b239058deb93f503f9d25cc69a32ca7675",
"type": "github"
},
"original": {
"owner": "rust-lang",
"ref": "nightly",
"repo": "rust-analyzer",
"type": "github"
}
},
"rust-overlay": {
"inputs": {
"nixpkgs": [
"lanzaboote",
"nixpkgs"
]
},
"locked": {
"lastModified": 1741228283,
"narHash": "sha256-VzqI+k/eoijLQ5am6rDFDAtFAbw8nltXfLBC6SIEJAE=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "38e9826bc4296c9daf18bc1e6aa299f3e932a403",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"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"
}
}
},
"root": "root",
"version": 7
}

View File

@@ -1,63 +0,0 @@
{
description = "System nixOS flake";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
lanzaboote = {
url = "github:nix-community/lanzaboote";
inputs.nixpkgs.follows = "nixpkgs";
};
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
agenix = {
url = "github:ryantm/agenix";
inputs.nixpkgs.follows = "nixpkgs";
};
chaotic = {
url = "github:chaotic-cx/nyx/nyxpkgs-unstable";
inputs.nixpkgs.follows = "nixpkgs";
};
disko = {
url = "github:nix-community/disko/latest";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs =
{
self,
nixpkgs,
lanzaboote,
nixos-hardware,
agenix,
...
}@inputs:
let
username = "primary";
system = "x86_64-linux";
hostnames = [
"mreow"
"yarn"
];
in
{
nixosConfigurations = nixpkgs.lib.foldl' (
config: hostname:
config
// {
"${hostname}" = nixpkgs.lib.nixosSystem {
specialArgs = {
inherit inputs username hostname;
};
modules = [
./system-${hostname}.nix
];
};
}
) { } hostnames;
};
}

View File

@@ -1,59 +0,0 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
pkgs,
modulesPath,
...
}:
{
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
boot.initrd.availableKernelModules = [
"nvme"
"xhci_pci"
"ahci"
"usb_storage"
"usbhid"
"sd_mod"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
fileSystems."/" = {
device = "/dev/disk/by-uuid/ff51be5a-b87b-4e6a-9c1d-796ceeaca153";
fsType = "ext4";
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/3D37-E610";
fsType = "vfat";
options = [
"fmask=0022"
"dmask=0022"
];
};
fileSystems."/media/games" = {
device = "/dev/disk/by-uuid/1878136e-765d-4784-b204-3536ab4fdac8";
fsType = "f2fs";
options = [ "nofail" ];
};
swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp5s0.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp4s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View File

@@ -1,19 +0,0 @@
{ hostname, ... }:
{
hostName = hostname;
networkmanager = {
enable = true;
insertNameservers = [
"1.1.1.1"
"9.9.9.9"
];
wifi = {
scanRandMacAddress = true;
};
};
wireless.networks = import ./secrets/wifi-passwords.nix;
}

Binary file not shown.

View File

@@ -1,122 +0,0 @@
{
config,
pkgs,
lib,
username,
inputs,
...
}:
let
untar = pkgs.callPackage ./util/untar.nix;
in
{
imports = [
./common.nix
./hardware_laptop.nix
inputs.nixos-hardware.nixosModules.framework-12th-gen-intel
inputs.lanzaboote.nixosModules.lanzaboote
];
# hardware.framework.laptop13.audioEnhancement = {
# enable = true;
# # seems audio doesn't work without this
# hideRawDevice = false;
# };
services.tlp = {
enable = true;
settings = {
CPU_SCALING_GOVERNOR_ON_AC = "powersave";
CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
CPU_ENERGY_PERF_POLICY_ON_BAT = "power";
CPU_ENERGY_PERF_POLICY_ON_AC = "default";
PCIE_ASPM_ON_BAT = "powersupersave";
PCIE_ASPM_ON_AC = "default";
PLATFORM_PROFILE_ON_BAT = "low-power";
PLATFORM_PROFILE_ON_AC = "balanced";
};
};
services = {
#using btrfs, so lets scrub!
btrfs.autoScrub = {
enable = true;
interval = "weekly";
fileSystems = [ "/" ];
};
};
services.greetd = {
enable = true;
settings = {
default_session = {
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd niri-session";
user = username;
};
};
};
boot = {
lanzaboote = {
enable = true;
# TODO: proper secrets management so this is not stored in nix store
pkiBundle = "${(untar { src = "${./secrets/secureboot.tar}"; })}";
};
# Bootloader.
loader = {
/*
Lanzaboote currently replaces the systemd-boot module.
This setting is usually set to true in configuration.nix
generated at installation time. So we force it to false
for now.
*/
systemd-boot.enable = lib.mkForce false;
};
};
programs.gamescope = {
enable = true;
capSysNice = true;
};
programs.steam = {
gamescopeSession.enable = true;
};
# this is a life saver.
# literally no documentation about this anywhere.
# might be good to write about this...
# https://www.reddit.com/r/NixOS/comments/u0cdpi/tuigreet_with_xmonad_how/
systemd.services.greetd.serviceConfig = {
Type = "idle";
StandardInput = "tty";
StandardOutput = "tty";
StandardError = "journal"; # Without this errors will spam on screen
# Without these bootlogs will spam on screen
TTYReset = true;
TTYVHangup = true;
TTYVTDisallocate = true;
};
system.activationScripts = {
# FIX: https://github.com/NixOS/nix/issues/2982
"profile-channel-dummy".text = ''
#!/bin/sh
mkdir -p /nix/var/nix/profiles/per-user/root/channels
'';
};
# weird hack to get swaylock working? idk, if you don't put this here, password entry doesnt work
# if I move to another lock screen program, i will have to replace `swaylock`
security.pam.services.swaylock = { };
# disable framework kernel module
# https://github.com/NixOS/nixos-hardware/issues/1330
hardware.framework.enableKmod = false;
}

View File

@@ -1,96 +0,0 @@
{
config,
pkgs,
lib,
username,
inputs,
...
}:
{
imports = [
./common.nix
./hardware_desktop.nix
./no-rgb.nix
./vr.nix
inputs.nixos-hardware.nixosModules.common-cpu-amd-pstate
inputs.nixos-hardware.nixosModules.common-cpu-amd-zenpower
];
nixpkgs.config.allowUnfree = true;
networking.hostId = "abf570f9";
boot = {
# fixes zenpower driver issue
kernelPackages = lib.mkForce pkgs.linuxPackages_latest;
kernelParams = [
# allow overclocking (I actually underclock but lol)
"amdgpu.ppfeaturemask=0xFFF7FFFF"
];
kernelModules = [
# kernel module for case fan control
"nct6775"
];
};
services.xserver.enable = false;
services.desktopManager.plasma6.enable = true;
services.displayManager = {
sddm = {
enable = true;
wayland.enable = true;
};
autoLogin = {
enable = true;
user = username;
};
};
# services.openssh = {
# enable = true;
# ports = [ 22 ];
# settings = {
# PasswordAuthentication = true;
# AllowUsers = null; # Allows all users by default. Can be [ "user1" "user2" ]
# UseDns = true;
# X11Forwarding = false;
# PermitRootLogin = "no"; # "yes", "without-password", "prohibit-password", "forced-commands-only", "no"
# };
# };
programs.steam = {
remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
};
# LACT (Linux AMDGPU Configuration Tool): https://github.com/ilya-zlobintsev/LACT
environment.systemPackages = with pkgs; [
lact
];
systemd.packages = with pkgs; [ lact ];
systemd.services.lactd.wantedBy = [ "multi-user.target" ];
# control case fans with gpu temperature
# I have case fans attached to my gpu for better cooling
hardware.fancontrol = {
enable = true;
config =
let
select_hwmon = "hwmon/hwmon[[:print:]]*";
gpu_path = "/sys/bus/pci/drivers/amdgpu/0000:0c:00.0/${select_hwmon}";
mobo_path = "/sys/devices/platform/nct6775.656/${select_hwmon}";
fan_speed = "${mobo_path}/pwm4";
in
''
INTERVAL=10
FCTEMPS=${fan_speed}=${gpu_path}/temp1_input
FCFANS= ${fan_speed}=${mobo_path}/fan4_input
MINTEMP=${fan_speed}=40
MAXTEMP=${fan_speed}=80
MINSTART=${fan_speed}=150
MINSTOP=${fan_speed}=0
MAXPWM=${fan_speed}=255
'';
};
}

View File

@@ -1,21 +0,0 @@
{
stdenv,
gnutar,
src,
}:
stdenv.mkDerivation {
pname = "untar";
version = "1.0";
inherit src;
buildInputs = [ gnutar ];
# input is a file, not a directory, skip unpackPhase
unpackPhase = "true";
installPhase = ''
mkdir -p $out
tar xf ${src} -C $out/
'';
}

View File

@@ -1,73 +0,0 @@
{
pkgs,
username,
lib,
...
}:
{
environment.systemPackages = with pkgs; [
# https://github.com/quickemu-project/quickemu
(quickemu.overrideAttrs (old: {
patches = [
# patch to allow forcing a specific ISO file via an environment variable `FILE_NAME`
(pkgs.fetchpatch {
url = "https://github.com/Titaniumtown/quickemu/commit/f96d52a6b6f4b3187171d8cab61a273475da3b6c.diff";
sha256 = "vXVI4EeJGhOlx8ARTCvB98Ajalk0bVakL98WojqcI3c=";
})
];
}))
];
programs.virt-manager.enable = true;
users.groups.libvirtd.members = [ username ];
virtualisation.libvirtd = {
enable = true;
package = pkgs.libvirt;
qemu = {
package = (
pkgs.qemu_kvm.overrideAttrs (old: {
patches = old.patches ++ [
# amd?
# (pkgs.fetchpatch {
# url = "https://github.com/Scrut1ny/Hypervisor-Phantom/raw/d09d66813570704e2b05440f290d6f9bdf2d26c7/Hypervisor-Phantom/patches/QEMU/amd-qemu-9.2.0.patch";
# sha256 = "BbzgjRa3qaYH1yXXqU6M/S68SxXWpAc9ObTG5qXu6YA=";
# })
# or intel!
(pkgs.fetchpatch {
url = "https://github.com/Scrut1ny/Hypervisor-Phantom/raw/d09d66813570704e2b05440f290d6f9bdf2d26c7/Hypervisor-Phantom/patches/QEMU/intel-qemu-9.2.0.patch";
sha256 = "kXY6R/0Tsotf0mGUIevDLlLWHEznnF1dt0K2ayX7XAg=";
})
];
})
);
ovmf.packages = lib.mkForce [
(pkgs.OVMF.overrideAttrs (old: {
secureBoot = true;
tpmSupport = true;
# TODO! add patches from: https://github.com/Scrut1ny/Hypervisor-Phantom/tree/main/Hypervisor-Phantom/patches/EDK2
})).fd
];
};
};
virtualisation.spiceUSBRedirection.enable = true;
users.users."${username}".extraGroups = [ "libvirtd" ];
# boot.kernelPatches = [
# {
# name = "undetected-kvm";
# patch = pkgs.fetchurl {
# url = "https://raw.githubusercontent.com/Scrut1ny/Hypervisor-Phantom/d09d66813570704e2b05440f290d6f9bdf2d26c7/Hypervisor-Phantom/patches/Kernel/linux-6.13-svm.patch";
# sha256 = "zz18xerutulLGzlHhnu26WCY8rVQXApyeoDtCjbejIk=";
# };
# }
# ];
}

779
flake.lock generated Normal file
View File

@@ -0,0 +1,779 @@
{
"nodes": {
"blueprint": {
"inputs": {
"nixpkgs": [
"llm-agents",
"nixpkgs"
],
"systems": "systems_3"
},
"locked": {
"lastModified": 1771437256,
"narHash": "sha256-bLqwib+rtyBRRVBWhMuBXPCL/OThfokA+j6+uH7jDGU=",
"owner": "numtide",
"repo": "blueprint",
"rev": "06ee7190dc2620ea98af9eb225aa9627b68b0e33",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "blueprint",
"type": "github"
}
},
"crane": {
"locked": {
"lastModified": 1771121070,
"narHash": "sha256-aIlv7FRXF9q70DNJPI237dEDAznSKaXmL5lfK/Id/bI=",
"owner": "ipetkov",
"repo": "crane",
"rev": "a2812c19f1ed2e5ed5ce2ef7109798b575c180e1",
"type": "github"
},
"original": {
"owner": "ipetkov",
"repo": "crane",
"type": "github"
}
},
"deploy-rs": {
"inputs": {
"flake-compat": "flake-compat",
"nixpkgs": [
"nixpkgs"
],
"utils": "utils"
},
"locked": {
"lastModified": 1770019181,
"narHash": "sha256-hwsYgDnby50JNVpTRYlF3UR/Rrpt01OrxVuryF40CFY=",
"owner": "serokell",
"repo": "deploy-rs",
"rev": "77c906c0ba56aabdbc72041bf9111b565cdd6171",
"type": "github"
},
"original": {
"owner": "serokell",
"repo": "deploy-rs",
"type": "github"
}
},
"disko": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1768920986,
"narHash": "sha256-CNzzBsRhq7gg4BMBuTDObiWDH/rFYHEuDRVOwCcwXw4=",
"owner": "nix-community",
"repo": "disko",
"rev": "de5708739256238fb912c62f03988815db89ec9a",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "latest",
"repo": "disko",
"type": "github"
}
},
"doomemacs": {
"flake": false,
"locked": {
"lastModified": 1771637851,
"narHash": "sha256-GmrqCINhfdO3EthpVG8ZsoTdfzj3vaEdz9soJwiI2HY=",
"owner": "doomemacs",
"repo": "doomemacs",
"rev": "ac649cce2abd1eb9d6d3f161928f9a7665b63310",
"type": "github"
},
"original": {
"owner": "doomemacs",
"repo": "doomemacs",
"type": "github"
}
},
"emacs-overlay": {
"inputs": {
"nixpkgs": [
"nixpkgs"
],
"nixpkgs-stable": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1771728721,
"narHash": "sha256-03w1Ka71dJlerySoIT5ZGm/+bx0qONZIjELY4ghkxIo=",
"owner": "nix-community",
"repo": "emacs-overlay",
"rev": "d7e50ce0c6e1ca698217a251d432799683d23831",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "emacs-overlay",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1733328505,
"narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_2": {
"flake": false,
"locked": {
"lastModified": 1767039857,
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "NixOS",
"repo": "flake-compat",
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "flake-compat",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems_2"
},
"locked": {
"lastModified": 1710146030,
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_2": {
"inputs": {
"systems": "systems_5"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"lanzaboote",
"pre-commit",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1771683283,
"narHash": "sha256-WxAEkAbo8dP7qiyPM6VN4ZGAxfuBVlNBNPkrqkrXVEc=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "c6ed3eab64d23520bcbb858aa53fe2b533725d4a",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"impermanence": {
"inputs": {
"home-manager": [
"home-manager"
],
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1769548169,
"narHash": "sha256-03+JxvzmfwRu+5JafM0DLbxgHttOQZkUtDWBmeUkN8Y=",
"owner": "nix-community",
"repo": "impermanence",
"rev": "7b1d382faf603b6d264f58627330f9faa5cba149",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "impermanence",
"type": "github"
}
},
"jovian-nixos": {
"inputs": {
"nix-github-actions": "nix-github-actions",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1772169624,
"narHash": "sha256-YHaTNllFu90LdXqiNNoeDFnKwioa6lT+gXGGBOAvlfo=",
"owner": "Titaniumtown",
"repo": "Jovian-NixOS",
"rev": "68f2a686a27f0b6899b085fd6e653fffa59db444",
"type": "github"
},
"original": {
"owner": "Titaniumtown",
"ref": "pr/fix-sddm-switch-to-desktop",
"repo": "Jovian-NixOS",
"type": "github"
}
},
"json2steamshortcut": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1763116114,
"narHash": "sha256-0gI7PnQUDZTFjhHgg0eP1SCJOvW5gw3sQ2UAMspipnQ=",
"owner": "ChrisOboe",
"repo": "json2steamshortcut",
"rev": "b829fe2871fd1736d2406724e4abbb492527cb08",
"type": "github"
},
"original": {
"owner": "ChrisOboe",
"repo": "json2steamshortcut",
"type": "github"
}
},
"lanzaboote": {
"inputs": {
"crane": "crane",
"nixpkgs": [
"nixpkgs"
],
"pre-commit": "pre-commit",
"rust-overlay": [
"rust-overlay"
]
},
"locked": {
"lastModified": 1771492583,
"narHash": "sha256-nQzvnU4BGu8dA6BsPPCqmVcab/3ebVmHtX3ZWbW3Hxc=",
"owner": "nix-community",
"repo": "lanzaboote",
"rev": "5e9380994665ef66c87ab8e22c913ff837174ce4",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "lanzaboote",
"type": "github"
}
},
"llm-agents": {
"inputs": {
"blueprint": "blueprint",
"nixpkgs": [
"nixpkgs"
],
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1771730908,
"narHash": "sha256-AkmTeSJSGniBsCbc+Oy5emrQflyTzUweOVcQLf69z1A=",
"owner": "numtide",
"repo": "llm-agents.nix",
"rev": "352ee8c439a3c2c7987f6cfaebddcf87c924959a",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "llm-agents.nix",
"type": "github"
}
},
"niri": {
"inputs": {
"niri-stable": "niri-stable",
"niri-unstable": "niri-unstable",
"nixpkgs": [
"nixpkgs"
],
"nixpkgs-stable": [
"nixpkgs"
],
"xwayland-satellite-stable": "xwayland-satellite-stable",
"xwayland-satellite-unstable": "xwayland-satellite-unstable"
},
"locked": {
"lastModified": 1771638124,
"narHash": "sha256-rIF69lE48tBvOMFiIyserOa0MF3SXh1ZiRqv7WqlUew=",
"owner": "sodiboo",
"repo": "niri-flake",
"rev": "a1dac2b08c329af22200104c3c4b18de5ded6034",
"type": "github"
},
"original": {
"owner": "sodiboo",
"repo": "niri-flake",
"type": "github"
}
},
"niri-stable": {
"flake": false,
"locked": {
"lastModified": 1756556321,
"narHash": "sha256-RLD89dfjN0RVO86C/Mot0T7aduCygPGaYbog566F0Qo=",
"owner": "YaLTeR",
"repo": "niri",
"rev": "01be0e65f4eb91a9cd624ac0b76aaeab765c7294",
"type": "github"
},
"original": {
"owner": "YaLTeR",
"ref": "v25.08",
"repo": "niri",
"type": "github"
}
},
"niri-unstable": {
"flake": false,
"locked": {
"lastModified": 1771305475,
"narHash": "sha256-lqweVTwHhYc+9T33cysp38gVwxaibGJHriOPZXWyhCY=",
"owner": "YaLTeR",
"repo": "niri",
"rev": "a2a52911757cb3b497db9407592f9b4c439571ea",
"type": "github"
},
"original": {
"owner": "YaLTeR",
"repo": "niri",
"type": "github"
}
},
"nix-doom-emacs-unstraightened": {
"inputs": {
"doomemacs": "doomemacs",
"emacs-overlay": [
"emacs-overlay"
],
"nixpkgs": [
"nixpkgs"
],
"systems": "systems_4"
},
"locked": {
"lastModified": 1771663801,
"narHash": "sha256-gh0OVgAERhv1uSXzTgd0p7GioEG1Jg44FVxc72aM//A=",
"owner": "marienz",
"repo": "nix-doom-emacs-unstraightened",
"rev": "0bf7a181e28a8c3d1e89b18f79b15d516f2fb670",
"type": "github"
},
"original": {
"owner": "marienz",
"repo": "nix-doom-emacs-unstraightened",
"type": "github"
}
},
"nix-flatpak": {
"locked": {
"lastModified": 1768656715,
"narHash": "sha256-Sbh037scxKFm7xL0ahgSCw+X2/5ZKeOwI2clqrYr9j4=",
"owner": "gmodena",
"repo": "nix-flatpak",
"rev": "123fe29340a5b8671367055b75a6e7c320d6f89a",
"type": "github"
},
"original": {
"owner": "gmodena",
"repo": "nix-flatpak",
"type": "github"
}
},
"nix-github-actions": {
"inputs": {
"nixpkgs": [
"jovian-nixos",
"nixpkgs"
]
},
"locked": {
"lastModified": 1729697500,
"narHash": "sha256-VFTWrbzDlZyFHHb1AlKRiD/qqCJIripXKiCSFS8fAOY=",
"owner": "zhaofengli",
"repo": "nix-github-actions",
"rev": "e418aeb728b6aa5ca8c5c71974e7159c2df1d8cf",
"type": "github"
},
"original": {
"owner": "zhaofengli",
"ref": "matrix-name",
"repo": "nix-github-actions",
"type": "github"
}
},
"nixos-hardware": {
"locked": {
"lastModified": 1771423359,
"narHash": "sha256-yRKJ7gpVmXbX2ZcA8nFi6CMPkJXZGjie2unsiMzj3Ig=",
"owner": "NixOS",
"repo": "nixos-hardware",
"rev": "740a22363033e9f1bb6270fbfb5a9574067af15b",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "master",
"repo": "nixos-hardware",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1771369470,
"narHash": "sha256-0NBlEBKkN3lufyvFegY4TYv5mCNHbi5OmBDrzihbBMQ=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "0182a361324364ae3f436a63005877674cf45efb",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"noctalia": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1771732280,
"narHash": "sha256-pwfFptl7m1Xu+I7eSjapRfIBtVH9rsLpzuaCouraz9U=",
"owner": "noctalia-dev",
"repo": "noctalia-shell",
"rev": "341c5ee138d688ac1a7ffb1543ce2a3c9801aa34",
"type": "github"
},
"original": {
"owner": "noctalia-dev",
"repo": "noctalia-shell",
"type": "github"
}
},
"oh-my-opencode": {
"inputs": {
"flake-utils": "flake-utils_2",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1770618333,
"narHash": "sha256-7Y9e2nrsi4yKwBXZ7RUF1B5FN4RJUT4rYI1SvA0vDEw=",
"owner": "yebei199",
"repo": "oh-my-opencode",
"rev": "bde5264e4c3a91ded482acd35c8ed239d21d1de2",
"type": "github"
},
"original": {
"owner": "yebei199",
"ref": "nix",
"repo": "oh-my-opencode",
"type": "github"
}
},
"pre-commit": {
"inputs": {
"flake-compat": "flake-compat_2",
"gitignore": "gitignore",
"nixpkgs": [
"lanzaboote",
"nixpkgs"
]
},
"locked": {
"lastModified": 1770726378,
"narHash": "sha256-kck+vIbGOaM/dHea7aTBxdFYpeUl/jHOy5W3eyRvVx8=",
"owner": "cachix",
"repo": "pre-commit-hooks.nix",
"rev": "5eaaedde414f6eb1aea8b8525c466dc37bba95ae",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "pre-commit-hooks.nix",
"type": "github"
}
},
"root": {
"inputs": {
"deploy-rs": "deploy-rs",
"disko": "disko",
"emacs-overlay": "emacs-overlay",
"home-manager": "home-manager",
"impermanence": "impermanence",
"jovian-nixos": "jovian-nixos",
"json2steamshortcut": "json2steamshortcut",
"lanzaboote": "lanzaboote",
"llm-agents": "llm-agents",
"niri": "niri",
"nix-doom-emacs-unstraightened": "nix-doom-emacs-unstraightened",
"nix-flatpak": "nix-flatpak",
"nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs",
"noctalia": "noctalia",
"oh-my-opencode": "oh-my-opencode",
"rust-overlay": "rust-overlay",
"zen-browser": "zen-browser"
}
},
"rust-overlay": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1771729765,
"narHash": "sha256-HNsDSR5bhLSrIpi9bTb2uTK1qnPo1xFSBxs6YmFyprk=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "be926cb1a76e8450ab2b92121b2e88d09fa4d41c",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"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"
}
},
"systems_2": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_3": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_4": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_5": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"treefmt-nix": {
"inputs": {
"nixpkgs": [
"llm-agents",
"nixpkgs"
]
},
"locked": {
"lastModified": 1770228511,
"narHash": "sha256-wQ6NJSuFqAEmIg2VMnLdCnUc0b7vslUohqqGGD+Fyxk=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "337a4fe074be1042a35086f15481d763b8ddc0e7",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
},
"utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"xwayland-satellite-stable": {
"flake": false,
"locked": {
"lastModified": 1755491097,
"narHash": "sha256-m+9tUfsmBeF2Gn4HWa6vSITZ4Gz1eA1F5Kh62B0N4oE=",
"owner": "Supreeeme",
"repo": "xwayland-satellite",
"rev": "388d291e82ffbc73be18169d39470f340707edaa",
"type": "github"
},
"original": {
"owner": "Supreeeme",
"ref": "v0.7",
"repo": "xwayland-satellite",
"type": "github"
}
},
"xwayland-satellite-unstable": {
"flake": false,
"locked": {
"lastModified": 1771195969,
"narHash": "sha256-BUE41HjLIGPjq3U8VXPjf8asH8GaMI7FYdgrIHKFMXA=",
"owner": "Supreeeme",
"repo": "xwayland-satellite",
"rev": "536bd32efc935bf876d6de385ec18a1b715c9358",
"type": "github"
},
"original": {
"owner": "Supreeeme",
"repo": "xwayland-satellite",
"type": "github"
}
},
"zen-browser": {
"inputs": {
"home-manager": [
"home-manager"
],
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1771719171,
"narHash": "sha256-ZDE3//9Hg+9X5xXcDJ4k/d6qcOVQ4MrTmvf1zv/omZY=",
"owner": "0xc000022070",
"repo": "zen-browser-flake",
"rev": "2a71f2e720db962f2522b38704e23e11163e91ae",
"type": "github"
},
"original": {
"owner": "0xc000022070",
"repo": "zen-browser-flake",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

165
flake.nix Normal file
View File

@@ -0,0 +1,165 @@
{
description = "System nixOS flake";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
lanzaboote = {
url = "github:nix-community/lanzaboote";
inputs.nixpkgs.follows = "nixpkgs";
inputs.rust-overlay.follows = "rust-overlay";
};
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
disko = {
url = "github:nix-community/disko/latest";
inputs.nixpkgs.follows = "nixpkgs";
};
rust-overlay = {
url = "github:oxalica/rust-overlay";
inputs.nixpkgs.follows = "nixpkgs";
};
zen-browser = {
url = "github:0xc000022070/zen-browser-flake";
inputs.nixpkgs.follows = "nixpkgs";
inputs.home-manager.follows = "home-manager";
};
niri = {
url = "github:sodiboo/niri-flake";
inputs.nixpkgs.follows = "nixpkgs";
inputs.nixpkgs-stable.follows = "nixpkgs";
};
emacs-overlay = {
url = "github:nix-community/emacs-overlay";
inputs.nixpkgs.follows = "nixpkgs";
inputs.nixpkgs-stable.follows = "nixpkgs";
};
nix-flatpak.url = "github:gmodena/nix-flatpak/";
nix-doom-emacs-unstraightened = {
url = "github:marienz/nix-doom-emacs-unstraightened";
inputs.nixpkgs.follows = "nixpkgs";
inputs.emacs-overlay.follows = "emacs-overlay";
};
impermanence = {
url = "github:nix-community/impermanence";
inputs.nixpkgs.follows = "nixpkgs";
inputs.home-manager.follows = "home-manager";
};
deploy-rs = {
url = "github:serokell/deploy-rs";
inputs.nixpkgs.follows = "nixpkgs";
};
jovian-nixos = {
url = "github:Titaniumtown/Jovian-NixOS/pr/fix-sddm-switch-to-desktop";
inputs.nixpkgs.follows = "nixpkgs";
};
noctalia = {
url = "github:noctalia-dev/noctalia-shell";
inputs.nixpkgs.follows = "nixpkgs";
};
llm-agents = {
url = "github:numtide/llm-agents.nix";
inputs.nixpkgs.follows = "nixpkgs";
};
# wait for https://github.com/code-yeongyu/oh-my-opencode/pull/921 to be merged
oh-my-opencode = {
url = "github:yebei199/oh-my-opencode/nix";
inputs.nixpkgs.follows = "nixpkgs";
};
json2steamshortcut = {
url = "github:ChrisOboe/json2steamshortcut";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs =
{
self,
nixpkgs,
lanzaboote,
nixos-hardware,
home-manager,
deploy-rs,
jovian-nixos,
...
}@inputs:
let
username = "primary";
system = "x86_64-linux";
hostnames = [
"mreow"
"yarn"
];
niri-package = inputs.niri.packages.${system}.niri-unstable;
in
{
formatter.${system} = nixpkgs.legacyPackages.${system}.nixfmt-tree;
nixosConfigurations = nixpkgs.lib.foldl' (
config: hostname:
config
// {
"${hostname}" = nixpkgs.lib.nixosSystem {
specialArgs = {
inherit
inputs
username
hostname
niri-package
;
};
modules = [
home-manager.nixosModules.home-manager
(
{ config, ... }:
{
# home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = {
inherit
inputs
hostname
username
niri-package
;
homeDirectory = "/home/${username}";
stateVersion = config.system.stateVersion;
};
home-manager.users.${username} = import ./home-manager/home-${hostname}.nix;
}
)
./system/system-${hostname}.nix
];
};
}
) { } hostnames;
# Deploy-rs configuration for yarn host only
deploy.nodes.yarn = {
hostname = "desktop";
profiles.system = {
sshUser = "root";
path = deploy-rs.lib.${system}.activate.nixos self.nixosConfigurations.yarn;
};
};
};
}

33
home-manager/desktop.nix Normal file
View File

@@ -0,0 +1,33 @@
{
config,
lib,
pkgs,
...
}:
{
imports = [
# niri wayland compositor
./progs/niri.nix
# statusbar
# ./progs/eww/eww.nix
# lockscreen
./progs/swaylock.nix
# notification daemon
./progs/dunst.nix
# noctalia desktop shell
./progs/noctalia.nix
];
home.packages = with pkgs; [
wdisplays
blueman
# used by /etc/nixos logic to launch niri
config.programs.niri.package
];
}

261
home-manager/flake.lock generated
View File

@@ -1,261 +0,0 @@
{
"nodes": {
"agenix": {
"inputs": {
"darwin": "darwin",
"home-manager": [
"home-manager"
],
"nixpkgs": [
"nixpkgs"
],
"systems": "systems"
},
"locked": {
"lastModified": 1736955230,
"narHash": "sha256-uenf8fv2eG5bKM8C/UvFaiJMZ4IpUFaQxk9OH5t/1gA=",
"owner": "ryantm",
"repo": "agenix",
"rev": "e600439ec4c273cf11e06fe4d9d906fb98fa097c",
"type": "github"
},
"original": {
"owner": "ryantm",
"repo": "agenix",
"type": "github"
}
},
"darwin": {
"inputs": {
"nixpkgs": [
"agenix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1700795494,
"narHash": "sha256-gzGLZSiOhf155FW7262kdHo2YDeugp3VuIFb4/GGng0=",
"owner": "lnl7",
"repo": "nix-darwin",
"rev": "4b9b83d5a92e8c1fbfd8eb27eda375908c11ec4d",
"type": "github"
},
"original": {
"owner": "lnl7",
"ref": "master",
"repo": "nix-darwin",
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1742238842,
"narHash": "sha256-Z79yUJi+UGSpRC90NbHyuvBjGLkgEtlZaJ8DtzaGkzE=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "5a6e5a59a4d332edaa7d5d1604eb58ead27af851",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"niri": {
"inputs": {
"niri-stable": "niri-stable",
"niri-unstable": "niri-unstable",
"nixpkgs": [
"nixpkgs"
],
"nixpkgs-stable": "nixpkgs-stable",
"xwayland-satellite-stable": "xwayland-satellite-stable",
"xwayland-satellite-unstable": "xwayland-satellite-unstable"
},
"locked": {
"lastModified": 1742220949,
"narHash": "sha256-ZlPrKLM0FWUP36MNCJYGTlN4ZvoXZ4WY/ENKoaGU6yg=",
"owner": "sodiboo",
"repo": "niri-flake",
"rev": "5d8d116ac90f54e4c95bd5c9de31b8df477b12b9",
"type": "github"
},
"original": {
"owner": "sodiboo",
"repo": "niri-flake",
"type": "github"
}
},
"niri-stable": {
"flake": false,
"locked": {
"lastModified": 1740117926,
"narHash": "sha256-mTTHA0RAaQcdYe+9A3Jx77cmmyLFHmRoZdd8RpWa+m8=",
"owner": "YaLTeR",
"repo": "niri",
"rev": "b94a5db8790339cf9134873d8b490be69e02ac71",
"type": "github"
},
"original": {
"owner": "YaLTeR",
"ref": "v25.02",
"repo": "niri",
"type": "github"
}
},
"niri-unstable": {
"flake": false,
"locked": {
"lastModified": 1742103165,
"narHash": "sha256-zAzMwvozlS2gmqdhrgeMz0PNp3kRDkwxIEfqWT3Hj6g=",
"owner": "YaLTeR",
"repo": "niri",
"rev": "287480b541e85b13ff6419d372f82fa8e42c603c",
"type": "github"
},
"original": {
"owner": "YaLTeR",
"repo": "niri",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1742069588,
"narHash": "sha256-C7jVfohcGzdZRF6DO+ybyG/sqpo1h6bZi9T56sxLy+k=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "c80f6a7e10b39afcc1894e02ef785b1ad0b0d7e5",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1741862977,
"narHash": "sha256-prZ0M8vE/ghRGGZcflvxCu40ObKaB+ikn74/xQoNrGQ=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "cdd2ef009676ac92b715ff26630164bb88fec4e0",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-24.11",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"agenix": "agenix",
"home-manager": "home-manager",
"niri": "niri",
"nixpkgs": "nixpkgs",
"rust-overlay": "rust-overlay",
"zen-browser": "zen-browser"
}
},
"rust-overlay": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1742178793,
"narHash": "sha256-S2onMdoDS4tIYd3/Jc5oFEZBr2dJOgPrh9KzSO/bfDw=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "954582a766a50ebef5695a9616c93b5386418c08",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"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"
}
},
"xwayland-satellite-stable": {
"flake": false,
"locked": {
"lastModified": 1739246919,
"narHash": "sha256-/hBM43/Gd0/tW+egrhlWgOIISeJxEs2uAOIYVpfDKeU=",
"owner": "Supreeeme",
"repo": "xwayland-satellite",
"rev": "44590a416d4a3e8220e19e29e0b6efe64a80315d",
"type": "github"
},
"original": {
"owner": "Supreeeme",
"ref": "v0.5.1",
"repo": "xwayland-satellite",
"type": "github"
}
},
"xwayland-satellite-unstable": {
"flake": false,
"locked": {
"lastModified": 1742083780,
"narHash": "sha256-cVLagXvI4jFbCe76tpvAWA2N2WF94Pl0PpgsGp2P6rM=",
"owner": "Supreeeme",
"repo": "xwayland-satellite",
"rev": "f9ec97b007547ad80147404335ed22e880dbd69d",
"type": "github"
},
"original": {
"owner": "Supreeeme",
"repo": "xwayland-satellite",
"type": "github"
}
},
"zen-browser": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1742239259,
"narHash": "sha256-khFVyLv9bjmWS5wKxgRqR0T/8b+5YUcOKKQc8cSIaZs=",
"owner": "0xc000022070",
"repo": "zen-browser-flake",
"rev": "047d2684da0cf2d1a1db02eece61c90ce9dda32b",
"type": "github"
},
"original": {
"owner": "0xc000022070",
"repo": "zen-browser-flake",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

View File

@@ -1,100 +0,0 @@
{
description = "My nixOS flake for home-manager";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
niri = {
url = "github:sodiboo/niri-flake";
inputs.nixpkgs.follows = "nixpkgs";
};
agenix = {
url = "github:ryantm/agenix";
inputs.nixpkgs.follows = "nixpkgs";
inputs.home-manager.follows = "home-manager";
};
rust-overlay = {
url = "github:oxalica/rust-overlay";
inputs.nixpkgs.follows = "nixpkgs";
};
zen-browser = {
url = "github:0xc000022070/zen-browser-flake";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs =
{
self,
nixpkgs,
home-manager,
niri,
rust-overlay,
agenix,
...
}@inputs:
let
username = "primary";
homeDirectory = "/home/${username}";
hostname = nixpkgs.lib.strings.removeSuffix "\n" (builtins.readFile /etc/hostname);
# stolen from: https://stackoverflow.com/a/42398526
optimizeWithFlags =
pkg: flags:
pkgs.lib.overrideDerivation pkg (
old:
let
newflags = pkgs.lib.foldl' (acc: x: "${acc} ${x}") "" flags;
oldflags = if (pkgs.lib.hasAttr "NIX_CFLAGS_COMPILE" old) then "${old.NIX_CFLAGS_COMPILE}" else "";
in
{
NIX_CFLAGS_COMPILE = "${oldflags} ${newflags}";
stdenv = pkgs.clang19Stdenv;
}
);
pkgs = (import nixpkgs { });
in
{
homeConfigurations."${username}" = home-manager.lib.homeManagerConfiguration {
inherit pkgs;
extraSpecialArgs = {
inherit
inputs
username
homeDirectory
optimizeWithFlags
;
};
modules = [
./system-${hostname}.nix
niri.homeModules.config
agenix.homeManagerModules.age
(
{ pkgs, ... }:
{
nixpkgs.overlays = [
rust-overlay.overlays.default
inputs.niri.overlays.niri
];
# home-manager stuff
home = {
inherit username homeDirectory;
};
}
)
];
};
};
}

View File

@@ -7,50 +7,71 @@
{ {
imports = [ imports = [
./no-gui.nix ./no-gui.nix
# ./progs/ghostty.nix
./progs/alacritty.nix ./progs/alacritty.nix
./progs/gpt4all/gpt4all.nix ./progs/emacs.nix
# ./progs/trezor.nix # - broken # ./progs/trezor.nix # - broken
./progs/flatpak.nix
]; ];
nixpkgs.config.allowUnfreePredicate = nixpkgs.config.allowUnfreePredicate =
pkg: pkg:
builtins.elem (lib.getName pkg) [ builtins.elem (lib.getName pkg) [
"apple_cursor" "apple_cursor"
"grayjay"
]; ];
home.packages = home.packages =
with pkgs; with pkgs;
lib.concatLists [
# libreoffice
[ [
#calculator
gnome-calculator
#productivity stuff
libreoffice libreoffice
hunspell # spellcheck hunspell # spellcheck
hunspellDicts.en_US # spellcheck dictionary hunspellDicts.en_US # spellcheck dictionary
]
#video and audio downloading # browsers
parabolic [
#soulseek client
nicotine-plus
#dark web browsing deep web browsing
tor-browser tor-browser
inputs.zen-browser.packages."${system}".twilight
grayjay
]
# music library management
[
picard
puddletag
lrcget
]
# image editing
[
darktable
rawtherapee
hugin
gimp3
pinta
]
[
#calculator
gnome-calculator
# audio editing # audio editing
audacity audacity
#fonts #fonts
noto-fonts noto-fonts
noto-fonts-emoji noto-fonts-color-emoji
liberation_ttf liberation_ttf
#for ebook reading #for ebook reading
foliate foliate
#audio mixer (pavucontrol but for pipewire) #audio mixer (pavucontrol but for pipewire)
# pwvucontrol # - broken pwvucontrol
# minecraft launcher # minecraft launcher
prismlauncher prismlauncher
@@ -81,40 +102,17 @@
libnotify # notifications library libnotify # notifications library
xdg-utils # xdg utils xdg-utils # xdg utils
# music tagging utility
picard
# music lyric fetcher
lrcget
inputs.zen-browser.packages."${system}".default
# freecad-wayland
puddletag
mcaselector
wireshark wireshark
darktable nautilus
rawtherapee
hugin
# nufraw
nufraw-thumbnailer nufraw-thumbnailer
gdk-pixbuf gdk-pixbuf
nautilus
enblend-enfuse enblend-enfuse
savvycan
# simple screen recording on wayland # simple screen recording on wayland
wl-screenrec wl-screenrec
gimp
pinta
# wayland-compatible color picker # wayland-compatible color picker
hyprpicker hyprpicker
@@ -125,8 +123,23 @@
# for mod organizer 2 # for mod organizer 2
zenity zenity
p7zip p7zip
# password manager
keepassxc
freecad-wayland
localsend
# openstreetmap
josm
# in unstable ATM, gotta wait for it to hit stable
# video-trimmer
] ]
++ (builtins.filter lib.isDerivation (builtins.attrValues nerd-fonts)); # all the fonts
(builtins.filter lib.isDerivation (builtins.attrValues nerd-fonts))
];
# programs.zed-editor = { # programs.zed-editor = {
# enable = true; # enable = true;
@@ -158,7 +171,6 @@
}; };
home.sessionVariables = { home.sessionVariables = {
TERMINAL = "alacritty";
BROWSER = "zen"; BROWSER = "zen";
LD_LIBRARY_PATH = "${pkgs.lib.makeLibraryPath [ LD_LIBRARY_PATH = "${pkgs.lib.makeLibraryPath [
pkgs.stdenv.cc.cc pkgs.stdenv.cc.cc

View File

@@ -0,0 +1,33 @@
{
config,
pkgs,
homeDirectory,
...
}:
{
imports = [
./gui.nix
./desktop.nix
./progs/borg.nix
# effects headphones too
# ./progs/framework-13-easyeffects.nix
];
# media controls
systemd.user.services.mpris-proxy = {
Unit.Description = "Mpris proxy";
Install.After = [
"network.target"
"sound.target"
];
Install.WantedBy = [ "default.target" ];
Service.ExecStart = "${pkgs.bluez}/bin/mpris-proxy";
};
programs.niri.settings.outputs = {
"BOE 0x095F Unknown" = {
scale = 1.5;
};
};
}

View File

@@ -0,0 +1,44 @@
{
pkgs,
inputs,
lib,
config,
...
}:
{
imports = [
./gui.nix
./desktop.nix
inputs.json2steamshortcut.homeModules.default
];
home.packages = with pkgs; [
protontricks
# https://github.com/NixOS/nixpkgs/pull/339370#issuecomment-2731336341
bs-manager
];
programs.obs-studio = {
enable = true;
plugins = with pkgs.obs-studio-plugins; [
wlrobs
obs-backgroundremoval
obs-pipewire-audio-capture
];
};
services.steam-shortcuts = {
enable = true;
overwriteExisting = true;
steamUserId = lib.strings.toInt (lib.strings.trim (builtins.readFile ./secrets/steam-user-id));
shortcuts = [
{
AppName = "Prism Launcher";
Exe = "${pkgs.prismlauncher}/bin/prismlauncher";
Icon = "${pkgs.prismlauncher}/share/icons/hicolor/scalable/apps/org.prismlauncher.PrismLauncher.svg";
Tags = [ "Game" ];
}
];
};
}

View File

@@ -4,23 +4,13 @@
lib, lib,
homeDirectory, homeDirectory,
config, config,
username,
stateVersion,
... ...
}: }:
{ let
imports = [ rust_pkgs = with pkgs; [
./progs/fish.nix (rust-bin.nightly.latest.default.override ({
./progs/helix.nix
];
home.stateVersion = "24.11";
home.enableNixpkgsReleaseCheck = false;
home.packages = with pkgs; [
# hex viewer
hexyl
# rust stuff
(rust-bin.stable.latest.default.override ({
extensions = [ extensions = [
"rust-src" "rust-src"
"rust-analyzer" "rust-analyzer"
@@ -30,32 +20,51 @@
"cargo" "cargo"
]; ];
# thumbv7m-none-eabi target for stm32 # thumbv7m-none-eabi target for stm32
targets = [ "thumbv7m-none-eabi" ]; targets = [
"thumbv7m-none-eabi"
"wasm32-unknown-unknown"
];
})) }))
cargo-expand cargo-expand
cargo-edit # cargo upgrade and stuff
cargo-pgo cargo-pgo
rust-script rust-script
bolt_19 bolt_19
libllvm # llvm-profdata libllvm # llvm-profdata
cargo-show-asm cargo-show-asm
cargo-flamegraph
];
# find typos in code lsps = with pkgs; [
typos # java
jdt-language-server
# python formatter # HTML/CSS/JSON/ESLint language servers
ruff vscode-langservers-extracted
nil # nix lsp
yaml-language-server # yaml lsp
marksman # markdown lsp
typescript-language-server # typescript lsp
cmake-language-server # cmake lsp
# for website generation typescript
hugo ];
go
java_tools = with pkgs; [
# java development # java development
google-java-format # formatter google-java-format # formatter
jdk # java jdk # java
jdt-language-server # lsp server
# for benchmaking stuff # java assembler
hyperfine jasmin
];
common_tools = with pkgs; [
# hex viewer
hexyl
# find typos in code
typos
# replacements for common posix tools # replacements for common posix tools
eza # ls replacement eza # ls replacement
@@ -66,32 +75,79 @@
gping # `ping`... but with a graph!! gping # `ping`... but with a graph!!
tldr # `man` but more straight-forward and simpler tldr # `man` but more straight-forward and simpler
ripgrep # grep, but written in rust, respects .gitignore, and very very fast, command is `rg` ripgrep # grep, but written in rust, respects .gitignore, and very very fast, command is `rg`
lurk # better strace fd # alternative to `find`
# status tools
htop
bottom
# other tools
unzip
wget
killall
file
b3sum
# "A hexadecimal, binary, and ASCII dump utility with color support"
tinyxxd
# networking tool
lsof
# view SMART status of drives
smartmontools
# adds `sensors` command # adds `sensors` command
lm_sensors lm_sensors
# rssfeed # lspci
newsboat pciutils
# HTML/CSS/JSON/ESLint language servers # convert between various units
vscode-langservers-extracted units
just jq
];
in
{
imports = [
./progs/fish.nix
./progs/helix.nix
./progs/opencode.nix
(
{ ... }:
{
nixpkgs.overlays = [
inputs.rust-overlay.overlays.default
];
}
)
];
home.stateVersion = stateVersion;
home.packages =
with pkgs;
lib.concatLists [
[
# python formatter
ruff
# for website generation
hugo
go
# for benchmaking stuff
hyperfine
pfetch-rs pfetch-rs
waypipe waypipe
htop
bottom
wget
unzip
compsize
killall
sshfs sshfs
# nix formatter # nix formatter
nixfmt-rfc-style nixfmt-tree
# serial viewer # serial viewer
minicom minicom
@@ -99,22 +155,18 @@
# "~~matt's~~ my trace route" # "~~matt's~~ my trace route"
mtr mtr
file
b3sum
ffmpeg-full ffmpeg-full
# microcontroller tooling # microcontroller tooling
probe-rs probe-rs-tools
(python312.withPackages ( (python313.withPackages (
ps: with ps; [ ps: with ps; [
mypy # type checking
types-requests # add types for requests methods
python-lsp-server # lsp python-lsp-server # lsp
python-lsp-ruff # ruff integration python-lsp-ruff # ruff integration
mypy # type checking
pyserial pyserial
numpy numpy
@@ -125,28 +177,13 @@
] ]
)) ))
# dep fails to build binwalk
# binwalk
smartmontools
nil # nix lsp
yaml-language-server # yaml lsp
marksman # markdown lsp
typescript-language-server # typescript lsp
cmake-language-server # cmake lsp
# clang-format and clang-tidy # clang-format and clang-tidy
clang-tools clang-tools
clang clang
gdb gdb
# broken
# lldb
fio
age
git-crypt git-crypt
imagemagick imagemagick
@@ -157,60 +194,54 @@
# terminal image viewer # terminal image viewer
timg timg
lsof
tcpdump tcpdump
cargo-flamegraph
linuxKernel.packages.linux_6_11.perf
borgbackup borgbackup
tinyxxd # used to deploy nix system to server
# (and in the future, desktop)
deploy-rs
bfc # power stuff
powerstat
# java assembler nodePackages_latest.nodejs
jasmin
yt-dlp
]
rust_pkgs
lsps
java_tools
common_tools
]; ];
# https://github.com/flamegraph-rs/flamegraph # https://github.com/flamegraph-rs/flamegraph
home.file.".cargo/config.toml".text = '' home.file.".cargo/config.toml".text = ''
[target.${lib.strings.removeSuffix "-linux" pkgs.system}-unknown-linux-gnu] [target.${lib.strings.removeSuffix "-linux" pkgs.stdenv.hostPlatform.system}-unknown-linux-gnu]
linker = "${lib.getExe pkgs.clang}" linker = "${lib.getExe pkgs.clang}"
rustflags = ["-Clink-arg=-Wl,--no-rosegment"] rustflags = ["-Clink-arg=-Wl,--no-rosegment"]
''; '';
# default applications
home.sessionVariables = {
EDITOR = "hx";
};
# feed reader
programs.newsboat = {
enable = true;
# store rss feeds in a separate file because it's *a lot*
urls = import ./progs/rss.nix;
};
# git (self explanatory) # git (self explanatory)
programs.git = { programs.git = {
enable = true; enable = true;
package = pkgs.git; package = pkgs.git;
userName = "Simon Gardling";
userEmail = "titaniumtown@proton.me";
# better way to view diffs
delta.enable = true;
lfs.enable = true; lfs.enable = true;
extraConfig = { ignores = [ ".sisyphus" ];
settings = {
init = { init = {
# master -> main # master -> main
defaultBranch = "main"; defaultBranch = "main";
}; };
push.autoSetupRemote = true; push.autoSetupRemote = true;
user = {
name = "Simon Gardling";
email = "titaniumtown@proton.me";
};
}; };
# gpg signing keys # gpg signing keys
@@ -220,5 +251,9 @@
}; };
}; };
programs.home-manager.enable = true; # better way to view diffs
programs.delta = {
enable = true;
enableGitIntegration = true;
};
} }

View File

@@ -1,5 +1,9 @@
{ pkgs, ... }: { pkgs, ... }:
{ {
home.sessionVariables = {
TERMINAL = "alacritty";
};
programs.alacritty = { programs.alacritty = {
enable = true; enable = true;
package = pkgs.alacritty; package = pkgs.alacritty;

View File

@@ -1,6 +1,9 @@
{ homeDirectory, borgPasswordFile }: { pkgs, homeDirectory, ... }:
{ {
programs.borgmatic = {
enable = true;
package = pkgs.borgmatic;
backups = {
home = { home = {
location = { location = {
sourceDirectories = ( sourceDirectories = (
@@ -12,7 +15,6 @@
"projects" "projects"
"Pictures" "Pictures"
"school" "school"
"justfile"
] ]
++ (map (f: ".config/Signal/${f}") [ ++ (map (f: ".config/Signal/${f}") [
"stickers.noindex" "stickers.noindex"
@@ -24,7 +26,6 @@
"Local Storage" "Local Storage"
"SharedStorage" "SharedStorage"
"config.json" "config.json"
"ephemeral.json"
"Preferences" "Preferences"
]) ])
); );
@@ -38,15 +39,13 @@
}; };
retention = { retention = {
keepHourly = 48; keepHourly = 10;
keepDaily = 30; keepDaily = 30;
keepWeekly = 26; keepWeekly = 8;
keepMonthly = 24; keepMonthly = 2;
keepYearly = 10; keepYearly = 0;
};
}; };
storage = {
encryptionPasscommand = "cat ${borgPasswordFile}";
}; };
}; };
} }

View File

@@ -0,0 +1,86 @@
;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-
;; Place your private configuration here! Remember, you do not need to run 'doom
;; sync' after modifying this file!
;; Some functionality uses this to identify you, e.g. GPG configuration, email
;; clients, file templates and snippets. It is optional.
;; (setq user-full-name "John Doe"
;; user-mail-address "john@doe.com")
;; Doom exposes five (optional) variables for controlling fonts in Doom:
;;
;; - `doom-font' -- the primary font to use
;; - `doom-variable-pitch-font' -- a non-monospace font (where applicable)
;; - `doom-big-font' -- used for `doom-big-font-mode'; use this for
;; presentations or streaming.
;; - `doom-symbol-font' -- for symbols
;; - `doom-serif-font' -- for the `fixed-pitch-serif' face
;;
;; See 'C-h v doom-font' for documentation and more examples of what they
;; accept. For example:
;;
;;(setq doom-font (font-spec :family "Fira Code" :size 12 :weight 'semi-light)
;; doom-variable-pitch-font (font-spec :family "Fira Sans" :size 13))
;;
;; If you or Emacs can't find your font, use 'M-x describe-font' to look them
;; up, `M-x eval-region' to execute elisp code, and 'M-x doom/reload-font' to
;; refresh your font settings. If Emacs still can't find your font, it likely
;; wasn't installed correctly. Font issues are rarely Doom issues!
;; There are two ways to load a theme. Both assume the theme is installed and
;; available. You can either set `doom-theme' or manually load a theme with the
;; `load-theme' function. This is the default:
(setq doom-theme 'doom-one)
;; This determines the style of line numbers in effect. If set to `nil', line
;; numbers are disabled. For relative line numbers, set this to `relative'.
(setq display-line-numbers-type t)
;; If you use `org' and don't want your org files in the default location below,
;; change `org-directory'. It must be set before org loads!
(setq org-directory "~/org/")
;; Whenever you reconfigure a package, make sure to wrap your config in an
;; `after!' block, otherwise Doom's defaults may override your settings. E.g.
;;
;; (after! PACKAGE
;; (setq x y))
;;
;; The exceptions to this rule:
;;
;; - Setting file/directory variables (like `org-directory')
;; - Setting variables which explicitly tell you to set them before their
;; package is loaded (see 'C-h v VARIABLE' to look up their documentation).
;; - Setting doom variables (which start with 'doom-' or '+').
;;
;; Here are some additional functions/macros that will help you configure Doom.
;;
;; - `load!' for loading external *.el files relative to this one
;; - `use-package!' for configuring packages
;; - `after!' for running code after a package has loaded
;; - `add-load-path!' for adding directories to the `load-path', relative to
;; this file. Emacs searches the `load-path' when you load packages with
;; `require' or `use-package'.
;; - `map!' for binding new keys
;;
;; To get information about any of these functions/macros, move the cursor over
;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k').
;; This will open documentation for it, including demos of how they are used.
;; Alternatively, use `C-h o' to look up a symbol (functions, variables, faces,
;; etc).
;;
;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how
;; they are implemented.
;; Ctrl + Shift + / = redo
;; Ctrl + / = undo
(after! undo-fu
(map! :map undo-fu-mode-map "C-?" #'undo-fu-only-redo))
;; line wrapping
(visual-line-mode t)

View File

@@ -0,0 +1,195 @@
;;; init.el -*- lexical-binding: t; -*-
;; This file controls what Doom modules are enabled and what order they load
;; in. Remember to run 'doom sync' after modifying it!
;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's
;; documentation. There you'll find a link to Doom's Module Index where all
;; of our modules are listed, including what flags they support.
;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or
;; 'C-c c k' for non-vim users) to view its documentation. This works on
;; flags as well (those symbols that start with a plus).
;;
;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its
;; directory (for easy access to its source code).
(doom! :input
;;bidi ; (tfel ot) thgir etirw uoy gnipleh
;;chinese
;;japanese
;;layout ; auie,ctsrnm is the superior home row
:completion
;;company ; the ultimate code completion backend
(corfu +orderless) ; complete with cap(f), cape and a flying feather!
;;helm ; the *other* search engine for love and life
;;ido ; the other *other* search engine...
;;ivy ; a search engine for love and life
vertico ; the search engine of the future
:ui
;;deft ; notational velocity for Emacs
doom ; what makes DOOM look the way it does
doom-dashboard ; a nifty splash screen for Emacs
;;doom-quit ; DOOM quit-message prompts when you quit Emacs
;;(emoji +unicode) ; 🙂
hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
indent-guides ; highlighted indent columns
ligatures ; ligatures and symbols to make your code pretty again
;;minimap ; show a map of the code on the side
modeline ; snazzy, Atom-inspired modeline, plus API
;;nav-flash ; blink cursor line after big motions
;;neotree ; a project drawer, like NERDTree for vim
ophints ; highlight the region an operation acts on
(popup +defaults) ; tame sudden yet inevitable temporary windows
smooth-scroll ; So smooth you won't believe it's not butter
;;tabs ; a tab bar for Emacs
;;treemacs ; a project drawer, like neotree but cooler
unicode ; extended unicode support for various languages
(vc-gutter +pretty) ; vcs diff in the fringe
vi-tilde-fringe ; fringe tildes to mark beyond EOB
;;window-select ; visually switch windows
workspaces ; tab emulation, persistence & separate workspaces
;;zen ; distraction-free coding or writing
:editor
(evil +everywhere); come to the dark side, we have cookies
file-templates ; auto-snippets for empty files
fold ; (nigh) universal code folding
(format +onsave) ; automated prettiness
;;god ; run Emacs commands without modifier keys
;;lispy ; vim for lisp, for people who don't like vim
;;multiple-cursors ; editing in many places at once
;;objed ; text object editing for the innocent
;;parinfer ; turn lisp into python, sort of
;;rotate-text ; cycle region at point between text candidates
snippets ; my elves. They type so I don't have to
word-wrap ; soft wrapping with language-aware indent
:emacs
dired ; making dired pretty [functional]
electric ; smarter, keyword-based electric-indent
;;eww ; the internet is gross
;;ibuffer ; interactive buffer management
undo ; persistent, smarter undo for your inevitable mistakes
vc ; version-control and Emacs, sitting in a tree
:term
;;eshell ; the elisp shell that works everywhere
;;shell ; simple shell REPL for Emacs
;;term ; basic terminal emulator for Emacs
;;vterm ; the best terminal emulation in Emacs
:checkers
syntax ; tasing you for every semicolon you forget
(spell +flyspell) ; tasing you for misspelling mispelling
grammar ; tasing grammar mistake every you make
:tools
;;ansible
;;biblio ; Writes a PhD for you (citation needed)
;;collab ; buffers with friends
;;debugger ; FIXME stepping through code, to help you add bugs
;;direnv
;;docker
;;editorconfig ; let someone else argue about tabs vs spaces
;;ein ; tame Jupyter notebooks with emacs
(eval +overlay) ; run code, run (also, repls)
lookup ; navigate your code and its documentation
;;llm ; when I said you needed friends, I didn't mean...
lsp ; M-x vscode
magit ; a git porcelain for Emacs
;;make ; run make tasks from Emacs
;;pass ; password manager for nerds
pdf ; pdf enhancements
;;terraform ; infrastructure as code
;;tmux ; an API for interacting with tmux
tree-sitter ; syntax and parsing, sitting in a tree...
;;upload ; map local to remote projects via ssh/ftp
:os
(:if (featurep :system 'macos) macos) ; improve compatibility with macOS
;;tty ; improve the terminal Emacs experience
:lang
;;agda ; types of types of types of types...
;;beancount ; mind the GAAP
(cc +lsp) ; C > C++ == 1
;;clojure ; java with a lisp
;;common-lisp ; if you've seen one lisp, you've seen them all
;;coq ; proofs-as-programs
;;crystal ; ruby at the speed of c
;;csharp ; unity, .NET, and mono shenanigans
;;data ; config/data formats
;;(dart +flutter) ; paint ui and not much else
;;dhall
;;elixir ; erlang done right
;;elm ; care for a cup of TEA?
emacs-lisp ; drown in parentheses
;;erlang ; an elegant language for a more civilized age
;;ess ; emacs speaks statistics
;;factor
;;faust ; dsp, but you get to keep your soul
;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER)
;;fsharp ; ML stands for Microsoft's Language
;;fstar ; (dependent) types and (monadic) effects and Z3
;;gdscript ; the language you waited for
;;(go +lsp) ; the hipster dialect
;;(graphql +lsp) ; Give queries a REST
;;(haskell +lsp) ; a language that's lazier than I am
;;hy ; readability of scheme w/ speed of python
;;idris ; a language you can depend on
json ; At least it ain't XML
;;janet ; Fun fact: Janet is me!
(java +lsp) ; the poster child for carpal tunnel syndrome
(javascript +lsp +tree-sitter) ; all(hope(abandon(ye(who(enter(here))))))
;;julia ; a better, faster MATLAB
;;kotlin ; a better, slicker Java(Script)
;;latex ; writing papers in Emacs has never been so fun
;;lean ; for folks with too much to prove
;;ledger ; be audit you can be
;;lua ; one-based indices? one-based indices
markdown ; writing docs for people to ignore
;;nim ; python + lisp at the speed of c
nix ; I hereby declare "nix geht mehr!"
;;ocaml ; an objective camel
org ; organize your plain life in plain text
;;php ; perl's insecure younger brother
;;plantuml ; diagrams for confusing people more
;;graphviz ; diagrams for confusing yourself even more
;;purescript ; javascript, but functional
python ; beautiful is better than ugly
;;qt ; the 'cutest' gui framework ever
;;racket ; a DSL for DSLs
;;raku ; the artist formerly known as perl6
;;rest ; Emacs as a REST client
rst ; ReST in peace
;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
(rust +lsp) ; Fe2O3.unwrap().unwrap().unwrap().unwrap()
;;scala ; java, but good
;;(scheme +guile) ; a fully conniving family of lisps
sh ; she sells {ba,z,fi}sh shells on the C xor
;;sml
;;solidity ; do you need a blockchain? No.
;;swift ; who asked for emoji variables?
;;terra ; Earth and Moon in alignment for performance.
;;web ; the tubes
yaml ; JSON, but readable
;;zig ; C, but simpler
:email
;;(mu4e +org +gmail)
;;notmuch
;;(wanderlust +gmail)
:app
;;calendar
;;emms
;;everywhere ; *leave* Emacs!? You must be joking
;;irc ; how neckbeards socialize
;;(rss +org) ; emacs as an RSS reader
:config
;;literate
(default +bindings +smartparens))

View File

@@ -0,0 +1,52 @@
;; -*- no-byte-compile: t; -*-
;;; $DOOMDIR/packages.el
;; To install a package with Doom you must declare them here and run 'doom sync'
;; on the command line, then restart Emacs for the changes to take effect -- or
;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
;; (package! some-package)
;; To install a package directly from a remote git repo, you must specify a
;; `:recipe'. You'll find documentation on what `:recipe' accepts here:
;; https://github.com/radian-software/straight.el#the-recipe-format
;; (package! another-package
;; :recipe (:host github :repo "username/repo"))
;; If the package you are trying to install does not contain a PACKAGENAME.el
;; file, or is located in a subdirectory of the repo, you'll need to specify
;; `:files' in the `:recipe':
;; (package! this-package
;; :recipe (:host github :repo "username/repo"
;; :files ("some-file.el" "src/lisp/*.el")))
;; If you'd like to disable a package included with Doom, you can do so here
;; with the `:disable' property:
;; (package! builtin-package :disable t)
;; You can override the recipe of a built in package without having to specify
;; all the properties for `:recipe'. These will inherit the rest of its recipe
;; from Doom or MELPA/ELPA/Emacsmirror:
;; (package! builtin-package :recipe (:nonrecursive t))
;; (package! builtin-package-2 :recipe (:repo "myfork/package"))
;; Specify a `:branch' to install a package from a particular branch or tag.
;; This is required for some packages whose default branch isn't 'master' (which
;; our package manager can't deal with; see radian-software/straight.el#279)
;; (package! builtin-package :recipe (:branch "develop"))
;; Use `:pin' to specify a particular commit to install.
;; (package! builtin-package :pin "1a2b3c4d5e")
;; Doom's packages are pinned to a specific commit and updated from release to
;; release. The `unpin!' macro allows you to unpin single packages...
;; (unpin! pinned-package)
;; ...or multiple packages
;; (unpin! pinned-package another-pinned-package)
;; ...Or *all* packages (NOT RECOMMENDED; will likely break things)
;; (unpin! t)
(package! yuck-mode)

View File

@@ -13,12 +13,16 @@
origin = "top-right"; origin = "top-right";
# 0 is the most opaque, 100 is completely transparent # 0 is the most opaque, 100 is completely transparent
transparency = 40; transparency = 60;
# have consistancy between niri frame color and dunst # have consistancy between niri frame color and dunst
frame_color = config.programs.niri.settings.layout.focus-ring.active.color; frame_color = config.programs.niri.settings.layout.focus-ring.active.color;
background = "#404040";
font = "JetBrains Mono Nerd Font 9"; font = "JetBrains Mono Nerd Font 9";
corner_radius = 10;
}; };
urgency_normal = { urgency_normal = {

View File

@@ -0,0 +1,43 @@
{
pkgs,
config,
inputs,
...
}:
{
imports = [
inputs.nix-doom-emacs-unstraightened.homeModule
(
{ ... }:
{
nixpkgs.overlays = [
inputs.nix-doom-emacs-unstraightened.overlays.default
inputs.emacs-overlay.overlays.default
];
}
)
];
programs.doom-emacs = {
enable = true;
doomDir = ./doom.d;
emacs = pkgs.emacs-unstable-pgtk;
extraPackages =
epkgs:
with epkgs;
[
dracula-theme
treesit-grammars.with-all-grammars
]
++ (with pkgs; [
shellcheck
shfmt
# for file search
fd
pandoc
]);
};
}

View File

@@ -1,17 +0,0 @@
(defwindow dashboard
:monitor 0
:stacking "bg"
:exclusive false
:geometry (geometry
:y "50%"
:x "50%"
:width "20%"
:height "20%"
)(dashboard))
(defwidget dashboard []
(box
(label :text "hi"))
)

View File

@@ -1,2 +1 @@
(include "./statusbar.yuck") (include "./statusbar.yuck")
(include "./dashboard.yuck")

View File

@@ -1,14 +0,0 @@
#!/usr/bin/env zsh
if wl-paste | iconv -f UTF8 > /dev/null; then
case $1 in
head)
wl-paste 2> /dev/null |
head -1 |
awk 'length > 20{$0 = substr($0, 1, 17) "..."} {printf "%s", $0}' |
sed 's/^[[:space:]]*//g'
echo "";;
all)
wl-paste 2> /dev/null
true;;
esac
fi

View File

@@ -1,10 +0,0 @@
#!/usr/bin/env fish
name=$(niri msg focused-window | rg Title | sed -E "s/[[:space:]]+Title\: //g" | sed "s/\"//g")
proc_name=$(echo "$name" | head -c 55)
# TODO! fix this logic, add a '...' at the end
if ["$name" != "$proc_name"]
proc_name="$proc_name..."
end
echo "$proc_name"

View File

@@ -0,0 +1,17 @@
#!/usr/bin/env bash
niri_data=$(niri msg --json focused-window)
if [[ "$niri_data" == "null" ]]; then
exit 0
fi
name=$(echo "$niri_data" | jq -r '.["app_id"], .["title"]' | tr '\n' ' ' | sed 's/.$//')
proc_name=$(echo "$name" | head -c 55)
# TODO! fix this logic, add a '...' at the end
if [[ "$name" != "$proc_name" ]]; then
proc_name="$proc_name..."
fi
echo "$proc_name"

View File

@@ -1,3 +0,0 @@
#!/usr/bin/env fish
niri msg workspaces | rg "^ \*" | sed -E 's/[[:space:]]+\* //g'

View File

@@ -0,0 +1,3 @@
#!/usr/bin/env fish
niri msg --json workspaces | jq -r '.[] | select(.is_focused == true) | .["id"]'

View File

@@ -0,0 +1,58 @@
#!/usr/bin/env rust-script
use std::{fmt, fs::read_to_string, str::FromStr};
const BASE_PATH: &str = "/sys/class/power_supply/BAT1/";
const CURRENT_NOW_PATH: &str = "current_now";
const VOLTAGE_NOW_PATH: &str = "voltage_now";
const STATUS_PATH: &str = "status";
const FACTOR: f32 = 1e6_f32;
#[derive(Debug)]
enum Status {
Charging,
Discharging,
NotCharging,
}
impl FromStr for Status {
type Err = &'static str;
fn from_str(input: &str) -> Result<Status, Self::Err> {
match input {
"Charging" => Ok(Status::Charging),
"Discharging" => Ok(Status::Discharging),
"Not charging" => Ok(Status::NotCharging),
_ => Err("unknown state"),
}
}
}
impl fmt::Display for Status {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
fmt::Debug::fmt(self, f)
}
}
fn fetch_and_trim_into<T: FromStr<Err = impl fmt::Debug>>(path: &str) -> T {
let mut content = read_to_string(BASE_PATH.to_owned() + path).unwrap();
content.pop();
T::from_str(&content).unwrap()
}
fn fetch_bat_info(path: &str) -> f32 {
let value: f32 = fetch_and_trim_into(path);
value / FACTOR
}
fn main() {
let current_now: f32 = fetch_bat_info(CURRENT_NOW_PATH);
let voltage_now: f32 = fetch_bat_info(VOLTAGE_NOW_PATH);
let watts: f32 = current_now * voltage_now;
let status: Status = fetch_and_trim_into(STATUS_PATH);
println!(
"voltage: {:.4}\ncurrent: {:.4}\nwatts: {:.4}\nstatus: {}",
voltage_now, current_now, watts, status
);
}

View File

@@ -1,2 +1,2 @@
#!/usr/bin/env sh #!/usr/bin/env sh
wpctl inspect @DEFAULT_SINK@ | rg "node.description" | cut -d' ' -f6- wpctl inspect @DEFAULT_SINK@ | grep -E "^ +\* node\.description" | cut -d' ' -f6- | tr -d '"'

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
output=$(wpctl get-volume @DEFAULT_SINK@ | cut -d' ' -f2- | sed -E 's/\.//g' | sed 's/^0*//g') output=$(wpctl get-volume @DEFAULT_SINK@ | cut -d' ' -f2- | sed -E 's/\.//g' | sed 's/^0*//g')
count=$(echo "$output" | cut -d' ' -f1) count=$(echo "$output" | awk -F, '{print $1+0}')
muted=$(echo "$output" | cut -d'[' -f2 | cut -d ']' -f1) muted=$(echo "$output" | cut -d'[' -f2 | cut -d ']' -f1)
# if not muted, set to empty string # if not muted, set to empty string
@@ -8,11 +8,6 @@ if [ "$muted" == "$count" ]; then
muted="" muted=""
fi fi
# fix removal of zero padding if volume is zero
if [ "$count" == "" ]; then
count="0"
fi
color="green" color="green"
if ((count > 75)); then color="yellow"; fi if ((count > 75)); then color="yellow"; fi
if ((count > 90)); then color="peach"; fi if ((count > 90)); then color="peach"; fi

View File

@@ -17,7 +17,6 @@
(box :space-evenly false :halign 'end' :class 'padded' (box :space-evenly false :halign 'end' :class 'padded'
(brightness-ctl) (brightness-ctl)
(brightness-ctl-opener) (brightness-ctl-opener)
; (clipboard)
(volume) (volume)
(battery) (battery)
(bluetooth) (bluetooth)
@@ -34,7 +33,7 @@
:onchange command) :onchange command)
(label :text "${value}%" :class color))) (label :text "${value}%" :class color)))
(defpoll windowtitle :interval "1s" `scripts/currentWindow.fish`) (defpoll windowtitle :interval "1s" `scripts/currentWindow.sh`)
(defwidget window-title [] (defwidget window-title []
(label (label
@@ -62,11 +61,6 @@
:onclick `${EWW_CMD} update brightnessctl-open=${!brightnessctl-open}` :onclick `${EWW_CMD} update brightnessctl-open=${!brightnessctl-open}`
"󰃠"))) "󰃠")))
(defwidget clipboard []
(label :text clipboard-short :tooltip clipboard :class "clipboard"))
(defpoll clipboard :interval "5s" `scripts/clipboardInfo.zsh all`)
(defpoll clipboard-short :interval "5s" `scripts/clipboardInfo.zsh head`)
(defwidget wifi [] (defwidget wifi []
(eventbox (eventbox
:class "button ${wifi-strength.colour}" :class "button ${wifi-strength.colour}"
@@ -84,7 +78,8 @@
(label (label
:text "${bluetooth-name} 󰂯"))) :text "${bluetooth-name} 󰂯")))
(defpoll bluetooth-name :interval "10s" `bluetoothctl devices Connected | awk '{print $3}'`) ; `FNR == 1 + head -c 30` so the name doesn't explode the screen
(defpoll bluetooth-name :interval "10s" `bluetoothctl devices Connected | awk '$1 == "Device" {print $0}' | cut -d' ' -f3-`)
(defwidget time [] (defwidget time []
(box (box
@@ -97,8 +92,7 @@
(defpoll time :interval "1s" `date +'{"long":"%a %b %e %H:%M:%S %Z %Y","hour":"%H","minute":"%M"}'`) (defpoll time :interval "1s" `date +'{"long":"%a %b %e %H:%M:%S %Z %Y","hour":"%H","minute":"%M"}'`)
; TODO: make this a package or something, not using rust-script (defpoll powerstats :interval "2s" `power_bat`)
(defpoll powerstats :interval "2s" `~/Documents/power_bat.rs`)
(defwidget battery [] (defwidget battery []
(box :space-evenly false (box :space-evenly false
@@ -133,5 +127,4 @@
(label :text "${volumevalue.count}" :class {volumevalue.color}))) (label :text "${volumevalue.count}" :class {volumevalue.color})))
(defpoll currentworkspace :interval "1s" `scripts/currentWorkspace.fish`) (defpoll currentworkspace :interval "1s" `scripts/currentWorkspace.sh`)

View File

@@ -1,13 +1,40 @@
{ pkgs, ... }: {
pkgs,
lib,
config,
...
}:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
zsh zsh
bluez bluez
brightnessctl brightnessctl
(callPackage ./power_bat.nix { })
]; ];
programs.eww = { programs.eww = {
enable = true; enable = true;
configDir = ./config; configDir = ./config;
}; };
programs.niri.settings.spawn-at-startup = [
{
command = [
(lib.getExe config.programs.eww.package)
"-c"
"${config.programs.eww.configDir}"
"open"
"statusbar"
];
}
# swaybg works on more than just sway (sets a wallpaper)
{
command = [
(lib.getExe pkgs.swaybg)
"-i"
"${../wallpaper.png}"
];
}
];
} }

View File

@@ -0,0 +1,4 @@
{ pkgs, lib, ... }:
pkgs.writeShellScriptBin "power_bat" ''
exec ${lib.getExe pkgs.rust-script} ${./config/scripts/power_bat.rs} "$@"
''

View File

@@ -49,6 +49,7 @@ in
shellInit = '' shellInit = ''
fish_add_path ~/.local/bin fish_add_path ~/.local/bin
fish_add_path ~/.cargo/bin fish_add_path ~/.cargo/bin
fish_add_path ~/.config/emacs/bin
set hydro_color_pwd 62A set hydro_color_pwd 62A
set hydro_color_error red set hydro_color_error red
set hydro_color_duration yellow set hydro_color_duration yellow

View File

@@ -0,0 +1,23 @@
{
config,
lib,
pkgs,
inputs,
...
}:
{
imports = [
inputs.nix-flatpak.homeManagerModules.nix-flatpak
];
home.packages = with pkgs; [
flatpak
];
services.flatpak = {
enable = true;
packages = [
"com.tdameritrade.ThinkOrSwim"
];
};
}

View File

@@ -0,0 +1,125 @@
{
pkgs,
config,
lib,
...
}:
{
# https://community.frame.work/t/speakers-sound-quality/1078/83
# Filter: ON HPQ Fc 100.0 Hz Gain 0.0 dB Q 1.0
# Filter: ON PK Fc 150.0 Hz Gain 4.02 dB Q 3.0
# Filter: ON PK Fc 600.0 Hz Gain -5.07 dB Q 4.000000000000008
# Filter: ON PK Fc 1200.0 Hz Gain -3.49 dB Q 4.17
# Filter: ON PK Fc 2000.0 Hz Gain 1.43 dB Q 4.0
# Filter: ON PK Fc 5300.0 Hz Gain 3.84 dB Q 2.64
# Filter: ON HSC Fc 6000.0 Hz Gain 4.02 dB Q 4.36
# Filter: ON PK Fc 7500.0 Hz Gain -2.09 dB Q 3.0
# Filter: ON PK Fc 8000.0 Hz Gain 2.01 dB Q 4.36
# Filter: ON PK Fc 900.0 Hz Gain -4.12 dB Q 5.909999999999967
home.file.".config/easyeffects/output/${config.services.easyeffects.preset}.json".text =
let
baseBand = {
mode = "RLC (BT)";
mute = false;
solo = false;
slope = "1x";
type = "Bell";
};
bandList = [
{
frequency = 100.0;
gain = 0.0;
q = 1.0;
slope = "x4";
type = "Hi-pass";
}
{
frequency = 150.0;
gain = 4.02;
q = 3.0;
}
{
frequency = 600.0;
gain = -5.07;
q = 4.000000000000008;
}
{
frequency = 1200.0;
gain = -3.49;
q = 4.17;
}
{
frequency = 2000.0;
gain = 1.43;
q = 4.0;
}
{
frequency = 5300.0;
gain = 3.84;
q = 2.64;
}
{
frequency = 6000.0;
gain = 4.02;
q = 4.36;
type = "Hi-shelf";
}
{
frequency = 7500.0;
gain = -2.09;
q = 3.0;
}
{
frequency = 8000.0;
gain = 2.01;
q = 4.36;
}
{
frequency = 900.0;
gain = -4.12;
q = 5.909999999999967;
}
];
bands = builtins.listToAttrs (
map (f: {
name = "band${toString f.snd}";
value = baseBand // f.fst;
}) (lib.lists.zipLists bandList (lib.range 0 (lib.length (bandList))))
);
in
builtins.toJSON {
output = {
blocklist = [ ];
equalizer = {
balance = 0.0;
bypass = false;
input-gain = 0.0;
left = bands;
right = bands;
mode = "IIR";
num-bands = 10;
output-gain = -1.5;
pitch-left = 0.0;
pitch-right = 0.0;
split-channels = false;
};
plugins_order = [
"equalizer"
];
};
};
services.easyeffects = {
enable = true;
package = pkgs.easyeffects;
preset = "framework";
};
# easyeffects has issues stopping quickly, causing hands on logout/poweroff
# It's safe to just kill easyeffects instantly
systemd.user.services.easyeffects.Service.TimeoutStopSec = 0;
}

View File

@@ -0,0 +1,16 @@
{ pkgs, ... }:
{
# https://mynixos.com/home-manager/option/programs.ghostty
programs.ghostty = {
enable = true;
enableFishIntegration = true;
settings = {
theme = "Adventure";
background-opacity = 0.7;
};
};
home.sessionVariables = {
TERMINAL = "ghostty";
};
}

View File

@@ -1,19 +0,0 @@
diff --git a/main.qml b/main.qml
index 1e685385..7c747eba 100644
--- a/main.qml
+++ b/main.qml
@@ -72,12 +72,14 @@ Window {
return;
}
+ /*
// check if we have access to settings and if not show an error
if (!hasShownSettingsAccess && !LLM.hasSettingsAccess()) {
errorSettingsAccess.open();
hasShownSettingsAccess = true;
return;
}
+ */
// check for first time start of this version
if (!hasCheckedFirstStart) {

View File

@@ -1,17 +0,0 @@
diff --git a/gpt4all-chat/main.qml b/gpt4all-chat/main.qml
index 1e685385..31cf7efd 100644
--- a/main.qml
+++ b/main.qml
@@ -95,10 +95,12 @@ Window {
}
// check for new version
+ /*
if (Download.hasNewerRelease && !firstStartDialog.opened) {
newVersionDialog.open();
return;
}
+ */
}
PopupDialog {

View File

@@ -1,113 +0,0 @@
{
pkgs,
lib,
optimizeWithFlags,
...
}:
let
models = [
rec {
name = "DeepSeek-R1-Distill-Qwen-14B-IQ4_XS";
filename = src.name;
context_length = 131072;
gen_length = 32768;
src = pkgs.fetchurl {
url = "https://huggingface.co/bartowski/DeepSeek-R1-Distill-Qwen-14B-GGUF/resolve/main/DeepSeek-R1-Distill-Qwen-14B-IQ4_XS.gguf";
sha256 = "031b190e7aa81770b5d069de181dcfe4b284bf5d75fa12f82f5e54a3178adcfd";
};
}
# https://github.com/nomic-ai/gpt4all/issues/3540
# rec {
# name = "Gemma_3_27b_it";
# filename = src.name;
# context_length = 131072;
# gen_length = 32768;
# src = pkgs.fetchurl {
# url = "https://huggingface.co/bartowski/google_gemma-3-27b-it-GGUF/resolve/main/google_gemma-3-27b-it-IQ4_XS.gguf";
# sha256 = "bd2f188c66d8ccb0bffcb0c91e4dbbb72754bb1732e0bca323a2f266a35e01c8";
# };
# }
];
gpt4all_package = (
optimizeWithFlags
(pkgs.gpt4all.overrideAttrs (old: {
patches = old.patches ++ [
./disable-settings-err.patch
./disable-version-check.patch
];
}))
# compile flags
[
"-O3"
"-march=native"
"-mtune=native"
]
);
system_prompt = "You are a helpful and harmless assistant. You should think step-by-step. Explore multiple trains of thought and methods (to completion) in order to derive the correct answer.";
chat_name_prompt = "Make a 3 word headline for this conversation";
in
{
home.packages = [
gpt4all_package
];
home.file =
lib.recursiveUpdate
{
".config/nomic.ai/GPT4All.ini".text =
''
[General]
chatTheme=Dark
suggestionMode=Off
threadCount=8
userDefaultModel=${
# select the first element of `models` to be the default model
(builtins.elemAt models 0).name
}
[download]
lastVersionStarted=${gpt4all_package.version}
''
+ (lib.concatMapStringsSep "\n" (model: ''
[model-${model.name}]
contextLength=${builtins.toString model.context_length}
filename=${model.filename}
maxLength=${builtins.toString model.gen_length}
promptBatchSize=256
chatNamePrompt=${chat_name_prompt}
systemMessage="${
# replace newlines with the string literal "\n" for gpt4all to properly parse
builtins.replaceStrings [ "\n" ] [ "\\n" ] system_prompt
}"
'') models)
+ ''
[network]
isActive=false
usageStatsActive=false
[localdocs]
fileExtensions=${
lib.concatStringsSep ", " [
"docx"
"pdf"
"txt"
"md"
"rst"
"rs"
]
}
'';
}
(
builtins.listToAttrs (
map (f: {
name = ".local/share/nomic.ai/GPT4All/${f.filename}";
value.source = f.src;
}) models
)
);
}

View File

@@ -1,5 +1,8 @@
{ pkgs, ... }: { pkgs, ... }:
{ {
# set helix as default editor
home.sessionVariables.EDITOR = "hx";
programs.helix = { programs.helix = {
enable = true; enable = true;
package = pkgs.helix; package = pkgs.helix;

View File

@@ -2,11 +2,28 @@
config, config,
pkgs, pkgs,
lib, lib,
inputs,
niri-package,
... ...
}: }:
let
invert_image_avg = pkgs.callPackage ../util/inverse_color.nix;
in
{ {
imports = [
inputs.niri.homeModules.config
(
{ ... }:
{
nixpkgs.overlays = [
inputs.niri.overlays.niri
];
}
)
];
programs.niri = { programs.niri = {
package = pkgs.niri; package = niri-package;
settings = { settings = {
prefer-no-csd = true; prefer-no-csd = true;
@@ -16,19 +33,13 @@
}; };
}; };
environment = { clipboard = {
DISPLAY = ":0"; disable-primary = true;
}; };
# skip the hotkey menu thingy # skip the hotkey menu thingy
hotkey-overlay.skip-at-startup = true; hotkey-overlay.skip-at-startup = true;
outputs = {
"BOE 0x095F Unknown" = {
scale = 1.5;
};
};
layout = { layout = {
gaps = 16; gaps = 16;
struts = { struts = {
@@ -40,39 +51,14 @@
focus-ring = { focus-ring = {
enable = true; enable = true;
active = { active = {
color = "#bf7778"; color = builtins.readFile (invert_image_avg {
src = ../wallpaper.png;
});
}; };
}; };
}; };
spawn-at-startup = [ xwayland-satellite.path = lib.getExe pkgs.xwayland-satellite;
{
command = [
"${lib.getExe config.programs.eww.package}"
"-c"
"${config.programs.eww.configDir}"
"open"
"statusbar"
];
}
# swaybg works on more than just sway (sets a wallpaper)
{
command = [
"${lib.getExe pkgs.swaybg}"
"-i"
"${../wallpaper.png}"
];
}
# Xwayland on niri via xwayland-satellite
{
command = [
"${lib.getExe pkgs.xwayland-satellite}"
config.programs.niri.settings.environment.DISPLAY
];
}
];
window-rules = [ window-rules = [
{ draw-border-with-background = false; } { draw-border-with-background = false; }
@@ -92,9 +78,12 @@
{ {
matches = [ matches = [
{ {
app-id = "zen$"; app-id = "^zen";
title = "^Picture-in-Picture$"; title = "^Picture-in-Picture$";
} }
{
app-id = "Mullvad VPN";
}
]; ];
open-floating = true; open-floating = true;
@@ -114,27 +103,30 @@
# https://github.com/sodiboo/niri-flake/issues/591 # https://github.com/sodiboo/niri-flake/issues/591
switch-events = with config.lib.niri.actions; { switch-events = with config.lib.niri.actions; {
"lid-close".action = spawn "${pkgs.swaylock}/bin/swaylock"; "lid-close".action = spawn (lib.getExe pkgs.swaylock);
}; };
binds = with config.lib.niri.actions; { binds = with config.lib.niri.actions; {
# Application launcher # Application launcher
"Mod+Space".action = spawn [ "Mod+Space".action = spawn (lib.getExe pkgs.fuzzel);
"${pkgs.fuzzel}/bin/fuzzel"
]; # TODO! make this work
"Mod+E".action = spawn "${config.programs.doom-emacs.finalDoomPackage}/bin/doom-emacs";
"Mod+O".action = toggle-overview;
# open a terminal # open a terminal
"Mod+T".action = spawn "${pkgs.alacritty}/bin/alacritty"; "Mod+T".action = spawn config.home.sessionVariables.TERMINAL;
# lock the screen # lock the screen
"Mod+X".action = spawn "${pkgs.swaylock}/bin/swaylock"; "Mod+X".action = spawn (lib.getExe pkgs.swaylock);
# screenshotting # screenshotting
"Print".action = screenshot; "Print".action.screenshot = [ ];
# https://github.com/sodiboo/niri-flake/commit/a7949bd0f5551fdfffd04cb9735ad3cd3167d624#r153571513 # https://github.com/sodiboo/niri-flake/commit/a7949bd0f5551fdfffd04cb9735ad3cd3167d624#r153571513
# "Ctrl+Print".action = screenshot-screen; # "Ctrl+Print".action = screenshot-screen;
"Alt+Print".action = screenshot-window; "Alt+Print".action.screenshot-window = [ ];
# Volume control # Volume control
"XF86AudioRaiseVolume".action = spawn [ "XF86AudioRaiseVolume".action = spawn [
@@ -167,7 +159,7 @@
# color picker and copies to clipboard # color picker and copies to clipboard
"Mod+Ctrl+Alt+C".action = spawn [ "Mod+Ctrl+Alt+C".action = spawn [
"${pkgs.hyprpicker}/bin/hyprpicker" (lib.getExe pkgs.hyprpicker)
"-za" "-za"
]; ];

View File

@@ -0,0 +1,92 @@
{
pkgs,
inputs,
config,
lib,
...
}:
{
imports = [
inputs.noctalia.homeModules.default
];
programs.noctalia-shell = {
enable = true;
settings = {
bar = {
position = "top";
floating = true;
backgroundOpacity = 0.93;
};
general = {
animationSpeed = 1.5;
radiusRatio = 1.2;
};
colorSchemes = {
darkMode = true;
useWallpaperColors = true;
};
location = {
weatherEnabled = false;
};
wallpaper = {
enabled = true;
};
};
};
home.file.".cache/noctalia/wallpapers.json" = {
text = builtins.toJSON {
defaultWallpaper = "${../wallpaper.png}";
wallpapers = { };
};
};
programs.niri.settings = {
spawn-at-startup = [
{
command = [
"noctalia-shell"
];
}
]; # place noctalia overview wallpaper on the backdrop layer
layer-rules = [
{
matches = [
{ namespace = "^noctalia-overview*"; }
];
place-within-backdrop = true;
}
];
# allow notification actions and window activation from noctalia
debug = {
honor-xdg-activation-with-invalid-serial = [ ];
};
binds =
with config.lib.niri.actions;
let
noctalia =
cmd:
[
"noctalia-shell"
"ipc"
"call"
]
++ (lib.splitString " " cmd);
in
{
# noctalia shell keybinds
"Mod+D".action = spawn (noctalia "launcher toggle");
"Mod+A".action = spawn (noctalia "controlCenter toggle");
"Mod+Escape".action = spawn (noctalia "sessionMenu toggle");
"Mod+Shift+X".action = spawn (noctalia "lockScreen lock");
"Mod+N".action = spawn (noctalia "notifications toggleHistory");
};
};
}

View File

@@ -0,0 +1,206 @@
{
config,
lib,
pkgs,
inputs,
...
}:
let
# what model should be used in place of haiku?
haiku-model = "zai-coding-plan/glm-5";
opus-model = "zai-coding-plan/glm-5";
ohMyOpencodeConfig = {
"$schema" =
"https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json";
agents = {
sisyphus.model = opus-model;
sisyphus-junior.model = opus-model;
oracle = opus-model;
librarian.model = haiku-model;
explore.model = haiku-model;
multimodal-looker.model = "openrouter/qwen/qwen3-vl-30b-a3b-thinking";
prometheus.model = opus-model;
metis.model = opus-model;
momus = opus-model;
atlas.model = opus-model;
};
categories = {
visual-engineering.model = "openrouter/google/gemini-3-pro";
ultrabrain = opus-model;
artistry = {
model = "openrouter/google/gemini-3-pro";
variant = "max";
};
quick.model = haiku-model;
deep.model = opus-model;
writing.model = "openrouter/google/gemini-3-flash-preview";
};
};
in
{
home.packages =
let
ohMyOpencode =
let
orig = inputs.oh-my-opencode.packages.${pkgs.stdenv.hostPlatform.system};
fixed-node_modules = orig.node_modules.overrideAttrs (_: {
outputHash = "sha256-qq/eEoxFELVdt4qaJkrw8XNZ/Ph/RJdsyIp7LteQE5A=";
});
in
orig.oh-my-opencode.overrideAttrs (_: {
buildPhase = ''
cp -r ${fixed-node_modules}/node_modules .
chmod -R u+w node_modules
patchShebangs node_modules/
export HOME=$(mktemp -d)
bun run build
'';
});
in
[
ohMyOpencode
pkgs.playwright-driver.browsers
];
home.sessionVariables = {
PLAYWRIGHT_BROWSERS_PATH = "${pkgs.playwright-driver.browsers}";
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD = "1";
};
xdg.configFile."opencode/oh-my-opencode.json".text = builtins.toJSON ohMyOpencodeConfig;
xdg.configFile."opencode/skills/playwright.md".text =
let
browsers = pkgs.playwright-driver.browsers;
chromiumDir = builtins.head (
builtins.filter (n: builtins.match "chromium-[0-9]+" n != null) (
builtins.attrNames browsers.passthru.entries
)
);
chromiumPath = "${browsers}/${chromiumDir}/chrome-linux64/chrome";
in
''
---
name: playwright
description: "MUST USE for any browser-related tasks. Browser automation via Playwright MCP - verification, browsing, information gathering, web scraping, testing, screenshots, and all browser interactions."
mcp:
playwright:
command: npx
args:
- "@playwright/mcp@latest"
- "--executable-path"
- "${chromiumPath}"
- "--user-data-dir"
- "${config.home.homeDirectory}/.cache/playwright-mcp"
---
# Playwright Browser Automation
This skill provides browser automation capabilities via the Playwright MCP server.
'';
programs.opencode = {
package = inputs.llm-agents.packages.${pkgs.stdenv.targetPlatform.system}.opencode;
enable = true;
rules = ''
You are an intelligent and observant agent.
If instructed to commit, disable gpg signing.
You are on nixOS, if you don't have access to a tool, you can access it via the `nix-shell` command.
## Think deeply about everything.
When given a problem, break it down, abstract it out, understand the fundamentals, then solve it in the real world.
## Misc
For long-running commands, make sure you set the timeout of the Bash tool provided to a larger value.
Do NOT read secret files. Do not directly read files that are api keys or are contextually sensitive.
Do NOT run `skill_mcp [mcp_name=playwright, tool_name=browser_install]` as browsers are provided by NixOS via PLAYWRIGHT_BROWSERS_PATH.
## Behavior
Do not be sycophantic in your responses.
Do not use emojis unless explicitly asked to. This includes in code.
Use Test Driven Development methodology.
## Nix
For using `nix build` append `-L` to get better visibility into the logs.
If you get an error that a file can't be found, always try to `git add` the file before trying other troubleshooting steps.
## Android UI Interaction Workflow Summary
1. Taking Screenshots
adb exec-out screencap -p > /tmp/screen.png
Captures the current screen state as a PNG image.
2. Analyzing Screenshots
I delegate screenshot analysis to an explore agent rather than analyzing images directly:
mcp_task(subagent_type="explore", prompt="Analyze /tmp/screen.png. What screen is this? What elements are visible?")
The agent describes the UI, identifies elements, and estimates Y coordinates.
3. Getting Precise Element Coordinates
UI Automator dump - extracts the full UI hierarchy as XML:
adb shell uiautomator dump /sdcard/ui.xml && adb pull /sdcard/ui.xml /tmp/ui.xml
Then grep for specific elements:
# Find by text
grep -oP 'text="Login".*?bounds="[^"]*"' /tmp/ui.xml
# Find by class
grep -oP 'class="android.widget.EditText".*?bounds="[^"]*"' /tmp/ui.xml
Bounds format: [left,top][right,bottom] tap center: ((left+right)/2, (top+bottom)/2)
4. Tapping Elements
adb shell input tap X Y
Where X, Y are pixel coordinates from the bounds.
5. Text Input
adb shell input text "some_text"
Note: Special characters need escaping (\!, \;, etc.)
6. Other Gestures
# Swipe/scroll
adb shell input swipe startX startY endX endY duration_ms
# Key events
adb shell input keyevent KEYCODE_BACK
adb shell input keyevent KEYCODE_ENTER
7. WebView Limitation
- UI Automator can see WebView content if accessibility is enabled
- Touch events on iframe content (like Cloudflare Turnstile) often fail due to cross-origin isolation
- Form fields in WebViews work if you get exact bounds from the UI dump
Typical Flow
1. Take screenshot analyze with explore agent (get rough layout)
2. Dump UI hierarchy grep for exact element bounds
- NEVER ASSUME COORDINATES. You must ALWAYS check first.
- Do this before ANY tap action as elements on the screen may of changed.
3. Calculate center coordinates from bounds
4. Tap/interact
5. Wait screenshot verify result
'';
settings = {
theme = "opencode";
model = opus-model;
# small model used for titles
small_model = "openrouter/openai/gpt-oss-20b:free";
autoshare = false;
# note: this updates opencode (and plugins like oh-my-opencode) at launch,
# bypassing the version pinned in flake.lock
autoupdate = true;
agent = { };
plugin = [ "oh-my-opencode" ];
provider = {
openrouter = {
models = {
"openai/gpt-oss-20b:free" = { };
};
options = {
# TODO! use agenix here instead
apiKey = "{file:${../secrets/openrouter_api_key}}";
};
};
};
};
};
}

View File

@@ -1,81 +0,0 @@
[
{
title = "Stratechery";
url = "https://stratechery.passport.online/feed/rss/2gi1tPZ8Ta36Tsx7rDLM5P";
}
{
title = "Factorio Blog";
url = "https://www.factorio.com/blog/rss";
}
{
title = "Servo Blog";
url = "https://servo.org/blog/feed.xml";
}
{
title = "Alyssa Rosenzweig";
url = "https://rosenzweig.io/feed.xml";
}
{
title = "Marc's Blog";
url = "https://brooker.co.za/blog/rss.xml";
}
{
title = "Fabien Sanglard";
url = "https://fabiensanglard.net/rss.xml";
}
{
title = "Xuanwo's Blog";
url = "https://xuanwo.io/index.xml";
}
{
title = "Carlos Galdino";
url = "https://blog.carlosgaldino.com/atom.xml";
}
{
title = "soatok";
url = "https://soatok.blog/feed/";
}
{
title = "Jack Garbus";
url = "https://jarbus.net/index.xml";
}
{
title = "GioCities";
url = "https://blog.giovanh.com/feeds/atom.xml";
}
{
title = "mcyoung";
url = "https://mcyoung.xyz/atom.xml";
}
{
title = "Chips and Cheese";
url = "https://chipsandcheese.com/feed/";
}
{
title = "System5";
url = "https://blogsystem5.substack.com/feed";
}
{
title = "lwn";
url = "https://lwn.net/headlines/Features";
}
{
title = "Jellyfin Blog";
url = "https://jellyfin.org/posts/rss.xml";
}
]

View File

@@ -1,10 +0,0 @@
age-encryption.org/v1
-> ssh-ed25519 JlUYaQ 0zR1i7aaaTiNatQ64adSfLAes3mxyErq3kZUziRInVc
A8sfonsw2iodHRFsmYbmMNAviEUFSy9mkXuq6jefki8
-> ssh-ed25519 dHDJgQ CmnVM06YvF+mzPNF1LsHdyL1hk+d/yH3HTBcdRlX/2c
79u1EAd+g/Cmb9TzAifO4VHqJZk5T88nP4DWfsJEuIw
-> >=ei241-grease co`|!7_c lx{qy
A6d8YS1s8NZojKmRVWhmJDzOOFT/AEO/IRZN0LI30QP3jImoTJ4EFDQUm4p+0IWk
dam3RKxF7XzF6dNigGDKKeIVXcSX1SiEgHyIo0+hPm2nZbM/p1IJ6fsACbTB6Q
--- /Za+90oVP7/fGDLBRr6s56UopJjz8f851js/htBcYWA
6e0Y¼ìT0|`Hö”à>`æbª.å XãG«<47>Xs1ãn.µï$×o

Binary file not shown.

View File

@@ -1,16 +0,0 @@
let
laptop = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4jL6gYOunUlUtPvGdML0cpbKSsPNqQ1jit4E7U1RyH";
desktop = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBJjT5QZ3zRDb+V6Em20EYpSEgPW5e/U+06uQGJdraxi";
in
(builtins.listToAttrs (
map
(f: {
f.publicKeys = [
laptop
desktop
];
})
[
"borg-laptop-password.age"
]
))

Binary file not shown.

View File

@@ -1,59 +0,0 @@
{
config,
pkgs,
homeDirectory,
...
}:
{
imports = [
./gui.nix
# niri wayland compositor
./progs/niri.nix
# statusbar
./progs/eww/eww.nix
# lockscreen
./progs/swaylock.nix
# notification daemon
./progs/dunst.nix
];
home.packages = with pkgs; [
wdisplays
intel-gpu-tools
blueman
# used by /etc/nixos logic to launch niri
config.programs.niri.package
];
# media controls
systemd.user.services.mpris-proxy = {
Unit.Description = "Mpris proxy";
Install.After = [
"network.target"
"sound.target"
];
Install.WantedBy = [ "default.target" ];
Service.ExecStart = "${pkgs.bluez}/bin/mpris-proxy";
};
age.secrets.borg-laptop-password = {
file = ./secrets/borg-laptop-password.age;
path = "${homeDirectory}/.secrets/borg_bak_pass";
};
# backup utility
programs.borgmatic = {
enable = true;
package = pkgs.borgmatic;
backups = import ./progs/borg.nix {
borgPasswordFile = config.age.secrets.borg-laptop-password.path;
inherit homeDirectory;
};
};
}

View File

@@ -1,31 +0,0 @@
{
pkgs,
inputs,
lib,
config,
...
}:
{
imports = [ ./gui.nix ];
home.packages = with pkgs; [
protontricks
# https://github.com/NixOS/nixpkgs/pull/339370#issuecomment-2731336341
bs-manager
];
programs.alacritty.settings = {
window.decorations = lib.mkForce "full";
window.opacity = lib.mkForce 1.0;
};
programs.obs-studio = {
enable = true;
plugins = with pkgs.obs-studio-plugins; [
wlrobs
obs-backgroundremoval
obs-pipewire-audio-capture
];
};
}

View File

@@ -0,0 +1,26 @@
{
stdenv,
imagemagick,
gawk,
src,
}:
stdenv.mkDerivation {
pname = "invert-image-avg";
version = "1.0";
inherit src;
buildInputs = [
imagemagick
gawk
];
# input is a file, not a directory, skip unpackPhase
unpackPhase = "true";
# command taken from: https://old.reddit.com/r/swaywm/comments/oz3t7v/setting_a_blurred_background_with_swaylock_and/
buildPhase = ''
rm -fr $out
magick ${src} -channel RGB -negate -resize 1x1 txt: | awk 'FNR == 2 {print $3}' > $out
'';
}

View File

@@ -1,19 +0,0 @@
update_all: system_update home_update sync_configs
format_home:
nixfmt ~/.config/home-manager
format_system:
doas nixfmt /etc/nixos
system_update:
nh os boot -u /etc/nixos
home_update:
rm -fr ~/.gtkrc-2.0
nh home switch -u ~/.config/home-manager -- --impure
sync_configs: format_home format_system
rsync -a --delete /etc/nixos/ ~/projects/configs/dotfiles/etcnixos/
rsync -a --delete ~/.config/home-manager/ ~/projects/configs/dotfiles/home-manager/

View File

@@ -6,27 +6,65 @@
system, system,
hostname, hostname,
inputs, inputs,
niri-package,
... ...
}: }:
{ {
imports = [ imports = [
./declarative-nm.nix
./distrobox.nix
./vm.nix ./vm.nix
./steam.nix ./steam.nix
./networking.nix
inputs.agenix.nixosModules.default
inputs.nixos-hardware.nixosModules.common-pc-ssd
inputs.chaotic.nixosModules.default
inputs.disko.nixosModules.disko inputs.disko.nixosModules.disko
inputs.lanzaboote.nixosModules.lanzaboote
inputs.nixos-hardware.nixosModules.common-cpu-amd-pstate
inputs.nixos-hardware.nixosModules.common-cpu-amd-zenpower
inputs.nixos-hardware.nixosModules.common-pc-ssd
]; ];
programs.nix-ld = { # allow overclocking (I actually underclock but lol)
hardware.amdgpu.overdrive.ppfeaturemask = "0xFFFFFFFF";
hardware.enableRedistributableFirmware = true;
hardware.cpu.amd.updateMicrocode = true;
services.kmscon.enable = true;
# Add niri to display manager session packages
services.displayManager.sessionPackages = [ niri-package ];
programs = {
gamescope = {
enable = true; enable = true;
libraries = with pkgs; [ capSysNice = true;
stdenv.cc.cc
];
}; };
steam = {
enable = true;
gamescopeSession.enable = true;
};
};
system.activationScripts = {
# FIX: https://github.com/NixOS/nix/issues/2982
"profile-channel-dummy".text = ''
#!/bin/sh
mkdir -p /nix/var/nix/profiles/per-user/root/channels
'';
# extract all my secureboot keys
# TODO! proper secrets management
"secureboot-keys".text = ''
#!/usr/bin/env sh
rm -fr ${config.boot.lanzaboote.pkiBundle} || true
mkdir -p ${config.boot.lanzaboote.pkiBundle}
${lib.getExe pkgs.gnutar} xf ${./secrets/secureboot.tar} -C ${config.boot.lanzaboote.pkiBundle}
chown -R root:wheel ${config.boot.lanzaboote.pkiBundle}
chmod -R 500 ${config.boot.lanzaboote.pkiBundle}
'';
};
swapDevices = [ ];
nix = { nix = {
# optimize the store # optimize the store
@@ -39,40 +77,58 @@
]; ];
}; };
# https://github.com/viperML/nh
programs.nh = {
enable = true;
clean.enable = true;
clean.extraArgs = "--keep-since 4d --keep 3";
};
# kernel options # kernel options
boot = { boot = {
kernelPackages = pkgs.linuxPackages_cachyos-lto; kernelPackages = pkgs.linuxPackages_latest;
# kernelPackages = pkgs.linuxPackages_latest; # kernelPackages = pkgs.linuxPackages;
kernel.sysctl = { lanzaboote = {
# dmesg shushhhhh enable = true;
"kernel.printk" = "2 4 1 7"; # TODO: proper secrets management so this is not stored in nix store
pkiBundle = "/var/lib/sbctl";
}; };
# Bootloader. # Bootloader.
loader = { loader = {
systemd-boot.enable = true;
efi.canTouchEfiVariables = true; efi.canTouchEfiVariables = true;
timeout = 1; timeout = 1;
/*
Lanzaboote currently replaces the systemd-boot module.
This setting is usually set to true in configuration.nix
generated at installation time. So we force it to false
for now.
*/
systemd-boot.enable = lib.mkForce false;
systemd-boot.configurationLimit = 10;
}; };
initrd = { initrd = {
systemd.enable = true;
compressor = "zstd"; compressor = "zstd";
availableKernelModules = [
"xhci_pci"
"thunderbolt"
"nvme"
"usbhid"
"amdgpu"
];
}; };
kernelModules = [ kernelModules = [
"kvm-amd"
"ip_tables" "ip_tables"
"iptable_nat" "iptable_nat"
"msr" "msr"
"btusb"
]; ];
kernelParams = [
# 1gb huge pages
"hugepagesz=1G"
"hugepages=3"
];
}; };
environment.etc = { environment.etc = {
@@ -97,18 +153,26 @@
# Enable CUPS to print documents. # Enable CUPS to print documents.
printing = { printing = {
enable = true; enable = true;
# disabled, build broken drivers = with pkgs; [ hplip ];
# drivers = with pkgs; [ hplip ];
}; };
# disable fprintd (doesn't compile, idk) # I don't want fingerprint login
fprintd.enable = false; fprintd.enable = false;
# Making sure mullvad works on boot # Making sure mullvad works on boot
# mullvad-vpn.enable = true; mullvad-vpn.enable = true;
# power statistics
upower.enable = true;
# power profiles for noctalia shell
power-profiles-daemon.enable = true;
# geolocation (uses beacondb.net by default)
geoclue2.enable = true;
}; };
# Set your time zone. # EST
time.timeZone = "America/New_York"; time.timeZone = "America/New_York";
security = { security = {
@@ -125,26 +189,9 @@
]; ];
}; };
# age.identityPaths = [ "/home/${username}/.ssh/id_ed25519" ];
# networking
networking = import ./networking.nix { inherit hostname; };
# Select internationalisation properties. # Select internationalisation properties.
i18n.defaultLocale = "en_US.UTF-8"; i18n.defaultLocale = "en_US.UTF-8";
i18n.extraLocaleSettings = {
LC_ADDRESS = "en_US.UTF-8";
LC_IDENTIFICATION = "en_US.UTF-8";
LC_MEASUREMENT = "en_US.UTF-8";
LC_MONETARY = "en_US.UTF-8";
LC_NAME = "en_US.UTF-8";
LC_NUMERIC = "en_US.UTF-8";
LC_PAPER = "en_US.UTF-8";
LC_TELEPHONE = "en_US.UTF-8";
LC_TIME = "en_US.UTF-8";
};
# Enable Bluetooth # Enable Bluetooth
hardware.bluetooth = { hardware.bluetooth = {
enable = true; enable = true;
@@ -159,7 +206,8 @@
# Enable sound with pipewire. # Enable sound with pipewire.
services.pulseaudio.enable = false; # pipewire >>>>>>> pulseaudio services.pulseaudio.enable = false; # pipewire >>>>>>> pulseaudio
security.rtkit.enable = true; # BUG! disable rtkit in order to fix mumble: https://github.com/NixOS/nixpkgs/issues/392992#issuecomment-2799867278
security.rtkit.enable = false;
services.pipewire = { services.pipewire = {
enable = true; enable = true;
alsa.enable = true; alsa.enable = true;
@@ -177,14 +225,13 @@
"camera" "camera"
"adbusers" "adbusers"
]; ];
# TODO! this is really bad :( I should really figure out how to do proper secrets management
hashedPasswordFile = "${./secrets/password-hash}"; hashedPasswordFile = "${./secrets/password-hash}";
}; };
services.gvfs.enable = true; services.gvfs.enable = true;
programs.gphoto2.enable = true; programs.gphoto2.enable = true;
programs.adb.enable = true;
# Enable thermal data # Enable thermal data
services.thermald.enable = true; services.thermald.enable = true;
@@ -197,15 +244,13 @@
# System packages # System packages
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# mullvad-vpn # mullvad-vpn is provided by services.mullvad-vpn.enable
#secureboot ctl #secureboot ctl
sbctl sbctl
dmidecode dmidecode
# (inputs.agenix.packages.${pkgs.system}.default.override { ageBin = "${pkgs.rage}/bin/rage"; })
doas-sudo-shim doas-sudo-shim
glib glib
@@ -217,10 +262,8 @@
# needed for home-manager # needed for home-manager
git git
home-manager tmux
android-tools
# https://github.com/chaotic-cx/nyx/issues/972
# config.boot.kernelPackages.perf
]; ];
# wayland with electron/chromium applications # wayland with electron/chromium applications
@@ -233,22 +276,19 @@
if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]] if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]]
then then
shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION="" shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION=""
exec ${pkgs.fish}/bin/fish $LOGIN_OPTION exec ${lib.getExe pkgs.fish} $LOGIN_OPTION
fi fi
''; '';
}; };
system.stateVersion = "24.11"; # port 53317 for localsend
networking.firewall.allowedUDPPorts = [ 53317 ];
networking.firewall.allowedTCPPorts = [ 53317 ];
system.stateVersion = "25.05";
nixpkgs.hostPlatform = "x86_64-linux";
documentation.enable = true; documentation.enable = true;
documentation.man.enable = true; documentation.man.enable = true;
documentation.dev.enable = true; documentation.dev.enable = true;
swapDevices = [
{
device = "/var/lib/swapfile";
size = 64 * 1024;
randomEncryption.enable = true;
}
];
} }

View File

@@ -6,15 +6,6 @@
... ...
}: }:
{ {
boot.initrd.availableKernelModules = [
"xhci_pci"
"thunderbolt"
"nvme"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
disko.devices = { disko.devices = {
disk = { disk = {
main = { main = {
@@ -59,17 +50,4 @@
}; };
}; };
swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp166s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.enableRedistributableFirmware = true;
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
} }

52
system/disk_yarn.nix Normal file
View File

@@ -0,0 +1,52 @@
{
disko.devices = {
disk = {
main = {
type = "disk";
content = {
type = "gpt";
partitions = {
ESP = {
type = "EF00";
size = "500M";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
};
};
persistent = {
size = "100%";
content = {
type = "filesystem";
format = "f2fs";
mountpoint = "/persistent";
};
};
nix = {
size = "200G";
content = {
type = "filesystem";
format = "f2fs";
mountpoint = "/nix";
};
};
};
};
};
};
nodev = {
"/" = {
fsType = "tmpfs";
mountOptions = [
"defaults"
"size=2G"
"mode=755"
];
};
};
};
fileSystems."/persistent".neededForBoot = true;
fileSystems."/nix".neededForBoot = true;
}

38
system/impermanence.nix Normal file
View File

@@ -0,0 +1,38 @@
{
config,
lib,
username,
...
}:
{
environment.persistence."/persistent" = {
hideMounts = true;
directories = [
"/var/log"
"/var/lib/systemd/coredump"
"/var/lib/nixos"
"/var/lib/systemd/timers"
];
files = [
"/etc/ssh/ssh_host_ed25519_key"
"/etc/ssh/ssh_host_ed25519_key.pub"
"/etc/ssh/ssh_host_rsa_key"
"/etc/ssh/ssh_host_rsa_key.pub"
"/etc/machine-id"
];
};
# Bind mount entire home directory from persistent storage
# (impermanence doesn't support "." so we do this directly)
fileSystems."/home/${username}" = {
device = "/persistent/home/${username}";
fsType = "none";
options = [ "bind" ];
neededForBoot = true;
};
systemd.tmpfiles.rules = [
"d /etc 755 root"
];
}

26
system/networking.nix Normal file
View File

@@ -0,0 +1,26 @@
{ hostname, ... }:
{
# speed up boot times (by about three seconds)
systemd.services.NetworkManager-wait-online.enable = false;
networking = {
hostName = hostname;
networkmanager = {
enable = true;
insertNameservers = [
"1.1.1.1"
"9.9.9.9"
];
wifi = {
scanRandMacAddress = true;
# fix suspend issue
# powersave = false;
};
ensureProfiles.profiles = import ./secrets/wifi-passwords.nix;
};
};
}

Binary file not shown.

View File

@@ -5,7 +5,6 @@
... ...
}: }:
{ {
nixpkgs.config.allowUnfreePredicate = nixpkgs.config.allowUnfreePredicate =
pkg: pkg:
builtins.elem (lib.getName pkg) [ builtins.elem (lib.getName pkg) [
@@ -17,11 +16,13 @@
programs.steam = { programs.steam = {
enable = true; enable = true;
localNetworkGameTransfers.openFirewall = true; # Open ports in the firewall for Steam Local Network Game Transfers
extraCompatPackages = with pkgs; [ proton-ge-bin ]; extraCompatPackages = with pkgs; [ proton-ge-bin ];
}; };
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
steamtinkerlaunch steamtinkerlaunch
mangohud
goverlay
yad
]; ];
} }

43
system/system-mreow.nix Normal file
View File

@@ -0,0 +1,43 @@
{
config,
pkgs,
lib,
username,
inputs,
...
}:
{
imports = [
./common.nix
./disk_mreow.nix
inputs.nixos-hardware.nixosModules.framework-amd-ai-300-series
];
# Disable PSR, PSR-SU, and Panel Replay to fix display hangs and corruption.
# Panel Replay requires PSR/PSR-SU to also be disabled to avoid issues.
# This overrides nixos-hardware's 0x10 with 0x410 (last value wins in kernel cmdline).
# https://github.com/NixOS/nixos-hardware/pull/1692
boot.kernelParams = lib.mkAfter [ "amdgpu.dcdebugmask=0x410" ];
hardware.framework.laptop13.audioEnhancement.rawDeviceName =
lib.mkDefault "alsa_output.pci-0000_c1_00.6.analog-stereo";
# PST
# time.timeZone = lib.mkForce "America/Los_Angeles";
# weird hack to get swaylock working? idk, if you don't put this here, password entry doesnt work
# if I move to another lock screen program, i will have to replace `swaylock`
security.pam.services.swaylock = { };
# Greetd display manager
services.greetd = {
enable = true;
settings = {
default_session = {
command = "${lib.getExe pkgs.tuigreet} --time";
user = username;
};
};
};
}

175
system/system-yarn.nix Normal file
View File

@@ -0,0 +1,175 @@
{
config,
pkgs,
lib,
username,
inputs,
...
}:
{
imports = [
./disk_yarn.nix
./common.nix
./impermanence.nix
./no-rgb.nix
./vr.nix
inputs.impermanence.nixosModules.impermanence
inputs.jovian-nixos.nixosModules.default
];
fileSystems."/media/games" = {
device = "/dev/disk/by-uuid/1878136e-765d-4784-b204-3536ab4fdac8";
fsType = "f2fs";
options = [ "nofail" ];
};
systemd.targets = {
sleep.enable = false;
suspend.enable = false;
hibernate.enable = false;
hybrid-sleep.enable = false;
};
networking.hostId = "abf570f9";
# Static IP for consistent SSH access
networking.networkmanager.ensureProfiles.profiles.enp7s0-static = {
connection = {
id = "enp7s0-static";
type = "ethernet";
interface-name = "enp7s0";
autoconnect = true;
};
ipv4 = {
method = "manual";
address1 = "192.168.1.223/24,192.168.1.1";
dns = "1.1.1.1;9.9.9.9;";
};
ipv6.method = "disabled";
};
services.openssh = {
enable = true;
ports = [ 22 ];
settings = {
PasswordAuthentication = false;
PermitRootLogin = "yes";
};
};
users.users.${username}.openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4jL6gYOunUlUtPvGdML0cpbKSsPNqQ1jit4E7U1RyH" # laptop
];
users.users.root.openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4jL6gYOunUlUtPvGdML0cpbKSsPNqQ1jit4E7U1RyH" # laptop
];
programs.steam = {
remotePlay.openFirewall = true;
localNetworkGameTransfers.openFirewall = true;
};
# LACT (Linux AMDGPU Configuration Tool): https://github.com/ilya-zlobintsev/LACT
environment.systemPackages = with pkgs; [
lact
];
systemd.packages = with pkgs; [ lact ];
systemd.services.lactd.wantedBy = [ "multi-user.target" ];
systemd.services.lactd.serviceConfig.ExecStartPre = "${lib.getExe pkgs.bash} -c \"sleep 3s\"";
nixpkgs.config.allowUnfreePredicate =
pkg:
builtins.elem (lib.getName pkg) [
"steamdeck-hw-theme"
"steam-jupiter-unwrapped"
"steam"
"steam-original"
"steam-unwrapped"
"steam-run"
];
# Override jovian-stubs to disable steamos-update kernel check
# This prevents Steam from requesting reboots for "system updates"
# Steam client updates will still work normally
nixpkgs.overlays = [
(final: prev: {
jovian-stubs = prev.stdenv.mkDerivation {
name = "jovian-stubs-no-update";
dontUnpack = true;
installPhase = ''
mkdir -p $out/bin
# steamos-update: always report "no update available" (exit 7)
# This disables the kernel mismatch check that triggers reboot prompts
cat > $out/bin/steamos-update << 'STUB'
#!/bin/sh
>&2 echo "[JOVIAN] $0: stub called with: $* (system updates disabled)"
exit 7
STUB
# steamos-reboot: reboot the system
cat > $out/bin/steamos-reboot << 'STUB'
#!/bin/sh
>&2 echo "[JOVIAN] $0: stub called with: $*"
systemctl reboot
STUB
# steamos-select-branch: no-op stub
cat > $out/bin/steamos-select-branch << 'STUB'
#!/bin/sh
>&2 echo "[JOVIAN] $0: stub called with: $*"
exit 0
STUB
# steamos-factory-reset-config: no-op stub
cat > $out/bin/steamos-factory-reset-config << 'STUB'
#!/bin/sh
>&2 echo "[JOVIAN] $0: stub called with: $*"
exit 0
STUB
# steamos-firmware-update: no-op stub
cat > $out/bin/steamos-firmware-update << 'STUB'
#!/bin/sh
>&2 echo "[JOVIAN] $0: stub called with: $*"
exit 0
STUB
# pkexec: pass through to real pkexec
cat > $out/bin/pkexec << 'STUB'
#!/bin/sh
exec /run/wrappers/bin/pkexec "$@"
STUB
# sudo: pass through to doas
cat > $out/bin/sudo << 'STUB'
#!/bin/sh
exec /run/wrappers/bin/doas "$@"
STUB
chmod 755 $out/bin/*
'';
};
})
];
jovian = {
devices.steamdeck.enable = false;
steam = {
enable = true;
autoStart = true;
desktopSession = "niri";
user = username;
};
};
# Jovian-NixOS requires sddm
# https://github.com/Jovian-Experiments/Jovian-NixOS/commit/52f140c07493f8bb6cd0773c7e1afe3e1fd1d1fa
services.displayManager.sddm.wayland.enable = true;
# Disable gamescope from common.nix to avoid conflict with jovian-nixos
programs.gamescope.enable = lib.mkForce false;
}

39
system/vm.nix Normal file
View File

@@ -0,0 +1,39 @@
{
pkgs,
username,
lib,
...
}:
{
# android virtualization
virtualisation.waydroid = {
enable = true;
# https://github.com/NixOS/nixpkgs/pull/466473
package = pkgs.waydroid-nftables;
};
programs.virt-manager.enable = true;
users.groups.libvirtd.members = [ username ];
virtualisation.libvirtd = {
enable = true;
package = pkgs.libvirt;
};
virtualisation.spiceUSBRedirection.enable = true;
users.users."${username}".extraGroups = [ "libvirtd" ];
# boot.kernelPatches = [
# {
# name = "undetected-kvm";
# patch = pkgs.fetchurl {
# url = "https://raw.githubusercontent.com/Scrut1ny/Hypervisor-Phantom/d09d66813570704e2b05440f290d6f9bdf2d26c7/Hypervisor-Phantom/patches/Kernel/linux-6.13-svm.patch";
# sha256 = "zz18xerutulLGzlHhnu26WCY8rVQXApyeoDtCjbejIk=";
# };
# }
# ];
}

View File

@@ -14,14 +14,6 @@
enable = true; enable = true;
openFirewall = true; openFirewall = true;
package = (
pkgs.wivrn.overrideAttrs (old: {
cmakeFlags = old.cmakeFlags ++ [
(lib.cmakeFeature "OPENCOMPOSITE_SEARCH_PATH" "${pkgs.opencomposite}/lib/opencomposite")
];
})
);
# Write information to /etc/xdg/openxr/1/active_runtime.json, VR applications # Write information to /etc/xdg/openxr/1/active_runtime.json, VR applications
# will automatically read this and work with wivrn # will automatically read this and work with wivrn
defaultRuntime = true; defaultRuntime = true;
@@ -50,7 +42,7 @@
} }
]; ];
application = [ pkgs.wlx-overlay-s ]; application = [ pkgs.wayvr ];
}; };
}; };
}; };