Compare commits

101 Commits
Author SHA1 Message Date
jashton ac241fe497 nixos: gen 80 @ lilac — 2026-09-29 13:47 26.05.20260918.cf9d2fb (Yarara) ----- 2026-09-29 13:47:40 -06:00
jashton be2ec252ee nixos: gen 79 @ lilac — 2026-09-29 13:43 26.05.20260918.cf9d2fb (Yarara) ----- 2026-09-29 13:43:19 -06:00
jashton d585007aaa nixos: gen 78 @ lilac — 2026-09-29 10:15 26.05.20260918.cf9d2fb (Yarara) ----- 2026-09-29 10:15:37 -06:00
jashton 42a34d981a nixos: gen 77 @ lilac — 2026-09-25 08:11 26.05.20260918.cf9d2fb (Yarara) ----- 2026-09-25 08:11:54 -06:00
jashton 60e64aad63 nixos: gen 76 @ lilac — 2026-09-24 14:51 26.05.20260918.cf9d2fb (Yarara) ----- 2026-09-24 14:51:04 -06:00
jashton e1eb76bb8c nixos: gen 75 @ lilac — 2026-09-24 14:16 26.05.20260918.cf9d2fb (Yarara) ----- 2026-09-24 14:16:06 -06:00
jashton c5dab4f100 nixos: gen 74 @ lilac — 2026-09-24 14:13 26.05.20260918.cf9d2fb (Yarara) ----- 2026-09-24 14:13:18 -06:00
jashton 1ff13c496d nixos: gen 73 @ lilac — 2026-09-24 14:09 26.05.20260918.cf9d2fb (Yarara) ----- 2026-09-24 14:09:24 -06:00
jashton c786683558 nixos: gen 72 @ lilac — 2026-09-24 09:50 26.05.20260918.cf9d2fb (Yarara) ----- 2026-09-24 09:50:42 -06:00
jashton baa8eb7d90 nixos: gen 71 @ lilac — 2026-09-24 09:47 26.05.20260918.cf9d2fb (Yarara) ----- 2026-09-24 09:47:03 -06:00
jashton 427de24789 nixos: gen 70 @ lilac — 2026-09-22 16:23 26.05.20260918.cf9d2fb (Yarara) ----- 2026-09-22 16:23:50 -06:00
jashton 366b135a49 nixos: gen 69 @ lilac — 2026-09-22 16:10 26.05.20260918.cf9d2fb (Yarara) ----- 2026-09-22 16:10:27 -06:00
jashton cb48f0ea99 fix systemd client service 2026-09-22 16:04:33 -06:00
jashton a4b5fa30df designated lilac as server/listener, violet as client 2026-09-22 15:59:33 -06:00
jashton a5c7fc2126 nixos: gen 68 @ lilac — 2026-09-22 15:58 26.05.20260918.cf9d2fb (Yarara) ----- 2026-09-22 15:58:24 -06:00
jashton 31abeb305c nixos: gen 67 @ lilac — 2026-09-22 15:42 26.05.20260918.cf9d2fb (Yarara) ----- 2026-09-22 15:42:38 -06:00
jashton b1b6a6c395 nixos: gen 67 @ lilac — 2026-09-22 15:39 26.05.20260918.cf9d2fb (Yarara) ----- IP over bluetooth for seamless LAN-Mouse 2026-09-22 15:39:56 -06:00
jashton f99928c954 nixos: gen 66 @ lilac — 2026-09-22 13:35 26.05.20260918.cf9d2fb (Yarara) ----- configuring opencode to use on-device AI 2026-09-22 13:35:10 -06:00
jashton 284a084ca5 nixos: gen 65 @ lilac — 2026-09-21 18:47 26.05.20260918.cf9d2fb (Yarara) ----- 2026-09-21 18:47:38 -06:00
jashton 33adf967e3 nixos: gen 64 @ lilac — 2026-09-21 09:09 26.05.20260918.cf9d2fb (Yarara) ----- 2026-09-21 09:10:02 -06:00
jashton cea4b70f83 nixos: gen 64 @ lilac — 2026-09-21 09:06 26.05.20260918.cf9d2fb (Yarara) ----- 2026-09-21 09:06:13 -06:00
jashton 92fe2a5a18 nixos: gen 64 @ lilac — 2026-09-20 02:34 26.05.20260918.cf9d2fb (Yarara) ----- 2026-09-20 02:34:59 -06:00
jashton da6e625f87 nixos: gen 63 @ lilac — 2026-09-20 02:20 26.05.20260918.cf9d2fb (Yarara) ----- 2026-09-20 02:24:09 -06:00
jashton 0ed1b19d50 nixos: gen 62 @ lilac — 2026-09-20 02:10 26.05.20260918.cf9d2fb (Yarara) ----- 2026-09-20 02:10:41 -06:00
jashton 03c32ccd43 nixos: gen 61 @ lilac — 2026-09-20 01:26 26.05.20260918.cf9d2fb (Yarara) ----- 2026-09-20 01:27:24 -06:00
jashton 6dba7591c9 nixos: gen 60 @ lilac — 2026-09-20 00:05 26.05.20260918.cf9d2fb (Yarara) ----- 2026-09-20 00:05:28 -06:00
jashton c5575b29e2 nixos: gen 59 @ lilac — 2026-09-19 22:57 26.05.20260918.cf9d2fb (Yarara) ----- 2026-09-19 23:01:04 -06:00
jashton 3a03af88ac nixos: gen 59 @ lilac — 2026-09-19 22:54 26.05.20260918.cf9d2fb (Yarara) ----- 2026-09-19 22:54:57 -06:00
jashton 926a9ce8d2 nixos: gen 58 @ lilac — 2026-09-18 23:31 26.05.20260918.cf9d2fb (Yarara) ----- 2026-09-18 23:33:29 -06:00
jashton 0947526230 nixos: gen 57 @ lilac — 2026-09-18 23:04 26.05.20260917.ecc58f3 (Yarara) ----- 2026-09-18 23:05:03 -06:00
jashton dc03ffb1ab nixos: gen 54 @ lilac — 2026-09-18 21:17 26.05.20260814.02e0898 (Yarara) ----- 2026-09-18 21:18:39 -06:00
jashton 0751404d41 nixos: gen 53 @ lilac — 2026-09-18 21:14 26.05.20260814.02e0898 (Yarara) ----- 2026-09-18 21:14:08 -06:00
jashton 8878543aeb nixos: gen 52 @ lilac — 2026-09-18 20:58 26.05.20260814.02e0898 (Yarara) ----- 2026-09-18 21:04:39 -06:00
jashton a17047a67a nixos: gen 51 @ lilac — 2026-09-18 20:14 26.05.20260814.02e0898 (Yarara) ----- 2026-09-18 20:15:39 -06:00
jashton 8c6c7c8495 nixos: gen 50 @ lilac — 2026-09-18 20:09 26.05.20260814.02e0898 (Yarara) ----- 2026-09-18 20:09:03 -06:00
jashton c586a863f6 nixos: gen 49 @ lilac — 2026-09-18 10:24 26.05.20260814.02e0898 (Yarara) ----- 2026-09-18 10:24:10 -06:00
jashton f524723d98 nixos: gen 48 @ lilac — 2026-09-18 10:18 26.05.20260814.02e0898 (Yarara) ----- 2026-09-18 10:18:52 -06:00
jashton 46362c1949 nixos: gen 47 @ lilac — 2026-09-18 10:13 26.05.20260814.02e0898 (Yarara) ----- 2026-09-18 10:14:01 -06:00
jashton cd1e5d7408 nixos: gen 46 @ lilac — 2026-09-18 08:21 26.05.20260814.02e0898 (Yarara) ----- 2026-09-18 08:21:46 -06:00
jashton 77178d0b6e nixos: gen 45 @ lilac — 2026-09-18 08:18 26.05.20260814.02e0898 (Yarara) ----- refactoring nvim.nix and adding better java integration 2026-09-18 08:18:18 -06:00
jashton b85e10aa25 nixos: gen 44 @ lilac — 2026-09-18 03:15 26.05.20260814.02e0898 (Yarara) ----- 2026-09-18 03:15:34 -06:00
jashton 0a0d297033 nixos: gen 43 @ lilac — 2026-09-17 15:15 26.05.20260814.02e0898 (Yarara) ----- 2026-09-17 15:15:45 -06:00
jashton e3779c9f6b nixos: gen 42 @ lilac — 2026-09-17 15:12 26.05.20260814.02e0898 (Yarara) ----- 2026-09-17 15:12:53 -06:00
jashton 7409f22d66 nixos: gen 41 @ lilac — 2026-09-17 15:11 26.05.20260814.02e0898 (Yarara) ----- 2026-09-17 15:11:04 -06:00
jashton 0d19a8c4ef nixos: gen 40 @ lilac — 2026-09-17 15:08 26.05.20260814.02e0898 (Yarara) ----- 2026-09-17 15:08:43 -06:00
jashton e4ad117b70 nixos: gen 39 @ lilac — 2026-09-17 15:01 26.05.20260814.02e0898 (Yarara) ----- 2026-09-17 15:01:48 -06:00
jashton 476a277371 nixos: gen 38 @ lilac — 2026-09-17 14:58 26.05.20260814.02e0898 (Yarara) ----- 2026-09-17 14:58:28 -06:00
jashton f84f7556fb nixos: gen 37 @ lilac — 2026-09-17 14:54 26.05.20260814.02e0898 (Yarara) ----- 2026-09-17 14:54:52 -06:00
jashton 17f1150298 nixos: gen 36 @ lilac — 2026-09-17 14:14 26.05.20260814.02e0898 (Yarara) ----- 2026-09-17 14:14:16 -06:00
jashton 72032bda82 nixos: gen 35 @ lilac — 2026-09-17 11:12 26.05.20260814.02e0898 (Yarara) ----- 2026-09-17 11:12:15 -06:00
jashton 4bb350b262 nixos: gen 34 @ lilac — 2026-09-13 13:04 26.05.20260814.02e0898 (Yarara) ----- 2026-09-13 13:04:27 -06:00
jashton c374ecbd36 nixos: gen 33 @ lilac — 2026-09-12 19:06 26.05.20260814.02e0898 (Yarara) ----- 2026-09-12 19:06:55 -06:00
jashton 44712feab0 nixos: gen 32 @ lilac — 2026-09-11 18:21 26.05.20260814.02e0898 (Yarara) ----- 2026-09-11 18:21:49 -06:00
jashton eb5381bf68 nixos: gen 31 @ lilac — 2026-09-11 18:18 26.05.20260814.02e0898 (Yarara) ----- 2026-09-11 18:19:12 -06:00
jashton 61fc2f1898 nixos: gen 250 @ violet — 2026-09-05 02:57 26.05.20260814.02e0898 (Yarara) ----- 2026-09-05 02:57:34 -06:00
jashton 76a4fd0708 nixos: gen 249 @ violet — 2026-09-05 02:40 26.05.20260814.02e0898 (Yarara) ----- 2026-09-05 02:40:51 -06:00
jashton 5c48a495c2 nixos: gen 248 @ violet — 2026-09-05 02:11 26.05.20260814.02e0898 (Yarara) ----- 2026-09-05 02:11:26 -06:00
jashton b4b0832e3b nixos: gen 247 @ violet — 2026-09-05 02:05 26.05.20260814.02e0898 (Yarara) ----- 2026-09-05 02:05:30 -06:00
jashton 6cd7d5ba59 nixos: gen 30 @ lilac — 2026-09-04 16:44 26.05.20260814.02e0898 (Yarara) ----- 2026-09-04 16:44:23 -06:00
jashton c743bb8318 nixos: gen 29 @ lilac — 2026-09-04 13:00 26.05.20260814.02e0898 (Yarara) ----- adding u of u printers 2026-09-04 13:00:34 -06:00
jashton 0831239cef nixos: gen 28 @ lilac — 2026-09-02 23:35 26.05.20260814.02e0898 (Yarara) ----- 2026-09-02 23:35:39 -06:00
jashton b2f9f3a46d nixos: gen 27 @ lilac — 2026-09-02 23:23 26.05.20260814.02e0898 (Yarara) ----- 2026-09-02 23:23:48 -06:00
jashton eef6ee42bb nixos: gen 26 @ lilac — 2026-09-02 23:12 26.05.20260814.02e0898 (Yarara) ----- background blur on terminal 2026-09-02 23:12:52 -06:00
jashton 8a60192e87 nixos: gen 25 @ lilac — 2026-09-02 23:08 26.05.20260814.02e0898 (Yarara) ----- 2026-09-02 23:09:48 -06:00
jashton f8b0574512 nixos: gen 24 @ lilac — 2026-09-02 23:06 26.05.20260814.02e0898 (Yarara) ----- 2026-09-02 23:06:39 -06:00
jashton 777c18eb76 nixos: gen 23 @ lilac — 2026-09-02 23:05 26.05.20260814.02e0898 (Yarara) ----- s 2026-09-02 23:05:36 -06:00
jashton cc8b3ec1b0 nixos: gen 22 @ lilac — 2026-09-02 22:51 26.05.20260814.02e0898 (Yarara) ----- 2026-09-02 22:51:43 -06:00
jashton 317fe77421 nixos: gen 246 @ violet — 2026-09-02 08:39 26.05.20260814.02e0898 (Yarara) ----- 2026-09-02 12:54:39 -06:00
jashton 744583a0e8 nixos: gen 21 @ lilac — 2026-09-01 11:37 26.05.20260814.02e0898 (Yarara) ----- 2026-09-01 11:38:03 -06:00
jashton 2e7773cf4b adding eclipse java support to neovim 2026-09-01 11:00:07 -06:00
jashton 7081a75fb0 nixos: gen 20 @ lilac — 2026-08-27 14:17 26.05.20260814.02e0898 (Yarara) ----- 2026-08-27 14:18:01 -06:00
jashton 134f22b70c nixos: gen 19 @ lilac — 2026-08-26 16:19 26.05.20260814.02e0898 (Yarara) ----- adding thunderbird 2026-08-26 16:19:29 -06:00
jashton 342f2634f5 nixos: gen 18 @ lilac — 2026-08-25 12:30 26.05.20260814.02e0898 (Yarara) ----- 2026-08-25 12:30:58 -06:00
jashton a9586cca54 nixos: gen 244 @ violet — 2026-08-25 10:43 26.05.20260814.02e0898 (Yarara) ----- 2026-08-25 10:43:59 -06:00
jashton 6f3bbe89f4 nixos: gen 17 @ lilac — 2026-08-24 17:33 26.05.20260814.02e0898 (Yarara) ----- 2026-08-24 17:33:55 -06:00
jashton 3d309eef56 nixos: gen 16 @ lilac — 2026-08-23 17:04 26.05.20260814.02e0898 (Yarara) ----- 2026-08-23 17:04:09 -06:00
jashton 5b7a2368da nixos: gen 15 @ lilac — 2026-08-22 21:31 26.05.20260814.02e0898 (Yarara) ----- 2026-08-22 21:31:33 -06:00
jashton ffceb0d524 nixos: gen 22 @ lavender — 2026-08-22 21:11 26.05.20260814.02e0898 (Yarara) ----- 2026-08-22 21:11:43 -06:00
jashton ab50357d75 nixos: gen 14 @ lilac — 2026-08-22 15:25 26.05.20260814.02e0898 (Yarara) ----- 2026-08-22 15:25:42 -06:00
jashton 52a462e8e2 nixos: gen 13 @ lilac — 2026-08-22 15:02 26.05.20260814.02e0898 (Yarara) ----- 2026-08-22 15:02:33 -06:00
jashton 28e071453e nixos: gen 12 @ lilac — 2026-08-22 13:00 26.05.20260814.02e0898 (Yarara) ----- 2026-08-22 13:00:54 -06:00
jashton df37691ba0 nixos: gen 241 @ violet — 2026-08-22 12:54 26.05.20260814.02e0898 (Yarara) ----- 2026-08-22 12:55:06 -06:00
jashton 832c07352b nixos: gen 12 @ lilac — 2026-08-22 12:42 26.05.20260814.02e0898 (Yarara) ----- adding IP over Thunderbolt for lan-mouse interoperability between Framework 13 Pro and ThinkPad X12 Detachable 2026-08-22 12:42:46 -06:00
jashton 7235c662c4 nixos: gen 11 @ lilac — 2026-08-19 12:11 26.05.20260814.02e0898 (Yarara) ----- 2026-08-19 12:11:30 -06:00
jashton ad5edd23e8 nixos: gen 10 @ lilac — 2026-08-19 12:09 26.05.20260814.02e0898 (Yarara) ----- removing hot corners and adding backdrop color to niri. 2026-08-19 12:09:57 -06:00
jashton 3429f8f2b7 nixos: gen 9 @ lilac — 2026-08-18 12:05 26.05.20260814.02e0898 (Yarara) ----- installing eclipse 2026-08-18 12:11:20 -06:00
jashton cefb0357f5 nixos: gen 8 @ lilac — 2026-08-18 11:51 26.05.20260814.02e0898 (Yarara) ----- adding framework-tool to lilac 2026-08-18 11:51:31 -06:00
jashton ee22facd4c nixos: gen 7 @ lilac — 2026-08-16 17:55 26.05.20260814.02e0898 (Yarara) ----- 2026-08-16 17:55:36 -06:00
jashton 38c810382a nixos: gen 6 @ lilac — 2026-08-16 17:51 26.05.20260814.02e0898 (Yarara) ----- 2026-08-16 17:51:23 -06:00
jashton e4e7dc43af nixos: gen 18 @ lavender — 2026-08-16 17:11 26.05.20260814.02e0898 (Yarara) ----- 2026-08-16 17:11:44 -06:00
jashton 1ab5ac1478 nixos: gen 17 @ lavender — 2026-08-16 17:00 26.05.20260814.02e0898 (Yarara) ----- 2026-08-16 17:00:34 -06:00
jashton bef59301db nixos: gen 5 @ lilac — 2026-08-16 15:20 26.05.20260814.02e0898 (Yarara) ----- 2026-08-16 15:22:57 -06:00
jashton ab1bee9783 nixos: gen 4 @ lilac — 2026-08-16 15:09 26.05.20260814.02e0898 (Yarara) ----- 2026-08-16 15:09:17 -06:00
jashton f658e54ec7 nixos: gen 3 @ lilac — 2026-08-16 14:34 26.05.20260812.9f78f44 (Yarara) ----- 2026-08-16 14:34:48 -06:00
jashton 3a7f539b30 nixos: gen 238 @ violet — 2026-08-15 01:43 26.05.20260812.9f78f44 (Yarara) ----- adding deskflow ports to firewall 2026-08-15 01:43:54 -06:00
jashton f44f84324a updating secrets.yaml for Framework 13 Pro re-install with PCIe 5 NVMe SSD. 2026-08-15 00:18:20 -06:00
jashton 6884d5e1e7 adding ssh pub key age 2026-08-15 00:12:34 -06:00
jashton 3143df8364 nixos: gen 4 @ lilac — 2026-08-13 22:17 26.05.20260812.9f78f44 (Yarara) ----- Added deskflow 2026-08-13 22:17:56 -06:00
jashton bf3cde8e73 nixos: gen 3 @ lilac — 2026-08-13 21:23 26.05.20260812.9f78f44 (Yarara) ----- Enabling bluetooth on Framework 13 Pro. 2026-08-13 21:23:26 -06:00
jashton 07dbe73d82 updating secrets.yaml 2026-08-13 19:49:57 -06:00
jashton b64d4b5bd1 setting up Framework 13 Pro 2026-08-13 19:24:51 -06:00
29 changed files with 1237 additions and 236 deletions
+17
View File
@@ -0,0 +1,17 @@
{
"permissions": {
"allow": [
"Read(//home/jashton/.local/state/nix/profiles/**)",
"Read(//nix/var/nix/profiles/**)",
"Read(//nix/store/**)",
"Bash(systemctl --user show-environment)",
"Bash(nix eval *)",
"Bash(nix-instantiate --parse /home/jashton/.dotfiles/home/jashton.nix)",
"Bash(git -C /home/jashton/.dotfiles status)",
"Bash(git -C /home/jashton/.dotfiles log -3 --stat)",
"Bash(gh api *)",
"Bash(nix-store -q --references /nix/store/256vhj20yfbajhvdm3cpaxradb4pi1ac-ollama-0.34.0)",
"Bash(nix-store -q --references /nix/store/pxgnnjm1p1zlavx8i2wjdmz484lq4k8v-ollama-0.34.0)"
]
}
}
+2
View File
@@ -1,9 +1,11 @@
keys:
- &lavender age1az6l56h4m38jw2hm7t7a99wp9f88s845sg29grtmdpz72lrkc5cq66kmcv
- &violet age1cd40qmufxzvw8dkml9340czqfq6ta3kxpjfj47jpavwn2t7ghywsxhqz79
- &lilac age1dsf6z3hcr8qrtptdk6xyky9c99tdpjyrnuaawv4atme9rffhps9qpwdn6j
creation_rules:
- path_regex: secrets/[^/]+\.yaml$
key_groups:
- age:
- *lavender
- *violet
- *lilac
+131
View File
@@ -0,0 +1,131 @@
# .dotfiles
NixOS + Home Manager configuration for jashton's machines, built as a single flake.
## NixOS Flakes Structure
```
.
├── flake.nix / flake.lock Inputs + the 3 nixosConfigurations (violet, lilac, lavender)
├── hosts/<name>/ Per-machine entrypoint + hardware.nix
├── system/ Shared NixOS (system-level) configuration
├── home/ Home Manager configuration for user "jashton"
├── secrets/ + .sops.yaml sops-nix encrypted secrets
└── ports.registry State file written by the find-open-port script
```
**`flake.nix`** pins `nixpkgs` to `nixos-26.05` (plus an `nixpkgs-unstable` follower), and pulls in `home-manager`, `sops-nix`, `niri` (compositor), `wvkbd-src` (on-screen keyboard source), the DankMaterialShell trio (`dms`, `dms-plugin-registry`, `danksearch`), and `nixos-hardware`. Its `outputs` define three `nixosConfigurations`, one per host — each wires up the niri/dms-plugin-registry/sops-nix NixOS modules and a `home-manager.users.jashton` block importing `home/jashton.nix` (plus the `danksearch` home module).
**`hosts/`** — one directory per machine, each with `default.nix` (hostname + host-specific services/hardware tweaks, imports `../../system`) and `hardware.nix` (generated hardware scan):
- `violet` — imports the ThinkPad-specific security module (`system/security/thinkpad.nix`), disables lid-switch suspend, has (disabled) TLP power-profile tuning, and enables `input-remapper`.
- `lilac` — Framework laptop (Intel Core Ultra series 3, via `nixos-hardware`), fingerprint reader + Thunderbolt/bolt + Intel graphics acceleration.
- `lavender` — minimal host, just graphics enablement.
- Both `violet`/`lilac` open a Thunderbolt-networking point-to-point link (`thunderbolt0`, ports 4242).
**`system/`** — shared NixOS config imported by every host, split by concern:
- `packages.nix` — system-wide packages, unfree allowed, plus a hand-written `unix` script (`sudo nixos-rebuild switch`, then auto-commits/pushes the dotfiles repo on success) and Steam setup.
- `core/` — `boot.nix` (systemd-boot, `uinput` module), `audio.nix` (PipeWire/Bluetooth tuning), `env.nix` (zsh + oh-my-zsh, Nerd Font, flakes enabled, shell aliases), `locale.nix` (Denver/en_US), `power.nix` (deep sleep).
- `security/` — `sops.nix` (age-via-SSH-host-key secrets), `sudo.nix` (passwordless `tlp` for jashton), `systemd.nix`, `thinkpad.nix` (fprintd), `users.nix` (user/group defs).
- `network/` — NetworkManager + firewall, plus `pi-hole.nix` (a Pi-hole container run via Podman `oci-containers`).
- `services/` — currently an empty placeholder module (compositor/greeter services are declared per-host instead, see `hosts/violet/default.nix`).
- `virtualisation/` — Podman (with Docker compat), Waydroid, VirtualBox, libvirtd.
**`home/`** — Home Manager config for `jashton`:
- `jashton.nix` — top-level user config: session vars, SSH client config (aliases for `lavender`/`violet`/`lilac`/`heliotrope`), the `lan-mouse` user service, workspace directory scaffolding (`~/dev`, `~/school`, etc.), a `custom_wvkbd` package override (builds `wvkbd` from `wvkbd-src` against the `.custom.h` files below), and a set of hand-written shell tools installed as packages: `jroot`/`jbuild`/`jrun`/`jtest`/`jclean` (Java project tooling — see below), `fkill` (interactive `pkill` by name), `find-open-port` (dev-port registry in `ports.registry`).
- `programs/` — `default.nix` imports `alacritty.nix` (terminal theme/font), `git.nix` (identity + ignores), `nvim.nix` (full Neovim config: LSP, completion, Java/jdtls + DAP debugging — see Keybinds). `keymap.custom.h`, `layout.custom.h`, `config.custom.h` (+ `.bak` backups) are C source overrides for wvkbd's `mobintl` on-screen-keyboard layout, spliced into the `custom_wvkbd` build in `jashton.nix`.
- `desktop/` — `default.nix` imports `niri.nix` (the niri compositor config, touch-gesture daemon, and on-screen-keyboard launcher — see Keybinds); `wvkbd.nix` is currently an empty stub.
**`secrets/secrets.yaml`** + **`.sops.yaml`** — sops-encrypted secrets (currently Vaultwarden client id/secret), decrypted at activation time using each host's SSH host key as the age identity.
## Keybinds
### Niri (compositor, `home/desktop/niri.nix`)
`Mod` is niri's default modifier (Super/Windows key).
| Bind | Action |
|---|---|
| `Mod+Return` | Spawn Alacritty |
| `Mod+Space` | Toggle DMS spotlight launcher |
| `Mod+F` | Fullscreen focused window |
| `Mod+V` | Toggle floating for focused window |
| `Mod+X` | Close focused window |
| `Mod+H` / `Mod+L` | Focus column left / right |
| `Mod+J` / `Mod+K` | Focus window down / up |
| `Mod+Shift+H` / `Mod+Shift+L` | Move column left / right |
| `Mod+Shift+J` / `Mod+Shift+K` | Move column to workspace down / up |
| `Mod+U` / `Mod+N` | Focus workspace up / down |
| `Mod+Shift+P` | Toggle overview |
| `Mod+P` | Toggle the on-screen keyboard (signals `wvkbd-mobintl`) |
| `Mod+Shift+E` | Quit niri |
| `Print` | Screenshot (interactive) |
| `Ctrl+Print` | Screenshot whole screen |
| `XF86AudioRaiseVolume` / `XF86AudioLowerVolume` | Volume ±5% |
| `XF86AudioMute` | Toggle mute |
| `XF86MonBrightnessUp` / `XF86MonBrightnessDown` | Brightness ±5 (via `dms ipc call brightness`) |
### Touchscreen gestures (`lisgd`, launched at niri startup, `home/desktop/niri.nix`)
| Gesture | Action |
|---|---|
| 3-finger swipe left → right | Focus column left |
| 3-finger swipe right → left | Focus column right |
| 3-finger swipe up → down | Focus workspace up |
| 3-finger swipe down → up | Focus workspace down |
| 4-finger swipe down → up | Toggle DMS spotlight |
| 1-finger swipe down → up, starting from the bottom edge | Toggle the on-screen keyboard |
| 1-finger swipe up → down, starting from the top edge | Maximize window to edges |
### On-screen keyboard (custom `wvkbd-mobintl` build, `home/programs/{layout,config,keymap}.custom.h`)
- Toggle show/hide: `Mod+P` or the bottom-edge swipe gesture above (both send `SIGRTMIN` to `wvkbd-mobintl`).
- The "⌨" key (`NextLayer`) cycles keyboard layers: `Full ⇄ Special` in portrait, `Landscape ⇄ LandscapeSpecial` in landscape.
- `Abc` (in the `Special` layer) returns to the base layer.
- `Cmp` (Compose) + a letter opens that letter's accent/diacritic picker (e.g. `Cmp` then `e` → é/è/ê/ë/ē…).
- The `q` key doubles as a shortcut into the emoji layer.
- Alternate script layouts exist in the layout source (Cyrillic, Arabic, Persian, Greek, Georgian, Hebrew) but are not wired into the active `layers[]` cycle — only `Full`/`Special` (portrait) and `Landscape`/`LandscapeSpecial` (landscape) are reachable from the running config.
### Neovim (`home/programs/nvim.nix`, leader = `<Space>`)
General:
| Bind | Action |
|---|---|
| `<leader>w` | Write file |
| `<leader>q` | Quit |
| `<leader>wq` | Write and quit |
| `<leader>x` | `chmod +x` the current file |
| `Q` | Disabled (no-op) |
| `o` / `O` | Open a line below/above, stay in normal mode |
| `jj` (insert mode) | Escape to normal mode |
Completion (insert mode, nvim-cmp):
| Bind | Action |
|---|---|
| `<C-Space>` | Trigger completion |
| `<CR>` | Confirm selection |
| `<C-n>` / `<C-p>` | Next / previous item |
Java LSP (buffer-local, active once `jdtls` attaches to a `.java` file):
| Bind | Action |
|---|---|
| `gd` | Go to definition |
| `gr` | Find references |
| `K` | Hover docs |
| `<leader>rn` | Rename symbol |
| `<leader>ca` | Code action |
| `<leader>f` | Format buffer |
| `<leader>oi` | Organize imports |
Debugging (nvim-dap / nvim-dap-ui, global):
| Bind | Action |
|---|---|
| `<leader>db` | Toggle breakpoint |
| `<leader>dB` | Conditional breakpoint (prompts for condition) |
| `<leader>dc` | Continue / start session (prompts for a config if none is running) |
| `<leader>dn` | Step over |
| `<leader>di` | Step into |
| `<leader>du` | Step out |
| `<leader>dr` | Toggle the debug REPL |
| `<leader>dq` | Terminate session |
| `<leader>de` (normal + visual) | Evaluate expression under cursor / selection |
### Other applications
- **Alacritty** (`home/programs/alacritty.nix`) — only theme/font/window settings are configured; keybindings are Alacritty's unmodified defaults.
- Everything else installed (LibreWolf, Thunderbird, Discord, VLC, Zathura, etc.) is installed via `home.packages`/`environment.systemPackages` with no keybind customization in this repo — they run with upstream defaults.
- `input-remapper` is enabled on `violet` (`hosts/violet/default.nix`) but has no remapping profile committed in this repo.
Generated
+149 -34
View File
@@ -1,38 +1,129 @@
{
"nodes": {
"danksearch": {
"dank-greeter": {
"inputs": {
"dank-qml-common": "dank-qml-common",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1789701749,
"narHash": "sha256-vVJUgNEUa+trNXZFK7DGmuV9HMz4GMiA+f+de6k51hw=",
"owner": "AvengeMedia",
"repo": "dank-greeter",
"rev": "c792f1e13287fed01b1bf1a80654553019f3e0cb",
"type": "github"
},
"original": {
"owner": "AvengeMedia",
"repo": "dank-greeter",
"type": "github"
}
},
"dank-qml-common": {
"flake": false,
"locked": {
"lastModified": 1789701545,
"narHash": "sha256-aNZwXDlF1NMIrMtPL3ZtDg5Q8LZY62DjnpPRoe2453g=",
"owner": "AvengeMedia",
"repo": "dank-qml-common",
"rev": "55d3897192f47692b7961812d94ad18004fa0ad8",
"type": "github"
},
"original": {
"owner": "AvengeMedia",
"repo": "dank-qml-common",
"type": "github"
}
},
"dank-qml-common_2": {
"flake": false,
"locked": {
"lastModified": 1789755182,
"narHash": "sha256-47BBqvpzKSKo65gRnGirwulJ/c6N3Dg+vEfErwXTu58=",
"owner": "AvengeMedia",
"repo": "dank-qml-common",
"rev": "ff99ec8a93c4a52d792e7020575540582f249ea9",
"type": "github"
},
"original": {
"owner": "AvengeMedia",
"repo": "dank-qml-common",
"type": "github"
}
},
"dank-qml-common_3": {
"flake": false,
"locked": {
"lastModified": 1788376015,
"narHash": "sha256-/tT8rTznLADndTwLBzdgzzgfJH1ZhYQibYo5v/F8U+U=",
"owner": "AvengeMedia",
"repo": "dank-qml-common",
"rev": "26396ce432d6c71c3f5367438f96f4a8d667e160",
"type": "github"
},
"original": {
"owner": "AvengeMedia",
"repo": "dank-qml-common",
"type": "github"
}
},
"dankcalendar": {
"inputs": {
"dank-qml-common": "dank-qml-common_2",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1789758001,
"narHash": "sha256-9mkKoWExAmPdKT5VEK5oW7XFs6wTaDtqXa8OUOS2UKk=",
"owner": "AvengeMedia",
"repo": "dankcalendar",
"rev": "feebbb5de09e57467c6bf3e97ec9366af8ad5c6b",
"type": "github"
},
"original": {
"owner": "AvengeMedia",
"repo": "dankcalendar",
"type": "github"
}
},
"dgop": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1784433272,
"narHash": "sha256-5Gz3pC/rcn8LLwzLZZhrpPMqY+PDdUzoFtXV3uWoitg=",
"lastModified": 1789657958,
"narHash": "sha256-0zWMFcxLZEVPzCRe5yDgPlPHBNgw3MMq78MAUvGNu/4=",
"owner": "AvengeMedia",
"repo": "danksearch",
"rev": "4b4905e2ef3454230fb648d2139f3139b742b0eb",
"repo": "dgop",
"rev": "56a43ff5b8c6b14c5a7c190a69eec43f2297d76b",
"type": "github"
},
"original": {
"owner": "AvengeMedia",
"repo": "danksearch",
"repo": "dgop",
"type": "github"
}
},
"dms": {
"inputs": {
"dank-qml-common": "dank-qml-common_3",
"flake-compat": "flake-compat",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1785111455,
"narHash": "sha256-aTNuC9NDBnYAeEtFsleeUwmGX3AZlKOutbl+LQRPkmQ=",
"lastModified": 1789657660,
"narHash": "sha256-NPYX33iiXo6aBwh7umfJzeZQBedupOG7pk5z171ID3s=",
"owner": "AvengeMedia",
"repo": "DankMaterialShell",
"rev": "069ddab041c738236a8910e4c39b65d9628d3018",
"rev": "2db7646fe3ab47fddfdb8723f2da07d61a0d47ac",
"type": "github"
},
"original": {
@@ -49,11 +140,11 @@
]
},
"locked": {
"lastModified": 1784857968,
"narHash": "sha256-83haLQzxrk6sCX76iQlloHWQ+TD0RKsK+LdVTMikNwk=",
"lastModified": 1789789500,
"narHash": "sha256-rBndooJeUIgPQewnYn31dx1yrk/fhAsKN8A3q4KcbGs=",
"owner": "AvengeMedia",
"repo": "dms-plugin-registry",
"rev": "78d478f34ad6790faea447c37d16bab63e1d3570",
"rev": "f50a3779a1e20b80e9148181f5f9f053664c4b74",
"type": "github"
},
"original": {
@@ -85,11 +176,11 @@
]
},
"locked": {
"lastModified": 1784350909,
"narHash": "sha256-ZWyzLbS1yKUTeFJLmdVuWNnHttL333/ldJbEE+KzCrM=",
"lastModified": 1789267039,
"narHash": "sha256-LWiBv9yAYFi2LPbUhDGHPGKYskJQjj2fw12OlyO1uQo=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "4ce190229c73d44536caa7072f6308fb2d8feeb3",
"rev": "ec172013fa62135f58fb58dd17ae9651e8f39727",
"type": "github"
},
"original": {
@@ -109,11 +200,11 @@
"xwayland-satellite-unstable": "xwayland-satellite-unstable"
},
"locked": {
"lastModified": 1784874881,
"narHash": "sha256-u4jhSIf/Un0qZB+Cn3hTTaHSI20XeAxYbA5o4faqdJs=",
"lastModified": 1785857305,
"narHash": "sha256-25q05zpF1sqOCxPPUG9DPPGd+EDW7SiAOWCzBWRS7r0=",
"owner": "sodiboo",
"repo": "niri-flake",
"rev": "ef7a2a3d719af46b906c22a3ebfb7d65627b2cd2",
"rev": "9ee3e13b60643448228353097880521658b2fe0e",
"type": "github"
},
"original": {
@@ -142,11 +233,11 @@
"niri-unstable": {
"flake": false,
"locked": {
"lastModified": 1784570726,
"narHash": "sha256-9EMn69JBcFWFgUM7f0VBAX+jBby5b9H3M59U75+5yI4=",
"lastModified": 1785701241,
"narHash": "sha256-ircVOzPWRircI39ac/tqJajr5OoJxEVrDlBb05TULEk=",
"owner": "YaLTeR",
"repo": "niri",
"rev": "7f26c3ee804fb6ed458ef7fb0e3c794f14e0b3bc",
"rev": "feb3e43f1475e0865bb89cbd1e898b34d1d2ccf6",
"type": "github"
},
"original": {
@@ -155,13 +246,34 @@
"type": "github"
}
},
"nixos-hardware": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1789752250,
"narHash": "sha256-q0J27mJDfd4BM9a7KcMVbcRmqyU+goQwudbMIu66qsg=",
"owner": "NixOS",
"repo": "nixos-hardware",
"rev": "b2d7d02644f0002535a3bb51a73780945cdc7ba4",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "master",
"repo": "nixos-hardware",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1784796856,
"narHash": "sha256-wWFrV5/Qbm+lyt5x20E/bSbfJiGKMo4RCxZV8cl/WZI=",
"lastModified": 1785828668,
"narHash": "sha256-8fsyqeO+mJqvIzeO4xIpgJe/f7MTbbVTEC6RT6WSXNs=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "e2587caef70cea85dd97d7daab492899902dbf5d",
"rev": "e72e4f299401a3689d4b3d5fc6496b11db7064eb",
"type": "github"
},
"original": {
@@ -189,11 +301,11 @@
},
"nixpkgs-unstable": {
"locked": {
"lastModified": 1784796856,
"narHash": "sha256-wWFrV5/Qbm+lyt5x20E/bSbfJiGKMo4RCxZV8cl/WZI=",
"lastModified": 1789684949,
"narHash": "sha256-ZKhUe/2IJUq1JhKxKMu8rbkgSGmPP2ZCqlIPn40aGCM=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "e2587caef70cea85dd97d7daab492899902dbf5d",
"rev": "e554fab72f81915600f3f449b786fd9af40439a5",
"type": "github"
},
"original": {
@@ -205,11 +317,11 @@
},
"nixpkgs_2": {
"locked": {
"lastModified": 1784856561,
"narHash": "sha256-J+Bx1Z6Oeoj2FgnBhRMKyUhhtDoOpTgXYaVLZpDjW4A=",
"lastModified": 1789749394,
"narHash": "sha256-cFTsMQz8Hzn8MT49oaeLSHg62tE86NykugCWkeM2ypk=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "597283ad8aa0b331c788e97c4c262d58877074ef",
"rev": "cf9d2fb3e50fa1cd5114c47505ea9177f7ff5f49",
"type": "github"
},
"original": {
@@ -221,11 +333,14 @@
},
"root": {
"inputs": {
"danksearch": "danksearch",
"dank-greeter": "dank-greeter",
"dankcalendar": "dankcalendar",
"dgop": "dgop",
"dms": "dms",
"dms-plugin-registry": "dms-plugin-registry",
"home-manager": "home-manager",
"niri": "niri",
"nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs_2",
"nixpkgs-unstable": "nixpkgs-unstable",
"sops-nix": "sops-nix",
@@ -239,11 +354,11 @@
]
},
"locked": {
"lastModified": 1783174389,
"narHash": "sha256-aCWC8ngycU7OdJrU2+Je3qf+1a2ykuBvpPhZT/9tXMc=",
"lastModified": 1789691124,
"narHash": "sha256-k+I+R6uwHX3VcJ7326qLV6vCahZUgsVl+i8sSU/Stxk=",
"owner": "Mic92",
"repo": "sops-nix",
"rev": "f1406619a3884cd5c47992a70b8b35c9c0fcb4c9",
"rev": "1e73e8f7176d65e1b55e324de099bbfff4b2c574",
"type": "github"
},
"original": {
+59 -5
View File
@@ -27,18 +27,33 @@
inputs.nixpkgs.follows = "nixpkgs";
};
dgop = {
url = "github:AvengeMedia/dgop";
inputs.nixpkgs.follows = "nixpkgs";
};
dank-greeter = {
url = "github:AvengeMedia/dank-greeter";
inputs.nixpkgs.follows = "nixpkgs";
};
dankcalendar = {
url = "github:AvengeMedia/dankcalendar";
inputs.nixpkgs.follows = "nixpkgs";
};
dms-plugin-registry = {
url = "github:AvengeMedia/dms-plugin-registry";
inputs.nixpkgs.follows = "nixpkgs";
};
danksearch = {
url = "github:AvengeMedia/danksearch";
nixos-hardware = {
url = "github:NixOS/nixos-hardware/master";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { nixpkgs, home-manager, sops-nix, niri, dms, dms-plugin-registry, danksearch, wvkbd-src, ... }@inputs: {
outputs = { nixpkgs, home-manager, sops-nix, niri, dms, dgop, dank-greeter, dankcalendar, dms-plugin-registry, wvkbd-src, nixos-hardware, ... }@inputs: {
nixosConfigurations = {
violet = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
@@ -48,6 +63,9 @@
./hosts/violet/default.nix
niri.nixosModules.niri
dms.nixosModules.default
dank-greeter.nixosModules.default
dms-plugin-registry.nixosModules.default
sops-nix.nixosModules.sops
@@ -60,7 +78,39 @@
home-manager.users.jashton = {
imports = [
./home/jashton.nix
danksearch.homeModules.default
dankcalendar.homeModules.default
];
};
}
];
};
lilac = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = { inherit inputs; };
modules = [
./hosts/lilac/default.nix
niri.nixosModules.niri
dms-plugin-registry.nixosModules.default
dms.nixosModules.default
dank-greeter.nixosModules.default
sops-nix.nixosModules.sops
nixos-hardware.nixosModules.framework-intel-core-ultra-series3
home-manager.nixosModules.home-manager {
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = { inherit inputs; };
home-manager.users.jashton = {
imports = [
./home/jashton.nix
dankcalendar.homeModules.default
];
};
}
@@ -75,6 +125,9 @@
./hosts/lavender/default.nix
niri.nixosModules.niri
dms.nixosModules.default
dank-greeter.nixosModules.default
dms-plugin-registry.nixosModules.default
sops-nix.nixosModules.sops
@@ -86,7 +139,8 @@
home-manager.users.jashton = {
imports = [
./home/jashton.nix
danksearch.homeModules.default
dankcalendar.homeModules.default
];
};
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

After

Width:  |  Height:  |  Size: 566 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 MiB

+99 -91
View File
@@ -14,7 +14,8 @@ let
-g "3,UD,*,*,P,niri msg action focus-workspace-up && sleep 0.4" \
-g "3,DU,*,*,P,niri msg action focus-workspace-down && sleep 0.4" \
-g "4,DU,*,*,P,dms ipc spotlight toggle && sleep 0.4" \
-g "1,DU,B,*,pkill -u jashton -RTMIN wvkbd-mobintl && sleep 0.4"
-g "1,DU,B,*,pkill -u jashton -RTMIN wvkbd-mobintl && sleep 0.4" \
-g "1,UD,T,*,P,niri msg action maximize-window-to-edges && sleep 0.4"
fi
'';
@@ -39,104 +40,111 @@ in
xdg.portal = {
enable = true;
# Use gtk or kde based on your preferred file picker dialog
config.niri = {
"org.freedesktop.impl.portal.FileChooser" = [ "gtk" ]; # or "kde"
default = [ "gnome" "gtk" ];
"org.freedesktop.impl.portal.FileChooser" = [ "gtk" ];
};
# Ensure the GTK portal is installed
extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
extraPortals = [
pkgs.xdg-desktop-portal-gnome
pkgs.xdg-desktop-portal-gtk
];
};
programs.niri = {
settings = {
# Autostart DMS if you prefer launching it directly from Niri instead of systemd
spawn-at-startup = [
{ command = [ "dms" "run" ]; }
{ command = [ "${launch-wvkbd}/bin/launch-wvkbd" ]; }
{ command = [ "${launch-lisgd}/bin/launch-lisgd" ]; } # Spawns the daemon
];
hotkey-overlay = {
skip-at-startup = true;
};
input = {
keyboard.xkb.layout = "us";
touchpad = {
tap = true;
natural-scroll = true;
};
};
layout = {
gaps = 8;
center-focused-column = "never";
default-column-width.proportion = 1.0;
border.enable = false;
#tab-indicator.corner-radius = 18.0;
focus-ring = {
enable = false;
width = 2;
};
};
prefer-no-csd = true;
window-rules = [
{ # All windows
geometry-corner-radius = {
bottom-left = 25.0;
bottom-right = 25.0;
top-right = 25.0;
top-left = 25.0;
};
draw-border-with-background = true;
clip-to-geometry = true;
#programs.niri.enable = true;
xdg.configFile."niri/config.kdl".text = lib.mkForce ''
input {
keyboard {
xkb {
layout "us"
model ""
rules ""
variant ""
}
repeat-delay 600
repeat-rate 25
track-layout "global"
}
];
touchpad {
tap
natural-scroll
}
}
screenshot-path "~/media/pics/screenshots/%Y-%m-%d %H-%M-%S.png"
prefer-no-csd
layout {
gaps 8
struts {
left 0
right 0
top 0
bottom 0
}
focus-ring { off; }
border { off; }
default-column-width { proportion 1.000000; }
center-focused-column "never"
}
cursor {
xcursor-theme "default"
xcursor-size 24
}
hotkey-overlay { skip-at-startup; }
binds {
Ctrl+Print { screenshot-screen; }
Mod+F { fullscreen-window; }
Mod+H { focus-column-left; }
Mod+J { focus-window-down; }
Mod+K { focus-window-up; }
Mod+L { focus-column-right; }
Mod+N { focus-workspace-down; }
Mod+V { toggle-window-floating; }
Mod+P { spawn "pkill" "-RTMIN" "wvkbd-mobintl"; }
Mod+Return { spawn "alacritty"; }
Mod+Shift+E { quit; }
Mod+Shift+H { move-column-left; }
Mod+Shift+J { move-column-to-workspace-down; }
Mod+Shift+K { move-column-to-workspace-up; }
Mod+Shift+L { move-column-right; }
Mod+Shift+P { toggle-overview; }
Mod+Space { spawn "dms" "ipc" "spotlight" "toggle"; }
Mod+U { focus-workspace-up; }
Mod+X { close-window; }
Print { screenshot; }
XF86AudioLowerVolume { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.05-"; }
XF86AudioMute { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; }
XF86AudioRaiseVolume { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.05+"; }
XF86MonBrightnessDown { spawn "dms" "ipc" "call" "brightness" "decrement" "5" ""; }
XF86MonBrightnessUp { spawn "dms" "ipc" "call" "brightness" "increment" "5" ""; }
}
spawn-at-startup "/nix/store/b1kxyzg5r6644mcmjh8jwsb8rinqzsw8-launch-wvkbd/bin/launch-wvkbd"
spawn-at-startup "/nix/store/l9k161qcs6ypzzbicjhkn8b203r610j6-launch-lisgd/bin/launch-lisgd"
window-rule {
draw-border-with-background true
geometry-corner-radius 25.000000 25.000000 25.000000 25.000000
clip-to-geometry true
}
# Vim Keybindings & Built-in Features
binds = with config.lib.niri.actions; {
# Launchers & Session Control
"Mod+Return".action.spawn = [ "alacritty" ];
"Mod+P".action.spawn = [ "pkill" "-RTMIN" "wvkbd-mobintl" ];
"Mod+Space".action.spawn = [ "dms" "ipc" "spotlight" "toggle" ];
"Mod+X".action.close-window = [];
"Mod+F".action.fullscreen-window = [];
"Mod+Shift+E".action.quit = [];
"Mod+Shift+P".action.toggle-overview = [];
window-rule {
match app-id="^Alacritty$"
# Vim Focus Movement
"Mod+H".action.focus-column-left = [];
"Mod+J".action.focus-window-down = [];
"Mod+K".action.focus-window-up = [];
"Mod+L".action.focus-column-right = [];
background-effect {
blur true
}
}
# Workspace Navigation
"Mod+N".action.focus-workspace-down = [];
"Mod+U".action.focus-workspace-up = [];
overview {
backdrop-color "#987CA7"
}
# Vim Window Reordering
"Mod+Shift+H".action.move-column-left = [];
"Mod+Shift+L".action.move-column-right = [];
"Mod+Shift+J".action.move-column-to-workspace-down = [];
"Mod+Shift+K".action.move-column-to-workspace-up = [];
gestures {
hot-corners {
off
}
}
# Volume & Brightness Media Controls
"XF86AudioRaiseVolume".action.spawn = [ "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.05+" ];
"XF86AudioLowerVolume".action.spawn = [ "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.05-" ];
"XF86AudioMute".action.spawn = [ "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle" ];
"XF86MonBrightnessUp".action.spawn = [ "dms" "ipc" "call" "brightness" "increment" "5" "" ];
"XF86MonBrightnessDown".action.spawn = [ "dms" "ipc" "call" "brightness" "decrement" "5" "" ];
# Screenshots
"Print".action.screenshot = [];
"Ctrl+Print".action.screenshot-screen = [];
};
};
};
include "/home/jashton/.config/niri/dms/outputs.kdl"
include "/home/jashton/.config/niri/dms/binds.kdl"
include "/home/jashton/.config/niri/dms/cursor.kdl"
include "/home/jashton/.config/niri/dms/windowrules.kdl"
'';
}
+210 -8
View File
@@ -37,20 +37,34 @@ in
GTK_IM_MODULE = "wayland"; # Forces GTK apps to use Wayland text-input protocols
QT_IM_MODULE = "wayland"; # Forces Qt apps to use Wayland text-input protocols
TEXT_INPUT_PRESENT = "1"; # Explicitly signals virtual keyboard capability to the shell
JAVA_HOME = "${pkgs.jdk21.home}";
};
home.sessionPath = [
"$HOME/.cargo/bin"
];
home.packages = with pkgs; [
android-tools
antigravity
asciinema
claude-code
discord
eclipses.eclipse-java
ffmpeg
gemini-cli
kicad
libreoffice
mc
opencode
librewolf
pdftk
picom
prismlauncher
scrot
signal-desktop
spotify
thunderbird
tor
tor-browser
vlc
wtype
xwayland-satellite
@@ -59,22 +73,156 @@ in
custom_wvkbd
(pkgs.writeShellScriptBin "jroot" ''
d="$PWD"
while [ "$d" != "/" ]; do
if [ -f "$d/.classpath" ]; then printf '%s\n' "$d"; exit 0; fi
d="$(dirname "$d")"
done
echo "jroot: no .classpath found at or above $PWD" >&2
exit 1
'')
(pkgs.writeShellScriptBin "jbuild" ''
set -euo pipefail
if [ $# -lt 1 ]; then
echo "usage: jbuild <package.MainClass> [args...]" >&2
exit 1
fi
ROOT="$(jroot)"
cd "$ROOT"
mkdir -p bin
# Set the target directory, defaulting to the current directory (.) if $1 is empty
TARGET_DIR="$1"
SOURCES_FILE="SOURCES"
# Fix the find command to safely search the target directory
find "$TARGET_DIR" -name '*.java' > "$SOURCES_FILE"
if [ ! -s "$SOURCES_FILE" ]; then
# Fix the error message to reference the directory, not the output text file
echo "jbuild: no .java files found under $TARGET_DIR" >&2
exit 1
fi
# Source roots for every top-level package (assignments/assign04 -> package assign04, etc.).
# Needed so javac can resolve cross-package imports (eg. assign04 -> timing) and
# transitively compile whatever those imports require, even though TARGET_DIR only
# covers one subtree.
SOURCEPATH="assignments:labs:timing:playground:src"
javac -g --release 21 -encoding UTF-8 -d bin -cp "lib/*" -sourcepath "$SOURCEPATH" @"$SOURCES_FILE"
'')
(pkgs.writeShellScriptBin "jclean" ''
set -euo pipefail
ROOT="$(jroot)"
rm -rf "$ROOT/bin"
echo "cleaned $ROOT/bin"
'')
(pkgs.writeShellScriptBin "jrun" ''
set -euo pipefail
if [ $# -lt 3 ]; then
echo "usage: jrun <folder> <package> <MainClass> [args...]" >&2
exit 1
fi
ROOT="$(jroot)"
cd "$ROOT"
jbuild "$1"
MAIN="$2.$3"
shift 3
java -cp "bin:lib/*" "$MAIN" "$@"
'')
(pkgs.writeShellScriptBin "jtest" ''
set -euo pipefail
if [ "$#" -lt 1 ]; then
echo "usage: jtest <package.MainClass> [args...]"
exit 1
fi
# sort -V so 1.10.2 beats 1.9.0; plain tail -n1 sorts those the wrong way.
JUNIT="$(ls -1 "$HOME"/dev/jars/junit-platform-console-standalone-*.jar 2>/dev/null | sort -V | tail -n1 || true)"
if [ -z "$JUNIT" ]; then
echo "jtest: no junit-platform-console-standalone jar in ~/dev/jars" >&2
exit 1
fi
# --debug suspends the test JVM on start and waits for nvim-dap to attach
# on :5005 (see the "Attach to jtest" config in nvim.nix), so breakpoints
# set before running jtest --debug are hit from the very first test.
DEBUG_ARGS=()
if [[ "$1" = "debug" ]]; then
DEBUG_ARGS=(-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005)
shift
echo "jtest: waiting for debugger to attach on 127.0.0.1:5005..." >&2
fi
ROOT="$(jroot)"
cd "$ROOT"
jbuild "$1"
if [ $# -eq 0 ]; then
exec java "''${DEBUG_ARGS[@]}" -jar "$JUNIT" execute --class-path "bin:lib/*" --scan-class-path --details=tree
fi
ARGS=""
for pkg in "$@"; do
ARGS="$ARGS --select-package $pkg"
done
exec java "''${DEBUG_ARGS[@]}" -jar "$JUNIT" execute --class-path "bin:lib/*" $ARGS --details=tree
'')
(pkgs.writeShellScriptBin "fkill" ''
set -eu
if [ $# -lt 1 ]; then
echo "usage: fkill <process-name>" >&2
echo "eg. fkill firefox" >&2
exit 1
fi
PROGRAM="$1"
if ! pgrep -x -- "$PROGRAM" >/dev/null 2>&1; then
echo "fkill: no process named '$PROGRAM'" >&2
exit 1
fi
pgrep -a -x -- "$PROGRAM"
printf 'Kill these? [y/N] '
read -r reply
case "$reply" in
[yY]*) pkill -x -- "$PROGRAM" ;;
*) echo "aborted" ;;
esac
'')
(pkgs.writeShellScriptBin "find-open-port" ''
if [ -z "$1" ]; then
set -u
if [ $# -lt 1 ]; then
echo "Please provide an application name, project directory, or other identifier."
echo " Usage: find-open-port $HOME/dev/some-project"
echo ' Usage: find-open-port $HOME/dev/some-project'
echo " Usage: find-open-port some-app"
exit 1
fi
APP_NAME=$1
REGISTRY_FILE=$HOME/.dotfiles/ports.registry
APP_NAME="$1"
REGISTRY_FILE="$HOME/.dotfiles/ports.registry"
MIN_PORT=8000
MAX_PORT=8999
MAX_RETRIES=50
mkdir -p "$(dirname "$REGISTRY_FILE")"
if [ -f "$REGISTRY_FILE" ] && grep -q "^$APP_NAME : " "$REGISTRY_FILE"; then
echo "Already registered:"
grep "^$APP_NAME : " "$REGISTRY_FILE"
exit 0
fi
echo "Searching for available port between $MIN_PORT and $MAX_PORT for $APP_NAME..."
for ((i=1; i<=MAX_RETRIES; i++)); do
@@ -108,9 +256,61 @@ in
'';
};
systemd.user.services.lan-mouse = {
Unit = {
Description = "Lan Mouse Daemon";
After = [ "graphical-session.target" ];
PartOf = [ "graphical-session.target" ];
};
Install = {
WantedBy = [ "graphical-session.target" ];
};
Service = {
# The --daemon flag ensures it runs silently in the background without opening the GUI
ExecStart = "${pkgs.lan-mouse}/bin/lan-mouse --daemon";
};
};
programs.opencode = {
enable = true;
settings = {
provider = {
ollama = {
npm = "@ai-sdk/openai-compatible";
name = "Ollama (Local)";
options = {
baseURL = "http://localhost:11434/v1";
};
models = {
"qwen3-coder-next:q4_K_M" = {
name = "Qwen3 Coder Next";
};
"qwen3.6:35b-a3b-q4_K_M" = {
name = "Qwen3.6 35B Thinker";
};
};
};
};
};
};
programs.ssh = {
enable = true;
matchBlocks = {
enableDefaultConfig = false;
settings = {
"*" = {
forwardAgent = false;
addKeysToAgent = "no";
compression = false;
serverAliveInterval = 0;
serverAliveCountMax = 3;
hashKnownHosts = false;
userKnownHostsFile = "~/.ssh/known_hosts";
controlMaster = "no";
controlPath = "~/.ssh/master-%r@%n:%p";
controlPersist = "no";
};
"heliotrope" = {
hostname = "100.77.235.110";
};
@@ -120,9 +320,11 @@ in
"violet" = {
hostname = "100.101.100.84";
};
"lilac" = {
hostname = "100.82.51.88";
};
};
};
home.stateVersion = "26.05"; # DO NOT CHANGE
}
+3 -1
View File
@@ -20,8 +20,10 @@
};
colors = {
draw_bold_text_with_bright_colors = true;
primary = {
background = "#08090b"; # Black
background = "#080808"; # Carbon Black
foreground = "#8d739c"; # Vintage Lavender 1
};
+1 -1
View File
@@ -1173,7 +1173,7 @@ static struct key keys_landscape_special[] = {
{";", ":", 1.0, Code, KEY_SEMICOLON, .scheme = 1},
{"'", "\"", 1.0, Code, KEY_APOSTROPHE, .scheme = 1},
{",", "<", 1.0, Code, KEY_COMMA, .scheme = 1},
{".", ">", 1.0, Code, KEY_SLASH, .scheme = 1},
{".", ">", 1.0, Code, KEY_DOT, .scheme = 1},
{"/", "?", 1.0, Code, KEY_SLASH, .scheme = 1},
{"", "", 0.0, EndRow},
+209 -2
View File
@@ -1,5 +1,8 @@
{ config, pkgs, ... }:
let
javaDebug = pkgs.vscode-extensions.vscjava.vscode-java-debug;
in
{
programs.neovim = {
enable = true;
@@ -29,7 +32,6 @@
vim.opt.foldlevel = 99
vim.g.mapleader = " "
vim.keymap.set("n", "<leader>", ":")
vim.keymap.set("n", "<leader>w", "<cmd>w<CR>", { silent = true })
vim.keymap.set("n", "<leader>q", "<cmd>q<CR>", { silent = true })
vim.keymap.set("n", "<leader>wq", "<cmd>wq<CR>", { silent = true })
@@ -67,7 +69,7 @@
})
require("lualine").setup({
ons = { theme = "auto" },
options = { theme = "auto" },
})
require("neocord").setup({
@@ -85,6 +87,197 @@
delete = { text = "_" },
},
})
-- nvim-treesitter no longer exposes a configs module; highlighting is
-- started per buffer. Indent is deliberately left alone so treesitter
-- doesn't fight the Eclipse-matching tab settings below.
vim.api.nvim_create_autocmd("FileType", {
pattern = { "java", "xml", "nix", "lua", "rs" },
callback = function(args)
pcall(vim.treesitter.start, args.buf)
end,
})
-- Java indentation must match Eclipse's formatter, not the 2-space default.
vim.api.nvim_create_autocmd("FileType", {
pattern = "java",
callback = function()
vim.bo.expandtab = false
vim.bo.tabstop = 4
vim.bo.shiftwidth = 4
vim.bo.softtabstop = 4
end,
})
local cmp = require("cmp")
local luasnip = require("luasnip")
cmp.setup({
snippet = { expand = function(a) luasnip.lsp_expand(a.body) end },
mapping = cmp.mapping.preset.insert({
["<C-Space>"] = cmp.mapping.complete(),
["<CR>"] = cmp.mapping.confirm({ select = false }),
["<C-n>"] = cmp.mapping.select_next_item(),
["<C-p>"] = cmp.mapping.select_prev_item(),
}),
sources = {
{ name = "nvim_lsp" },
{ name = "luasnip" },
{ name = "buffer" },
{ name = "path" },
},
})
local capabilities = require("cmp_nvim_lsp").default_capabilities()
-- rustaceanvim auto-starts rust-analyzer on FileType rust, picking it up
-- from PATH -- so per-project rust-analyzer pins (e.g. from a project's
-- flake devShell/direnv) are used automatically without extra config here.
vim.g.rustaceanvim = {
server = {
capabilities = capabilities,
on_attach = function(_, bufnr)
local map = function(k, f) vim.keymap.set("n", k, f, { buffer = bufnr, silent = true }) end
map("gd", vim.lsp.buf.definition)
map("gr", vim.lsp.buf.references)
map("K", vim.lsp.buf.hover)
map("<leader>rn", vim.lsp.buf.rename)
map("<leader>ca", vim.lsp.buf.code_action)
map("<leader>f", function() vim.lsp.buf.format({ async = true }) end)
end,
},
}
local bundles = vim.fn.glob(
"${javaDebug}/share/vscode/extensions/vscjava.vscode-java-debug/server/com.microsoft.java.debug.plugin-*.jar",
true, true)
if #bundles == 0 then
vim.notify("java-debug bundle not found - Java debugging disabled", vim.log.levels.WARN)
end
local java_home = os.getenv("JAVA_HOME")
if not java_home then
local javac = vim.fn.exepath("javac")
if javac ~= "" then
java_home = vim.fn.fnamemodify(vim.fn.resolve(javac), ":h:h")
end
end
if not java_home then
vim.notify("No JAVA_HOME and no javac on PATH - jdtls will guess a runtime", vim.log.levels.WARN)
end
if not java_home then
vim.notify("JAVA_HOME unset - jdtls will guess a runtime", vim.log.levels.WARN)
end
-- Eclipse metadata wins over build files, build files over .git, and the
-- file's own directory is the last resort so bare folders still attach.
local function find_project_root()
local setup = require("jdtls.setup")
return setup.find_root({ ".project", ".classpath" })
or setup.find_root({ "pom.xml", "build.gradle", "build.gradle.kts" })
or setup.find_root({ ".git" })
or vim.fn.expand("%:p:h")
end
local dap_configured = false
local function start_jdtls()
local jdtls = require("jdtls")
local root_dir = find_project_root()
local project_name = vim.fn.fnamemodify(root_dir, ":p:h:t")
.. "-" .. vim.fn.sha256(root_dir):sub(1, 8)
local workspace = vim.fn.stdpath("cache") .. "/jdtls-workspaces/" .. project_name
local java_settings = {
configuration = {
updateBuildConfiguration = "automatic",
},
-- Keep a stray pom.xml from overriding the Eclipse project model.
-- Flip these on if a course actually requires Maven or Gradle.
import = {
maven = { enabled = false },
gradle = { enabled = false },
},
project = {
outputPath = "bin",
referencedLibraries = { "lib/**/*.jar" },
},
signatureHelp = { enabled = true },
eclipse = { downloadSources = true },
}
if java_home then
java_settings.configuration.runtimes = {
{ name = "JavaSE-21", path = java_home, default = true },
}
end
-- If the repo carries an exported Eclipse formatter profile, use it verbatim.
local formatter = root_dir .. "/.settings/eclipse-formatter.xml"
if vim.uv.fs_stat(formatter) then
java_settings.format = { settings = { url = formatter } }
end
jdtls.start_or_attach({
cmd = { "jdtls", "-data", workspace },
root_dir = root_dir,
capabilities = capabilities,
settings = { java = java_settings },
init_options = { bundles = bundles },
on_attach = function(_, bufnr)
require("jdtls").setup_dap({ hotcodereplace = "auto" })
if not dap_configured then
dap_configured = true
require("jdtls.dap").setup_dap_main_class_configs()
end
local map = function(k, f) vim.keymap.set("n", k, f, { buffer = bufnr, silent = true }) end
map("gd", vim.lsp.buf.definition)
map("gr", vim.lsp.buf.references)
map("K", vim.lsp.buf.hover)
map("<leader>rn", vim.lsp.buf.rename)
map("<leader>ca", vim.lsp.buf.code_action)
map("<leader>f", function() vim.lsp.buf.format({ async = true }) end)
map("<leader>oi", require("jdtls").organize_imports)
end,
})
end
vim.api.nvim_create_autocmd("FileType", {
pattern = "java",
callback = start_jdtls,
})
local dap, dapui = require("dap"), require("dapui")
dapui.setup()
require("nvim-dap-virtual-text").setup()
-- `jtest --debug` suspends the test JVM waiting on :5005; this lets
-- <leader>dc attach to it directly from the config picker.
dap.configurations.java = dap.configurations.java or {}
table.insert(dap.configurations.java, {
type = "java",
request = "attach",
name = "Attach to jtest (:5005)",
hostName = "127.0.0.1",
port = 5005,
})
dap.listeners.after.event_initialized["dapui"] = function() dapui.open() end
dap.listeners.before.event_terminated["dapui"] = function() dapui.close() end
dap.listeners.before.event_exited["dapui"] = function() dapui.close() end
vim.keymap.set("n", "<leader>db", dap.toggle_breakpoint)
vim.keymap.set("n", "<leader>dB", function()
dap.set_breakpoint(vim.fn.input("Condition: "))
end)
vim.keymap.set("n", "<leader>dc", dap.continue)
vim.keymap.set("n", "<leader>dn", dap.step_over)
vim.keymap.set("n", "<leader>di", dap.step_into)
vim.keymap.set("n", "<leader>du", dap.step_out)
vim.keymap.set("n", "<leader>dr", dap.repl.toggle)
vim.keymap.set("n", "<leader>dq", dap.terminate)
vim.keymap.set({ "n", "v" }, "<leader>de", function() dapui.eval() end)
'';
plugins = with pkgs.vimPlugins; [
@@ -95,6 +288,20 @@
{ plugin = lualine-nvim; }
{ plugin = neocord; }
{ plugin = gitsigns-nvim; }
{ plugin = nvim-jdtls; }
{ plugin = nvim-dap; }
{ plugin = nvim-dap-ui; }
{ plugin = nvim-nio; }
{ plugin = nvim-dap-virtual-text; }
{ plugin = nvim-cmp; }
{ plugin = cmp-nvim-lsp; }
{ plugin = cmp-buffer; }
{ plugin = cmp-path; }
{ plugin = luasnip; }
{ plugin = cmp_luasnip; }
{ plugin = rustaceanvim; }
{ plugin = (nvim-treesitter.withPlugins (p: [ p.java p.xml p.nix p.lua p.rust ])); }
];
};
}
+5
View File
@@ -9,4 +9,9 @@
networking.hostName = "lavender";
system.stateVersion = "26.05";
hardware.graphics = {
enable = true;
enable32Bit = true;
};
}
+81
View File
@@ -0,0 +1,81 @@
{ config, pkgs, inputs, ... }:
let
unstable = import inputs.nixpkgs-unstable {
system = pkgs.stdenv.hostPlatform.system;
config.allowUnfree = true;
};
in
{
imports = [
./hardware.nix
../../system
];
networking.hostName = "lilac";
services.fwupd.enable = true;
services.fprintd.enable = true;
services.hardware.bolt.enable = true;
system.stateVersion = "26.05";
environment.systemPackages = with pkgs; [
framework-tool
# GPU compute diagnostics
clinfo
vulkan-tools
intel-gpu-tools
# Vulkan-accelerated llama.cpp CLI/server for manual/advanced use
(llama-cpp.override { vulkanSupport = true; })
];
boot.kernelModules = [ "bnep" ];
networking.interfaces.bnep0.ipv4.addresses = [{
address = "10.0.0.1";
prefixLength = 24;
}];
networking.firewall.interfaces."bnep0".allowedUDPPorts = [ 4242 ];
systemd = {
services = {
# 1. Start the listening server profile
bt-pan-server = {
description = "Bluetooth PAN GN Server";
after = [ "bluetooth.service" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
ExecStart = "${pkgs.bluez-tools}/bin/bt-network -s nap bnep";
Restart = "always";
RestartSec = 5;
};
};
};
};
hardware.graphics = {
enable = true;
enable32Bit = true;
extraPackages = with pkgs; [
intel-media-driver # Hardware acceleration
intel-vaapi-driver
vpl-gpu-rt # Video processing runtime
intel-compute-runtime # OpenCL + Level Zero GPU compute (Arc iGPU)
];
extraPackages32 = with pkgs.pkgsi686Linux; [
intel-media-driver
];
};
services.power-profiles-daemon.enable = true;
services.thermald.enable = true;
services.ollama = {
enable = true;
package = unstable.ollama-vulkan;
};
}
+41
View File
@@ -0,0 +1,41 @@
# 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 = [ "xhci_pci" "thunderbolt" "nvme" "usb_storage" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/829d5d81-c2d1-466f-a490-a97ec2a29bc8";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/530C-3D2D";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ];
};
swapDevices =
[ { device = "/dev/disk/by-uuid/3e31b909-ac9d-4329-9ed5-595ea5a9b099"; }
];
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware = {
cpu.intel = {
npu.enable = true;
updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
};
bluetooth.enable = true;
};
}
+58 -1
View File
@@ -9,7 +9,64 @@
networking.hostName = "violet";
services.power-profiles-daemon.enable = false;
services.power-profiles-daemon.enable = true;
services.hardware.bolt.enable = true;
services.logind = {
settings = {
Login.HandleLidSwitch = "ignore";
Login.lidSwitchDocked = "ignore";
Login.lidSwitchExternalPower = "ignore";
};
};
services.input-remapper.enable = true;
system.stateVersion = "26.05";
boot.kernelModules = [ "bnep" ];
networking.interfaces.bnep0.ipv4.addresses = [{
address = "10.0.0.2";
prefixLength = 24;
}];
networking.firewall.interfaces."bnep0".allowedUDPPorts = [ 4242 ];
systemd = {
services = {
bt-pan-client = {
description = "Bluetooth PAN Client Connection to Device A";
after = [ "bluetooth.service" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
# Replace XX:XX:XX:XX:XX:XX with Device B's actual Bluetooth MAC Address
ExecStartPre = "${pkgs.bluez}/bin/bluetoothctl trust 84:D1:C1:A9:EE:52";
ExecStart = "${pkgs.bluez-tools}/bin/bt-network -c 84:D1:C1:A9:EE:52 bnep";
Restart = "always";
RestartSec = 10; # Retry every 10 seconds if Device B goes out of range
};
};
};
};
services.tlp = {
enable = false;
settings = {
USB_AUTOSUSPEND = 0;
# AC
CPU_SCALING_GOVERNOR_ON_AC = "performance";
CPU_ENERGY_PERF_POLICY_ON_AC = "performance";
SOUND_POWER_SAVE_ON_AC = 0;
PCIE_ASPM_ON_AC = "default";
CPU_BOOST_ON_BAT = 0;
# Battery
CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
CPU_ENERGY_PERF_POLICY_ON_BAT = "power";
SOUND_POWER_SAVE_ON_BAT = 1;
PCIE_ASPM_ON_BAT = "powersupersave";
CPU_BOOST_ON_AC = 1;
};
};
}
+2 -15
View File
@@ -39,7 +39,7 @@
'';
services.howdy = {
enable = true;
enable = false;
control = "sufficient";
settings = {
video = {
@@ -60,19 +60,6 @@
sensor.iio.enable = true;
graphics.enable = true;
bluetooth = {
enable = true;
powerOnBoot = true;
settings = {
General = {
Experimental = true;
KernelExperimental = true;
ControllerMode = "dual";
Enable = "Source,Sink,Media,Socket";
};
};
};
bluetooth.enable = true;
};
}
+19 -10
View File
@@ -4,22 +4,31 @@ sops:
age:
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAyNjkvMzI5MUtPZEVua0U1
TkxIREI3MnNNbytGTStXWWxwdm9XbEYwTmlZCnhMcGZGNnU2RTVtRzVUWWxzRzFw
NTRVT1ZSUFZOY29JNWZacjdoMjE1S3MKLS0tIFVoZk5Ea3pMUUYvYVgvUzdTN2Yx
V3VITk1wc05DK0tvRnBNZ1ptSldWUGsKT3fSHkqsjkvtRgbPpvIz0ufGPf4pZh6G
iibDAgCCrsHk0GViDIBlnwOHgwCM4io3j565M+jS6cjV2YKsOHz2Ng==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA5THRkQUg1S1pRTEpHdjRT
MThsR2tuSytIdzdvWndqMnM3MUNxRk5PMHdBCkRRalFpRC8zQ012RkNKYlloUGpH
cWJ1bmZEL3VxRndrei9BbGlNYnR3amsKLS0tIFEvR295a2VsRXJsZ1IzSUZCWlhI
akcybUs1cmlyL2I0U2tXQmdYb3V5NVUKQ0bkyCvBwpa7BUolE/QXDib5tZ0QvIie
cZZ4NDdhq7EtS++sQl6AN9ZUp209F49XMoV/3u17njg1Mdqt2kM5vw==
-----END AGE ENCRYPTED FILE-----
recipient: age1az6l56h4m38jw2hm7t7a99wp9f88s845sg29grtmdpz72lrkc5cq66kmcv
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQelp5Y2E2WFM1TFhIb1gz
eS9lWTAydUYrQlYxZkY5akt3MkI5TGlXSVhRCktTV0tFcmFwaS9VVTdwZTRlWkFF
alNQYW83TTcycytWVHVZUVhmOU5ETU0KLS0tIGJmSWZRaW5tM3R6a3ZlaitSb3d3
a0JFN3NORTBFYVpsMjJkUHdtbFh4c1EK7lRQR/qO3rpctSDC6Mvy6eAA6zj70MDD
cmUiMcIDn2FyX5d9r2jk5EZtx2rZPB4ti4pp4Lox3zuEMMCksaFXmw==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBmY2hSRWRjRXBNMXduUTZw
NHlyUGxoRnZyVFYzMENDVTljeGpoVlBReFZ3Ci9aREtkYjJuUklaYXljSkNod0RG
NHhReE5Sck9DRmR2ZlJYdGZEM3pieDAKLS0tIDlYbWV2UllheFRQRUZwVmRteDJW
NU9wZHQyU0t3Tm5odE9UUTVmZkMwZlUKcnXTTlGDMMMwtfIbAOT8UiM/yTyuoDmA
+sqOslfVPW/FgCXtCdca2wc3SFs6LjPNmuJFp14tUQByqftNgLv3gA==
-----END AGE ENCRYPTED FILE-----
recipient: age1cd40qmufxzvw8dkml9340czqfq6ta3kxpjfj47jpavwn2t7ghywsxhqz79
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBBYkRuVERsU0JXaXkwc1NM
MFlZUzlzWEpWbEVPUTZTcTdLS0hFaXJkc0dnCnh2dDdXZXMreDRCMmU2anNhUnl4
ek5zc2hQYThXWVBZM0dTN1F2MXlFV0EKLS0tIG05NmdrK3BJUDVsc0t4dWhrRzZF
VnZNV0hpRlZnbEVvc0NSa2NDTU9HeEUKD68eN/3/ReQYS1z0kQ6Txa18hVqrEVo+
Cuii27UwrwN07cE1XZx7PHG17pfuCzdnxFPr3CNhFPWCz4f/CD13SA==
-----END AGE ENCRYPTED FILE-----
recipient: age1dsf6z3hcr8qrtptdk6xyky9c99tdpjyrnuaawv4atme9rffhps9qpwdn6j
lastmodified: "2026-08-05T02:52:44Z"
mac: ENC[AES256_GCM,data:69aZI03tg5IakwK80lx/eVrFq84WB2dk3DFKc5X5Idc2irrz2AodqsmlBNkrDDC6bnv1kUAW8dQlOscbHxKNtOq+lzEtuVI88A2sO1JT06ILFMMfj3R2BEZPtuidl/iytovUKmZrL9JzlNKTd/74htsBvC3cLoIk7r/WfyfoU4w=,iv:r2Jzq9IqL+ssKo13tpJ4OrgnPxxNaNaYbAa0+DnLt54=,tag:GL5AEZPDudVB+IQZtbmwvg==,type:str]
unencrypted_suffix: _unencrypted
+2 -2
View File
@@ -5,6 +5,6 @@
boot.loader.efi.canTouchEfiVariables = true;
boot.kernelPackages = pkgs.linuxPackages_latest;
boot.kernelModules = [ "uinput" ];
system.nixos.label = "niri-v.1.2";
environment.pathsToLink = [ "/libexec" ];
system.nixos.label = "niri-v.1.3";
environment.pathsToLink = [ "/libexec" "/share/xdg-desktop-portal" "/share/xdg-desktop-portal/portals" ];
}
+2
View File
@@ -8,4 +8,6 @@
./locale.nix
./power.nix
];
hardware.flipperzero.enable = true;
}
+6
View File
@@ -43,6 +43,12 @@
];
};
shellInit = ''
if [ -f "/etc/profiles/per-user/$USER/etc/profile.d/hm-session-vars.sh" ]; then
. "/etc/profiles/per-user/$USER/etc/profile.d/hm-session-vars.sh"
fi
'';
interactiveShellInit = ''
if [ -f "/run/secrets/vaultwarden_clientid" ]; then
export BW_CLIENTID=$(cat /run/secrets/vaultwarden_clientid)
-27
View File
@@ -2,31 +2,4 @@
{
boot.kernelParams = [ "mem_sleep_default=deep" ];
services.power-profiles-daemon.enable = false;
services.tlp = {
enable = true;
settings = {
USB_AUTOSUSPEND = 0;
# AC
CPU_SCALING_GOVERNOR_ON_AC = "performance";
CPU_ENERGY_PERF_POLICY_ON_AC = "performance";
SOUND_POWER_SAVE_ON_AC = 0;
PCIE_ASPM_ON_AC = "default";
CPU_BOOST_ON_BAT = 0;
# Battery
CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
CPU_ENERGY_PERF_POLICY_ON_BAT = "power";
SOUND_POWER_SAVE_ON_BAT = 1;
PCIE_ASPM_ON_BAT = "powersupersave";
CPU_BOOST_ON_AC = 1;
# Battery Thresholds
START_CHARGE_THRESH_BAT0 = 40;
STOP_CHARGE_THRESH_BAT0 = 80;
};
};
}
+16 -6
View File
@@ -2,17 +2,27 @@
{
imports = [
./pi-hole.nix
];
imports = [];
networking = {
networkmanager.enable = true;
networkmanager = {
enable = true;
wifi.powersave = false;
};
firewall = {
enable = true;
allowedTCPPorts = [];
allowedUDPPorts = [];
allowedTCPPorts = [ 4242 ];
allowedUDPPorts = [ 4242 ];
};
};
hardware.bluetooth = {
powerOnBoot = true;
settings.General.Enable = "Source,Sink,Media,Socket,Network";
};
boot.extraModprobeConfig = ''
options iwlwifi power_save=0
'';
}
+19
View File
@@ -0,0 +1,19 @@
{ config, pkgs, ... }:
{
services.tor = {
enable = true;
client = {
socksListenAddresses = [ { addr = "127.0.0.1"; port = 9050; } ];
};
};
services.privoxy = {
enable = true;
enableTor = true;
};
environment.systemPackages = with pkgs; [
torsocks
];
}
+34 -9
View File
@@ -1,5 +1,11 @@
{ config, pkgs, ... }:
{ config, pkgs, inputs, ... }:
let
unstable = import inputs.nixpkgs-unstable {
system = pkgs.stdenv.hostPlatform.system;
config.allowUnfree = true;
};
in
{
nixpkgs.config.allowUnfree = true;
@@ -7,31 +13,51 @@
acpi
age
alacritty
bluez
bluez-tools
bitwarden-cli
btop
dbus
dconf
deskflow
direnv
fastfetch
firefox
gemini-cli
gimp
git
github-cli
gnome-calculator
(google-chrome.override {
commandLineArgs = [
"--disable-pinch"
];
})
google-chrome
google-java-format
gnupg
jdk
jdt-language-server
jq
keepassxc
lan-mouse
libnotify
macchanger
makeDBusConf
mypy
nautilus
networkmanagerapplet
nitrogen
ollama
nix-direnv
unstable.ollama
pasystray
pkg-config
playerctl
pulseaudioFull
python3
rclone
rnote
rustdesk
sops
ssh-to-age
tldr
@@ -39,12 +65,14 @@
unrar
unzip
upower
usbutils
v4l-utils
vim
wget
wl-clipboard
xclip
xournalpp
zip
(pkgs.writeShellScriptBin "unix" ''
set -u
@@ -55,6 +83,7 @@
trap "rm -f '$ERRFILE'" EXIT
echo "Building NixOS..."
cd $DOTFILES && git stage -A
sudo nixos-rebuild switch --flake "$DOTFILES#$HOST" 2>&1 | tee "$ERRFILE"
STATUS=''${PIPESTATUS[0]}
@@ -87,18 +116,14 @@
'')
];
programs.firefox.enable = true;
programs.thunar.enable = true;
hardware.graphics = {
enable = true;
enable32Bit = true;
};
programs.direnv.enable = true;
programs.direnv.nix-direnv.enable = true;
programs.steam = {
enable = true;
remotePlay.openFirewall = true;
dedicatedServer.openFirewall = true;
localNetworkGameTransfers.openFirewall = true;
gamescopeSession.enable = true;
};
}
-2
View File
@@ -8,8 +8,6 @@
./users.nix
];
systemd.user.services.niri-flake-polkit.enable = false;
security = {
pam.services.swaylock = {};
polkit.enable = true;
+1 -1
View File
@@ -9,7 +9,7 @@
isNormalUser = true;
description = "Josh Ashton";
group = "jashton";
extraGroups = [ "networkmanager" "wheel" "tss" "video" "audio" "input" ];
extraGroups = [ "networkmanager" "wheel" "tss" "video" "audio" "input" "render" "adbuser" "dialout" "tty" ];
shell = pkgs.zsh;
};
+55 -16
View File
@@ -3,28 +3,18 @@
let
# Instantiate the unstable package set for your system architecture
unstable = import inputs.nixpkgs-unstable {
system = pkgs.system;
system = pkgs.stdenv.hostPlatform.system;
config.allowUnfree = true;
};
in
{
imports = [
inputs.dms.nixosModules.greeter
inputs.dankcalendar.nixosModules.default
];
programs.niri = {
enable = true;
# Tell the Niri module to use the unstable package directly from the niri-flake
package = inputs.niri.packages.${pkgs.system}.niri-unstable;
};
programs.dsearch.enable = true;
programs.dank-material-shell.greeter = {
enable = true;
compositor.name = "niri";
configHome = "/home/jashton";
package = inputs.niri.packages.${pkgs.stdenv.hostPlatform.system}.niri-unstable;
};
programs.dms-shell = {
@@ -36,7 +26,7 @@ in
enableCalendarEvents = true;
systemd = {
enable = false;
enable = true;
restartIfChanged = true;
};
@@ -45,10 +35,25 @@ in
plugins = {
developerUtilities.enable = true;
batteryPlus.enable = true;
mediaDownloader.enable = true;
dankBatteryAlerts.enable = true;
dmsThemeSync.enable = true;
dmsPass.enable = true;
};
};
programs.dms-greeter = {
enable = true;
compositor.name = "niri";
configHome = "/home/jashton";
};
programs.dank-calendar.enable = true;
systemd = {
user = {
services = {
niri-flake-polkit.enable = true;
};
};
};
@@ -70,10 +75,44 @@ in
enable = true;
};
displayManager = {
autoLogin = {
enable = false;
user = "jashton";
};
defaultSession = "niri";
};
upower.enable = true;
printing.enable = true;
gvfs.enable = true;
gnome.gnome-keyring.enable = true;
blueman.enable = true;
};
hardware.printers.ensurePrinters = [
{
name = "Marriott_Library_BW";
location = "Knowledge Commons Level 2";
description = "UofU B&W Print Queue";
deviceUri = "lpd://pharossys-ps1.ucard.utah.edu/kcq-1";
model = "drv:///sample.drv/generic.ppd";
ppdOptions = {
PageSize = "Letter";
Duplex = "DuplexNoTumble";
};
}
{
name = "Marriott_Library_Color";
location = "Knowledge Commons Level 2";
description = "UofU Color Print Queue";
deviceUri = "lpd://pharossys-ps1.ucard.utah.edu/kcq-7";
model = "drv:///sample.drv/generic.ppd";
ppdOptions = {
PageSize = "Letter";
Duplex = "DuplexNoTumble";
};
}
];
}
+11
View File
@@ -2,9 +2,12 @@
{
virtualisation = {
containers.enable = true;
podman = {
enable = true;
dockerCompat = true;
defaultNetwork.settings.dns_enabled = true;
};
waydroid.enable = true;
@@ -14,4 +17,12 @@
};
networking.firewall.trustedInterfaces = [ "waydroid0" ];
# Install podman-compose and helper tools
environment.systemPackages = with pkgs; [
podman-compose
podman-tui
slirp4netns
fuse-overlayfs
];
}