Compare commits

...

204 Commits

Author SHA1 Message Date
Lennart J. Kurzweg (Nx2)
7544b0dbac Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-06-15 21:36:39 +02:00
Lennart J. Kurzweg (Nx2)
68eb400210 flake bump 2025-06-15 21:36:37 +02:00
Lennart J. Kurzweg (Nx2)
7952492672 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-06-10 19:57:38 +02:00
Lennart J. Kurzweg (Nx2)
fa3348c5c2 sops ace fix 2025-06-10 19:57:23 +02:00
Lennart J. Kurzweg (Nx2)
8a47706856 stui 2025-06-10 19:57:04 +02:00
Lennart J. Kurzweg (Nx2)
cc9026297e ace colors 2025-06-10 19:56:59 +02:00
Lennart J. Kurzweg (Nx2)
bf30ac72d1 flake bump 2025-06-10 19:56:08 +02:00
Lennart J. Kurzweg (Nx2)
10344ce639 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-06-10 19:39:19 +02:00
Lennart J. Kurzweg (Nx2)
a76fe844c6 ghossty using module 2025-06-10 19:36:21 +02:00
Lennart J. Kurzweg (Nx2)
feb6d269de chromium rename 2025-06-10 19:36:03 +02:00
Lennart J. Kurzweg (Nx2)
76e83f6498 more fixes 2025-06-10 19:35:53 +02:00
Lennart J. Kurzweg (Nx2)
46ad89fe0d new version fixes 2025-06-10 19:34:56 +02:00
Lennart J. Kurzweg (Nx2)
c186666394 chatterino path fix 2025-06-10 19:33:34 +02:00
Lennart J. Kurzweg (Nx2)
6b8d1d277b blacker black 2025-06-10 19:33:16 +02:00
Lennart J. Kurzweg (Nx2)
2c358380e4 flake fix 2025-06-10 19:32:59 +02:00
Lennart J. Kurzweg (Nx2)
935beadb3b add .ignore 2025-06-10 19:30:09 +02:00
Lennart J. Kurzweg (Nx2)
5775bc88d6 lanazboote fix 2025-06-10 19:30:01 +02:00
Lennart J. Kurzweg (Nx2)
3285d23223 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-06-06 13:52:54 +02:00
Lennart J. Kurzweg (Nx2)
a8629627ea no printlastlog sshd 2025-06-06 13:52:04 +02:00
Lennart J. Kurzweg (Nx2)
68c749474e lr euma 2025-06-06 13:51:51 +02:00
Lennart J. Kurzweg (Nx2)
e0b43bcbe5 dysk 2025-06-06 13:51:42 +02:00
Lennart J. Kurzweg (Nx2)
10e1941c5a nix-on-droid untested 2025-06-05 20:34:31 +02:00
Lennart J. Kurzweg (Nx2)
2d697c079d merge 2025-06-02 14:51:38 +02:00
Lennart J. Kurzweg (Nx2)
ed18e8bd51 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-05-31 15:04:44 +02:00
Lennart J. Kurzweg (Nx2)
a9670b5896 streamlink secret 2025-05-31 15:04:07 +02:00
Lennart J. Kurzweg (Nx2)
b5e66bbf43 yazi cache 2025-05-31 15:03:48 +02:00
Lennart J. Kurzweg (Nx2)
e1f74665c1 stable nvidia 2025-05-31 15:03:29 +02:00
Lennart J. Kurzweg (Nx2)
c8903a6b56 no ruff lsp 2025-05-31 15:01:33 +02:00
Lennart J. Kurzweg (Nx2)
b1258be64b minecraft 2025-05-31 15:01:06 +02:00
Lennart J. Kurzweg (Nx2)
7b08304f78 streamlink try 2025-05-31 15:00:21 +02:00
Lennart J. Kurzweg (Nx2)
d439996d0c js lsp 2025-05-31 14:59:17 +02:00
Lennart J. Kurzweg (Nx2)
c566e4f40a refactor fix 2025-05-31 14:58:44 +02:00
Lennart J. Kurzweg (Nx2)
272ae1cd55 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-05-31 13:48:40 +02:00
Lennart J. Kurzweg (Nx2)
c4052ec34d dev ssl 2025-05-31 13:42:32 +02:00
Lennart J. Kurzweg (Nx2)
f4f80ffbde games on Ace - mindustry 2025-05-31 13:42:27 +02:00
Lennart J. Kurzweg (Nx2)
2de110149f calendar dicos ++ 2025-05-31 13:40:37 +02:00
Lennart J. Kurzweg (Nx2)
b0ab87bbab linux_6.12 ACE 2025-05-31 13:39:47 +02:00
Lennart J. Kurzweg (Nx2)
edde9bd52b proxy dev 2025-05-31 13:38:19 +02:00
Lennart J. Kurzweg (Nx2)
bf56cc88bf gitea theme 2025-05-31 13:36:19 +02:00
Lennart J. Kurzweg (Nx2)
393d7f4fc4 campuszeit 2025-05-31 13:35:52 +02:00
Lennart J. Kurzweg (Nx2)
2ecb4ce65a chatterino token 2025-05-31 13:35:43 +02:00
Lennart J. Kurzweg (Nx2)
88e73a3ea8 helix colors for windows terminal 2025-05-28 14:49:20 +00:00
Lennart J. Kurzweg (Nx2)
8be84ff0a9 dicos git 2025-05-28 14:49:09 +00:00
Lennart J. Kurzweg (Nx2)
9d3418bec2 htop 2025-05-28 14:48:08 +00:00
Lennart J. Kurzweg (Nx2)
68cb4377b7 New Flake Style XPS fix 2025-05-27 12:12:36 +02:00
Lennart J. Kurzweg (Nx2)
ce140cf4f2 merge + fix nixpkgs versions 2025-05-27 07:55:00 +00:00
Lennart J. Kurzweg (Nx2)
a60e90ab8f New Flake Style + WSL + NixOnDroid 2025-05-27 07:15:44 +00:00
Lennart J. Kurzweg (Nx2)
89adbab83b Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-05-26 14:46:53 +02:00
Lennart J. Kurzweg (Nx2)
09837534ea fix vesktop multi gpu 2025-05-26 14:46:42 +02:00
Lennart J. Kurzweg (Nx2)
a769f9eb1f zathura hotkey 2025-05-26 14:46:13 +02:00
Lennart J. Kurzweg (Nx2)
031215cb4f waybar fix center, no event 2025-05-26 14:45:40 +02:00
Lennart J. Kurzweg (Nx2)
b36e420e89 yazi js edit 2025-05-26 14:45:18 +02:00
Lennart J. Kurzweg (Nx2)
0a52deb024 js lsp 2025-05-26 14:44:39 +02:00
Lennart J. Kurzweg (Nx2)
d3b5bb0d60 chatterino new 2025-05-26 14:44:28 +02:00
Lennart J. Kurzweg (Nx2)
5a1c9eeacb 25.05 xps 2025-05-26 14:44:16 +02:00
Lennart J. Kurzweg (Nx2)
b9d8a339d2 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-04-11 14:00:18 +02:00
Lennart J. Kurzweg (Nx2)
9fe46133da yazi ++ 2025-04-11 13:59:00 +02:00
Lennart J. Kurzweg (Nx2)
f35172fde1 clarify delete event 2025-04-11 13:58:35 +02:00
Lennart J. Kurzweg (Nx2)
6b79aca0be fix autoname 2025-04-11 13:58:17 +02:00
Lennart J. Kurzweg (Nx2)
9788b83d82 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-04-11 12:40:55 +02:00
Lennart J. Kurzweg (Nx2)
366644f5d2 chatterino cleanup 2025-04-11 12:40:49 +02:00
Lennart J. Kurzweg (Nx2)
3891119804 inline diagnostics 2025-04-11 12:40:33 +02:00
Lennart J. Kurzweg (Nx2)
e8284be564 feiertage hessen 2025-04-11 12:40:21 +02:00
Lennart J. Kurzweg (Nx2)
6c6dd819a8 nxace no obsidian 2025-03-31 01:51:39 +02:00
Lennart J. Kurzweg (Nx2)
014fca20a9 nxace default kernel 2025-03-31 01:51:29 +02:00
Lennart J. Kurzweg (Nx2)
2b51508030 nxace no games 2025-03-31 01:51:15 +02:00
Lennart J. Kurzweg (Nx2)
7e8f5f6751 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-03-31 01:26:54 +02:00
Lennart J. Kurzweg (Nx2)
61a788961d calendar
lr + dicos description + cleanup
2025-03-31 01:26:42 +02:00
Lennart J. Kurzweg (Nx2)
8a8780ff71 hugo 2025-03-31 01:24:45 +02:00
Lennart J. Kurzweg (Nx2)
921f8fc6a7 dyn_dns 2025-03-31 01:23:45 +02:00
Lennart J. Kurzweg (Nx2)
977837f81e Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-03-31 00:44:56 +02:00
Lennart J. Kurzweg (Nx2)
17bbc58503 flake bump 2025-03-31 00:44:53 +02:00
Lennart J. Kurzweg (Nx2)
61fa0dd7fd systemctl-tui 2025-03-31 00:44:44 +02:00
Lennart J. Kurzweg (Nx2)
f08777fdab ollama simplification 2025-03-31 00:44:32 +02:00
Lennart J. Kurzweg (Nx2)
7a6f6aac82 inputMethod syntax new style 2025-03-31 00:44:06 +02:00
Lennart J. Kurzweg (Nx2)
86ce0ac9d4 xps linux latest 2025-03-31 00:42:27 +02:00
Lennart J. Kurzweg (Nx2)
e08b0e8184 yazi refactor + update fix 2025-03-31 00:42:18 +02:00
Lennart J. Kurzweg (Nx2)
02c48e8eaa display change 2025-03-31 00:23:57 +02:00
Lennart J. Kurzweg (Nx2)
0876ec355e better helix markup 2025-03-31 00:23:44 +02:00
Lennart J. Kurzweg (Nx2)
28dd018961 gimp3 incomming 2025-03-30 23:59:39 +02:00
Lennart J. Kurzweg (Nx2)
ce363cafe1 eza refactor 2025-03-30 23:59:04 +02:00
Lennart J. Kurzweg (Nx2)
67202e47e3 LR calendar 2025-03-30 23:58:52 +02:00
Lennart J. Kurzweg (Nx2)
d7d9b8e39c Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-03-02 19:50:36 +01:00
Lennart J. Kurzweg (Nx2)
1a52cafa66 better dyndns 2025-03-02 19:50:34 +01:00
Lennart J. Kurzweg (Nx2)
b3a419de26 local ip changes 2025-03-02 19:49:26 +01:00
Lennart J. Kurzweg (Nx2)
0b3931ff86 hugo 2025-03-02 19:49:09 +01:00
Lennart J. Kurzweg (Nx2)
2b854183ac Merge 2025-03-01 12:35:17 +01:00
Lennart J. Kurzweg (Nx2)
18013b83df chatterifo oauth 2025-03-01 12:34:19 +01:00
Lennart J. Kurzweg (Nx2)
6b4a76dd4a fix and refactor dynamic-dns 2025-02-22 13:43:35 +01:00
Lennart J. Kurzweg (Nx2)
c15bf8c58e little formatting 2025-02-22 13:43:16 +01:00
Lennart J. Kurzweg (Nx2)
60a839663a radicale fix 2025-02-22 11:33:43 +01:00
Lennart J. Kurzweg (Nx2)
ee72de3539 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-02-22 11:33:07 +01:00
Lennart J. Kurzweg (Nx2)
73281b62d9 yazi orphans 2025-02-22 11:33:03 +01:00
Lennart J. Kurzweg (Nx2)
e5e7164a93 force reload event hotkey 2025-02-22 11:32:18 +01:00
Lennart J. Kurzweg (Nx2)
3ed506a924 handball wm is over 2025-02-22 11:31:55 +01:00
Lennart J. Kurzweg (Nx2)
33503c4485 chatterino update 2025-02-22 11:31:45 +01:00
Lennart J. Kurzweg (Nx2)
5c8e50aa9f Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-02-21 10:57:02 +01:00
Lennart J. Kurzweg (Nx2)
c9106e8484 calendar++ 2025-02-21 10:46:12 +01:00
Lennart J. Kurzweg (Nx2)
62b40404c7 flake bump 2025-02-17 11:33:16 +01:00
Lennart J. Kurzweg (Nx2)
07a320147d 0.8 2025-02-17 11:33:09 +01:00
Lennart J. Kurzweg (Nx2)
34cdfc4def calendar waybar 2025-02-17 11:32:54 +01:00
Lennart J. Kurzweg (Nx2)
545b61a79f better hyprland rules 2025-02-17 11:31:59 +01:00
Lennart J. Kurzweg (Nx2)
feb2f93360 flake bump 2025-01-31 12:44:31 +01:00
Lennart J. Kurzweg (Nx2)
8fb93e5f2b Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-01-30 13:42:56 +01:00
Lennart J. Kurzweg (Nx2)
e5e3eaaff4 cleanup firefox userchrome 2025-01-30 13:42:38 +01:00
Lennart J. Kurzweg (Nx2)
4bc88c8d13 hyprland display NxXPS 2025-01-30 13:42:26 +01:00
Lennart J. Kurzweg (Nx2)
a5c8d284ee calendar-lec 2025-01-30 13:41:27 +01:00
Lennart J. Kurzweg (Nx2)
c2f151e03e nx2site-backup 2025-01-30 13:41:12 +01:00
Lennart J. Kurzweg (Nx2)
b0b643f164 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-01-27 22:29:12 +01:00
Lennart J. Kurzweg (Nx2)
99c07ec5fb yt-dlp 2025-01-27 22:23:19 +01:00
Lennart J. Kurzweg (Nx2)
3f553d27e1 pv 2025-01-27 22:23:10 +01:00
Lennart J. Kurzweg (Nx2)
a6a17574b8 weird fix 2025-01-27 22:22:48 +01:00
Lennart J. Kurzweg (Nx2)
78359c710f gitea-dump fix 2025-01-27 22:22:28 +01:00
Lennart J. Kurzweg (Nx2)
2206e5472b calendar public 2025-01-27 22:20:27 +01:00
Lennart J. Kurzweg (Nx2)
9c96585401 audiobookshelf 2025-01-27 22:19:32 +01:00
Lennart J. Kurzweg (Nx2)
ac36fa13ac paperless update 2025-01-27 22:18:57 +01:00
Lennart J. Kurzweg (Nx2)
b4586e8661 chmod 2025-01-27 22:17:00 +01:00
Lennart J. Kurzweg (Nx2)
5a6199a8a9 comment unknow options 2025-01-19 22:37:40 +01:00
Lennart J. Kurzweg (Nx2)
5e34285db2 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-01-19 22:09:08 +01:00
Lennart J. Kurzweg (Nx2)
9612646c55 qbt in home 2025-01-19 22:09:05 +01:00
Lennart J. Kurzweg (Nx2)
7324904db9 helix all options 2025-01-19 22:08:46 +01:00
Lennart J. Kurzweg (Nx2)
132c169e24 sleeker zathura 2025-01-19 22:07:14 +01:00
Lennart J. Kurzweg (Nx2)
207961e397 better yazi bindings 2025-01-19 22:06:58 +01:00
Lennart J. Kurzweg (Nx2)
73339cfc50 waybar ws opaque 2025-01-19 22:06:32 +01:00
Lennart J. Kurzweg (Nx2)
94559de7ae better thunderbird css 2025-01-19 11:43:24 +01:00
Lennart J. Kurzweg (Nx2)
89fa46aa6d calendar ++ 2025-01-19 11:43:15 +01:00
Lennart J. Kurzweg (Nx2)
0fbb54a04a adbfs 2025-01-13 20:05:02 +01:00
Lennart J. Kurzweg (Nx2)
9619164eb4 paperless non-admin fix 2025-01-13 20:04:49 +01:00
Lennart J. Kurzweg (Nx2)
343fc2ac4e second screen change 2025-01-13 20:03:19 +01:00
Lennart J. Kurzweg (Nx2)
9c98199ee3 scanning 2025-01-13 19:59:04 +01:00
Lennart J. Kurzweg (Nx2)
3652cdfca9 nxgs 2025-01-13 19:58:22 +01:00
Lennart J. Kurzweg (Nx2)
2699268b81 take 2025-01-13 19:56:35 +01:00
Lennart J. Kurzweg (Nx2)
e4d0326a74 flake bump 2025-01-04 13:54:13 +01:00
Lennart J. Kurzweg (Nx2)
8525adecf4 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-01-04 13:53:51 +01:00
Lennart J. Kurzweg (Nx2)
c381580cca fix hyprland-autoname-workspaces 2025-01-04 13:53:06 +01:00
Lennart J. Kurzweg (Nx2)
aea641cd9c no helix bg 2025-01-04 13:52:34 +01:00
Lennart J. Kurzweg (Nx2)
2179dbf1d8 calendar 2025-01-04 13:52:21 +01:00
Lennart J. Kurzweg (Nx2)
6f5f70f439 new ppl pw 2025-01-02 21:44:37 +01:00
Lennart J. Kurzweg (Nx2)
d40175d4a5 6 11 2025-01-02 21:44:27 +01:00
Lennart J. Kurzweg (Nx2)
34eba60193 radicale 2025-01-02 21:44:15 +01:00
Lennart J. Kurzweg (Nx2)
57230a32c3 nextcloud (deactivated) 2025-01-02 21:43:20 +01:00
Lennart J. Kurzweg (Nx2)
d9146432e4 flake bump 2024-12-27 12:56:50 +01:00
Lennart J. Kurzweg (Nx2)
447e6edd56 radicale (untested) 2024-12-27 12:56:33 +01:00
Lennart J. Kurzweg (Nx2)
aa58ca79bb ghostty (unfinished) 2024-12-27 12:56:17 +01:00
Lennart J. Kurzweg (Nx2)
a2692f6837 chatterino, fix, rice, colorslum[27u[27u[27u[27u[27u 2024-12-27 12:55:51 +01:00
Lennart J. Kurzweg (Nx2)
c031de7fec in the thick of it 2024-12-27 12:54:11 +01:00
Lennart J. Kurzweg (Nx2)
918342fdf3 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2024-12-23 13:04:25 +01:00
Lennart J. Kurzweg (Nx2)
d8f623f1a0 postgres 12 -> 16 2024-12-23 13:03:45 +01:00
Lennart J. Kurzweg (Nx2)
6a4460d089 new syncthing ID for tessa 2024-12-23 13:00:22 +01:00
Lennart J. Kurzweg (Nx2)
e61954442f flake bump 2024-12-23 12:59:32 +01:00
Lennart J. Kurzweg (Nx2)
f5aa965369 update option name (opengl -> graphics) 2024-12-23 12:59:22 +01:00
Lennart J. Kurzweg (Nx2)
eb812dc9e0 nix without llm 2024-12-23 12:58:31 +01:00
Lennart J. Kurzweg (Nx2)
6d4d118685 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2024-12-19 15:19:51 +01:00
Lennart J. Kurzweg (Nx2)
94a78942f8 helix-gpt is to slow 2024-12-19 15:19:47 +01:00
Lennart J. Kurzweg (Nx2)
5c2437cee1 renaming node to js also in imports 2024-12-19 15:19:31 +01:00
Lennart J. Kurzweg (Nx2)
fa8875c0ee Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2024-12-15 15:36:15 +01:00
Lennart J. Kurzweg (Nx2)
2040ce3ea0 fixup 2024-12-15 15:33:39 +01:00
Lennart J. Kurzweg (Nx2)
d9822a7a91 gitea (theme&++) 2024-12-15 15:31:43 +01:00
Lennart J. Kurzweg (Nx2)
d2e0b9d2d3 paperless 2024-12-15 15:14:52 +01:00
Lennart J. Kurzweg (Nx2)
ccdd036935 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2024-12-15 14:53:43 +01:00
Lennart J. Kurzweg (Nx2)
5d36be3804 flake bump 2024-12-15 14:50:36 +01:00
Lennart J. Kurzweg (Nx2)
2640b00b05 better zahtura scrolling 2024-12-15 14:37:58 +01:00
Lennart J. Kurzweg (Nx2)
9087100c42 qt 2024-12-15 14:35:54 +01:00
Lennart J. Kurzweg (Nx2)
5c9a92c68e helic cleanup + java 2024-12-15 14:35:43 +01:00
Lennart J. Kurzweg (Nx2)
1fd894a3b3 cleanup 2024-12-15 14:28:51 +01:00
Lennart J. Kurzweg (Nx2)
09316011ab helix-gpt 2024-12-15 14:23:20 +01:00
Lennart J. Kurzweg (Nx2)
fdce6c3d57 go 2024-12-15 14:22:31 +01:00
Lennart J. Kurzweg (Nx2)
1be03c39ad Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2024-12-02 21:48:54 +01:00
Lennart J. Kurzweg (Nx2)
a0c098ea1f Better "special" window handeling 2024-12-02 21:44:24 +01:00
Lennart J. Kurzweg (Nx2)
9a4e3d7a78 flake bump 2024-12-02 21:33:52 +01:00
Lennart J. Kurzweg (Nx2)
1005cc522d gnome-calendar 2024-12-02 21:05:13 +01:00
Lennart J. Kurzweg (Nx2)
729e7e5f0e gnu parallel 2024-12-02 21:04:55 +01:00
Lennart J. Kurzweg (Nx2)
79cbdc9f69 health-reminder++ 2024-12-02 21:04:41 +01:00
Lennart J. Kurzweg (Nx2)
c6ca7c95f4 zathura++ 2024-12-02 21:04:14 +01:00
Lennart J. Kurzweg (Nx2)
e878158b71 better yazi 2024-12-02 21:03:48 +01:00
Lennart J. Kurzweg (Nx2)
ed5f0784d1 longer mako 2024-12-02 21:03:28 +01:00
Lennart J. Kurzweg (Nx2)
051648954a gtk tryouts 2024-12-02 21:03:20 +01:00
Lennart J. Kurzweg (Nx2)
f5538e69a5 better color changing (maual) 2024-12-02 21:00:01 +01:00
Lennart J. Kurzweg (Nx2)
a82660b049 Gimp 2024-12-02 20:59:20 +01:00
Lennart J. Kurzweg (Nx2)
f828268b14 24.11 Vicuna 2024-12-02 20:59:00 +01:00
Lennart J. Kurzweg (Nx2)
02c7814ce4 better/less userChrome 2024-12-02 20:49:33 +01:00
Lennart J. Kurzweg (Nx2)
e36ffd828b chatterino update 2024-12-02 20:46:51 +01:00
Lennart J. Kurzweg (Nx2)
219a19a3a8 fonts (no name2) 2024-12-02 20:46:32 +01:00
Lennart J. Kurzweg (Nx2)
683913e0fe rice syntax 2024-12-02 20:42:49 +01:00
Lennart J. Kurzweg (Nx2)
837e64c377 wallpaper to color hotkey syntax fix 2024-11-21 22:55:09 +01:00
Lennart J. Kurzweg (Nx2)
f8497f5538 health reminder syntax fix 2 2024-11-21 22:33:47 +01:00
Lennart J. Kurzweg (Nx2)
9c2a69aa03 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2024-11-21 22:28:42 +01:00
Lennart J. Kurzweg (Nx2)
a8c3a12089 xps to linux_6_11 2024-11-21 22:27:48 +01:00
Lennart J. Kurzweg (Nx2)
b8199c24ef health reminder syntax fix 2024-11-21 22:27:28 +01:00
Lennart J. Kurzweg (Nx2)
971cea5418 steam 2024-11-21 22:19:14 +01:00
Lennart J. Kurzweg (Nx2)
d12b9ddf2f Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2024-11-21 22:17:48 +01:00
Lennart J. Kurzweg (Nx2)
e4ec830aaa better health reminder 2024-11-21 22:07:53 +01:00
Lennart J. Kurzweg (Nx2)
ebb1da3fc2 typo 2024-11-21 22:07:36 +01:00
Lennart J. Kurzweg (Nx2)
80e06b3f49 more userChrome 2024-11-21 22:07:31 +01:00
Lennart J. Kurzweg (Nx2)
605381b553 waybar prettier battery 2024-11-21 22:07:07 +01:00
Lennart J. Kurzweg (Nx2)
298d31e21a submaps als functions + TUDa submap 2024-11-21 22:06:55 +01:00
Lennart J. Kurzweg (Nx2)
947b824796 hyprland nxcolor-functions better 2024-11-21 22:06:03 +01:00
Lennart J. Kurzweg (Nx2)
edbe4e7f66 moved NORTH screen 2024-11-20 01:27:20 +01:00
Lennart J. Kurzweg (Nx2)
dbccb827ad games also on ACE 2024-11-20 01:25:42 +01:00
Lennart J. Kurzweg (Nx2)
f5af726382 nx2site gitea and vaultwarden (working) 2024-11-20 01:24:57 +01:00
Lennart J. Kurzweg (Nx2)
e95332cedb Merge branch 'master' of ssh://ssh.nx2.site:20022/nx2/dotfiles 2024-11-15 14:10:50 +01:00
Lennart J. Kurzweg (Nx2)
6a7d8fe4be nx2site002 (unready) 2024-11-15 14:10:48 +01:00
Lennart J. Kurzweg (Nx2)
37eb70db63 Merge branch 'master' of ssh://ssh.nx2.site:20022/nx2/dotfiles 2024-11-14 01:21:42 +01:00
Lennart J. Kurzweg (Nx2)
77e9aa4ddd games 2024-11-14 01:21:34 +01:00
130 changed files with 4722 additions and 3180 deletions

0
.gitattributes vendored Executable file → Normal file
View File

0
.gitignore vendored Executable file → Normal file
View File

15
.ignore Normal file
View File

@@ -0,0 +1,15 @@
flake.lock
*.remmina
*.pem
*.env
*.key
*.ovpn
sops-secrets.yaml
*.png
*.jpg
*.webp
*.gif
*.mp3
*.mp4

View File

@@ -1,7 +1,7 @@
keys:
- &users:
- &nx2backup age1sgzc2jh8af30a3cp6g7l4hyzusqrn3x3xw7frghc4akvjaplwa3stfemxc
- &nx2 22FB2CC03DC5292AB81CF67D0AF27B383170E634
- &nx2_key_13 age1x2lpsennl74n0f5jl60uv2ffjcuqymzf9ap3frlz2quyv0x3hq3scnewwq
- &hosts:
- &north age1vkqn2nars5qmpr35tac0x9vshphrq6nnzjfyxwusgn27kt3zualssv0u8e
- &xps age1jvf2lyrt2dw9jfnwgvnhmj9fmvyq8vvtepqjpkyycc5dqkkd4edqhxsgv6
@@ -13,6 +13,6 @@ creation_rules:
- *north
- *xps
- *ace
- *nx2backup
- *nx2_key_13
pgp:
- *nx2

66
configuration.nix Executable file → Normal file
View File

@@ -1,26 +1,27 @@
{ pkgs, inputs, lib, host, ... }:
{ pkgs, hyper, inputs, ... }:
{
imports = ([
imports = [
inputs.sops-nix.nixosModules.sops
inputs.nixpkgs.nixosModules.readOnlyPkgs
./system-modules/adb.nix
./system-modules/auto-mount.nix
./system-modules/hardware-configuration.nix
./system-modules/fuse.nix
./system-modules/nvidia.nix
./system-modules/users.nix
./system-modules/sound.nix
./system-modules/fonts.nix
./system-modules/boot.nix
./system-modules/gc.nix
./system-modules/boot.nix
./system-modules/calendar.nix
./system-modules/dm.nix
./system-modules/docker.nix
./system-modules/fcitx5.nix
./system-modules/fonts.nix
./system-modules/fonts.nix
./system-modules/fuse.nix
./system-modules/fuse.nix
./system-modules/games.nix
./system-modules/gc.nix
./system-modules/gc.nix
./system-modules/gpg.nix
./system-modules/hardware-configuration.nix
./system-modules/hardware-configuration.nix
./system-modules/health_reminder.nix
./system-modules/hsmw.nix
./system-modules/kanata.nix
@@ -28,22 +29,40 @@
./system-modules/networking.nix
./system-modules/nixd.nix
./system-modules/nvidia.nix
./system-modules/nvidia.nix
./system-modules/ollama.nix
./system-modules/qmk.nix
./system-modules/scanning.nix
./system-modules/sops.nix
./system-modules/sound.nix
./system-modules/sound.nix
./system-modules/sshd.nix
./system-modules/syncthing.nix
./system-modules/tuda.nix
./system-modules/users.nix
./system-modules/users.nix
./system-modules/virtualisation.nix
./system-modules/ydotool.nix
]) ++ (if (host == "NxACE") then [
] ++ (if (hyper.host == "NxACE") then [
./system-modules/nx2site.nix
./system-modules/hugo.nix
./system-modules/postgres.nix
./system-modules/nx2site/proxy.nix
# ./system-modules/nx2site/gitea.nix
# ./system-modules/nx2site/vaultwarden.nix
] else []);
./system-modules/nx2site/audiobookshelf.nix
# ./system-modules/nx2site/dyn_dns.nix
./system-modules/nx2site/gitea.nix
./system-modules/nx2site/open-web-calendar.nix
./system-modules/nx2site/radicale.nix
# ./system-modules/nx2site/nextcloud.nix
./system-modules/nx2site/vaultwarden.nix
./system-modules/nx2site/paperless.nix
./system-modules/calendar-publish.nix
./system-modules/calendar-lec.nix
./system-modules/calendar-lr.nix
./system-modules/calendar-dicos.nix
] else [
]);
# Set your time zone.
time.timeZone = "Europe/Berlin";
@@ -99,6 +118,7 @@
blueman
dmidecode
file
parallel
# ]) ++ (with pkgs-unstable; [
# # sendme
]);
@@ -115,11 +135,25 @@
xwayland.enable = true;
};
system.stateVersion = "24.05";
systemd.extraConfig = "DefaultLimitNOFILE=2048";
boot.tmp.useTmpfs = false;
nixpkgs.config.allowUnfree = true;
system.stateVersion = pkgs.version;
nix.settings.experimental-features = [ "nix-command" "flakes" ];
nixpkgs.pkgs = pkgs;
nix = {
settings = {
experimental-features = [ "nix-command" "flakes" ];
substitute = true;
substituters = [
"https://yazi.cachix.org"
];
trusted-public-keys = [
"yazi.cachix.org-1:Dcdz63NZKfvUCbDGngQDAZq6kOroIrFoyO064uvLh8k="
];
};
};
programs.bash.shellInit = ''
source $HOME/.nix-profile/etc/profile.d/hm-session-vars.sh

View File

@@ -4,6 +4,8 @@
"discord"
"spotify"
"obsidian"
"steam"
"steam-unwrapped"
"zoom-us"
"zoom"
@@ -35,6 +37,8 @@
"libnvjitlink"
"libcusparse"
"libnpp"
"vscode-extension-mhutchie-git-graph"
];
inecure = [

View File

@@ -1,13 +1,13 @@
{
"base": {
"foreground": "#eedce2",
"background": "#221016"
"foreground": "#fefefe",
"background": "#020202"
},
"to_alter": {
"accent": "#ac5271",
"secondary": "#f20c5b",
"tertiary": "#d5a287",
"special": "#51ac8d",
"weird": "#0cf2a3"
"accent": "#aaaaff",
"secondary": "#aaeeff",
"tertiary": "#aaffaa",
"special": "#aaffaa",
"weird": "#ffffaa"
}
}

View File

@@ -6,15 +6,14 @@ pkgs: rec {
rounding = 3;
gap-size = 5;
border-width = 2;
color =
let
color = let
dark = (-0.5);
bright = (0.5);
alter-set = let f = lib.alter-luminace-hex; in color-name: color-value: { base = color-value; dark = f color-value dark; bright = f color-value bright; };
alter = let f = lib.alter-luminace-hex; in color-value: { base = color-value; dark = f color-value dark; bright = f color-value bright; };
# ccolor = builtins.mapAttrs alter-set (builtins.fromJSON (builtins.readFile ./colors.json));
ccolor = builtins.mapAttrs alter-set {
black = "#111111"; # "#111111" "#001100";
black = "#040404"; # "#111111" "#001100";
white = "#dddddd"; # "#dddddd" "#66dd66";
blue = "#4444dd"; # "#3333dd" "#003300";
cyan = "#44dddd"; # "#11dddd" "#00dd55";
@@ -26,7 +25,7 @@ pkgs: rec {
facolor = builtins.mapAttrs alter-set (builtins.fromJSON (builtins.readFile ./colors.json)).to_alter;
fbcolor = (builtins.fromJSON (builtins.readFile ./colors.json)).base;
fcolor = facolor // fbcolor;
xcolor = with ccolor; with fcolor; rec {
xcolor = with ccolor; with fcolor; {
background = "#000000";
# foreground = "#dddddd";
# accent = blue;
@@ -42,9 +41,8 @@ pkgs: rec {
in ccolor // fcolor // xcolor;
font = {
code = {
name = "JetBrainsMono-NF";
name2 = "JetBrainsMono Nerd Font";
package = (pkgs.nerdfonts.override { fonts = [ "JetBrainsMono" ]; });
name = "JetBrainsMono Nerd Font";
package = pkgs.nerd-fonts.jetbrains-mono;
# name = "CascadiaCove-NF";
# package = (pkgs.nerdfonts.override { fonts = [ "CascadiaCode" ]; });
};

736
flake.lock generated Executable file → Normal file

File diff suppressed because it is too large Load Diff

95
flake.nix Executable file → Normal file
View File

@@ -2,70 +2,101 @@
description = "Multisystem NixOS Flake of Lennart J. Kurzweg";
inputs = {
nixpkgs = { url = "nixpkgs/nixos-24.05"; };
nixpkgs = { url = "nixpkgs/nixos-25.05"; };
nixpkgs-unstable = { url = "nixpkgs/nixos-unstable"; };
nixpkgs-latest = { url = "github:nixos/nixpkgs?ref=master"; };
home-manager = { url = "github:nix-community/home-manager/release-24.05"; inputs.nixpkgs.follows = "nixpkgs"; };
home-manager = { url = "github:nix-community/home-manager/release-25.05"; inputs.nixpkgs.follows = "nixpkgs"; };
nixos-wsl = { url = "github:nix-community/NixOS-WSL/main"; };
nix-on-droid = { url = "github:nix-community/nix-on-droid/release-24.05"; inputs.nixpkgs.follows = "nixpkgs"; };
sops-nix = { url = "github:Mic92/sops-nix"; inputs.nixpkgs.follows = "nixpkgs"; };
lanzaboote = { url = "github:nix-community/lanzaboote/v0.3.0"; };
lanzaboote = { url = "github:nix-community/lanzaboote/v0.4.2"; };
hyprland = { url = "git+https://github.com/hyprwm/Hyprland?submodules=1"; };
hyprland-plugins = { url = "github:hyprwm/hyprland-plugins"; inputs.hyprland.follows = "hyprland"; };
Hyprspace = { url = "github:KZDKM/Hyprspace"; inputs.hyprland.follows = "hyprland"; };
hyprswitch = { url = "github:h3rmt/hyprswitch/release"; };
hyprspace = { url = "github:KZDKM/Hyprspace"; inputs.hyprland.follows = "hyprland"; };
# firefox-addons = { url = "gitlab:rycee/nur-expressions?dir=pkgs/firefox-addons"; inputs.nixpkgs.follows = "nixpkgs"; };
yazi.url = "github:sxyazi/yazi";
zen-browser.url = "github:MarceColl/zen-browser-flake";
yazi = { url = "github:sxyazi/yazi"; };
};
outputs = { self, nixpkgs, nixpkgs-unstable, nixpkgs-latest, home-manager, ... }@inputs: let
outputs = { ... }@inputs: with inputs; let
system = "x86_64-linux";
config = { allowUnfreePredicate = pkg: builtins.elem (pkgs.lib.getName pkg) (import ./flake-modules/allowed.nix).unfree; };
hyper-base = rec {
inherit system;
user = "nx2";
domain = "nx2.site";
home = "/home/${user}/";
};
config = { allowUnfree = true; allowUnfreePredicate = pkg: builtins.elem (pkgs.lib.getName pkg) (import ./flake-modules/allowed.nix).unfree; };
pkgs = (import nixpkgs { inherit system config; }) // {
unstable = import nixpkgs-unstable { inherit system config; };
latest = import nixpkgs-latest { inherit system config; };
version = "25.05";
};
pkgs64 = let
system = "aarch64-linux";
in import nixpkgs { inherit system config; } // {
unstable = import nixpkgs-unstable { inherit system config; };
latest = import nixpkgs-latest { inherit system config; };
version = "24.05";
};
pkgs = import nixpkgs { inherit system config; };
pkgs-unstable = import nixpkgs-unstable { inherit system config; };
pkgs-latest = import nixpkgs-latest { inherit system config; };
nvidia-set = import ./flake-modules/nvidia.nix;
nvidia-base = import ./flake-modules/nvidia.nix;
secrets = import ./git-crypt/secrets.nix;
rice = import ./flake-modules/rice.nix pkgs;
in {
nixosConfigurations = let
make-nixos-system = host: nixpkgs.lib.nixosSystem {
inherit system;
make-nixos-system = host: nvidia-settings: nixpkgs.lib.nixosSystem {
modules = [ ./configuration.nix ];
specialArgs = let
nvidia = nvidia-set // {
enable = if (host == "NxXPS" || host == "NxNORTH") then true else false;
prime = if (host == "NxXPS") then true else false;
hyper = hyper-base // { inherit host; nvidia = (nvidia-base // nvidia-settings); };
in { inherit pkgs inputs hyper rice secrets; };
};
in { inherit inputs user host domain pkgs-unstable pkgs-latest secrets rice nvidia; };
make-nixos-wsl-system = host: nixpkgs.lib.nixosSystem {
modules = [ ./nixos-wsl.nix ];
specialArgs = let
hyper = hyper-base // { inherit host; };
in { inherit pkgs inputs hyper rice; };
};
in {
NxXPS = make-nixos-system "NxXPS";
NxNORTH = make-nixos-system "NxNORTH";
NxACE = make-nixos-system "NxACE";
NxXPS = make-nixos-system "NxXPS" { enable = true; prime = true; };
NxNORTH = make-nixos-system "NxNORTH" { enable = true; prime = false; };
NxACE = make-nixos-system "NxACE" { enable = false; };
NxWSL = make-nixos-wsl-system "NxWSL";
};
nixOnDroidConfigurations.default = nix-on-droid.lib.nixOnDroidConfiguration {
pkgs = pkgs64;
modules = [ ./nix-on-droid.nix ];
};
homeConfigurations = let
make-home-configuration = host: user: home-manager.lib.homeManagerConfiguration {
make-home-configuration = host: user: nvidia-settings: home-manager.lib.homeManagerConfiguration {
inherit pkgs;
modules = [ ./home.nix ];
extraSpecialArgs = let
nvidia = nvidia-set // {
enable = if (host == "NxXPS" || host == "NxNORTH") then true else false;
prime = if (host == "NxXPS") then true else false;
hyper = hyper-base // { inherit host; nvidia = nvidia-base // nvidia-settings; };
in { inherit pkgs inputs hyper rice secrets; };
};
in { inherit inputs system user host domain pkgs-unstable pkgs-latest rice secrets nvidia; };
make-shell-configuration = host: user: home-manager.lib.homeManagerConfiguration {
inherit pkgs;
modules = [ ./shell-only.nix ];
extraSpecialArgs = let
hyper = hyper-base // { inherit host; };
in { inherit pkgs inputs hyper rice secrets; };
};
in {
"${user}@NxXPS" = make-home-configuration "NxXPS" user;
"${user}@NxNORTH" = make-home-configuration "NxNORTH" user;
"${user}@NxACE" = make-home-configuration "NxACE" user;
"${hyper-base.user}@NxXPS" = make-home-configuration "NxXPS" hyper-base.user { enable = true; prime = true; };
"${hyper-base.user}@NxNORTH" = make-home-configuration "NxNORTH" hyper-base.user { enable = true; prime = false; };
"${hyper-base.user}@NxACE" = make-home-configuration "NxACE" hyper-base.user { enable = false; };
"${hyper-base.user}@NxS23U" = make-shell-configuration "NxS23U" hyper-base.user;
"${hyper-base.user}@NxWSL" = make-shell-configuration "NxWSL" hyper-base.user;
};
};
}

0
git-crypt/easyroam-hsmw/easyroam_client_cert.pem Executable file → Normal file
View File

0
git-crypt/easyroam-hsmw/easyroam_client_key.pem Executable file → Normal file
View File

0
git-crypt/easyroam-hsmw/easyroam_root_ca.pem Executable file → Normal file
View File

0
git-crypt/pnx-vpn/ljk-pnx-ca.pem Executable file → Normal file
View File

0
git-crypt/pnx-vpn/ljk-pnx-cert.key Executable file → Normal file
View File

0
git-crypt/pnx-vpn/ljk-pnx-cert.pem Executable file → Normal file
View File

0
git-crypt/pnx-vpn/ljk-pnx.ovpn Executable file → Normal file
View File

BIN
git-crypt/secrets.nix Executable file → Normal file

Binary file not shown.

View File

View File

View File

View File

View File

View File

0
home-modules/bash.nix Executable file → Normal file
View File

29
home-modules/bitwarden.nix Executable file → Normal file
View File

@@ -1,33 +1,6 @@
{ config, pkgs, lib, host, secrets, ... }:
lib.mkIf (host != "NxACE")
{ pkgs, hyper, ... }:
{
home.packages = with pkgs; [
bitwarden
bitwarden-cli
];
# home.file.".config/Bitwarden CLI/data.json".text = ''
# {
# "stateVersion": 9,
# "global": {
# "theme": "system",
# "window": {},
# "environmentUrls": {
# "base": "https://pw.nx2.site",
# "api": null,
# "identity": null,
# "webVault": null,
# "icons": null,
# "notifications": null,
# "events": null,
# "keyConnector": null
# },
# "region": "Self-hosted",
# "installedVersion": "2023.12.0"
# }
# }
# '';
# home.sessionVariables.BW_SESSION = secrets.bitwarden.env.bw-session;
}

View File

@@ -0,0 +1,58 @@
{ pkgs, user, ... }:
{
home.packages = let
u = pkgs.writers.writePython3Bin "nx_fix_campuszeit_python" {
flakeIgnore = [ "E302" "E305" "E226" "E501" ];
} /* python */ ''
import os
import sys
def replace_campus_timezone(directory):
if not os.path.isdir(directory):
print(f"Error: {directory} is not a valid directory.")
return
for filename in os.listdir(directory):
filepath = os.path.join(directory, filename)
if not os.path.isfile(filepath):
continue
with open(filepath, 'r', encoding='utf-8') as f:
content = f.read()
if 'TZID:Europe/Berlin' in content or 'TZID="Europe/Berlin"' in content:
# Remove VTIMEZONE block for CampusNetZeit (optional depending on needs)
# Use a regex if multiple VTIMEZONE blocks may exist
start_idx = content.find('BEGIN:VTIMEZONE')
end_idx = content.find('END:VTIMEZONE', start_idx)
if start_idx != -1 and end_idx != -1:
content = content[:start_idx] + content[end_idx + len('END:VTIMEZONE\n'):]
# Replace all TZID references
content = content.replace('TZID:Europe/Berlin', 'TZID:Europe/Berlin')
content = content.replace('TZID="Europe/Berlin"', 'TZID="Europe/Berlin"')
with open(filepath, 'w', encoding='utf-8') as f:
f.write(content)
print(f"Updated time zone in: {filename}")
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: python replace_timezone.py <directory>")
else:
replace_campus_timezone(sys.argv[1])
'';
in [
(pkgs.writeShellApplication {
name = "nx_fix_campuszeit";
text = /*bash*/ ''
echo CHANGING OWNERSHIP OF "$(realpath "$1")" RECURSIVELY
read -r -p "Continue?"
sudo chown -R ${user} "$1"
${u}/bin/nx_fix_campuszeit_python "$1"
sudo chown -R radicale "$1"
'';
})
];
}

112
home-modules/calendar.nix Normal file
View File

@@ -0,0 +1,112 @@
{ pkgs, hyper, secrets, ... }: let
calendars = with hyper; [
{
name = "Preservation";
primary = true;
url = "https://dav.${domain}/${user}/preservation/";
color = "#dddddd";
}
{
name = "Effort";
url = "https://dav.${domain}/${user}/effort/";
color = "#dd2222";
}
{
name = "Experience";
url = "https://dav.${domain}/${user}/experience/";
color = "#2222dd";
}
{
name = "Exposure";
url = "https://dav.${domain}/${user}/exposure/";
color = "#22aa22";
}
{
name = "Engagement";
url = "https://dav.${domain}/${user}/engagement/";
color = "#8800CC";
}
{
name = "Sleep as Android";
url = secrets.calendar.sleep-as-android-url;
color = "#111111";
read-only = true;
type = "ics";
}
{
name = "LEC";
url = "https://${domain}/lec.ics";
color = "#A87000";
read-only = true;
type = "ics";
}
{
name = "LR";
url = "https://${domain}/lr.ics";
color = "#005040";
read-only = true;
type = "ics";
}
{
name = "Feiertage Hessen";
url = "https://ics.tools/Feiertage/hessen.ics";
color = "#303030";
read-only = true;
type = "ics";
}
# {
# name = "Handball Männer";
# url = "http://i.cal.to/ical/108/dhb/handball-nationalmannschaft/c687e97f.bc7c3eb6-11a0e356.ics";
# color = "#880023";
# read-only = true;
# type = "ics";
# }
];
default_set = {
# name =
# url =
color = "#777777";
read-only = false;
primary = false;
type = "caldav";
};
in {
home.packages = with pkgs; [
gnome-calendar
thunderbird
];
accounts.calendar.accounts = let
transform_caledar_set = calendar_set: with calendar_set; { # transform set for accounts.calendar.accounts endpoint
inherit primary;
remote = {
inherit url name;
userName = hyper.user; # my globally set username
};
};
in pkgs.lib.attrsets.mergeAttrsList (
map (calendar: {
"${calendar.name}" = transform_caledar_set ( default_set // calendar );
}) calendars
);
programs.thunderbird.settings = let
to_safe_name = name: (builtins.replaceStrings ["."] ["-"]) name;
in (pkgs.lib.attrsets.mergeAttrsList (
map (calendar: with ( default_set // calendar ); {
"calendar.registry.${to_safe_name calendar.name}.cache.enabled" = true;
"calendar.registry.${to_safe_name calendar.name}.calendar-main-default" = primary;
"calendar.registry.${to_safe_name calendar.name}.calendar-main-in-composite" = true;
"calendar.registry.${to_safe_name calendar.name}.color" = color;
"calendar.registry.${to_safe_name calendar.name}.name" = name;
"calendar.registry.${to_safe_name calendar.name}.type" = type;
"calendar.registry.${to_safe_name calendar.name}.uri" = url;
"calendar.registry.${to_safe_name calendar.name}.username" = hyper.user;
"calendar.registry.${to_safe_name calendar.name}.readOnly" = read-only;
}) calendars
) // {
"calendar.list.sortOrder" = pkgs.lib.fold (calendar: acc: calendar.name + " " + acc) "" calendars;
"calendar.week.start" = 1;
});
}

860
home-modules/chatterino.nix Executable file → Normal file
View File

@@ -1,51 +1,32 @@
{ pkgs, lib, rice, user, secrets, ... }:
{ config, pkgs, hyper, rice, secrets, ... }:
let
channels = [
"Caedrel"
"NoWay4u_Sir"
"zackrawrr"
"agurin"
"asmongold"
"Broeki"
"Broxah"
# "agurin"
# "asmongold"
# "Caedrel"
"chrissyofficial"
"EintrachtSpandau"
# "EintrachtSpandau"
"GamesDoneQuick"
"gdolphn"
"GRONKH"
"handofblood"
"HisWattson"
"imls"
"iskall85"
"Jankos"
"Karni"
"KuruHS"
"kutcherlol"
"LCK"
"LCS"
# "KuruHS"
"LEC"
"lol_nemesis"
"loltyler1"
"LPL"
"maxim"
"NASA"
"NNOPrime"
# "NoWay4u_Sir"
# "NASA"
"NoWay4u_Sir"
"OfficialMikeShinoda"
"ow_esports"
"PrimeGaming"
"PrimeLeague"
"Rekkles"
"riotgames"
"Sola"
"thebausffs"
"ThePrimeagen"
"Tolkin"
"Trick2g"
"TSM_ImperialHal"
"Xisuma"
# "zackrawrr"
# "TSM_ImperialHal"
"velja_lol"
# "Xisuma"
"zackrawrr"
];
tabber = channel-name: {
highlightsEnabled = true;
@@ -62,10 +43,16 @@ let
};
};
in {
sops.secrets."streamlink/twitch-oauth" = { path = "%r/secrets/streamlink/twich-oauth"; };
home = {
packages = with pkgs; [ chatterino2 ];
packages = with pkgs; [
chatterino2
streamlink
mpv
];
file = {
".local/share/chatterino/Settings/settings.json".text = with secrets.chatterino; ''
".local/share/chatterino/Settings/settings.json".text = with secrets.chatterino; /* json */ ''
{
"accounts": {
"current": "${username}",
@@ -95,10 +82,8 @@ in {
"showUptime": true,
"showViewerCount": true
},
"tabVisibility": 1,
"theme": {
"name": "Black"
}
"tabVisibility": 0,
"theme": { "name": "nxtheme.json" }
},
"behaviour": {
"pauseOnHoverDuration": 5.0,
@@ -112,615 +97,87 @@ in {
},
"highlighting": {
"badges": [
{
"alert": false,
"color": "#7f7f3f49",
"displayName": "Broadcaster",
"name": "broadcaster",
"showInMentions": false,
"sound": false,
"soundUrl": ""
},
{
"alert": false,
"color": "#7f7f3f49",
"displayName": "Admin",
"name": "admin",
"showInMentions": false,
"sound": false,
"soundUrl": ""
},
{
"alert": false,
"color": "#7f7f3f49",
"displayName": "Staff",
"name": "staff",
"showInMentions": false,
"sound": false,
"soundUrl": ""
},
{
"alert": false,
"displayName": "Moderator",
"name": "moderator",
"showInMentions": false,
"sound": false,
"soundUrl": ""
},
{
"alert": false,
"color": "#7f7f3578",
"displayName": "VIP",
"name": "vip",
"showInMentions": false,
"sound": false,
"soundUrl": ""
}
{ "alert": false, "color": "#7f7f3f49", "displayName": "Broadcaster", "name": "broadcaster", "showInMentions": false, "sound": false, "soundUrl": "" },
{ "alert": false, "color": "#7f7f3f49", "displayName": "Admin", "name": "admin", "showInMentions": false, "sound": false, "soundUrl": "" },
{ "alert": false, "color": "#7f7f3f49", "displayName": "Staff", "name": "staff", "showInMentions": false, "sound": false, "soundUrl": "" },
{ "alert": false, "displayName": "Moderator", "name": "moderator", "showInMentions": false, "sound": false, "soundUrl": "" },
{ "alert": false, "color": "#7f7f3578", "displayName": "VIP", "name": "vip", "showInMentions": false, "sound": false, "soundUrl": "" }
],
"selfMessageHighlight": {
"color": "#73008cff",
"enabled": true
}
"selfMessageHighlight": { "color": "#73008cff", "enabled": true }
},
"hotkeys": {
"addedDefaults": [
"change channel",
"close popup window",
"create clip",
"delete",
"emote picker",
"focus down",
"focus left",
"focus right",
"focus up",
"go to end of input",
"go to end of input with selection",
"go to start of input",
"go to start of input with selection",
"new popup window",
"new popup window from tab",
"new split",
"new tab",
"next message",
"open debug popup",
"open quick switcher",
"open settings",
"popup accept",
"popup focus search box",
"popup reject",
"popup scroll down",
"popup scroll up",
"popup select last tab",
"popup select next tab",
"popup select previous tab",
"popup select tab #1",
"popup select tab #2",
"popup select tab #3",
"popup select tab #4",
"popup select tab #5",
"popup select tab #6",
"popup select tab #7",
"popup select tab #8",
"previous message",
"reconnect",
"reload emotes",
"remove tab",
"reopen split",
"scroll page down",
"scroll page up",
"scroll to bottom",
"scroll to top",
"select last tab",
"select next tab",
"select previous tab",
"select tab #1",
"select tab #2",
"select tab #3",
"select tab #4",
"select tab #5",
"select tab #6",
"select tab #7",
"select tab #8",
"send message",
"send message and keep text",
"show global search",
"show search",
"toggle live tabs only",
"toggle local r9k",
"toggle tab visibility",
"zoom in",
"zoom out",
"zoom reset"
],
"change channel": {
"action": "changeChannel",
"arguments": [],
"category": "split",
"keySequence": "Ctrl+R"
},
"close popup window": {
"action": "delete",
"arguments": [],
"category": "popupWindow",
"keySequence": "Esc"
},
"create clip": {
"action": "createClip",
"arguments": [],
"category": "split",
"keySequence": "Alt+X"
},
"delete": {
"action": "delete",
"arguments": [],
"category": "split",
"keySequence": "Ctrl+W"
},
"emote picker": {
"action": "openEmotesPopup",
"arguments": [],
"category": "splitInput",
"keySequence": "Ctrl+E"
},
"focus down": {
"action": "focus",
"arguments": [
"down"
],
"category": "split",
"keySequence": "Alt+Down"
},
"focus left": {
"action": "focus",
"arguments": [
"left"
],
"category": "split",
"keySequence": "Alt+Left"
},
"focus right": {
"action": "focus",
"arguments": [
"right"
],
"category": "split",
"keySequence": "Alt+Right"
},
"focus up": {
"action": "focus",
"arguments": [
"up"
],
"category": "split",
"keySequence": "Alt+Up"
},
"go to end of input": {
"action": "cursorToEnd",
"arguments": [
"withoutSelection"
],
"category": "splitInput",
"keySequence": "End"
},
"go to end of input with selection": {
"action": "cursorToEnd",
"arguments": [
"withSelection"
],
"category": "splitInput",
"keySequence": "Shift+End"
},
"go to start of input": {
"action": "cursorToStart",
"arguments": [
"withoutSelection"
],
"category": "splitInput",
"keySequence": "Home"
},
"go to start of input with selection": {
"action": "cursorToStart",
"arguments": [
"withSelection"
],
"category": "splitInput",
"keySequence": "Shift+Home"
},
"new popup window": {
"action": "popup",
"arguments": [
"split"
],
"category": "window",
"keySequence": "Ctrl+N"
},
"new popup window from tab": {
"action": "popup",
"arguments": [
"window"
],
"category": "window",
"keySequence": "Ctrl+Shift+N"
},
"new split": {
"action": "newSplit",
"arguments": [],
"category": "window",
"keySequence": "Ctrl+T"
},
"new tab": {
"action": "newTab",
"arguments": [],
"category": "window",
"keySequence": "Ctrl+Shift+T"
},
"next message": {
"action": "nextMessage",
"arguments": [],
"category": "splitInput",
"keySequence": "Down"
},
"open debug popup": {
"action": "debug",
"arguments": [],
"category": "split",
"keySequence": "F10"
},
"open quick switcher": {
"action": "openQuickSwitcher",
"arguments": [],
"category": "window",
"keySequence": "Ctrl+K"
},
"open settings": {
"action": "openSettings",
"arguments": [],
"category": "window",
"keySequence": "Ctrl+P"
},
"popup accept": {
"action": "accept",
"arguments": [],
"category": "popupWindow",
"keySequence": "Return"
},
"popup focus search box": {
"action": "search",
"arguments": [],
"category": "popupWindow",
"keySequence": "Ctrl+F"
},
"popup reject": {
"action": "reject",
"arguments": [],
"category": "popupWindow",
"keySequence": "Esc"
},
"popup scroll down": {
"action": "scrollPage",
"arguments": [
"down"
],
"category": "popupWindow",
"keySequence": "PgDown"
},
"popup scroll up": {
"action": "scrollPage",
"arguments": [
"up"
],
"category": "popupWindow",
"keySequence": "PgUp"
},
"popup select last tab": {
"action": "openTab",
"arguments": [
"last"
],
"category": "popupWindow",
"keySequence": "Ctrl+9"
},
"popup select next tab": {
"action": "openTab",
"arguments": [
"next"
],
"category": "popupWindow",
"keySequence": "Ctrl+Tab"
},
"popup select previous tab": {
"action": "openTab",
"arguments": [
"previous"
],
"category": "popupWindow",
"keySequence": "Ctrl+Shift+Tab"
},
"popup select tab #1": {
"action": "openTab",
"arguments": [
"0"
],
"category": "popupWindow",
"keySequence": "Ctrl+1"
},
"popup select tab #2": {
"action": "openTab",
"arguments": [
"1"
],
"category": "popupWindow",
"keySequence": "Ctrl+2"
},
"popup select tab #3": {
"action": "openTab",
"arguments": [
"2"
],
"category": "popupWindow",
"keySequence": "Ctrl+3"
},
"popup select tab #4": {
"action": "openTab",
"arguments": [
"3"
],
"category": "popupWindow",
"keySequence": "Ctrl+4"
},
"popup select tab #5": {
"action": "openTab",
"arguments": [
"4"
],
"category": "popupWindow",
"keySequence": "Ctrl+5"
},
"popup select tab #6": {
"action": "openTab",
"arguments": [
"5"
],
"category": "popupWindow",
"keySequence": "Ctrl+6"
},
"popup select tab #7": {
"action": "openTab",
"arguments": [
"6"
],
"category": "popupWindow",
"keySequence": "Ctrl+7"
},
"popup select tab #8": {
"action": "openTab",
"arguments": [
"7"
],
"category": "popupWindow",
"keySequence": "Ctrl+8"
},
"previous message": {
"action": "previousMessage",
"arguments": [],
"category": "splitInput",
"keySequence": "Up"
},
"reconnect": {
"action": "reconnect",
"arguments": [],
"category": "split",
"keySequence": "Ctrl+F5"
},
"reload emotes": {
"action": "reloadEmotes",
"arguments": [],
"category": "split",
"keySequence": "F5"
},
"remove tab": {
"action": "removeTab",
"arguments": [],
"category": "window",
"keySequence": "Ctrl+Shift+W"
},
"reopen split": {
"action": "reopenSplit",
"arguments": [],
"category": "window",
"keySequence": "Ctrl+G"
},
"scroll page down": {
"action": "scrollPage",
"arguments": [
"down"
],
"category": "split",
"keySequence": "PgDown"
},
"scroll page up": {
"action": "scrollPage",
"arguments": [
"up"
],
"category": "split",
"keySequence": "PgUp"
},
"scroll to bottom": {
"action": "scrollToBottom",
"arguments": [],
"category": "split",
"keySequence": "Ctrl+End"
},
"scroll to top": {
"action": "scrollToTop",
"arguments": [],
"category": "split",
"keySequence": "Ctrl+Home"
},
"select last tab": {
"action": "openTab",
"arguments": [
"last"
],
"category": "window",
"keySequence": "Ctrl+9"
},
"select next tab": {
"action": "openTab",
"arguments": [
"next"
],
"category": "window",
"keySequence": "Ctrl+Tab"
},
"select previous tab": {
"action": "openTab",
"arguments": [
"previous"
],
"category": "window",
"keySequence": "Ctrl+Shift+Tab"
},
"select tab #1": {
"action": "openTab",
"arguments": [
"0"
],
"category": "window",
"keySequence": "Ctrl+1"
},
"select tab #2": {
"action": "openTab",
"arguments": [
"1"
],
"category": "window",
"keySequence": "Ctrl+2"
},
"select tab #3": {
"action": "openTab",
"arguments": [
"2"
],
"category": "window",
"keySequence": "Ctrl+3"
},
"select tab #4": {
"action": "openTab",
"arguments": [
"3"
],
"category": "window",
"keySequence": "Ctrl+4"
},
"select tab #5": {
"action": "openTab",
"arguments": [
"4"
],
"category": "window",
"keySequence": "Ctrl+5"
},
"select tab #6": {
"action": "openTab",
"arguments": [
"5"
],
"category": "window",
"keySequence": "Ctrl+6"
},
"select tab #7": {
"action": "openTab",
"arguments": [
"6"
],
"category": "window",
"keySequence": "Ctrl+7"
},
"select tab #8": {
"action": "openTab",
"arguments": [
"7"
],
"category": "window",
"keySequence": "Ctrl+8"
},
"send message": {
"action": "sendMessage",
"arguments": [],
"category": "splitInput",
"keySequence": "Return"
},
"send message and keep text": {
"action": "sendMessage",
"arguments": [
"keepInput"
],
"category": "splitInput",
"keySequence": "Ctrl+Return"
},
"show global search": {
"action": "showGlobalSearch",
"arguments": [],
"category": "split",
"keySequence": "Ctrl+Shift+F"
},
"show search": {
"action": "showSearch",
"arguments": [],
"category": "split",
"keySequence": "Ctrl+F"
},
"toggle live tabs only": {
"action": "setTabVisibility",
"arguments": [
"toggleLiveOnly"
],
"category": "window",
"keySequence": "Ctrl+Shift+L"
},
"toggle local r9k": {
"action": "toggleLocalR9K",
"arguments": [],
"category": "window",
"keySequence": "Ctrl+H"
},
"toggle tab visibility": {
"action": "setTabVisibility",
"arguments": [
"toggle"
],
"category": "window",
"keySequence": "Ctrl+U"
},
"zoom in": {
"action": "zoom",
"arguments": [
"in"
],
"category": "window",
"keySequence": "Ctrl++"
},
"zoom out": {
"action": "zoom",
"arguments": [
"out"
],
"category": "window",
"keySequence": "Ctrl+-"
},
"zoom reset": {
"action": "zoom",
"arguments": [
"reset"
],
"category": "window",
"keySequence": "Ctrl+0"
}
"addedDefaults": [ "change channel", "close popup window", "create clip", "delete", "emote picker", "focus down", "focus left", "focus right", "focus up", "go to end of input", "go to end of input with selection", "go to start of input", "go to start of input with selection", "new popup window", "new popup window from tab", "new split", "new tab", "next message", "open debug popup", "open quick switcher", "open settings", "popup accept", "popup focus search box", "popup reject", "popup scroll down", "popup scroll up", "popup select last tab", "popup select next tab", "popup select previous tab", "popup select tab #1", "popup select tab #2", "popup select tab #3", "popup select tab #4", "popup select tab #5", "popup select tab #6", "popup select tab #7", "popup select tab #8", "previous message", "reconnect", "reload emotes", "remove tab", "reopen split", "scroll page down", "scroll page up", "scroll to bottom", "scroll to top", "select last tab", "select next tab", "select previous tab", "select tab #1", "select tab #2", "select tab #3", "select tab #4", "select tab #5", "select tab #6", "select tab #7", "select tab #8", "send message", "send message and keep text", "show global search", "show search", "toggle live tabs only", "toggle local r9k", "toggle tab visibility", "zoom in", "zoom out", "zoom reset" ],
"change channel": { "action": "changeChannel", "arguments": [], "category": "split", "keySequence": "Ctrl+R" },
"close popup window": { "action": "delete", "arguments": [], "category": "popupWindow", "keySequence": "Esc" },
"create clip": { "action": "createClip", "arguments": [], "category": "split", "keySequence": "Alt+X" },
"delete": { "action": "delete", "arguments": [], "category": "split", "keySequence": "Ctrl+W" },
"emote picker": { "action": "openEmotesPopup", "arguments": [], "category": "splitInput", "keySequence": "Ctrl+E" },
"focus down": { "action": "focus", "arguments": [ "down" ], "category": "split", "keySequence": "Alt+Down" },
"focus left": { "action": "focus", "arguments": [ "left" ], "category": "split", "keySequence": "Alt+Left" },
"focus right": { "action": "focus", "arguments": [ "right" ], "category": "split", "keySequence": "Alt+Right" },
"focus up": { "action": "focus", "arguments": [ "up" ], "category": "split", "keySequence": "Alt+Up" },
"go to end of input": { "action": "cursorToEnd", "arguments": [ "withoutSelection" ], "category": "splitInput", "keySequence": "End" },
"go to end of input with selection": { "action": "cursorToEnd", "arguments": [ "withSelection" ], "category": "splitInput", "keySequence": "Shift+End" },
"go to start of input": { "action": "cursorToStart", "arguments": [ "withoutSelection" ], "category": "splitInput", "keySequence": "Home" },
"go to start of input with selection": { "action": "cursorToStart", "arguments": [ "withSelection" ], "category": "splitInput", "keySequence": "Shift+Home" },
"new popup window": { "action": "popup", "arguments": [ "split" ], "category": "window", "keySequence": "Ctrl+N" },
"new popup window from tab": { "action": "popup", "arguments": [ "window" ], "category": "window", "keySequence": "Ctrl+Shift+N" },
"new split": { "action": "newSplit", "arguments": [], "category": "window", "keySequence": "Ctrl+T" },
"new tab": { "action": "newTab", "arguments": [], "category": "window", "keySequence": "Ctrl+Shift+T" },
"next message": { "action": "nextMessage", "arguments": [], "category": "splitInput", "keySequence": "Down" },
"open debug popup": { "action": "debug", "arguments": [], "category": "split", "keySequence": "F10" },
"open quick switcher": { "action": "openQuickSwitcher", "arguments": [], "category": "window", "keySequence": "Ctrl+K" },
"open settings": { "action": "openSettings", "arguments": [], "category": "window", "keySequence": "Ctrl+P" },
"popup accept": { "action": "accept", "arguments": [], "category": "popupWindow", "keySequence": "Return" },
"popup focus search box": { "action": "search", "arguments": [], "category": "popupWindow", "keySequence": "Ctrl+F" },
"popup reject": { "action": "reject", "arguments": [], "category": "popupWindow", "keySequence": "Esc" },
"popup scroll down": { "action": "scrollPage", "arguments": [ "down" ], "category": "popupWindow", "keySequence": "PgDown" },
"popup scroll up": { "action": "scrollPage", "arguments": [ "up" ], "category": "popupWindow", "keySequence": "PgUp" },
"popup select last tab": { "action": "openTab", "arguments": [ "last" ], "category": "popupWindow", "keySequence": "Ctrl+9" },
"popup select next tab": { "action": "openTab", "arguments": [ "next" ], "category": "popupWindow", "keySequence": "Ctrl+Tab" },
"popup select previous tab": { "action": "openTab", "arguments": [ "previous" ], "category": "popupWindow", "keySequence": "Ctrl+Shift+Tab" },
"popup select tab #1": { "action": "openTab", "arguments": [ "0" ], "category": "popupWindow", "keySequence": "Ctrl+1" },
"popup select tab #2": { "action": "openTab", "arguments": [ "1" ], "category": "popupWindow", "keySequence": "Ctrl+2" },
"popup select tab #3": { "action": "openTab", "arguments": [ "2" ], "category": "popupWindow", "keySequence": "Ctrl+3" },
"popup select tab #4": { "action": "openTab", "arguments": [ "3" ], "category": "popupWindow", "keySequence": "Ctrl+4" },
"popup select tab #5": { "action": "openTab", "arguments": [ "4" ], "category": "popupWindow", "keySequence": "Ctrl+5" },
"popup select tab #6": { "action": "openTab", "arguments": [ "5" ], "category": "popupWindow", "keySequence": "Ctrl+6" },
"popup select tab #7": { "action": "openTab", "arguments": [ "6" ], "category": "popupWindow", "keySequence": "Ctrl+7" },
"popup select tab #8": { "action": "openTab", "arguments": [ "7" ], "category": "popupWindow", "keySequence": "Ctrl+8" },
"previous message": { "action": "previousMessage", "arguments": [], "category": "splitInput", "keySequence": "Up" },
"reconnect": { "action": "reconnect", "arguments": [], "category": "split", "keySequence": "Ctrl+F5" },
"reload emotes": { "action": "reloadEmotes", "arguments": [], "category": "split", "keySequence": "F5" },
"remove tab": { "action": "removeTab", "arguments": [], "category": "window", "keySequence": "Ctrl+Shift+W" },
"reopen split": { "action": "reopenSplit", "arguments": [], "category": "window", "keySequence": "Ctrl+G" },
"scroll page down": { "action": "scrollPage", "arguments": [ "down" ], "category": "split", "keySequence": "PgDown" },
"scroll page up": { "action": "scrollPage", "arguments": [ "up" ], "category": "split", "keySequence": "PgUp" },
"scroll to bottom": { "action": "scrollToBottom", "arguments": [], "category": "split", "keySequence": "Ctrl+End" },
"scroll to top": { "action": "scrollToTop", "arguments": [], "category": "split", "keySequence": "Ctrl+Home" },
"select last tab": { "action": "openTab", "arguments": [ "last" ], "category": "window", "keySequence": "Ctrl+9" },
"select next tab": { "action": "openTab", "arguments": [ "next" ], "category": "window", "keySequence": "Ctrl+Tab" },
"select previous tab": { "action": "openTab", "arguments": [ "previous" ], "category": "window", "keySequence": "Ctrl+Shift+Tab" },
"select tab #1": { "action": "openTab", "arguments": [ "0" ], "category": "window", "keySequence": "Ctrl+1" },
"select tab #2": { "action": "openTab", "arguments": [ "1" ], "category": "window", "keySequence": "Ctrl+2" },
"select tab #3": { "action": "openTab", "arguments": [ "2" ], "category": "window", "keySequence": "Ctrl+3" },
"select tab #4": { "action": "openTab", "arguments": [ "3" ], "category": "window", "keySequence": "Ctrl+4" },
"select tab #5": { "action": "openTab", "arguments": [ "4" ], "category": "window", "keySequence": "Ctrl+5" },
"select tab #6": { "action": "openTab", "arguments": [ "5" ], "category": "window", "keySequence": "Ctrl+6" },
"select tab #7": { "action": "openTab", "arguments": [ "6" ], "category": "window", "keySequence": "Ctrl+7" },
"select tab #8": { "action": "openTab", "arguments": [ "7" ], "category": "window", "keySequence": "Ctrl+8" },
"send message": { "action": "sendMessage", "arguments": [], "category": "splitInput", "keySequence": "Return" },
"send message and keep text": { "action": "sendMessage", "arguments": [ "keepInput" ], "category": "splitInput", "keySequence": "Ctrl+Return" },
"show global search": { "action": "showGlobalSearch", "arguments": [], "category": "split", "keySequence": "Ctrl+Shift+F" },
"show search": { "action": "showSearch", "arguments": [], "category": "split", "keySequence": "Ctrl+F" },
"toggle live tabs only": { "action": "setTabVisibility", "arguments": [ "toggleLiveOnly" ], "category": "window", "keySequence": "Ctrl+Shift+L" },
"toggle local r9k": { "action": "toggleLocalR9K", "arguments": [], "category": "window", "keySequence": "Ctrl+H" },
"toggle tab visibility": { "action": "setTabVisibility", "arguments": [ "toggle" ], "category": "window", "keySequence": "Ctrl+U" },
"zoom in": { "action": "zoom", "arguments": [ "in" ], "category": "window", "keySequence": "Ctrl++" },
"zoom out": { "action": "zoom", "arguments": [ "out" ], "category": "window", "keySequence": "Ctrl+-" },
"zoom reset": { "action": "zoom", "arguments": [ "reset" ], "category": "window", "keySequence": "Ctrl+0" }
},
"misc": {
"currentVersion": "2.5.1",
"currentVersion": "2.5.3",
"lockNotebookLayout": false
},
"similarity": {
@@ -732,12 +189,17 @@ in {
"ui": {
"lastSelectChannelTab": 0,
"lastSelectIrcConn": -1
},
"external": {
"streamlink": {
"quality": "",
"options": "--config ${hyper.home}/.config/streamlink/config"
}
}
}
'';
".local/share/chatterino/Settings/window-layout.json".text = builtins.toJSON {
windows = [
{
windows = [{
emotePopup = {
x = 0;
y = 0;
@@ -749,9 +211,117 @@ in {
width = 943;
x = 0;
y = 0;
}
];
}];
};
".local/share/chatterino/Themes/nxtheme.json".text = with rice.color; let
# tr = builtins.toString (rice.lib.float-to-drune rice.transparency);
nh = rice.lib.nohash;
in /* json */ ''
{
"colors": {
"accent": "${accent.base}",
"messages": {
"backgrounds": {
"alternate": "${rice.lib.alter-luminace-hex accent.dark (-0.2)}",
"regular": "${background}"
},
"disabled": "#99000000",
"highlightAnimationEnd": "#00e6e6e6",
"highlightAnimationStart": "#6ee6e6e6",
"selection": "#40ffffff",
"textColors": {
"caret": "#ffffff",
"chatPlaceholder": "#5d5555",
"link": "#4286f4",
"regular": "#ffffff",
"system": "#8c7f7f"
}
},
"scrollbars": {
"background": "#00000000",
"thumb": "${secondary.dark}",
"thumbSelected": "${secondary.base}"
},
"splits": {
"background": "${background}",
"dropPreview": "#300094ff",
"dropPreviewBorder": "${border}",
"dropTargetRect": "${background}",
"dropTargetRectBorder": "${border2}",
"header": {
"background": "${background}", "focusedBackground": "${accent.dark}",
"border": "${background}", "focusedBorder": "${secondary.base}",
"text": "${tertiary.base}", "focusedText": "${tertiary.bright}"
},
"input": {
"background": "${background}",
"text": "${foreground}"
},
"messageSeperator": "${accent.dark}",
"resizeHandle": "#70${nh accent.base}",
"resizeHandleBackground": "#20${nh secondary.dark}"
},
"tabs": {
"liveIndicator": "${special.base}",
"rerunIndicator": "${accent.base}",
"dividerLine": "${background}",
"highlighted": {
"backgrounds": { "hover": "${accent.dark}", "regular": "${secondary.dark}", "unfocused": "${black.dark}" },
"line": { "hover": "${secondary.base}", "regular": "${accent.base}", "unfocused": "${accent.dark}" },
"text": "${accent.base}"
},
"newMessage": {
"backgrounds": { "hover": "${accent.dark}", "regular": "${secondary.dark}", "unfocused": "${black.dark}" },
"line": { "hover": "${secondary.base}", "regular": "${accent.base}", "unfocused": "${accent.dark}" },
"text": "${accent.base}"
},
"regular": {
"backgrounds": { "hover": "${accent.dark}", "regular": "${background}", "unfocused": "${background}" },
"line": { "hover": "${secondary.base}", "regular": "${accent.dark}", "unfocused": "${background}" },
"text": "${accent.base}"
},
"selected": {
"backgrounds": { "hover": "${accent.dark}", "regular": "${secondary.dark}", "unfocused": "${secondary.dark}" },
"line": { "hover": "${accent.bright}", "regular": "${accent.base}", "unfocused": "${accent.dark}" },
"text": "${foreground}"
}
},
"window": {
"background": "${background}",
"text": "${foreground}"
}
},
"metadata": {
"iconTheme": "light"
},
"ctcMeta": {
"name": "nxtheme",
"createdAt": "1970-01-01T00:00:00Z",
"modifiedAt": "1970-01-01T00:00:00Z",
"simpleTabSettings": false,
"checkeredRow": true,
"messageSeparator": false
}
}
'';
".local/share/chatterino/Settings/commands.json".text = ''
{
"commands": [
{
"name": "/sl",
"func": "/streamlink",
"showInMsgContextMenu": false
}
]
}
'';
".config/streamlink/config".text = ''
twitch-api-header=Authorization=OAuth='$(cat ${config.sops.secrets."streamlink/twitch-oauth".path})'
player=mpv
player-args='--no-terminal'
twitch-low-latency
default-stream=best
'';
};
};
}

View File

@@ -0,0 +1,7 @@
{ pkgs, ... }:
{
services.clipman = {
package = pkgs.clipman;
enable = true;
};
}

View File

@@ -5,17 +5,18 @@
<div class="color-container" style="border-color: ${color-set.base}">
<div class="color-box" style="background: ${color-set.dark}; height: ${builtins.toString size}px;">
<p style="color: ${color-set.bright}"> ${color-name}.dark </p>
<p style="color: ${color-set.bright}"> ${color-set.dark} </p>
</div>
<div class="color-box" style="background: ${color-set.base}; height: ${builtins.toString size}px;">
<p class="dynamic-text"> ${color-name}.base </p>
<p class="dynamic-text"> ${color-set.base} </p>
</div>
<div class="color-box" style="background: ${color-set.bright}; height: ${builtins.toString size}px;">
<p style="color: ${color-set.dark}"> ${color-name}.bright </p>
<p style="color: ${color-set.dark}"> ${color-set.bright} </p>
</div>
</div>
'';
in /* html */ ''
<!DOCTYPE html>
<head>
@@ -37,7 +38,7 @@
color: ${foreground};
width: fit-content;
margin: 10px auto 10px auto;
background: ${background};
background: rgba(${rice.lib.hex-to-rgb-comma-string background},${builtins.toString rice.transparency});
border: ${builtins.toString rice.border-width}px solid ${border};
border-radius: ${builtins.toString rice.rounding}px;
padding: ${builtins.toString rice.gap-size}px;
@@ -46,7 +47,7 @@
margin: ${builtins.toString rice.gap-size}px;
}
.color-container {
font-family: ${rice.font.code.name2};
font-family: ${rice.font.code.name};
display: flex;
gap: ${builtins.toString rice.gap-size}px;
margin: ${builtins.toString rice.gap-size}px;
@@ -66,18 +67,20 @@
${cb accent "accent" 100}
${cb secondary "secondary" 100}
${cb tertiary "tertiary" 100}
${cb weird "weird" 75}
${cb special "special" 75}
${cb positive "positive" 30}
${cb negative "negative" 30}
${cb black "black" 25}
${cb white "white" 25}
${cb blue "blue" 25}
${cb cyan "cyan" 25}
${cb green "green" 25}
${cb magenta "magenta" 25}
${cb red "red" 25}
${cb yellow "yellow" 25}
${cb weird "weird" 100}
${cb special "special" 100}
<br>
${cb positive "positive" 70}
${cb negative "negative" 70}
<br>
${cb black "black" 50}
${cb white "white" 50}
${cb blue "blue" 50}
${cb cyan "cyan" 50}
${cb green "green" 50}
${cb magenta "magenta" 50}
${cb red "red" 50}
${cb yellow "yellow" 50}
</body>
<script>
function getLuminance(color) {

2
home-modules/direnv.nix Executable file → Normal file
View File

@@ -1,4 +1,4 @@
{ lib, user, ... }:
{ ... }:
{
programs = {
direnv = {

383
home-modules/discord.nix Executable file → Normal file
View File

@@ -1,199 +1,200 @@
{ pkgs, lib, host, ... }:
lib.mkIf (host != "NxACE")
{ pkgs, hyper, ... }:
pkgs.lib.mkIf (hyper.host != "NxACE")
{
home = {
packages = with pkgs; [
vesktop
# vesktop
discord
];
file.".config/vesktop/settings/settings.json".text = let
settingsSyncVersion = "1729179678715";
in /* json */ ''{
"notifyAboutUpdates": true,
"autoUpdate": false,
"autoUpdateNotification": true,
"useQuickCss": true,
"themeLinks": [
"https://luckfire.github.io/amoled-cord/src/amoled-cord.css"
],
"enabledThemes": [],
"enableReactDevtools": false,
"frameless": false,
"transparent": true,
"winCtrlQ": false,
"macosTranslucency": false,
"disableMinSize": false,
"winNativeTitleBar": false,
"plugins": {
"BadgeAPI": { "enabled": true },
"CommandsAPI": { "enabled": true },
"ContextMenuAPI": { "enabled": true },
"MemberListDecoratorsAPI": { "enabled": false },
"MessageAccessoriesAPI": { "enabled": false },
"MessageDecorationsAPI": { "enabled": false },
"MessageEventsAPI": { "enabled": false },
"MessagePopoverAPI": { "enabled": false },
"NoticesAPI": { "enabled": true },
"ServerListAPI": { "enabled": false },
"NoTrack": { "enabled": true },
"Settings": {
"enabled": true,
"settingsLocation": "aboveActivity"
},
"SupportHelper": { "enabled": true },
"ChatInputButtonAPI": { "enabled": false },
"AlwaysAnimate": { "enabled": true },
"AlwaysTrust": { "enabled": true },
"AnonymiseFileNames": { "enabled": false },
"WebRichPresence (arRPC)": { "enabled": false },
"BANger": { "enabled": false },
"BetterFolders": { "enabled": false },
"BetterGifAltText": { "enabled": false },
"BetterGifPicker": { "enabled": false },
"BetterNotesBox": { "enabled": false },
"BetterRoleDot": { "enabled": false },
"BetterUploadButton": { "enabled": false },
"BiggerStreamPreview": { "enabled": false },
"BlurNSFW": { "enabled": false },
"CallTimer": { "enabled": false },
"ClearURLs": { "enabled": false },
"ClientTheme": { "enabled": false },
"ColorSighted": { "enabled": false },
"ConsoleShortcuts": { "enabled": false },
"CopyUserURLs": { "enabled": false },
"CrashHandler": { "enabled": true },
"CustomRPC": { "enabled": false },
"Dearrow": { "enabled": false },
"Decor": { "enabled": false },
"DisableCallIdle": { "enabled": false },
"EmoteCloner": { "enabled": false },
"Experiments": { "enabled": false },
"F8Break": { "enabled": false },
"FakeNitro": { "enabled": false },
"FakeProfileThemes": { "enabled": true },
"FavoriteEmojiFirst": { "enabled": false },
"FavoriteGifSearch": { "enabled": false },
"FixCodeblockGap": { "enabled": false },
"FixSpotifyEmbeds": { "enabled": false },
"FixYoutubeEmbeds": { "enabled": false },
"ForceOwnerCrown": { "enabled": false },
"FriendInvites": { "enabled": false },
"GameActivityToggle": { "enabled": false },
"GifPaste": { "enabled": false },
"GreetStickerPicker": { "enabled": false },
"HideAttachments": { "enabled": false },
"iLoveSpam": { "enabled": false },
"IgnoreActivities": { "enabled": false },
"ImageZoom": { "enabled": false },
"InvisibleChat": { "enabled": false },
"KeepCurrentChannel": { "enabled": false },
"LastFMRichPresence": { "enabled": false },
"LoadingQuotes": { "enabled": false },
"MemberCount": { "enabled": false },
"MessageClickActions": { "enabled": false },
"MessageLinkEmbeds": { "enabled": false },
"MessageLogger": { "enabled": false },
"MessageTags": { "enabled": false },
"MoreCommands": { "enabled": false },
"MoreKaomoji": { "enabled": false },
"MoreUserTags": { "enabled": false },
"Moyai": { "enabled": false },
"MutualGroupDMs": { "enabled": false },
"NewGuildSettings": { "enabled": false },
"NoBlockedMessages": { "enabled": false },
"NoDevtoolsWarning": { "enabled": false },
"NoF1": { "enabled": false },
"NoMosaic": { "enabled": false },
"NoPendingCount": { "enabled": false },
"NoProfileThemes": { "enabled": false },
"NoReplyMention": { "enabled": false },
"NoScreensharePreview": { "enabled": false },
"NoTypingAnimation": { "enabled": false },
"NoUnblockToJump": { "enabled": false },
"NormalizeMessageLinks": { "enabled": false },
"NotificationVolume": { "enabled": false },
"NSFWGateBypass": { "enabled": false },
"OnePingPerDM": { "enabled": false },
"oneko": { "enabled": false },
"OpenInApp": { "enabled": false },
"Party mode 🎉": { "enabled": false },
"PermissionFreeWill": { "enabled": false },
"PermissionsViewer": { "enabled": false },
"petpet": { "enabled": false },
"PictureInPicture": { "enabled": false },
"PinDMs": { "enabled": false },
"PlainFolderIcon": { "enabled": false },
"PlatformIndicators": { "enabled": false },
"PreviewMessage": { "enabled": false },
"PronounDB": { "enabled": false },
"QuickMention": { "enabled": false },
"QuickReply": { "enabled": false },
"ReactErrorDecoder": { "enabled": false },
"ReadAllNotificationsButton": { "enabled": false },
"RelationshipNotifier": { "enabled": false },
"RevealAllSpoilers": { "enabled": false },
"ReverseImageSearch": { "enabled": false },
"ReviewDB": { "enabled": false },
"RoleColorEverywhere": { "enabled": true },
"SearchReply": { "enabled": false },
"SecretRingToneEnabler": { "enabled": false },
"SendTimestamps": { "enabled": false },
"ServerListIndicators": { "enabled": false },
"ServerProfile": { "enabled": false },
"ShikiCodeblocks": { "enabled": false },
"ShowAllMessageButtons": { "enabled": false },
"ShowConnections": { "enabled": false },
"ShowHiddenChannels": { "enabled": false },
"ShowMeYourName": { "enabled": false },
"ShowTimeouts": { "enabled": false },
"SilentMessageToggle": { "enabled": false },
"SilentTyping": { "enabled": false },
"SortFriendRequests": { "enabled": false },
"SpotifyControls": { "enabled": false },
"SpotifyCrack": { "enabled": false },
"SpotifyShareCommands": { "enabled": false },
"StartupTimings": { "enabled": false },
"SuperReactionTweaks": { "enabled": false },
"TextReplace": { "enabled": false },
"ThemeAttributes": { "enabled": false },
"TimeBarAllActivities": { "enabled": false },
"Translate": { "enabled": false },
"TypingIndicator": { "enabled": false },
"TypingTweaks": { "enabled": false },
"Unindent": { "enabled": false },
"UnsuppressEmbeds": { "enabled": false },
"UrbanDictionary": { "enabled": false },
"UserVoiceShow": { "enabled": false },
"USRBG": { "enabled": false },
"ValidUser": { "enabled": false },
"VoiceChatDoubleClick": { "enabled": false },
"VcNarrator": { "enabled": false },
"VencordToolbox": { "enabled": false },
"ViewIcons": { "enabled": false },
"ViewRaw": { "enabled": false },
"VoiceMessages": { "enabled": false },
"WebContextMenus": {
"enabled": true,
"addBack": true },
"WebKeybinds": { "enabled": true },
"WhoReacted": { "enabled": false },
"Wikisearch": { "enabled": false },
"XSOverlay": { "enabled": false }
},
"notifications": {
"timeout": 5000,
"position": "bottom-right",
"useNative": "not-focused",
"logLimit": 50
},
"cloud": {
"authenticated": false,
"url": "https://api.vencord.dev/",
"settingsSync": false,
"settingsSyncVersion": ${settingsSyncVersion}
}
}
'';
# file.".config/vesktop/settings/settings.json".text = let
# settingsSyncVersion = "1729179678715";
# in /* json */ ''{
# "notifyAboutUpdates": true,
# "autoUpdate": false,
# "autoUpdateNotification": true,
# "useQuickCss": true,
# "themeLinks": [
# "https://luckfire.github.io/amoled-cord/src/amoled-cord.css"
# ],
# "enabledThemes": [],
# "enableReactDevtools": false,
# "frameless": false,
# "transparent": true,
# "winCtrlQ": false,
# "macosTranslucency": false,
# "disableMinSize": false,
# "winNativeTitleBar": false,
# "plugins": {
# "BadgeAPI": { "enabled": true },
# "CommandsAPI": { "enabled": true },
# "ContextMenuAPI": { "enabled": true },
# "MemberListDecoratorsAPI": { "enabled": false },
# "MessageAccessoriesAPI": { "enabled": false },
# "MessageDecorationsAPI": { "enabled": false },
# "MessageEventsAPI": { "enabled": false },
# "MessagePopoverAPI": { "enabled": false },
# "NoticesAPI": { "enabled": true },
# "ServerListAPI": { "enabled": false },
# "NoTrack": { "enabled": true },
# "Settings": {
# "enabled": true,
# "settingsLocation": "aboveActivity"
# },
# "SupportHelper": { "enabled": true },
# "ChatInputButtonAPI": { "enabled": false },
# "AlwaysAnimate": { "enabled": true },
# "AlwaysTrust": { "enabled": true },
# "AnonymiseFileNames": { "enabled": false },
# "WebRichPresence (arRPC)": { "enabled": false },
# "BANger": { "enabled": false },
# "BetterFolders": { "enabled": false },
# "BetterGifAltText": { "enabled": false },
# "BetterGifPicker": { "enabled": false },
# "BetterNotesBox": { "enabled": false },
# "BetterRoleDot": { "enabled": false },
# "BetterUploadButton": { "enabled": false },
# "BiggerStreamPreview": { "enabled": false },
# "BlurNSFW": { "enabled": false },
# "CallTimer": { "enabled": false },
# "ClearURLs": { "enabled": false },
# "ClientTheme": { "enabled": false },
# "ColorSighted": { "enabled": false },
# "ConsoleShortcuts": { "enabled": false },
# "CopyUserURLs": { "enabled": false },
# "CrashHandler": { "enabled": true },
# "CustomRPC": { "enabled": false },
# "Dearrow": { "enabled": false },
# "Decor": { "enabled": false },
# "DisableCallIdle": { "enabled": false },
# "EmoteCloner": { "enabled": false },
# "Experiments": { "enabled": false },
# "F8Break": { "enabled": false },
# "FakeNitro": { "enabled": false },
# "FakeProfileThemes": { "enabled": true },
# "FavoriteEmojiFirst": { "enabled": false },
# "FavoriteGifSearch": { "enabled": false },
# "FixCodeblockGap": { "enabled": false },
# "FixSpotifyEmbeds": { "enabled": false },
# "FixYoutubeEmbeds": { "enabled": false },
# "ForceOwnerCrown": { "enabled": false },
# "FriendInvites": { "enabled": false },
# "GameActivityToggle": { "enabled": false },
# "GifPaste": { "enabled": false },
# "GreetStickerPicker": { "enabled": false },
# "HideAttachments": { "enabled": false },
# "iLoveSpam": { "enabled": false },
# "IgnoreActivities": { "enabled": false },
# "ImageZoom": { "enabled": false },
# "InvisibleChat": { "enabled": false },
# "KeepCurrentChannel": { "enabled": false },
# "LastFMRichPresence": { "enabled": false },
# "LoadingQuotes": { "enabled": false },
# "MemberCount": { "enabled": false },
# "MessageClickActions": { "enabled": false },
# "MessageLinkEmbeds": { "enabled": false },
# "MessageLogger": { "enabled": false },
# "MessageTags": { "enabled": false },
# "MoreCommands": { "enabled": false },
# "MoreKaomoji": { "enabled": false },
# "MoreUserTags": { "enabled": false },
# "Moyai": { "enabled": false },
# "MutualGroupDMs": { "enabled": false },
# "NewGuildSettings": { "enabled": false },
# "NoBlockedMessages": { "enabled": false },
# "NoDevtoolsWarning": { "enabled": false },
# "NoF1": { "enabled": false },
# "NoMosaic": { "enabled": false },
# "NoPendingCount": { "enabled": false },
# "NoProfileThemes": { "enabled": false },
# "NoReplyMention": { "enabled": false },
# "NoScreensharePreview": { "enabled": false },
# "NoTypingAnimation": { "enabled": false },
# "NoUnblockToJump": { "enabled": false },
# "NormalizeMessageLinks": { "enabled": false },
# "NotificationVolume": { "enabled": false },
# "NSFWGateBypass": { "enabled": false },
# "OnePingPerDM": { "enabled": false },
# "oneko": { "enabled": false },
# "OpenInApp": { "enabled": false },
# "Party mode 🎉": { "enabled": false },
# "PermissionFreeWill": { "enabled": false },
# "PermissionsViewer": { "enabled": false },
# "petpet": { "enabled": false },
# "PictureInPicture": { "enabled": false },
# "PinDMs": { "enabled": false },
# "PlainFolderIcon": { "enabled": false },
# "PlatformIndicators": { "enabled": false },
# "PreviewMessage": { "enabled": false },
# "PronounDB": { "enabled": false },
# "QuickMention": { "enabled": false },
# "QuickReply": { "enabled": false },
# "ReactErrorDecoder": { "enabled": false },
# "ReadAllNotificationsButton": { "enabled": false },
# "RelationshipNotifier": { "enabled": false },
# "RevealAllSpoilers": { "enabled": false },
# "ReverseImageSearch": { "enabled": false },
# "ReviewDB": { "enabled": false },
# "RoleColorEverywhere": { "enabled": true },
# "SearchReply": { "enabled": false },
# "SecretRingToneEnabler": { "enabled": false },
# "SendTimestamps": { "enabled": false },
# "ServerListIndicators": { "enabled": false },
# "ServerProfile": { "enabled": false },
# "ShikiCodeblocks": { "enabled": false },
# "ShowAllMessageButtons": { "enabled": false },
# "ShowConnections": { "enabled": false },
# "ShowHiddenChannels": { "enabled": false },
# "ShowMeYourName": { "enabled": false },
# "ShowTimeouts": { "enabled": false },
# "SilentMessageToggle": { "enabled": false },
# "SilentTyping": { "enabled": false },
# "SortFriendRequests": { "enabled": false },
# "SpotifyControls": { "enabled": false },
# "SpotifyCrack": { "enabled": false },
# "SpotifyShareCommands": { "enabled": false },
# "StartupTimings": { "enabled": false },
# "SuperReactionTweaks": { "enabled": false },
# "TextReplace": { "enabled": false },
# "ThemeAttributes": { "enabled": false },
# "TimeBarAllActivities": { "enabled": false },
# "Translate": { "enabled": false },
# "TypingIndicator": { "enabled": false },
# "TypingTweaks": { "enabled": false },
# "Unindent": { "enabled": false },
# "UnsuppressEmbeds": { "enabled": false },
# "UrbanDictionary": { "enabled": false },
# "UserVoiceShow": { "enabled": false },
# "USRBG": { "enabled": false },
# "ValidUser": { "enabled": false },
# "VoiceChatDoubleClick": { "enabled": false },
# "VcNarrator": { "enabled": false },
# "VencordToolbox": { "enabled": false },
# "ViewIcons": { "enabled": false },
# "ViewRaw": { "enabled": false },
# "VoiceMessages": { "enabled": false },
# "WebContextMenus": {
# "enabled": true,
# "addBack": true },
# "WebKeybinds": { "enabled": true },
# "WhoReacted": { "enabled": false },
# "Wikisearch": { "enabled": false },
# "XSOverlay": { "enabled": false }
# },
# "notifications": {
# "timeout": 5000,
# "position": "bottom-right",
# "useNative": "not-focused",
# "logLimit": 50
# },
# "cloud": {
# "authenticated": false,
# "url": "https://api.vencord.dev/",
# "settingsSync": false,
# "settingsSyncVersion": ${settingsSyncVersion}
# }
# }
# '';
};
}

61
home-modules/email.nix Executable file → Normal file
View File

@@ -1,27 +1,19 @@
{ pkgs, lib, host, user, rice, secrets, ... }:
lib.mkIf (host != "NxACE")
{ pkgs, hyper, rice, secrets, ... }:
pkgs.lib.mkIf (hyper.host != "NxACE")
{
home.packages = with pkgs; [
thunderbird
];
programs.thunderbird = let
inherit (lib.generators) toJSON;
inherit (pkgs.lib.generators) toJSON;
extensions = toJSON {} {
"default-theme@mozilla.org" = "5787f490-29b8-436e-a111-640da8590790";
"google@search.mozilla.org" = "cc340383-7068-4b32-a10f-9f19334bfebc";
"ddg@search.mozilla.org" = "0c340210-f7ab-48e8-9778-600ed5d00160";
"amazondotcom@search.mozilla.org" = "881d8fdf-5772-4e33-81ff-faac2d1fa92c";
"wikipedia@search.mozilla.org" = "7ea3d39d-3eea-430f-9bd7-f902d8124d45";
"bing@search.mozilla.org" = "f480cce8-68af-4082-908e-f8996153352b";
"addon@darkreader.org" = "71d6c69d-55f9-4c56-888c-abdcf6efd73d";
"lightningcalendartabs@jlx.84" = "12d48e41-412e-4d09-835a-fa6fb8c180eb";
};
in {
enable = true;
profiles = {
"${user}" = {
"${hyper.user}" = {
isDefault = true;
settings = with rice.color; {
"calendar.alarms.showmissed" = false;
@@ -49,12 +41,46 @@ lib.mkIf (host != "NxACE")
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
};
userChrome = with rice.color; /* css */ ''
* {
color: ${rice.lib.hex-to-rgb-comma-string foreground} !important;
background-color: rgba(${rice.lib.hex-to-rgb-comma-string background}, ${builtins.toString rice.transparency}) !important;
body,
#navigation-toolbox,
#calendarContent,
#calSidebar,
#tabpanelcontainer,
#spacesToolbar,
#tabs-toolbar,
#calMinimonth,
#primaryButtonSidePanel *,
.minimonth-week,
.multiday-header-corner, .day-column-heading, calendar-header-container, calendar-event-column, .multiday-hour-box,
#view-box,
#tabs-toolbar,
#status-bar,
.calview-toggle,
#calview-toggle-item,
#folderPaneHeaderBar,
#folderPane,
#threadPaneHeaderBar,
#threadTree,
#tabs-toolbar {
color: ${foreground} !important;
font-family: ${rice.font.base.name} !important;
background-color: transparent !important;
background-image: none !important;
border: none !important;
-moz-appearance: none !important;
}
treechildren::-moz-tree-row(odd), treechildren::-moz-tree-row(even) {
.minimonth-nav-section {
background-color: rgba(${rice.lib.hex-to-rgb-comma-string background},${builtins.toString rice.transparency}) !important;
border: ${builtins.toString rice.border-width}px solid ${border};
}
.button,
.button-primary,
.tab-content[selected] {
background-color: ${accent.base};
color: ${background};
background-image: none;
}
html {
background-color: rgba(${rice.lib.hex-to-rgb-comma-string background},${builtins.toString rice.transparency}) !important;
}
'';
@@ -63,8 +89,7 @@ lib.mkIf (host != "NxACE")
};
accounts.email.accounts =
let
accounts.email.accounts = let
OAuth2Settings = id: {
"mail.smtpserver.smtp_${id}.authMethod" = 10;
"mail.server.server_${id}.authMethod" = 10;

View File

@@ -1,11 +1,15 @@
# { pkgs-unstable, secrets, user, system, inputs, ...}:
{ rice, user, ... }:
{ pkgs, hyper, rice, ... }:
# browser.tabs.allow_transparent_browser
# https://www.reddit.com/r/FirefoxCSS/comments/1dqws4b/firefox_128_will_allow_the_main_browser_content/
{
home.file = with rice.color; let
home = {
packages = with pkgs; [
firefox
];
file = with rice.color; let
blur = builtins.toString 20;
in {
".mozilla/firefox/${user}/chrome/userChrome.css".text = /* css */ ''
".mozilla/firefox/${hyper.user}/chrome/userChrome.css".text = /* css */ ''
:root{
/* Popup panels */
--arrowpanel-background : rgba(${rice.lib.hex-to-rgb-comma-string background}, ${builtins.toString rice.transparency}) !important;
@@ -91,7 +95,7 @@
}
'';
".mozilla/firefox/${user}/chrome/userContent.css".text = /* css */ ''
".mozilla/firefox/${hyper.user}/chrome/userContent.css".text = /* css */ ''
/* Removes the white loading page */
/* url(about:newtab), url(about:home) */
@-moz-document url(about:blank) {
@@ -110,20 +114,14 @@
/* new-tab */
@-moz-document url-prefix(about:home), url-prefix(about:newtab) {
:root{
--newtab-background-color-secondary: ${background} !important;
}
body, html {
background: transparent !important;
}
}
@-moz-document domain(youtube.com) {
#background, #chips-wrapper, ytd-mini-guide-entry-renderer {
background-color: rgba(${rice.lib.hex-to-rgb-comma-string background},${builtins.toString rice.transparency}) !important;
backdrop-filter: blur(${blur}px);
border: ${builtins.toString rice.border-width} solid ${border};
}
body, html, ytd-app, ytd-mini-guide-renderer, div#content-container, #guide-content.ytd-app, #guide-wrapper, div#contentContainer {
background-color: transparent !important;
border: ${builtins.toString rice.border-width} solid ${border};
.tile, .search-handoff-button {
border: ${builtins.toString rice.border-width}px solid ${border} !important;
}
}
@@ -140,7 +138,6 @@
@-moz-document domain(reddit.com) {
header {
background-color: rgba(${rice.lib.hex-to-rgb-comma-string background},${builtins.toString rice.transparency}) !important;
backdrop-filter: blur(20px);
}
body, html, reddit-sidebar-nav, shreddit-post, aside, .reddit-search-bar{
background-color: transparent !important;
@@ -171,6 +168,24 @@
}
}
@media (prefers-color-scheme: dark) {
:root .theme-system {
--color-bg: transtparent !important;
--color-text: ${rice.color.foreground}
}
}
@-moz-document domain(developer.mozilla.org) {
html, body {
background-color: transparent !important;
}
.top-navigation, .article-actions-container {
background-color: rgba(0,0,0,1) !important;
backdrop-filter: blur(100px);
border-radius: ${builtins.toString rice.rounding}px;
}
}
@-moz-document domain(github.com) {
body, html, header, #repository-container-header, .bgColor-muted, section {
background-color: transparent !important;
@@ -182,7 +197,8 @@
background-color: transparent !important;
}
header, footer {
background-color: rgba(0,0,0,0.5) !important;
background-color: rgba(0,0,0,1) !important;
backdrop-filter: blur(100px);
border-radius: ${builtins.toString rice.rounding}px;
}
}
@@ -196,13 +212,51 @@
}
}
@-moz-document domain(nx2.site) {
@-moz-document url-prefix("https://nx2.site/") {
html {
background: radial-gradient(rgba(255, 255, 255, 0.8) 5%, transparent 5%) !important;
background-repeat: repeat !important;
background-size: 2vmin 2vmin !important;
}
}
@-moz-document url-prefix("pw.nx2.site") {
html {
background: black;
}
}
@-moz-document url-prefix("pw.nx2.site") {
html {
background: radial-gradient(rgba(255, 255, 255, 0.8) 5%, transparent 5%) !important;
background-repeat: repeat !important;
background-size: 2vmin 2vmin !important;
}
body, .tw-bg-background-alt3, main, .card-header, .card-body, .modal-body {
background-color: transparent !important;
}
.modal-open, .modal-header, form.modal-content, .modal-footer {
background-color: rgba(0,0,0,0.8) !important;
backdrop-filter: blur(5px);
}
.cdk-virtual-scroll-content-wrapper, .card, .tw-bg-background, .modal-content {
background-color: rgba(0,0,0,0.8) !important;
border-radius: 10px !important;
border: ${toString rice.border-width}px solid ${border} !important;
}
}
@-moz-document domain(chatgpt.com) {
body, html , .bg-token-sidebar-surface-primary {
background-color: transparent !important;
}
.bg-token-main-surface-primary {
background-color: rgba(0,0,0,1) !important;
backdrop-filter: blur(100px) !important;
border-radius: ${builtins.toString rice.rounding}px !important;
}
}
'';
};
};
}

46
home-modules/fish.nix Executable file → Normal file
View File

@@ -1,4 +1,4 @@
{ pkgs, lib, rice, user, ... }:
{ pkgs, ... }:
{
home.packages = with pkgs; [
fish
@@ -17,18 +17,18 @@
TFM
PROMPT
" | lolcat --force)
" | lolcat --force 2> /dev/null)
msg="
$(echo -e "$logo" | sed -n 3p): $(cat /etc/*-release | grep PRETTY_NAME | cut -c 14- | rev | cut -c 2- | rev)
$(echo -e "$logo" | sed -n 4p): ''${XDG_CURRENT_DESKTOP^}
$(echo -e "$logo" | sed -n 5p): ''${TERM^}
$(echo -e "$logo" | sed -n 6p): $(bash --version | head --lines 1 | cut -f -4 -d' ' | sed -E 's-(.*?), version (.*?)\(.*-\1 \2-g')
$(echo -e "$logo" | sed -n 7p): fish $(fish --version | rev | cut -f 1 -d' ' | rev)
$(echo -e "$logo" | sed -n 7p): fish $(fish --version | rev | cut -f 1 -d' ' | rev | sed 's/./\U&/')
$(echo -e "$logo" | sed -n 8p): ''$(uname -r)
$(echo -e "$logo" | sed -n 9p): $($EDITOR --version | head -n 1 | sed -E 's-(.+?) \(.*-\1-g')
$(echo -e "$logo" | sed -n 10p): $(yazi --version | yazi --version | sed -E 's-(.*?) \(.*-\1-g')
$(echo -e "$logo" | sed -n 11p): $(starship --version | head -n 1)
$(echo -e "$logo" | sed -n 9p): $($EDITOR --version | head -n 1 | sed -E 's-(.+?) \(.*-\1-g' | sed 's/./\U&/')
$(echo -e "$logo" | sed -n 10p): $(yazi --version | sed -E 's-(.*?) \(.*-\1-g')
$(echo -e "$logo" | sed -n 11p): $(starship --version | head -n 1 | sed 's/./\U&/')
"
echo -e "$msg"
'')
@@ -38,14 +38,17 @@
programs.fish = {
enable = true;
shellAliases = {
ls = "eza --icons --git --smart-group --group-directories-first";
ll = "eza --icons --git --smart-group --group-directories-first --long";
la = "eza --icons --git --smart-group --group-directories-first --all";
lla = "eza --icons --git --smart-group --group-directories-first --all --long";
lt = "eza --icons --git --smart-group --group-directories-first --long --tree";
ltd = "eza --icons --git --smart-group --group-directories-first --long --tree -D";
lt2 = "eza --icons --git --smart-group --group-directories-first --long --tree -L 2";
shellAliases = let
base-eza = "eza --icons --git --smart-group --group-directories-first";
in {
ls = "${base-eza}";
ll = "${base-eza} --long";
lg = "${base-eza} --group --long";
la = "${base-eza} --all";
lla = "${base-eza} --all --long";
lt = "${base-eza} --long --tree";
ltd = "${base-eza} --long --tree -D";
lt2 = "${base-eza} --long --tree -L 2";
sr = "sudo reboot";
nf = "neofetch";
nxf = "nxfetch";
@@ -80,28 +83,31 @@
lzd = "lazydocker";
d = "docker";
dcmp = "docker compose";
stui = "sudo systemctl-tui";
# nxsent = ''sent -c \${rice.color.foreground} -b \${rice.color.background}'';
# ya = "yazi"; # function
# nxfiglet = "figlet";
};
interactiveShellInit = ''
interactiveShellInit = /* fish */ ''
set -g fish_greeting
if not set -q IN_NIX_SHELL
nxfetch
# yazi
if set -q SESSION_FROM_DE
set -e SESSION_FROM_DE
set tmp (mktemp -t "yazi-cwd.XXXXX")
yazi $argv --cwd-file="$tmp"
yazi --cwd-file="$tmp"
if set cwd (cat -- "$tmp"); and [ -n "$cwd" ]; and [ "$cwd" != "$PWD" ]
cd -- "$cwd"
builtin cd -- "$cwd"
end
rm -f -- "$tmp"
end
nxfetch
end
'';
functions = {
take = /* bash */ ''
mkdir $argv
cd $argv
'';
# gpg = '';
# set bold \e[1m
# set green \e[32m

23
home-modules/games.nix Executable file → Normal file
View File

@@ -1,7 +1,20 @@
{ pkgs, lib, host, ... }:
lib.mkIf (host != "NxACE")
{ pkgs, hyper, ... }:
pkgs.lib.mkIf (hyper.host == "NxNORTH")
{
home.packages = with pkgs; [
mindustry-wayland
];
home = {
packages = (with pkgs.unstable; [
protonup
mangohud
prismlauncher
# heroic
# mindustry-wayland
]) ++ [ pkgs.heroic ];
sessionVariables = {
STEAM_EXTRA_COMPAT_TOOLS_PATHS = "\${HOME}/.steam/root/compatibilitytools.d";
};
};
}

4
home-modules/gestures.nix Executable file → Normal file
View File

@@ -1,5 +1,5 @@
{ pkgs, lib, host, ... }:
lib.mkIf (host == "NxXPS")
{ pkgs, hyper, ... }:
pkgs.lib.mkIf (hyper.host == "NxXPS")
{
home.packages = with pkgs; [
libinput-gestures

48
home-modules/ghostty.nix Normal file
View File

@@ -0,0 +1,48 @@
{ pkgs, rice, ... }:
{
programs.ghostty = {
enable = true;
package = pkgs.ghostty;
settings = with rice.color; {
background = background;
background-opacity = builtins.toString rice.transparency;
clipboard-paste-protection = false;
clipboard-read = "allow";
clipboard-trim-trailing-spaces = true;
confirm-close-surface = false;
cursor-color = special.bright;
cursor-opacity = 0.8;
font-family = "${rice.font.code.name}";
foreground = foreground;
keybind = [
"ctrl+comma=reload_config"
"ctrl+equal=increase_font_size:1"
"ctrl+minus=decrease_font_size:1"
"ctrl+shift+v=paste_from_clipboard"
];
palette = with rice; [
"0=${black.base}"
"8=${black.bright}"
"1=${red.base}"
"9=${red.bright}"
"2=${green.base}"
"10=${green.bright}"
"3=${yellow.base}"
"11=${yellow.bright}"
"4=${blue.base}"
"12=${blue.bright}"
"5=${magenta.base}"
"13=${magenta.bright}"
"6=${cyan.base}"
"14=${cyan.bright}"
"7=${white.base}"
"15=${white.bright}"
];
selection-background = accent.base;
selection-foreground = background;
window-decoration = false;
window-padding-x = 5;
window-padding-y = 5;
};
};
}

10
home-modules/gimp.nix Normal file
View File

@@ -0,0 +1,10 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [
# (gimp-with-plugins.override {
# plugins = with gimpPlugins; [ bimp ];
# })
gimp
];
}

41
home-modules/git.nix Executable file → Normal file
View File

@@ -1,42 +1,15 @@
{ pkgs, rice, ... }:
{ pkgs, hyper, rice, ... }:
{
home.packages = with pkgs; [
git
delta
(pkgs.writeShellScriptBin "git_monitor" ''
#!/bin/bash
# List of directories to check
directories=(
"$HOME/nix-dots"
"$HOME/obsidian-vault"
"$HOME/Pictures/wallpapers"
)
echo ""
for dir in "''${directories[@]}"; do
if [ -d "$dir" ]; then
cd "$dir" || { echo "Cannot change directory to $dir"; exit 1; }
echo "$(echo $dir | rev | cut -f 1 -d'/' | rev):"
if [[ $* == *--fetch* ]]; then
git fetch
fi
gst
echo ""
cd - > /dev/null || { echo "Cannot change back to the original directory"; exit 1; }
else
echo "Directory $dir does not exist."
fi
done
'')
(writeShellScriptBin "gst" "awk -vOFS='' 'NR==FNR {all[i++] = $0; difffiles[$1] = $0; next;} ! ($2 in difffiles) {print; next;} {gsub($2, difffiles[$2]); print;} END {if (NR != FNR) {exit;} for (i in all) {print all[i];}}' <(git diff --color --stat=$(($(tput cols) - 3)) HEAD | sed '$d; s/^ //') <(git -c color.status=always status -sb)")
];
programs.git = {
enable = true;
package = pkgs.gitFull;
userName = ''Lennart J. Kurzweg (Nx2)'';
userEmail = "git@nx2.site";
userEmail = "git@${hyper.domain}";
delta = {
enable = true;
options = {
@@ -46,6 +19,14 @@
whitespace-error-style = "22 reverse";
};
};
extraConfig = {
credential = {
"https://git.da.dicos.de".username = pkgs.lib.mkIf (hyper.host =="NxWSL") "lkurzweg";
"https://git.da.dicos.de".password = pkgs.lib.mkIf (hyper.host =="NxWSL") "Test";
};
url."ssh://git@git.da.dicos.de/".insteadOf = pkgs.lib.mkIf (hyper.host =="NxWSL") "https://git.da.dicos.de/";
pull.rebase = false; # true
};
};
programs.lazygit = {
enable = true;

View File

@@ -1,12 +1,11 @@
{ pkgs, pkgs-unstable, ... }:
{ pkgs, ... }:
{
# there also is a system module
home.packages = (with pkgs; [
home.packages = with pkgs; [
gnupg
gpg-tui
]) ++ ( with pkgs-unstable; [
pinentry-all
]);
];
# services.pcscd.enable = true;
services.gpg-agent = let

194
home-modules/gtk.nix Executable file → Normal file
View File

@@ -1,4 +1,5 @@
{ config, pkgs, lib, rice, user, ... }: let
{ config, pkgs, rice, ... }:
let
# theme-name = "Colloid-Pink-Dark-Compact";
# theme-package = pkgs.colloid-gtk-theme.override {
# themeVariants = [ "pink" ];
@@ -6,18 +7,134 @@
# sizeVariants = [ "compact" ];
# tweaks = [ "black" ];
# };
theme-name = "catppuccin-macchiato-pink-compact+rimless,black";
theme-package = pkgs.catppuccin-gtk.override {
accents = [ "pink" ];
size = "compact";
tweaks = [ "rimless" "black" ];
variant = "macchiato";
};
# theme-name = "catppuccin-macchiato-pink-compact+rimless,black";
# theme-package = pkgs.catppuccin-gtk.override {
# accents = [ "pink" ];
# size = "compact";
# tweaks = [ "rimless" "black" ];
# variant = "macchiato";
# };
theme-name = "Materia-dark-compact";
theme-package = pkgs.materia-theme-transparent;
# theme-name = "numix";
# theme-name = "adw-gtk3-dark";
# theme-package = pkgs.adw-gtk3;
# theme-package = let
# theme-string = with rice.color; let
# h = rice.lib.nohash;
# d = rice.lib.float-to-drune;
# in /* ini */ ''
# BG=${h background}
# FG=${h foreground}
# SEL_BG=${h accent.base}
# SEL_FG=${h black.base}
# ACCENT_BG=${h accent.base}
# TXT_BG=${h black.dark}
# TXT_FG=${h foreground}
# HDR_BG=${h background}
# HDR_FG=${h foreground}
# BTN_BG=${h accent.dark}
# BTN_FG=${h foreground}
# HDR_BTN_BG=${h accent.dark}
# HDR_BTN_FG=${h foreground}
# WM_BORDER_FOCUS=${h border}
# WM_BORDER_UNFOCUS=${h accent.dark}
# ROUNDNESS=${builtins.toString rice.rounding}
# ROUNDNESS_GTK2_HIDPI=${builtins.toString rice.rounding}
# OUTLINE_WIDTH=${builtins.toString rice.border-width}
# BTN_OUTLINE_OFFSET=-3
# BTN_OUTLINE_WIDTH=1
# SPACING=${builtins.toString rice.gap-size}
# GRADIENT=0.0
# CINNAMON_OPACITY=${builtins.toString rice.transparency}
# INACTIVE_FG=${h foreground}
# INACTIVE_TXT_FG=${h foreground}
# INACTIVE_HDR_FG=${h foreground}
# ICONS_DARK=${h accent.dark}
# ICONS_MEDIUM=${h accent.base}
# ICONS_LIGHT=${h accent.bright}
# ICONS_LIGHT_FOLDER=${h accent.base}
# ICONS_SYMBOLIC_ACTION=${h accent.base}
# ICONS_SYMBOLIC_PANEL=${h accent.base}
# ICONS_STYLE=icons_papirus
# CARET1_FG=${h white.dark}
# CARET2_FG=${h black.bright}
# CARET_SIZE=0.04
# MENU_BG=${h accent.dark}
# MENU_FG=${h foreground}
# OUTLINE_WIDTH=${builtins.toString rice.border-width}
# SPOTIFY_PROTO_BG=${h accent.dark}
# SPOTIFY_PROTO_FG=${h foreground}
# SPOTIFY_PROTO_SEL=${h blue.base}
# BASE16_GENERATE_DARK=False
# BASE16_INVERT_TERMINAL=False
# BASE16_MILD_TERMINAL=False
# UNITY_DEFAULT_LAUNCHER_STYLE=False
# '';
# # theme-source-pkg = pkgs.materia-theme;
# theme-source-pkg = pkgs.themix-gui;
# in pkgs.stdenv.mkDerivation {
# name = "oomox-gtk";
# version = theme-source-pkg.version;
# src = theme-source-pkg.src;
# dontBuild = true;
# nativeBuildInputs = with pkgs; [
# glib
# libxml2
# bc
# ];
# buildInputs = with pkgs; [
# gnome-themes-extra
# gdk-pixbuf
# librsvg
# sassc
# inkscape
# optipng
# ];
# propagatedUserEnvPkgs = with pkgs; [
# gtk-engine-murrine
# ];
# # installPhase = ''
# # mkdir -p $out/share/themes/materia
# # patchShebangs .
# # ./change_color.sh -o materia -t $out/share/themes <(echo -e "${theme-string}")
# # '';
# installPhase = ''
# mkdir -p $out/share/icons/icons_papirus
# mkdir -p $out/share/icons/icons_numix
# mkdir -p $out/share/icons/icons_suruplus
# echo "${theme-string}" > $out/oomox.colors
# pushd plugins/icons_papirus
# patchShebangs .
# ./change_color.sh -o icons_papirus -d $out/share/icons/icons_papirus $out/oomox.colors
# popd
# pushd plugins/icons_numix
# patchShebangs .
# ./change_color.sh -o icons_numix -d $out/share/icons/icons_numix $out/oomox.colors
# popd
# pushd plugins/icons_suruplus
# patchShebangs .
# ./change_color.sh -o icons_suruplus -d $out/share/icons/icons_suruplus $out/oomox.colors
# popd
# mkdir -p $out/share/themes/numix
# pushd plugins/theme_oomox
# patchShebangs .
# HOME=$out ./change_color.sh -o numix -m all -t $out/share/themes $out/oomox.colors
# popd
# '';
# meta = {
# description = "custom theme utility";
# homepage = "https://github.com/themix-project/themix-gui";
# maintainers = [ ];
# };
# };
in {
home.packages = with pkgs; [
home = {
packages = with pkgs; [
# gnome.gnome-themes-extra
# gnome.adwaita-icon-theme
gnome.gnome-tweaks
adwaita-icon-theme
gnome-tweaks
gtk3
gtk4
# catppuccin-gtk
@@ -25,45 +142,56 @@ in {
] ++ [
# pkgs-unstable.themix-gui
];
home.sessionVariables.GTK_THEME = theme-name;
sessionVariables.GTK_THEME = theme-name;
pointerCursor = {
gtk.enable = true;
x11.enable = true;
} // rice.cursor;
};
gtk = {
enable = true;
theme = {
name = theme-name;
package = theme-package;
};
gtk3.extraConfig = {
gtk-application-prefer-dark-theme = 1;
gtk2.configLocation = "${config.xdg.configHome}/gtk-2.0/gtkrc";
gtk3 = {
extraConfig.gtk-application-prefer-dark-theme = 1;
# extraCss = with rice.color; /* css */ ''
# wnck-pager {
# color: ${black.bright};
# background-color: ${background};
# }
# wnck-pager:selected {
# color: ${background};
# background-color: ${accent.base};
# }
# '';
# window.background {
# background-color: rgba(${rice.lib.hex-to-rgb-comma-string background},${builtins.toString rice.transparency});
# }
# .background, .view, .surface, .frame, box, window.decoration, stack {
# background-color: transparent;
# }
};
gtk4.extraConfig = {
gtk-application-prefer-dark-theme = 1;
gtk4 = {
extraConfig.gtk-application-prefer-dark-theme = 1;
extraCss = config.gtk.gtk3.extraCss;
};
cursorTheme = rice.cursor;
};
home.pointerCursor = {
gtk.enable = true;
x11.enable = true;
} // rice.cursor;
xdg.configFile = {
"gtk-4.0/assets".source = "${theme-package}/share/themes/${theme-name}/gtk-4.0/assets";
"gtk-4.0/gtk.css".source = "${theme-package}/share/themes/${theme-name}/gtk-4.0/gtk.css";
"gtk-4.0/gtk-dark.css".source = "${theme-package}/share/themes/${theme-name}/gtk-4.0/gtk-dark.css";
"gtk-4.0/assets".source = "${theme-package}/share/themes/${theme-name}/gtk-3.20/assets";
"gtk-4.0/gtk.css".source = "${theme-package}/share/themes/${theme-name}/gtk-3.20/gtk.css";
"gtk-4.0/gtk-dark.css".source = "${theme-package}/share/themes/${theme-name}/gtk-3.20/gtk-dark.css";
};
dconf = {
enable = true;
settings = {
"org/gnome/desktop/interface" = {
color-scheme = "prefer-dark";
gtk-theme = theme-name;
# gtk-theme = theme-name;
};
};
};

View File

@@ -1,23 +1,24 @@
{ pkgs, pkgs-unstable,lib, rice, ... }:
{ pkgs, hyper, rice, ... }:
{
home = {
packages = with pkgs; [
# nixfmt-classic # nix formater
# nil # nix language server
# nixd # specified in nixd.nix
gopls
delve
python311Packages.python-lsp-server
jdt-language-server
ruff
ruff-lsp
pyright
lldb # debugger for llvm stuff
yaml-language-server # yaml
marksman # markdown
vale-ls # style-checker lsp (needs vale)
ltex-ls # Ltex (language tool)
] ++ (with pkgs-unstable; [
vscode-langservers-extracted
bash-language-server
helix
]);
];
sessionVariables = {
EDITOR = "hx";
VISUAL = "hx";
@@ -26,57 +27,190 @@
programs.helix = {
enable = true;
defaultEditor = true;
package = pkgs-unstable.helix;
package = pkgs.unstable.helix;
settings = {
# theme = "base16_terminal";
theme = "base16";
editor = {
scrolloff = 5;
mouse = true;
# default-yank-register = "\"";
middle-click-paste = false;
scroll-lines = 3;
shell = ["sh" "-c"];
line-number = "relative";
cursorline = true;
cursorcolumn = true;
# continue-comments = false;
auto-completion = true;
# path-completion = true;
auto-format = false;
idle-timeout = 250;
completion-timeout = 5;
preview-completion-insert = true;
completion-trigger-len = 1;
auto-info = true;
true-color = true; # is detected automatically if set to false
undercurl = false; # is detected automatically if set to false
rulers = [];
bufferline = "always";
color-modes = true;
text-width = 120;
workspace-lsp-roots = [];
default-line-ending = "native";
insert-final-newline = false;
popup-border = "all";
indent-heuristic = "hybrid";
jump-label-alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
# clip-board-provider = # selected automatically
# end-of-line-diagnostics = "hint";
statusline = {
left = [ "mode"
"spinner"
"file-name"
"read-only-indicator"
"file-type"
"version-control"
];
center = [
"position-percentage"
"total-line-numbers"
"register"
];
right = [
"spinner"
"diagnostics"
"selections"
"primary-selection-length"
"register"
"position"
"file-encoding"
];
# separator = " ";
mode = {
normal = "NORMAL";
insert = "INSERT";
select = "SELECT";
};
};
lsp = {
enable = true;
display-messages = false;
auto-signature-help = true;
display-inlay-hints = true;
};
cursor-shape = {
normal = "block";
insert = "bar";
select = "underline";
};
soft-wrap = {
enable = true;
file-picker = {
hidden = false; # Enables ignoring hidden files
follow-symlinks = true; # Follow symlinks instead of ignoring them
deduplicate-links = true; # Ignore symlinks that point at files already shown in the picker
parents = true; # Enables reading ignore files from parent directories
ignore = true; # Enables reading .ignore files
git-ignore = true; # Enables reading .gitignore files
git-global = true; # Enables reading global .gitignore, whose path is specified in git's config: core.excludesfile option
git-exclude = true; # Enables reading .git/info/exclude files
# max-depth unset = ; # Set with an integer value for maximum depth to recurse
};
auto-pairs = {
"(" = ")";
"{" = "}";
"[" = "]";
"\"" = "\"";
"`" = "`";
"<" = ">";
# "/* " = " */";
};
auto-save = {
focus-lost = false;
after-delay = {
enable = false;
timeout = 3000;
};
};
search = {
smart-case = true;
wrap-around = true;
};
whitespace = {
render = {
skip-levels = "none";
space = "none";
nbsp = "none";
nnbsp = "none";
tab = "none";
newline = "none";
tabpad = "none";
};
characters = {
skip-levels = 1;
space = "·";
nbsp = "";
nnbsp = "";
tab = "";
newline = "";
tabpad = "·";
};
};
line-number = "relative";
color-modes = true;
bufferline = "always";
popup-border = "all";
completion-trigger-len = 1;
completion-timeout = 5;
file-picker.hidden = false;
middle-click-paste = false;
cursorline = true;
indent-guides = {
render = true;
character = "";
skip-levels = 0;
};
lsp.display-inlay-hints = true;
statusline.center = [ "position-percentage" ];
true-color = true;
whitespace.characters = {
newline = "";
tab = "";
skip-levels = 1;
gutters = [
"diagnostics"
"spacer"
"line-numbers"
"spacer"
"diff"
];
# line-numbers = {};
# layout.minwidth = 3;
# diagnostics = {};
# diff = {};
# spacer = {};
soft-wrap = {
enable = true;
max-wrap = 20;
max-indent-retain = 40;
wrap-indicator = "";
wrap-at-text-width = false;
};
smart-tab = {
enable = false;
supersend-menu = false;
};
inline-diagnostics = {
cursor-line = "hint";
other-lines = "disable";
prefix-len = 1;
# max-wrap = set above
max-diagnostics = 20;
};
};
keys.normal = {
keys = {
normal = {
"C-g" = [ ":new" ":insert-output lazygit" ":buffer-close!" ":redraw" ];
"A-`" = [ "no_op" ];
"`" = [ "no_op" ];
"ö" = { "s" = [ "switch_case" ]; "u" = [ "switch_to_uppercase" ]; "l" = [ "switch_to_lowercase" ]; };
};
select = {
"ö" = { "s" = [ "switch_case" ]; "u" = [ "switch_to_uppercase" ]; "l" = [ "switch_to_lowercase" ]; };
};
keys.normal."ö" = {
"s" = [ "switch_case" ];
"u" = [ "switch_to_uppercase" ];
"l" = [ "switch_to_lowercase" ];
};
};
languages = {
language = [
{
name = "nix";
language-servers = [ "nixd" "nil" ];
language-servers = [
"nixd"
# "llm"
];
}
{
name = "latex";
@@ -89,7 +223,6 @@
file-types = [ "md" "MD" ];
scope = "text.<name>";
}
{
name = "python";
language-servers = [ "pyright" "ruff" ];
@@ -122,13 +255,23 @@
}];
};
}
{
name = "go";
language-servers = [
"gopls"
# "llm"
];
# formatter = {
# command = "gofmt";
# };
}
];
language-server = {
"nixd" = {
command = "nixd";
};
"style-check" = {
command = lib.getExe pkgs.vale-ls;
command = pkgs.lib.getExe pkgs.vale-ls;
};
"language-tool" = {
command = "${pkgs.ltex-ls}/bin/ltex-ls";
@@ -137,20 +280,19 @@
command = "ruff-lsp";
config.settings.args = [
# Set line length
# "--line-length"
# "79"
# Enable some ruff rules
# "--select"
# (
# "F,W,E,I,N,D200,D201,D202,D203,D204,D205,D206,D207,D208,D209,D210,D211,"
# + "D212,D213,D214,D215,D300,D301,D400,D401,D402,D403,D404,D405,D406,"
# + "D407,D408,D409,D410,D411,D412,D413,D414,D415,D416,D417,D418,D419,"
# + "UP,YTT,TRIO,ASYNC,B,A,COM,C4,DTZ,T10,DJ,EXE,FA,ISC,ICN001,G010,"
# + "G101,G201,G202,INP,PIE,Q,RSE,RET,SLOT,SIM,TCH,INT,ARG,PTH,TD001,"
# + "TD004,TD005,TD006,TD007,PD,PL,TRY004,TRY200,TRY201,TRY302,TRY400,"
# + "TRY401,FLY,NPY,AIR,PERF,FURB,LOG,RUF"
# )
"--line-length"
"240"
# Enable custom ruff rules
# "--select" lib.concatStringsSep [ ]
];
};
"llm" = {
command = pkgs.lib.getExe pkgs.helix-gpt;
args = [
"--handler"
"ollama"
"--ollamaModel"
"codellama:7b"
];
};
};
@@ -159,15 +301,15 @@
base16 = with rice.color; {
"attributes" = foreground;
"comment" = {
"fg" = white.dark;
"modifiers" = [ "italic" ];
fg = black.bright;
modifiers = [ "italic" ];
};
"constant" = accent.bright;
"constant.character.escape" = special.bright;
"constant.numeric" = foreground;
"constructor" = weird.base;
"debug" = yellow.base;
"diagnostic.modifiers" = [ "underlined" ];
"diagnostic.modifiers" = [ "underline" ];
"diff.delta" = blue.bright;
"diff.minus" = negative.bright;
"diff.plus" = positive.bright;
@@ -176,6 +318,7 @@
"hint" = tertiary.bright;
"info" = foreground;
"keyword" = special.base;
"keyword.modifiers" = [ "italic" ];
"label" = foreground;
"namespace" = weird.bright;
"operator" = foreground;
@@ -188,131 +331,127 @@
"markup.heading" = accent.base;
"markup.bold" = {
"fg" = tertiary.bright;
"modifiers" = [ "bold" ];
fg = tertiary.bright;
modifiers = [ "bold" ];
};
"italic" = {
"fg" = secondary.bright;
"modifiers" = [ "italic" ];
fg = secondary.bright;
modifiers = [ "italic" ];
};
"markup.linktext" = accent.base;
"markup.linkurl" = {
"fg" = tertiary.dark;
"modifiers" = [ "underlined" ];
fg = tertiary.dark;
modifiers = [ "underlined" ];
};
"markup.list" = accent.bright;
"markup.quote" = weird.bright;
"markup.raw" = special.bright;
"markup.strikethrough" = {
"modifiers" = [ "crossed_out" ];
};
"markup.strikethrough".modifiers = [ "crossed_out" ];
"diagnostic.hint" = {
"underline" = { style = "curl"; };
};
"diagnostic.info" = {
"underline" = { style = "curl"; };
};
"diagnostic.warning" = {
"underline" = { style = "curl"; };
};
"diagnostic.error" = {
"underline" = { style = "curl"; };
};
"diagnostic.hint".underline.style = "curl";
"diagnostic.info".underline.style = "curl";
"diagnostic.warning".underline.style = "curl";
"diagnostic.error".underline.style = "curl";
"ui.background" = { # general background of the editor window
"bg" = background;
# bg = background;
};
"ui.bufferline" = { # the top line ("tab"-line)
"fg" = accent.base;
"bg" = black.base;
fg = accent.base;
bg = black.base;
};
"ui.bufferline.active" = { # the active "tab"
"fg" = background;
"bg" = accent.base;
"modifiers" = [ "bold" ];
fg = background;
bg = accent.base;
modifiers = [ "bold" ];
};
"ui.cursor" = { # the cursor in Normal mode
"fg" = foreground;
"modifiers" = [ "reversed" ];
fg = foreground;
modifiers = [ "reversed" ];
};
"ui.cursorline.primary" = { # the line on which the cursor is on
"bg" = black.base;
bg = black.base;
};
"ui.cursor.match" = { # Matching bracket etc.
"bg" = green.dark;
"modifiers" = [ ];
bg = green.dark;
modifiers = [ ];
};
"ui.gutter" = {
"bg" = black.base;
bg = black.base;
};
"ui.help" = {
"fg" = green.base;
"bg" = black.base;
fg = green.base;
bg = black.base;
};
"ui.linenr" = {
"fg" = white.dark;
"bg" = black.base;
fg = white.dark;
bg = black.base;
};
"ui.linenr.selected" = {
"fg" = accent.bright;
"modifiers" = [ "bold" ];
fg = accent.bright;
modifiers = [ "bold" ];
};
"ui.menu" = {
"fg" = accent.base;
"bg" = black.base;
fg = accent.base;
bg = black.base;
};
"ui.menu.scroll" = {
"fg" = yellow.dark;
"bg" = background;
fg = yellow.dark;
bg = background;
};
"ui.menu.selected" = {
"fg" = red.base;
"bg" = blue.dark;
fg = red.base;
bg = blue.dark;
};
"ui.popup" = {
"bg" = black.base;
bg = black.base;
};
"ui.selection" = {
"bg" = white.dark;
bg = white.dark;
};
"ui.selection.primary" = {
"bg" = black.bright;
bg = black.bright;
};
"ui.statusline" = {
"fg" = blue.bright;
"bg" = black.base;
fg = blue.bright;
bg = black.base;
};
"ui.statusline.inactive" = {
"fg" = red.bright;
"bg" = red.dark;
fg = red.bright;
bg = red.dark;
};
"ui.statusline.insert" = {
"fg" = green.bright;
"bg" = green.dark;
fg = green.bright;
bg = green.dark;
};
"ui.statusline.normal" = {
"fg" = yellow.bright;
"bg" = yellow.dark;
fg = yellow.bright;
bg = yellow.dark;
};
"ui.statusline.select" = {
"fg" = cyan.bright;
"bg" = cyan.dark;
fg = cyan.bright;
bg = cyan.dark;
};
"ui.text" = foreground;
"ui.text.focus" = accent.base;
"ui.virtual.indent-guide" = {
"fg" = black.bright;
fg = black.bright;
};
"ui.virtual.inlay-hint" = {
"fg" = weird.bright;
"bg" = weird.dark;
fg = weird.dark;
bg = weird.base;
};
"ui.virtual.ruler" = {
"bg" = background;
bg = background;
};
"ui.virtual.jump-label" = {
fg = special.base;
underline = {
style = "dotted";
};
};
"ui.window" = {
"bg" = black.base;
bg = black.base;
};
};
};

145
home-modules/hyprland-autoname-workspaces.nix Executable file → Normal file
View File

@@ -2,60 +2,81 @@
{
home = {
packages = with pkgs; [ hyprland-autoname-workspaces ];
file.".config/hyprland-autoname-workspaces/config.toml".text = ''
version = "1.1.14"
file.".config/hyprland-autoname-workspaces/config.toml".text = let
icons = /* toml */ ''
DEFAULT = "{class}"
"Alacritty" = ""
"Bitwarden" = ""
"blueman-manager" = "󰂯"
"chatterino" = ""
"Chromium" = ""
"chromium-browser" = ""
"code" = "󰨞"
"code-oss" = "󰨞"
"codium" = "󰨞"
"codium-url-handler" = "󰨞"
"com.mitchellh.ghostty" = "󰊠"
"com.obsproject.Studio" = ""
"discord" = "󰙯"
"Element" = "󰘨"
"epicgameslauncher.exe" = "󰯷"
".*.exe" = ""
"firefox" = "󰈹"
"galaxyclient.exe" = "󰮡"
"\\.?gimp-.*" = ""
"F?imv.*" = "󰋩"
"KiCad" = ""
"kitty" = ""
"libreoffice-calc" = ""
"libreoffice-writer" = ""
"lutris" = "󰊗"
"mpv" = ""
"obsidian" = "󰠮"
"org.inkscape.Inkscape" = "󰕙"
"org.remmina.Remmina" = "󰢹"
"pavucontrol" = "󰕾"
"pcbnew" = ""
"Signal" = "󱅵"
"spotify" = ""
"Spotify" = ""
"steam" = "󰓓"
"thunar" = ""
"thunderbird" = ""
"Tor Browser" = "󰾔"
"vesktop" = "󰙯"
"virt-manager" = ""
"VirtualBox" = ""
"VirtualBox Machine" = ""
"VirtualBox Manager" = ""
"VSCodium" = "󰨞"
"Xsane" = "󰈈"
"zathura" = "󰈦"
"zoom" = "󰬡"
'';
in /* toml */ ''
version = "1.1.15"
[format]
dedup = false
dedup_inactive_fullscreen = false
delim = " "
workspace = "{id}:{clients}"
workspace_empty = "{id}"
client = "{icon}"
client_fullscreen = "F{icon}"
client_active = "<u>{icon}</u>"
client_dup = "{icon}x{counter}"
client_dup_active = "<u>{icon}</u>{delim}{icon}x{counter_unfocused}"
client_dup_fullscreen = "F{icon}{delim}{icon}x{counter_unfocused}"
[exclude]
"steam" = "^(Friends List.*)?$"
"fcitx" = ".*"
[class]
VirtualBox = ""
steam = "󰓓"
"VirtualBox Manager" = ""
"com.obsproject.Studio" = ""
"[Ff]irefox" = "󰈹"
"[Tt]hunderbird" = ""
pcbnew = ""
".*.exe" = ""
Element = "󰘨"
Signal = "󱅵"
Gimp = ""
VSCodium = "󰨞"
"[sS]potify" = ""
virt-manager = ""
lutris = "󰊗"
DEFAULT = "{class}"
"epicgameslauncher.exe" = "󰯷"
"[Cc]ode" = "󰨞"
"galaxyclient.exe" = "󰮡"
pavucontrol = "󰕾"
"Tor Browser" = "󰾔"
mpv = ""
chatterino = ""
libreoffice-writer = ""
kitty = ""
"cyberpunk2077.exe" = "󰾲"
KiCad = ""
"[tT]hunar" = ""
"riotclientux.exe" = "󰰌"
libreoffice-calc = ""
"org.remmina.Remmina" = "󰢹"
"org.inkscape.Inkscape" = "󰕙"
"VirtualBox Machine" = ""
Bitwarden = ""
"[gG]imp-.*" = ""
Chromium = ""
obsidian = "󰠮"
"leagueclientux.exe" = "󰰌"
zathura = "󰈦"
code-oss = "󰨞"
codium-url-handler = "󰨞"
discord = "󰙯"
vesktop = "󰙯"
blueman-manager = "󰂯"
Alacritty = ""
zoom = "󰬡"
spotify = ""
${icons}
[class_active]
"(?i)ExampleOneTerm" = "icon"
[initial_class]
@@ -73,35 +94,11 @@
[initial_title_in_class]
[initial_title]
"Spotify Premium" = ""
[initial_title_in_class_active]
[initial_title_in_initial_class]
[initial_title_in_initial_class_active]
[exclude]
aProgram = "^$"
"" = "^$"
"(?i)fcitx" = ".*"
"[Ss]team" = "^(Friends List.*)?$"
"explorer.exe" = ".*"
"(?i)TestApp" = ""
[format]
dedup = false
dedup_inactive_fullscreen = false
delim = " "
workspace = "{id}:{clients}"
workspace_empty = "{id}"
client = "{icon}"
client_fullscreen = "{icon}"
client_active = "{icon}"
client_dup = "{icon}{counter_sup}"
client_dup_active = "*{icon}*{delim}{icon}{counter_unfocused_sup}"
client_dup_fullscreen = "[{icon}]{delim}{icon}{counter_unfocused_sup}"
'';
};
}

686
home-modules/hyprland.nix Executable file → Normal file
View File

@@ -1,33 +1,47 @@
{config, pkgs, pkgs-unstable, inputs, host, user, nvidia, rice, lib, ... }:
{ config, pkgs, hyper, inputs, rice, ... }:
let
animation-speed = "5";
transparency = builtins.toString rice.transparency;
monitors = {
terminal = "ghostty";
terminal-exec = "ghostty --command=";
monitors = let
docked = false;
in {
xps = {
main = {
name = "eDP-1";
resolution = "1920x1200";
position = "0x0";
scale = "1.0";
};
second = {
name = "DP-3";
main = if docked then {
name = "DP-5";
resolution = "1920x1080";
position = "1920x0";
scale = "1.0";
} else {
name = "eDP-1";
resolution = "1920x1200";
position = "0x1080";
scale = "1.0";
};
second = if docked then {
name = "DP-6";
resolution = "1920x1080";
position = "0x0";
scale = "1.0";
} else {
name = "DP-3";
resolution = "1920x1080";
position = "0x0";
scale = "1.0";
};
};
north = {
main = {
name = "DP-4";
resolution = "2560x1440";
position = "1920x0";
position = "1920x150";
scale = "1.0";
};
left = {
name = "HDMI-A-2";
resolution = "1920x1080";
position = "0x360";
position = "0x0";
scale = "1.0";
};
# right = {
@@ -52,6 +66,8 @@ in {
hyprland-protocols
hyprlock
hypridle
hyprshot
hyprpicker
hyprcursor
grim
@@ -59,8 +75,8 @@ in {
# ]) ++ (with pkgs-unstable; [
]) ++ (with inputs; [
hyprswitch.packages.x86_64-linux.default
# ]) ++ (with inputs; [
# hyprswitch.packages.x86_64-linux.default
]);
@@ -75,15 +91,16 @@ in {
# inputs.hyprland-plugins.packages.${pkgs.system}.hyprexpo
# inputs.hyprfocus.packages.${pkgs.system}.hyprfocus
# inputs.hycov.packages.${pkgs.system}.hycov
# inputs.Hyprspace.packages.${pkgs.system}.Hyprspace
pkgs.hyprlandPlugins.hyprspace
# inputs.hyprspace.packages.${pkgs.system}.Hyprspace
];
settings = {
monitor =
if host == "NxXPS" then (with monitors.xps; [
if hyper.host == "NxXPS" then (with monitors.xps; [
"${main.name}, ${main.resolution}, ${main.position}, ${main.scale}"
"${second.name}, ${second.resolution}, ${second.position}, ${second.scale}"
]) else (if host == "NxNORTH" then (with monitors.north; [
]) else (if hyper.host == "NxNORTH" then (with monitors.north; [
"${main.name}, ${main.resolution}, ${main.position}, ${main.scale}"
"${left.name}, ${left.resolution}, ${left.position}, ${left.scale}"
# "${right.name}, ${right.resolution}, ${right.position}, ${right.scale}"
@@ -91,15 +108,13 @@ in {
"${main.name}, ${main.resolution}, ${main.position}, ${main.scale}"
]));
workspace =
let
d1 = if host == "NxXPS" then monitors.xps.main.name else (if host == "NxNORTH" then monitors.north.main.name else monitors.ace.main.name);
d2 = if host == "NxXPS" then monitors.xps.second.name else (if host == "NxNORTH" then monitors.north.left.name else monitors.ace.main.name);
d3 = if host == "NxXPS" then monitors.xps.main.name else (if host == "NxNORTH" then monitors.north.main.name else monitors.ace.main.name);
# d3 = if host == "NxXPS" then monitors.xps.main.name else (if host == "NxNORTH" then monitors.north.right.name else monitors.ace.main.name);
workspace = let
d1 = if hyper.host == "NxXPS" then monitors.xps.main.name else (if hyper.host == "NxNORTH" then monitors.north.main.name else monitors.ace.main.name);
d2 = if hyper.host == "NxXPS" then monitors.xps.second.name else (if hyper.host == "NxNORTH" then monitors.north.left.name else monitors.ace.main.name);
d3 = if hyper.host == "NxXPS" then monitors.xps.main.name else (if hyper.host == "NxNORTH" then monitors.north.main.name else monitors.ace.main.name);
# d3 = if hyper.host == "NxXPS" then monitors.xps.main.name else (if hyper.hyper.host == "NxNORTH" then monitors.north.right.name else monitors.ace.main.name);
compact = "gapsin:0, gapsout:0, bordersize:1, rounding:false";
in
[
in [
"11, monitor:${d1}, default:true"
"12, monitor:${d1}"
"13, monitor:${d1}"
@@ -120,8 +135,8 @@ in {
"27, monitor:${d2}"
"28, monitor:${d2}"
"29, monitor:${d2}"
"20, monitor:${d2}"
"31, monitor:${d3}, default:${let x = if host == "NxNORTH" then "true" else "false"; in x}"
"20, monitor:${d2}, ${compact}"
"31, monitor:${d3}, default:${let x = if hyper.host == "NxNORTH" then "true" else "false"; in x}"
"32, monitor:${d3}"
"33, monitor:${d3}"
"34, monitor:${d3}"
@@ -131,6 +146,10 @@ in {
"38, monitor:${d3}"
"39, monitor:${d3}"
"30, monitor:${d3}, ${compact}"
] ++ [
# no gaps when only
"w[tv1], gapsout:0, gapsin:0"
"f[1], gapsout:0, gapsin:0"
];
# "device:logitech-wireless-mouse-mx-master-1" = {
@@ -138,7 +157,7 @@ in {
# };
env = if nvidia.enable == true then [
env = if hyper.nvidia.enable == true then [
"LIBVA_DRIVER_NAME,nvidia"
"XDG_SESSION_TYPE,wayland"
"GBM_BACKEND,nvidia-drm"
@@ -174,12 +193,12 @@ in {
decoration = {
rounding = rice.rounding;
drop_shadow = false;
shadow_range = "20";
shadow_offset = "0 0";
shadow_render_power = "4";
"col.shadow" = "rgba(${rice.lib.nohash rice.color.red.base}ff)";
"col.shadow_inactive" = "rgba(${rice.lib.nohash rice.color.black.base}ff)";
# drop_shadow = false;
# shadow_range = "20";
# shadow_offset = "0 0";
# shadow_render_power = "4";
# "col.shadow" = "rgba(${rice.lib.nohash rice.color.red.base}ff)";
# "col.shadow_inactive" = "rgba(${rice.lib.nohash rice.color.black.base}ff)";
active_opacity = "1.0";
inactive_opacity = "1.0";
@@ -191,7 +210,7 @@ in {
blur = {
enabled = true;
size = "3";
size = "10";
passes = "2";
xray = false;
vibrancy = 0.5;
@@ -201,10 +220,11 @@ in {
animations = {
enabled = true;
# bezier = "myBezier, 0.01, 0.9, 0.1, 1.0"; #o
bezier = "myBezier, 0.01, 0.9, 0.1, 1.0"; #o
# bezier = "myBezier, 0.83, 0, 0.17, 1"; # io
bezier = "myBezier, 0.33, 1, 0.68, 1";
animation = let direction = if host == "NxXPS" then "slide" else "slidevert"; in [
# bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
# bezier = "myBezier, 0.33, 1, 0.68, 1";
animation = let direction = if hyper.host == "NxXPS" then "slide" else "slidevert"; in [
"windows, 1, ${animation-speed}, myBezier, slide"
"border, 1, ${animation-speed}, myBezier"
"fade, 1, ${animation-speed}, myBezier"
@@ -228,7 +248,6 @@ in {
dwindle = {
preserve_split = true; # you probably want this
no_gaps_when_only = true;
};
# master = {
@@ -255,52 +274,54 @@ in {
];
windowrulev2 = [
"opacity ${transparency},class:^(com.chatterino.*)$"
"opacity ${transparency},class:^(chatterino)$"
"bordercolor rgba(${rice.lib.nohash rice.color.magenta.bright}ff), pinned:1"
];
windowrule = [
# "opacity ${transparency}, firefox"
"opacity ${transparency}, code-oss"
"opacity ${transparency}, VSCodium"
"opacity ${transparency}, Code"
# "opacity ${transparency}, sent"
"opacity ${transparency}, neovide"
"opacity ${transparency}, obsidian"
# "opacity ${transparency}, zathura"
# "bordercolor rgba(${rice.lib.nohash rice.color.foreground}ff) rgba(${rice.lib.nohash rice.color.background}${rice.lib.float-to-drune rice.transparency}), Alacritty"
# "bordercolor rgba(${rice.lib.nohash rice.color.foreground}ff) rgba(${rice.lib.nohash rice.color.background}${rice.lib.float-to-drune rice.transparency}), Kitty"
"opacity ${transparency}, discord"
"opacity ${transparency}, vesktop"
"opacity ${transparency}, Element"
"opacity ${transparency}, thunderbird"
"opacity ${transparency}, lutris"
"opacity ${transparency}, element"
"opacity ${transparency}, ^([sS]potify)$"
"opacity ${transparency}, virt-manager"
"opacity ${transparency}, thunar"
"opacity ${transparency}, title:^(wlogout)$"
"opaque, title:^(GNU Image Manipulation Program)$"
"float, title:^(Picture-in-Picture)$"
"float, title:^(Ibus-ui.*)$"
"float, ^(ibus-ui.*)$"
"float, ^(ibus-ui-gtk3)$"
"float, title:^(Ibus-ui-gtk3)$"
"pin, title:^(Picture-in-Picture)$"
"float, org.kde.polkit-kde-authentication-agent-1"
"float, title:^(wlogout)$"
"float, imv"
"float, title:^(Page Info .*)$"
"bordersize 0, floating:0, onworkspace:w[tv1]"
"rounding 0, floating:0, onworkspace:w[tv1]"
"bordersize 0, floating:0, onworkspace:f[1]"
"rounding 0, floating:0, onworkspace:f[1]"
] ++ [
"center 1,class:^(gimp)$"
"float, class:^(ibus-ui.*)$"
"float, class:^(ibus-ui-gtk3)$"
"float, class:^(imv)$"
"float, class:^(org.kde.polkit-kde-authentication-agent-1)$"
"float, class:^(presenter)$" # sent
"float, class:^(thunderbird)$"
"float, title:^(Compact folders)$"
"tile, sent"
"fullscreen, wlogout"
"fullscreen, sent"
"workspace 14, lutris"
"workspace 100, title:^(Apex Legends)$"
"workspace 100, ^(cyberpunk2077.exe)$"
"workspace 100, title:^(No Man.s Sky)$"
"workspace 100, gamescope"
"float, title:^(Ibus-ui.*)$"
"float, title:^(Ibus-ui-gtk3)$"
"float, title:^(Page Info .*)$"
"float, title:^(Picture-in-Picture)$"
"float, title:^(wlogout)$"
"fullscreen, class:^(imv)$"
"fullscreen, class:^(sent)$"
"fullscreen, class:^(wlogout)$"
"noanim, class:^(imv)$"
"noanim, class:^(presenter)$" # sent
"opacity ${transparency}, class:^(Code)$"
"opacity ${transparency}, class:^(code-oss)$"
"opacity ${transparency}, class:^(discord)$"
"opacity ${transparency}, class:^(element)$"
"opacity ${transparency}, class:^(Element)$"
"opacity ${transparency}, class:^(lutris)$"
"opacity ${transparency}, class:^(neovide)$"
"opacity ${transparency}, class:^(obsidian)$"
"opacity ${transparency}, class:^(vesktop)$"
"opacity ${transparency}, class:^(VSCodium)$"
"opacity ${transparency}, title:^(wlogout)$"
"opaque, title:^(GNU Image Manipulation Program)$"
"pin, title:^(Picture-in-Picture)$"
"tile, class:^(sent)$"
"workspace 100, class:^(gamescope)$"
];
@@ -322,24 +343,23 @@ in {
###########################################################################
## ROW 0:
bind = [
"SUPER SHIFT, Escape, exit, "
"SUPER, F1, workspace, 100"
"SUPER SHIFT, F1, movetoworkspace, 100"
# "SUPER, F2,"
"SUPER, F3, toggleopaque"
# "SUPER, F4,"
# "SUPER, F3, toggleopaque"
"SUPER, F4, exec, rm /tmp/caldav_event_cache.json && notify-send 'Cleared Saved Event!' ''"
"SUPER, F5, exec, nx_gcal_event force-lookup"
"SUPER SHIFT, F5, exec, nx_gcal_event reauthenticate"
"SUPER, F6, exec, kitty -e 'htop'"
"SUPER, F7, exec, kitty -e 'nmtui'"
''SUPER, F8, exec, find ~/Pictures/wallpapers/* -type f -not -path "~/Pictures/wallpapers/.git/*" | sort -R | head -n 1 | xargs swww img --transition-type wipe --transition-angle 60 --transition-step 120 --transition-fps 120''
''SUPER, F9, exec, kitty -e sh -c 'change_colors_json $(swww query | sed -n 1p | sed -e "s-.*image: --g") && nh home switch && firefox /home/${user}/.config/color-pallete.html' ''
''SUPER SHIFT, F9, exec, firefox /home/${user}/.config/color-pallete.html ''
"SUPER, F6, exec, ${terminal-exec}'htop'"
"SUPER, F7, exec, ${terminal-exec}'nmtui'"
''SUPER, F8, exec, find ~/Pictures/wallpapers/* -type f -not -path "~/Pictures/wallpapers/.git/*" | sort -R | head -n 1 | xargs -d '\n' swww img --transition-type wipe --transition-angle 60 --transition-step 120 --transition-fps 120 --transition-duration 2''
"SUPER, F9, execr, waybar_mode set '󰸉 '"
"SUPER, F9, submap, color"
# "SUPER, F10, hyprload,update"
"SUPER, F11, exec, waybar"
"SUPER SHIFT, F11, exec, pkill waybar "
"SUPER, F12, exec, hyprland-autoname-workspaces"
"SUPER SHIFT, F12, exec, pkill -9 hyprland-autoname-workspaces "
"SUPER SHIFT, F12, exec, pkill -9 hyprland-aut"
###########################################################################
## ROW 1:
@@ -373,8 +393,8 @@ in {
###########################################################################
## ROW 2:
#bind = SUPER, TAB, hycov:toggleoverview
# "SUPER, TAB, overview:toggle"
# "SUPER, TAB, hycov:toggleoverview"
"SUPER, TAB, overview:toggle"
# "SUPER, TAB, hyprexpo:expo, toggle"
"ALT, TAB, focuscurrentorlast"
# "SUPER, TAB, exec, hyprswitch --daemon"
@@ -385,18 +405,19 @@ in {
"SUPER, R, exec, rofi -show drun"
# "SUPER, T, exec, alacritty"
# "SUPER SHIFT, T, exec, alacritty -e sh -c "ssh nxace""
"SUPER, T, exec, SESSION_FROM_DE=TRUE kitty"
"SUPER SHIFT, T, exec, kitty -e sh -c 'ssh nxace'"
# "SUPER, Z, "
"SUPER, U, exec, thunderbird "
"SUPER, I, exec, kitty -e fish -c 'hx ~/nix-dots/ && fish'"
"SUPER SHIFT, I, exec, kitty -e fish -c 'nh home switch || read'"
"SUPER CTRL, I, exec, kitty -e fish -c 'nh os switch || read'"
"SUPER, T, exec, SESSION_FROM_DE=TRUE ${terminal}"
"SUPER SHIFT, T, exec, ${terminal-exec}'ssh nxace'"
"SUPER, Z, exec, zathura"
"SUPER, U, exec, [tile] thunderbird "
"SUPER, I, exec, ${terminal-exec}'hx ~/nix-dots/ && fish'"
"SUPER SHIFT, I, exec, ${terminal-exec}'nh home switch || read'"
"SUPER CTRL, I, exec, ${terminal-exec}'nh os switch || read'"
"SUPER, O, exec, obsidian "
"SUPER, P, pin "
# "SUPER, Ü,"
# "SUPER, +,"
# "SUPER, Enter,"
"SUPER, Enter, exec, SESSION_FROM_DE=TRUE ${terminal}"
###########################################################################
## ROW 3:
@@ -404,7 +425,8 @@ in {
"SUPER, A, execr, waybar_mode set ' 󰹑 '"
"SUPER, A, submap, scrL"
"SUPER, S, exec, spotify"
"SUPER, D, exec, vesktop"
# "SUPER, D, exec, vesktop --disable-gpu-compositing"
"SUPER, D, exec, discord"
"SUPER, F, fullscreen"
# "SUPER, G,"
"SUPER, H, movefocus, l"
@@ -424,6 +446,7 @@ in {
"SUPER, X, exec, pkill wlogout || wlogout --protocol layer-shell -b 3"
# "SUPER, C, exec, /home/nx2/scripts/quickconfig/quickconfig.sh "
"SUPER, C, exec, chatterino"
"SUPER SHIFT, C, exec, hyprpicker -n -a"
"SUPER, V, togglefloating, "
"SUPER, B, exec, bitwarden"
"SUPER, N, togglesplit"
@@ -457,7 +480,9 @@ in {
###########################################################################
## MEGA KEYS:
'' , Print, exec, grim -g "$(slurp)"''
", Print, execr, waybar_mode set '󰄀 '"
", Print, submap, screenshot"
# "SUPER, Next, resizeactive, 5% 5%" # binde
# "SUPER, Prior, resizeactive, -5% -5%" # binde
@@ -494,6 +519,39 @@ in {
"SUPER, Next, resizeactive, 10% 10%"
"SUPER, Prior, resizeactive, -10% -10%"
];
plugin = {
overview = {
# panelHeight =
# panelBorderWidth =
onBottom = false; # whether if panel should be on bottom instead of top
# workspaceMargin = # spacing of workspaces with eachother and the edge of the panel
# reservedArea = # padding on top of the panel, for Macbook camera notch
workspaceBorderSize = rice.border-width; #
centerAligned = true; # whether if workspaces should be aligned at the center (KDE / macOS style) or at the left (Windows style)
hideBackgroundLayers = true; # do not draw background and bottom layers in overview
hideTopLayers = false; # do not draw top layers in overview
hideOverlayLayers = false; # do not draw overlay layers in overview
hideRealLayers = false; # whether to hide layers in actual workspace
drawActiveWorkspace = true; # draw the active workspace in overview as-is
overrideGaps = false; # whether if overview should override the layout gaps in the current workspace using the following values
# gapsIn = #
# gapsOut = #
affectStrut = false; # whether the panel should push window aside, disabling this option also
dots_center = true;
autoDrag = true; # mouse click always drags window when overview is open
autoScroll = true; # mouse scroll on active workspace area always switch workspace
exitOnClick = true; # mouse click without dragging exits overview
switchOnDrop = true; # switch to the workspace when a window is droppped into it
exitOnSwitch = true; # overview exits when overview is switched by clicking on workspace view or by switchOnDrop
showNewWorkspace = false; # add a new empty workspace at the end of workspaces view
showEmptyWorkspace = false; # show empty workspaces that are inbetween non-empty workspaces
showSpecialWorkspace = false; # defaults to false
disableGestures = true;
reverseSwipe = true; # reverses the direction of swipe gesture, for macOS peeps?
exitKey = true;
};
};
};
@@ -504,396 +562,102 @@ in {
# 'Y8b. 88 88 88''Yb. 88 88 8888888 888888P' 'Y8b.
# db 8D 88. .88 88 8D 88 88 88' '88 88 db 8D
# '8888Y' 'Y8888P' Y8888P' YP YP 88 YP YP '8888Y'
extraConfig = ''
extraConfig = let
action_simple = { mods ? "", key, cmd }: ''
bind=${mods},${key},execr,waybar_mode unset
bind=${mods},${key},${cmd}
bind=${mods},${key},submap,reset
'';
extra_workspace = { key, wsnumber }: ''
bind=,${key},execr,waybar_mode unset
bind=,${key},workspace,${wsnumber}
bind=,${key},submap,reset
bind=SUPER,${key},execr,waybar_mode unset
bind=SUPER,${key},workspace,${wsnumber}
bind=SUPER,${key},submap,reset
bind=SUPER SHIFT,${key},execr, waybar_mode unset
bind=SUPER SHIFT,${key},movetoworkspace,${wsnumber}
bind=SUPER SHIFT,${key},submap,reset
'';
in ''
submap = browserSM
bind = , W, exec, waybar_mode unset
bind = , W, exec, hyprctl dispatch exec firefox
bind = , W, submap, reset
bind = , Y, exec, waybar_mode unset
bind = , Y, exec, firefox https://youtube.com
bind = , Y, submap, reset
bind = , T, exec, waybar_mode unset
bind = , T, exec, hyprctl dispatch exec firefox https://twitch.tv
bind = , T, submap, reset
bind = , R, exec, waybar_mode unset
bind = , R, exec, firefox https://reddit.com
bind = , R, submap, reset
bind = , C, exec, waybar_mode unset
bind = , C, exec, firefox https://calendar.google.com
bind = , C, submap, reset
bind = , Ü, exec, waybar_mode unset
bind = , Ü, exec, firefox https://translate.google.com
bind = , Ü, submap, reset
bind = , N, exec, waybar_mode unset
bind = , N, exec, firefox https://Netflix.com
bind = , N, submap, reset
bind = , A, exec, waybar_mode unset
bind = , A, exec, firefox https://www.amazon.de/b?node=3010075031&ref_=nav_ya_signin
bind = , A, submap, reset
bind = , D, exec, waybar_mode unset
bind = , D, exec, firefox https://www.disneyplus.com/home
bind = , D, submap, reset
bind = , H, exec, waybar_mode unset
bind = , H, exec, firefox https://www.hs-mittweida.de
bind = , H, submap, reset
bind = , X, exec, waybar_mode unset
bind = , X, exec, firefox https://nx2.site
bind = , X, submap, reset
bind = , L, exec, waybar_mode unset
bind = , L, exec, firefox https://feddit.de
bind = , L, submap, reset
bind = , I, exec, waybar_mode unset
bind = , I, exec, firefox https://www.imdb.com
bind = , I, submap, reset
bind = , M, exec, waybar_mode unset
bind = , M, exec, firefox https://ieji.de/home
bind = , M, submap, reset
bind = , S, exec, waybar_mode unset
bind = , S, exec, firefox 127.0.0.1:8384/
bind = , S, submap, reset
${action_simple { key = "A"; cmd = "exec,firefox https://www.amazon.de/b?node=3010075031&ref_=nav_ya_signin";}}
${action_simple { key = "C"; cmd = "exec,firefox https://calendar.google.com";}}
${action_simple { key = "D"; cmd = "exec,firefox https://www.disneyplus.com/home";}}
${action_simple { key = "H"; cmd = "exec,firefox https://www.hs-mittweida.de";}}
${action_simple { key = "I"; cmd = "exec,firefox https://www.imdb.com";}}
${action_simple { key = "L"; cmd = "exec,firefox https://feddit.de";}}
${action_simple { key = "M"; cmd = "exec,firefox https://ieji.de/home";}}
${action_simple { key = "N"; cmd = "exec,firefox https://Netflix.com";}}
${action_simple { key = "R"; cmd = "exec,firefox https://reddit.com";}}
${action_simple { key = "S"; cmd = "exec,firefox 127.0.0.1:8384/";}}
${action_simple { key = "T"; cmd = "exec,hyprctl dispatch exec firefox https://twitch.tv";}}
${action_simple { key = "udiaeresis"; cmd = "exec,firefox https://translate.google.com";}}
${action_simple { key = "W"; cmd = "exec,hyprctl dispatch exec firefox";}}
${action_simple { key = "X"; cmd = "exec,firefox https://nx2.site";}}
${action_simple { key = "Y"; cmd = "exec,firefox https://youtube.com";}}
${action_simple { key = "P"; cmd = "exec,firefox https://pw.nx2.site";}}
${action_simple { key = "P"; cmd = "exec,firefox https://pw.nx2.site";}}
bind=,Z,exec,waybar_mode set ' '
bind=,Z,submap,tuda
bind=,Z,submap,reset
bind=,Escape,exec,waybar_mode unset
bind=,Escape,submap,reset
submap = reset
submap = scrL
bind = , 1, execr, waybar_mode unset
bind = , 1, workspace, 21
bind = , 1, submap, reset
bind = SUPER, 1, execr, waybar_mode unset
bind = SUPER, 1, workspace, 21
bind = SUPER, 1, submap, reset
bind = SUPER SHIFT, 1, execr, waybar_mode unset
bind = SUPER SHIFT, 1, movetoworkspace, 21
bind = SUPER SHIFT, 1, submap, reset
bind = , 2, execr, waybar_mode unset
bind = , 2, workspace, 22
bind = , 2, submap, reset
bind = SUPER, 2, execr, waybar_mode unset
bind = SUPER, 2, workspace, 22
bind = SUPER, 2, submap, reset
bind = SUPER SHIFT, 2, execr, waybar_mode unset
bind = SUPER SHIFT, 2, movetoworkspace, 22
bind = SUPER SHIFT, 2, submap, reset
bind = , 3, execr, waybar_mode unset
bind = , 3, workspace, 23
bind = , 3, submap, reset
bind = SUPER, 3, execr, waybar_mode unset
bind = SUPER, 3, workspace, 23
bind = SUPER, 3, submap, reset
bind = SUPER SHIFT, 3, execr, waybar_mode unset
bind = SUPER SHIFT, 3, movetoworkspace, 23
bind = SUPER SHIFT, 3, submap, reset
bind = , 4, execr, waybar_mode unset
bind = , 4, workspace, 24
bind = , 4, submap, reset
bind = SUPER, 4, execr, waybar_mode unset
bind = SUPER, 4, workspace, 24
bind = SUPER, 4, submap, reset
bind = SUPER SHIFT, 4, execr, waybar_mode unset
bind = SUPER SHIFT, 4, movetoworkspace, 24
bind = SUPER SHIFT, 4, submap, reset
bind = , 5, execr, waybar_mode unset
bind = , 5, workspace, 25
bind = , 5, submap, reset
bind = SUPER, 5, execr, waybar_mode unset
bind = SUPER, 5, workspace, 25
bind = SUPER, 5, submap, reset
bind = SUPER SHIFT, 5, execr, waybar_mode unset
bind = SUPER SHIFT, 5, movetoworkspace, 25
bind = SUPER SHIFT, 5, submap, reset
bind = , 6, execr, waybar_mode unset
bind = , 6, workspace, 26
bind = , 6, submap, reset
bind = SUPER, 6, execr, waybar_mode unset
bind = SUPER, 6, workspace, 26
bind = SUPER, 6, submap, reset
bind = SUPER SHIFT, 6, execr, waybar_mode unset
bind = SUPER SHIFT, 6, movetoworkspace, 26
bind = SUPER SHIFT, 6, submap, reset
bind = , 7, execr, waybar_mode unset
bind = , 7, workspace, 27
bind = , 7, submap, reset
bind = SUPER, 7, execr, waybar_mode unset
bind = SUPER, 7, workspace, 27
bind = SUPER, 7, submap, reset
bind = SUPER SHIFT, 7, execr, waybar_mode unset
bind = SUPER SHIFT, 7, movetoworkspace, 27
bind = SUPER SHIFT, 7, submap, reset
bind = , 8, execr, waybar_mode unset
bind = , 8, workspace, 28
bind = , 8, submap, reset
bind = SUPER, 8, execr, waybar_mode unset
bind = SUPER, 8, workspace, 28
bind = SUPER, 8, submap, reset
bind = SUPER SHIFT, 8, execr, waybar_mode unset
bind = SUPER SHIFT, 8, movetoworkspace, 28
bind = SUPER SHIFT, 8, submap, reset
bind = , 9, execr, waybar_mode unset
bind = , 9, workspace, 29
bind = , 9, submap, reset
bind = SUPER, 9, execr, waybar_mode unset
bind = SUPER, 9, workspace, 29
bind = SUPER, 9, submap, reset
bind = SUPER SHIFT, 9, execr, waybar_mode unset
bind = SUPER SHIFT, 9, movetoworkspace, 29
bind = SUPER SHIFT, 9, submap, reset
bind = , 0, execr, waybar_mode unset
bind = , 0, workspace, 20
bind = , 0, submap, reset
bind = SUPER, 0, execr, waybar_mode unset
bind = SUPER, 0, workspace, 20
bind = SUPER, 0, submap, reset
bind = SUPER SHIFT, 0, execr, waybar_mode unset
bind = SUPER SHIFT, 0, movetoworkspace, 20
bind = SUPER SHIFT, 0, submap, reset
${builtins.concatStringsSep "\n" (builtins.map (num: extra_workspace { key = builtins.toString num; wsnumber = "2" + builtins.toString num;}) [1 2 3 4 5 6 7 8 9 0])}
bind = , A, execr, waybar_mode unset
bind = , A, submap, reset
bind = , Escape, execr, waybar_mode unset
bind = , Escape, submap, reset
submap = reset
submap = scrR
bind = , 1, execr, waybar_mode unset
bind = , 1, workspace, 31
bind = , 1, submap, reset
bind = SUPER, 1, execr, waybar_mode unset
bind = SUPER, 1, workspace, 31
bind = SUPER, 1, submap, reset
bind = SUPER SHIFT, 1, execr, waybar_mode unset
bind = SUPER SHIFT, 1, movetoworkspace, 31
bind = SUPER SHIFT, 1, submap, reset
bind = , 2, execr, waybar_mode unset
bind = , 2, workspace, 32
bind = , 2, submap, reset
bind = SUPER, 2, execr, waybar_mode unset
bind = SUPER, 2, workspace, 32
bind = SUPER, 2, submap, reset
bind = SUPER SHIFT, 2, execr, waybar_mode unset
bind = SUPER SHIFT, 2, movetoworkspace, 32
bind = SUPER SHIFT, 2, submap, reset
bind = , 3, execr, waybar_mode unset
bind = , 3, workspace, 33
bind = , 3, submap, reset
bind = SUPER, 3, execr, waybar_mode unset
bind = SUPER, 3, workspace, 33
bind = SUPER, 3, submap, reset
bind = SUPER SHIFT, 3, execr, waybar_mode unset
bind = SUPER SHIFT, 3, movetoworkspace, 33
bind = SUPER SHIFT, 3, submap, reset
bind = , 4, execr, waybar_mode unset
bind = , 4, workspace, 34
bind = , 4, submap, reset
bind = SUPER, 4, execr, waybar_mode unset
bind = SUPER, 4, workspace, 34
bind = SUPER, 4, submap, reset
bind = SUPER SHIFT, 4, execr, waybar_mode unset
bind = SUPER SHIFT, 4, movetoworkspace, 34
bind = SUPER SHIFT, 4, submap, reset
bind = , 5, execr, waybar_mode unset
bind = , 5, workspace, 35
bind = , 5, submap, reset
bind = SUPER, 5, execr, waybar_mode unset
bind = SUPER, 5, workspace, 35
bind = SUPER, 5, submap, reset
bind = SUPER SHIFT, 5, execr, waybar_mode unset
bind = SUPER SHIFT, 5, movetoworkspace, 35
bind = SUPER SHIFT, 5, submap, reset
bind = , 6, execr, waybar_mode unset
bind = , 6, workspace, 36
bind = , 6, submap, reset
bind = SUPER, 6, execr, waybar_mode unset
bind = SUPER, 6, workspace, 36
bind = SUPER, 6, submap, reset
bind = SUPER SHIFT, 6, execr, waybar_mode unset
bind = SUPER SHIFT, 6, movetoworkspace, 36
bind = SUPER SHIFT, 6, submap, reset
bind = , 7, execr, waybar_mode unset
bind = , 7, workspace, 37
bind = , 7, submap, reset
bind = SUPER, 7, execr, waybar_mode unset
bind = SUPER, 7, workspace, 37
bind = SUPER, 7, submap, reset
bind = SUPER SHIFT, 7, execr, waybar_mode unset
bind = SUPER SHIFT, 7, movetoworkspace, 37
bind = SUPER SHIFT, 7, submap, reset
bind = , 8, execr, waybar_mode unset
bind = , 8, workspace, 38
bind = , 8, submap, reset
bind = SUPER, 8, execr, waybar_mode unset
bind = SUPER, 8, workspace, 38
bind = SUPER, 8, submap, reset
bind = SUPER SHIFT, 8, execr, waybar_mode unset
bind = SUPER SHIFT, 8, movetoworkspace, 38
bind = SUPER SHIFT, 8, submap, reset
bind = , 9, execr, waybar_mode unset
bind = , 9, workspace, 39
bind = , 9, submap, reset
bind = SUPER, 9, execr, waybar_mode unset
bind = SUPER, 9, workspace, 39
bind = SUPER, 9, submap, reset
bind = SUPER SHIFT, 9, execr, waybar_mode unset
bind = SUPER SHIFT, 9, movetoworkspace, 39
bind = SUPER SHIFT, 9, submap, reset
bind = , 0, execr, waybar_mode unset
bind = , 0, workspace, 30
bind = , 0, submap, reset
bind = SUPER, 0, execr, waybar_mode unset
bind = SUPER, 0, workspace, 30
bind = SUPER, 0, submap, reset
bind = SUPER SHIFT, 0, execr, waybar_mode unset
bind = SUPER SHIFT, 0, movetoworkspace, 30
bind = SUPER SHIFT, 0, submap, reset
${builtins.concatStringsSep "\n" (builtins.map (num: extra_workspace { key = builtins.toString num; wsnumber = "3" + builtins.toString num;}) [1 2 3 4 5 6 7 8 9 0])}
bind = , Y, execr, waybar_mode unset
bind = , Y, submap, reset
bind = , Escape, execr, waybar_mode unset
bind = , Escape, submap, reset
submap = reset
submap = color
${action_simple { key = "W"; cmd = ''exec,swww query | sed -n 1p | sed -E 's-.*image: (.*)-"\1"-g' | xargs change_colors_json img && notify-send 'change_colors_json img successfull' ''; }}
${action_simple { key = "M"; cmd = ''exec,change_colors_json manual && notify-send 'change_colors_json manual successfull' ''; }}
${action_simple { key = "D"; cmd = ''exec,firefox ${hyper.home}/.config/color-pallete.html''; }}
bind = , Escape, execr, waybar_mode unset
bind = , Escape, submap, reset
submap = reset
submap = tuda
${action_simple { key = "T"; cmd = ''exec,firefox https://www.tucan.tu-darmstadt.de/''; }}
${action_simple { key = "M"; cmd = ''exec,firefox https://moodle.tu-darmstadt.de/''; }}
${action_simple { key = "I"; cmd = ''exec,firefox https://moodle.informatik.tu-darmstadt.de/''; }}
bind = , Escape, execr, waybar_mode unset
bind = , Escape, submap, reset
submap = reset
plugin {
hyprexpo {
columns = 5
gap_size = ${builtins.toString rice.gap-size}
bg_col = rgb(${builtins.substring 1 6 rice.color.background})
workspace_method = first 10 # [center/first] [workspace] e.g. first 1 or center m+1
enable_gesture = false # laptop touchpad, 4 fingers
gesture_distance = 300 # how far is the "max"
gesture_positive = true # positive = swipe down. Negative = swipe up.
}
}
plugin {
overview {
panelColor = rgba(00000088)
workspaceActiveBackground = rgba(00ff00ff)
workspaceInactiveBackground = rgba(0000ffff)
# workspaceActiveBorder =
# workspaceInactiveBorder =
dragAlpha = 0.5
panelHeight = 200
workspaceMargin = 30
workspaceBorderSize = 3
centerAligned = true
overrideGaps = false
gapsIn = 0
gapsOut = 0
hideBackgroundLayers = false
drawActiveWorkspace = true
autoDrag = true
autoScroll = true
exitOnClick = false
switchOnDrop = false
exitOnSwitch = trueß
showNewWorkspace = true
showEmptyWorkspace = false
}
}
# allows repeated switching with same keypress that starts the submap
binde = SUPER, TAB, exec, hyprswitch --daemon --do-initial-execute
bind = SUPER, TAB, submap, switch
bind = SUPER, TAB, exec, waybar_mode set "sw"
# allows repeated switching with same keypress that starts the submap
binde = SUPER SHIFT, TAB, exec, hyprswitch --daemon --do-initial-execute -r
bind = SUPER SHIFT, TAB, submap, switch
bind = SUPER, TAB, exec, waybar_mode set "swr"
submap = switch
# allow repeated window switching in submap (same keys as repeating while starting)
binde = SUPER, TAB, exec, hyprswitch --daemon
binde = SUPER SHIFT, TAB, exec, hyprswitch --daemon -r
# switch to specific window offset
bind = , 1, exec, hyprswitch --daemon --offset=1
bind = , 2, exec, hyprswitch --daemon --offset=2
bind = , 3, exec, hyprswitch --daemon --offset=3
bind = , 4, exec, hyprswitch --daemon --offset=4
bind = , 5, exec, hyprswitch --daemon --offset=5
bind = , 6, exec, hyprswitch --daemon --offset=6
bind = , 7, exec, hyprswitch --daemon --offset=7
bind = , 8, exec, hyprswitch --daemon --offset=8
bind = , 8, exec, hyprswitch --daemon --offset=8
bind = , 9, exec, hyprswitch --daemon --offset=9
bind = SUPER $reverse, 1, exec, hyprswitch --daemon --offset=1 -r
bind = SUPER $reverse, 2, exec, hyprswitch --daemon --offset=2 -r
bind = SUPER $reverse, 3, exec, hyprswitch --daemon --offset=3 -r
bind = SUPER $reverse, 4, exec, hyprswitch --daemon --offset=4 -r
bind = SUPER $reverse, 5, exec, hyprswitch --daemon --offset=5 -r
bind = SUPER $reverse, 6, exec, hyprswitch --daemon --offset=6 -r
bind = SUPER $reverse, 7, exec, hyprswitch --daemon --offset=7 -r
bind = SUPER $reverse, 8, exec, hyprswitch --daemon --offset=8 -r
bind = SUPER $reverse, 9, exec, hyprswitch --daemon --offset=9 -r
bind = SUPER $reverse, 5, exec, hyprswitch --daemon --offset=5 -r
# exit submap and stop hyprswitch
bindrt = SUPER, SUPER_L, exec, hyprswitch --stop-daemon
bindrt = SUPER, SUPER_L, submap, reset
bindrt = SUPER, SUPER_L, exec, waybar_mode unset
# if it somehow doesn't close on releasing $switch_release, escape can kill
bindr = ,escape, exec, pkill hyprswitch
bindr = ,escape, submap, reset
submap = screenshot
${action_simple { key = "W"; cmd = ''exec,hyprshot -m window''; }}
${action_simple { key = "M"; cmd = ''exec,hyprshot -m output''; }}
${action_simple { key = "R"; cmd = ''exec,hyprshot -m region''; }}
bind = , Escape, execr, waybar_mode unset
bind = , Escape, submap, reset
submap = reset
'';
};
home.file =
let
m = if host == "NxXPS" then monitors.xps.main.name else monitors.north.main.name;
in
{
home.file = let
m = if hyper.host == "NxXPS" then monitors.xps.main.name else monitors.north.main.name;
in {
".config/hypr/hyprlock.conf".text = ''
background {
monitor = ${m}
# all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations
path = /home/nx2/Pictures/nix-wall.png
path = /home/nx2/Pictures/wallpapers/nix-wall.png
blur_size = 4
blur_passes = 3 # 0 disables blurring
noise = 0.0117

2
home-modules/kitty.nix Executable file → Normal file
View File

@@ -3,7 +3,7 @@
programs.kitty = {
enable = true;
font = {
name = rice.font.code.name2;
name = rice.font.code.name;
package = rice.font.code.package;
};
settings = with rice.color; {

4
home-modules/latex.nix Executable file → Normal file
View File

@@ -1,5 +1,5 @@
{ config, pkgs, lib, host, ... }:
lib.mkIf (host != "NxACE")
{ pkgs, hyper, ... }:
pkgs.lib.mkIf (hyper.host != "NxACE")
{
home.packages = with pkgs; [
texlab # LSP

6
home-modules/mako.nix Executable file → Normal file
View File

@@ -3,14 +3,16 @@
home.packages = with pkgs; [ libnotify ];
services.mako = with rice; {
enable = true;
defaultTimeout = 5000; # in ms
settings = {
defaultTimeout = 10000; # in ms
backgroundColor = color.background;
textColor = color.foreground;
borderColor = color.border;
borderSize = border-width;
font = font.code.name2;
font = font.code.name;
borderRadius = rounding;
anchor = "top-right";
margin = builtins.toString (gap-size * 2) ;
};
};
}

View File

@@ -1,4 +1,4 @@
{ pkgs, host, ... }:
{ pkgs, hyper, ... }:
{
home.packages = with pkgs; [
# cinny-desktop
@@ -79,7 +79,7 @@
nx2site.ssl_verify = on
nx2site.username = "nx2"
nx2site.password = "''${sec.data.matrix_nx2site_password}"
nx2site.device_name = "Weechat@${host}"
nx2site.device_name = "Weechat@${hyper.host}"
nx2site.autoreconnect_delay = 10
nx2site.sso_helper_listening_port = 0
'';

6
home-modules/nh.nix Executable file → Normal file
View File

@@ -1,13 +1,13 @@
{ config, pkgs-unstable, ... }:
{ pkgs, hyper, ... }:
{
home = {
packages = with pkgs-unstable; [
packages = with pkgs; [
nh
nix-output-monitor
nvd
];
sessionVariables = {
FLAKE = "${config.home.homeDirectory}/nix-dots";
NH_FLAKE = "${hyper.home}/nix-dots";
};
};
}

View File

@@ -1,5 +1,5 @@
{ pkgs, lib, nvidia, ... }:
lib.mkIf (nvidia.enable == true)
{ pkgs, hyper, ... }:
pkgs.lib.mkIf (hyper.nvidia.enable == true)
{
home = {
packages = with pkgs; [

0
home-modules/nx-gcal-event.nix Executable file → Normal file
View File

View File

@@ -0,0 +1,67 @@
{ pkgs, ... }:
{
home.packages = [
(pkgs.writeShellApplication {
name = "nx_backup";
runtimeInputs = [ ];
text = let
web-root = "/var/nginx/webroot";
gitea-backup = "/var/backup/gitea";
postgres-backup = "/var/backup/postgresql";
in /* bash */ ''
DIRECTORIES=(
"${web-root}"
"${gitea-backup}"
"${postgres-backup}"
)
NOW=$(date +%Y_%m_%d-%H_%M)
TEMP_BAK_DIR=$(mktemp -d)
TEMP_WORKING_DIR=$(mktemp -d)
ZIP_NAME="nx2site-backup-''${NOW}.zip"
ZIP_FILE="$TEMP_WORKING_DIR/$ZIP_NAME"
ENCRYPTED_NAME="''${ZIP_NAME}.asc"
ENCRYPTED_FILE="$TEMP_WORKING_DIR/$ENCRYPTED_NAME"
DESTINATION="/vault/$ENCRYPTED_NAME"
WEBROOT="${web-root}"
echo "Fixing Permissions of Gitea dump"
sudo chmod -R g+r "${gitea-backup}"
echo "Fixing Permissions of Postgres dump"
sudo chmod -R g+r "${postgres-backup}"
sudo chmod g+x "${postgres-backup}"
echo "Fixing Ownership of Postgres dump"
sudo chown -R postgres:postgres "${postgres-backup}"
echo "Copying files to backup to tempoary directory $TEMP_BAK_DIR ..."
for DIR in "''${DIRECTORIES[@]}"; do
rsync -aR "$DIR" "$TEMP_BAK_DIR"
done
# Create the zip file
echo "Adding files to $ZIP_NAME ..."
zip -qr "$ZIP_FILE" "$TEMP_BAK_DIR"
# Encrypt the zip file using GPG
echo "Encryping file with gpg"
gpg -e -r gpg@nx2.site -o "$ENCRYPTED_FILE" "$ZIP_FILE"
echo "Moving file to Destination $DESTINATION"
mv "$ENCRYPTED_FILE" "$DESTINATION"
echo "Updating latest-bakup path in $WEBROOT"
echo "$DESTINATION" > "$WEBROOT/latest-backup"
echo "Cleaning up tempoary files and directories"
rm -rf "$TEMP_BAK_DIR" "$TEMP_WORKING_DIR" "$ZIP_FILE"
echo "Backup and encryption complete: $DESTINATION"
echo "Space remaining:"
df -h | head -n 1
df -h | grep -P "^/dev.+? "
'';
})
];
}

51
home-modules/nxgs.nix Normal file
View File

@@ -0,0 +1,51 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [
ghostscript
(writeShellApplication rec {
name = "nxgs";
text = /* bash */ ''
print_help() {
echo "Usage: ${name} {flip <file(s)>|rotate <file(s)>|merge <Out File Name> <files>}"
}
if [ $# -lt 1 ]; then
print_help; exit 1;
fi
case "$1" in
flip)
for FILE in "''${@:2}"; do
NXGSTEMP=$(mktemp)
gs -o "$NXGSTEMP" -sDEVICE=pdfwrite -c "<</Orientation 2>> setpagedevice" -f "$FILE"
mv "$NXGSTEMP" "$FILE"
done
;;
rotate)
for FILE in "''${@:2}"; do
NXGSTEMP=$(mktemp)
gs -o "$NXGSTEMP" -sDEVICE=pdfwrite -c "<</Orientation 1>> setpagedevice" -f "$FILE"
mv "$NXGSTEMP" "$FILE"
done
;;
merge)
gs -dBATCH -dNOPAUSE -q -sOUTPUTFILE="$3" -sDEVICE=pdfwrite "''${@:3}"
;;
interactive-merge)
echo -n "Enter Name of the merged file without extension: "; read -r MERGED
NXGSTEMP=$(mktemp)
echo "''${@:2}" | tr " " "\n" > "$NXGSTEMP"
$EDITOR "$NXGSTEMP"
mapfile -t FILES < "$NXGSTEMP"
gs -dBATCH -dNOPAUSE -q -sOUTPUTFILE="''${MERGED}.pdf" -sDEVICE=pdfwrite "''${FILES[@]}"
rm "$NXGSTEMP"
;;
*)
echo "Error: Unknown command '$1'"
print_help
exit 1
;;
esac
exit 0
'';
})
];
}

View File

@@ -1,5 +1,5 @@
{ pkgs, lib, host, ... }:
lib.mkIf (host != "NxACE")
{ pkgs, hyper, ... }:
pkgs.lib.mkIf (hyper.host != "NxACE")
{
# home.packages = with pkgs; [
# obs-studio

2
home-modules/office.nix Executable file → Normal file
View File

@@ -1,4 +1,4 @@
{ config, pkgs, lib, user, ... }:
{ pkgs, ... }:
{
home.packages = with pkgs; [
libreoffice

View File

@@ -1,6 +1,7 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [
ollama
(writers.writePython3Bin "ooo" {
libraries = [ pkgs.python3Packages.ollama ];
flakeIgnore = [ "E501" "E305" "E701" "E704" "E302" "E114" "F841" "E121" ];

View File

@@ -0,0 +1,39 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [
bat
browsh
cmake
dig
du-dust
dysk
exiftool
eza
ffmpeg
figlet
fzf
glib
glow
gnumake
htop
imagemagick
jq
lolcat
lynx
mediainfo
mpv
neofetch
pdfgrep
pipes
pv
reflex
ripgrep
screen
speedtest-go
sssnake
systemctl-tui
tldr
w3m
yt-dlp
];
}

6
home-modules/pnx.nix Executable file → Normal file
View File

@@ -1,5 +1,5 @@
{ pkgs, lib, host, secrets, ... }:
lib.mkIf (host != "NxACE")
{ pkgs, hyper, secrets, ... }:
pkgs.lib.mkIf (hyper.host != "NxACE")
{
home.packages = [
pkgs.remmina
@@ -7,7 +7,7 @@ lib.mkIf (host != "NxACE")
(pkgs.writeShellScriptBin "connect_to_pnx" ''
pushd ~/.vpn/
sudo openvpn --config /home/nx2/.vpn/ljk-pnx.ovpn --auth-user-pass ~/.vpn/ljk-pnx-pass.txt #gets put there by home-manager
sudo openvpn --config ${hyper.home}/.vpn/ljk-pnx.ovpn --auth-user-pass ~/.vpn/ljk-pnx-pass.txt #gets put there by home-manager
popd
'')

View File

@@ -1,10 +1,9 @@
{ pkgs, pkgs-unstable, lib, host, ... }:
lib.mkIf (host != "NxACE")
{ pkgs, hyper, ... }:
pkgs.lib.mkIf (hyper.host != "NxACE")
{
home.packages = with pkgs; [
erlang
rebar3
] ++ (with pkgs-unstable; [
gleam
]);
];
}

View File

@@ -0,0 +1,8 @@
{ pkgs, ... }:
{
home = {
packages = with pkgs; [
go
];
};
}

View File

@@ -0,0 +1,8 @@
{ pkgs, ... }:
{
home = {
packages = with pkgs; [
jdk
];
};
}

View File

@@ -0,0 +1,7 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [
nodejs
typescript-language-server
];
}

View File

@@ -1,7 +0,0 @@
{ pkgs, lib, host, ... }:
lib.mkIf (host != "NxACE")
{
home.packages = with pkgs; [
nodejs
];
}

0
home-modules/programming/python.nix Executable file → Normal file
View File

6
home-modules/qt.nix Executable file → Normal file
View File

@@ -1,6 +1,8 @@
{ pkgs, lib, user, ... }:
{ ... }:
{
qt = {
platformTheme = "gtk";
enable = true;
platformTheme.name = "qtct";
style.name = "adwaita-dark";
};
}

2
home-modules/rofi.nix Executable file → Normal file
View File

@@ -14,7 +14,7 @@
}
* {
font: "${rice.font.code.name2} 12";
font: "${rice.font.code.name} 12";
foreground: ${foreground};
background-color: ${background}${trdr};
padding: 0px;

View File

@@ -0,0 +1,6 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [
xsane
];
}

View File

@@ -3,8 +3,6 @@ let
my-sent = pkgs.sent.override {
patches = [
./sent.patch
# /home/${user}/.local/share/sent.patch
# (builtins.toFile "/home/${user}/
];
};
in

View File

@@ -1,12 +1,12 @@
{ user, inputs, ... }:
{ pkgs, hyper, inputs, ... }:
{
imports = [
inputs.sops-nix.homeManagerModules.sops
];
sops = {
# age.keyFile = "/home/${user}/.config/sops/age/keys.txt";
gnupg.home = "/home/${user}/.gnupg";
age.keyFile = pkgs.lib.mkIf (hyper.host == "NxACE") "${hyper.home}.age_nx2_key_13.txt";
gnupg.home = pkgs.lib.mkIf (hyper.host != "NxACE") "${hyper.home}.gnupg";
defaultSopsFile = ../sops-secrets.yaml;
# %r is $XDG_RUNTIME_DIR

18
home-modules/ssh.nix Executable file → Normal file
View File

@@ -1,27 +1,27 @@
{ pkgs, domain, ... }:
{ pkgs, hyper, ... }:
{
home = {
packages = with pkgs; [ sshfs ];
file.".ssh/config".text = ''
HOST nxace
HostName ssh.${domain}
User nx2
HostName ssh.${hyper.domain}
User ${hyper.user}
Port 50022
HOST nxacel
HostName 192.168.178.32
User nx2
HostName 10.0.1.1
User ${hyper.user}
Port 50022
HOST nxrpil
HostName 192.168.178.31
User nx2
HostName 10.0.1.31
User ${hyper.user}
Port 22
HOST nxgit
HostName ssh.${domain}
HostName ssh.${hyper.domain}
User git
Port 20022
Port 50022
'';
};
}

5
home-modules/starship.nix Executable file → Normal file
View File

@@ -1,12 +1,13 @@
{ lib, rice, ... }:
{ pkgs, rice, ... }:
{
programs.starship = {
enable = true;
package = pkgs.starship;
# enableBashIntegration = true;
enableFishIntegration = true;
settings = with rice.color; {
add_newline = false;
format = lib.strings.concatMapStrings (x: "$" + x) [
format = pkgs.lib.strings.concatMapStrings (x: "$" + x) [
"jobs"
"battery"
"username"

3
home-modules/tts.nix Executable file → Normal file
View File

@@ -1,5 +1,4 @@
{ pkgs, lib, user, ... }:
lib.mkIf (user != "tv")
{ pkgs, ... }:
{
home.packages = with pkgs; [
(writeShellApplication {

4
home-modules/virt-manager.nix Executable file → Normal file
View File

@@ -1,5 +1,5 @@
{ config, pkgs, lib, host, ... }:
lib.mkIf (host == "NxNORTH")
{ pkgs, hyper, ... }:
pkgs.lib.mkIf (hyper.host == "NxNORTH")
{
home.packages = with pkgs; [
virt-manager

107
home-modules/vscode.nix Executable file → Normal file
View File

@@ -1,6 +1,6 @@
{ config, pkgs, lib, user, host, rice, allowed, ... }:
{ config, pkgs, hyper, rice, ... }:
{
config = lib.mkIf (host != "NxACE") {
config = pkgs.lib.mkIf (hyper.host != "NxACE") {
home.packages = [
pkgs.vscodium
pkgs.nixpkgs-fmt
@@ -8,6 +8,36 @@
programs.vscode = {
enable = true;
package = pkgs.vscodium;
profiles.default ={
userSettings = {
workbench.colorTheme = "Just Black";
editor.fontFamily = "'${rice.font.code.name}', 'monospace', monospace";
remote.SSH.useLocalServer = false;
};
keybindings = [
{
key = "ctrl+d";
command = "editor.action.deleteLines";
when = "textInputFocus";
}
{
key = "ctrl+shift+d";
command = "editor.action.duplicateSelection";
when = "textInputFocus";
}
{
# unset so that ctrl d is not set twice
key = "";
command = "editor.action.addSelectionToNextFindMatch";
when = "editorFocus";
}
{
# unset so that ctrl shift d is not set twice
key = "";
command = "workbench.view.debug";
}
];
extensions = with pkgs.vscode-extensions; [
jnoortheen.nix-ide
ms-python.python
@@ -23,8 +53,6 @@
mads-hartmann.bash-ide-vscode
bungcip.better-toml
arrterian.nix-env-selector
# ms-vscode-remote.remote-ssh
] ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
{
name = "just-black";
@@ -50,66 +78,27 @@
version = "0.5.16";
sha256 = "sha256-oHwtlbB18ctEnfStDOpJ+2/Kq41JZog8FVhTa1/s7m0=";
}
# {
# name = "remote-ssh-edit";
# publisher = "ms-vscode-remote";
# version = "0.86.0";
# sha256 = "1hp6gjh4xp2m1xlm1jsdzxw9d8frkiidhph6nvl24d0h8z34w49g";
# }
# {
# name = "remote-ssh";
# publisher = "ms-vscode-remote";
# version = "0.110.2024030715";
# sha256 = "sha256-gkxrBwPRDdLFaxc1/vYFBsv4Z0JOhDzb8LrLhkToC/g=";
# }
];
userSettings = {
workbench.colorTheme = "Just Black";
editor.fontFamily = "'${rice.font.code.name2}', 'monospace', monospace";
remote.SSH.useLocalServer = false;
};
enableUpdateCheck = false;
enableExtensionUpdateCheck = false;
keybindings = [
{
key = "ctrl+d";
command = "editor.action.deleteLines";
when = "textInputFocus";
}
{
key = "ctrl+shift+d";
command = "editor.action.duplicateSelection";
when = "textInputFocus";
}
{
# unset so that ctrl d is not set twice
key = "";
command = "editor.action.addSelectionToNextFindMatch";
when = "editorFocus";
}
{
# unset so that ctrl shift d is not set twice
key = "";
command = "workbench.view.debug";
}
];
};
};
};
imports = if host != "NxACE" then [
# Make vscode settings writable
(import
(builtins.fetchurl {
url = "https://gist.githubusercontent.com/piousdeer/b29c272eaeba398b864da6abf6cb5daa/raw/41e569ba110eb6ebbb463a6b1f5d9fe4f9e82375/mutability.nix";
sha256 = "4b5ca670c1ac865927e98ac5bf5c131eca46cc20abf0bd0612db955bfc979de8";
})
{ inherit config lib; })
# imports = if hyper.host != "NxACE" then [
# # Make vscode settings writable
# (import
# (builtins.fetchurl {
# url = "https://gist.githubusercontent.com/piousdeer/b29c272eaeba398b864da6abf6cb5daa/raw/41e569ba110eb6ebbb463a6b1f5d9fe4f9e82375/mutability.nix";
# sha256 = "4b5ca670c1ac865927e98ac5bf5c131eca46cc20abf0bd0612db955bfc979de8";
# })
# { inherit config pkgs; lib = pkgs.lib; })
(import
(builtins.fetchurl {
url = "https://gist.githubusercontent.com/piousdeer/b29c272eaeba398b864da6abf6cb5daa/raw/41e569ba110eb6ebbb463a6b1f5d9fe4f9e82375/vscode.nix";
sha256 = "fed877fa1eefd94bc4806641cea87138df78a47af89c7818ac5e76ebacbd025f";
})
{ inherit config lib pkgs; })
] else [];
# (import
# (builtins.fetchurl {
# url = "https://gist.githubusercontent.com/piousdeer/b29c272eaeba398b864da6abf6cb5daa/raw/41e569ba110eb6ebbb463a6b1f5d9fe4f9e82375/vscode.nix";
# sha256 = "fed877fa1eefd94bc4806641cea87138df78a47af89c7818ac5e76ebacbd025f";
# })
# { inherit config pkgs; lib = pkgs.lib; })
# ] else [];
}

View File

@@ -1,6 +1,6 @@
{ pkgs-unstable, ... }:
{ pkgs, ... }:
{
home.packages = with pkgs-unstable; [
home.packages = with pkgs; [
(writers.writePython3Bin "change_colors_json" {
libraries = with python3Packages; [ numpy pillow scikit-learn ];
flakeIgnore = [ "E302" "E305" "E226" "E501" ];
@@ -8,6 +8,8 @@
from colorsys import hls_to_rgb, rgb_to_hls
import json
import sys
import subprocess
from time import sleep
from typing import Literal, cast
from numpy.typing import NDArray
from sklearn.cluster import KMeans
@@ -25,7 +27,7 @@ def fc(c: int) -> str:
return s
class Color(object):
def __init__(self, rgb: tuple[int, ...], frequency: float):
def __init__(self, rgb: tuple[int, ...], frequency: float = 1):
assert len(rgb) == 3, "RGB values must be a tuple of length 3"
self.rgb = cast(tuple[int, int, int], rgb)
self.freq: float = frequency
@@ -71,7 +73,7 @@ def ensure_color(c: Color, alter_sat: bool) -> list[int]:
new_sat = min((sat**0.5) + 0.4, 1)
else:
new_sat = sat
new_lum = max(lum, 0.5)
new_lum = 0.6
r, g, b = hls_to_rgb(h=hue, l=new_lum, s=new_sat)
return [int(r*255), int(g*255), int(b*255)]
@@ -115,14 +117,25 @@ def extract_colors(
colors.sort(reverse=True)
return Palette(colors)
def hyprpicker() -> Color:
ret = str(subprocess.run(["${pkgs.hyprpicker}/bin/hyprpicker", "-n", "-f", "rgb"], capture_output=True).stdout)[2:-3]
return Color([int(c) for c in ret.split(" ")])
if __name__ == "__main__":
img = sys.argv[1]
if sys.argv[1] == "img":
img = sys.argv[2]
palette = extract_colors(image=img, palette_size=3)
accent = ensure_color(c=palette[0], alter_sat=False)
secondary = ensure_color(c=palette[1], alter_sat=True)
tertiary = ensure_color(c=palette[2], alter_sat=False)
elif sys.argv[1] == "manual":
accent = ensure_color(c=hyprpicker(), alter_sat=False)
sleep(0.1)
secondary = ensure_color(c=hyprpicker(), alter_sat=True)
sleep(0.1)
tertiary = ensure_color(c=hyprpicker(), alter_sat=False)
weird = alter_hue(ilist=accent, hue=80)
special = alter_hue(ilist=accent, hue=180)
foreground = alter_l(accent, 0.9)

170
home-modules/waybar.nix Executable file → Normal file
View File

@@ -1,9 +1,12 @@
{ lib, pkgs, user, rice, ... }: let
{ pkgs, hyper, rice, ... }:
let
sep = " ";
in {
home.packages =
let
waybar_mode_script = /*bash*/ ''
sops.secrets = {
"nx2site/radicale/password" = { };
};
home.packages = with pkgs; [
(writeShellApplication { name = "waybar_mode"; text = /*bash*/ ''
print_help() {
echo "Usage: waybar_mode {set <string>|unset}"
}
@@ -33,19 +36,127 @@ in {
;;
esac
exit 0
'';
cclock_script = /*bash*/ ''
'';})
(writeShellApplication { name = "cclock"; text = /*bash*/ ''
ord=$(date +"%e" | awk '{printf("%d%s\n", $1, ($1==11||$1==12||$1==13)?"th":((($1%10)==1)?"st":((($1%10)==2)?"nd":((($1%10)==3)?"rd":"th"))))}')
if [ $# -eq 0 ]; then
echo "󰃮${sep}$(date +'%A the')" "$ord" "of" "$(date +'%B')" " ${sep}$(date +'%R')"
elif [ "$1" = "--no-icons" ]; then
echo "$(date +'%A the')" "$ord" "of" "$(date +'%B')" "$(date +'%R')"
fi
'';
in
with pkgs; [
(writeShellApplication { name = "waybar_mode"; text = waybar_mode_script;})
(writeShellApplication { name = "cclock"; text = cclock_script;})
'';})
(writers.writePython3Bin "caldav_event" {
libraries = with pkgs.python3Packages; [ caldav ics pytz ];
flakeIgnore = [ "E302" "E305""E501" "E261" ];
} /* python */ ''
import os
import json
from caldav import DAVClient
from datetime import datetime, timezone
from ics import Calendar
from pytz import UTC
def get_password(password_file):
with open(password_file, "r") as file:
return file.read().strip()
def datetime_converter(obj):
if isinstance(obj, datetime):
return obj.isoformat()
return obj
def datetime_parser(dct):
for key, value in dct.items():
if isinstance(value, str):
try:
dct[key] = datetime.fromisoformat(value)
except ValueError:
pass
return dct
def load_cache(cache_file):
if os.path.exists(cache_file):
with open(cache_file, "r") as file:
return json.load(file, object_hook=datetime_parser)
return None
def save_cache(cache_file, data):
with open(cache_file, "w") as file:
json.dump(data, file, default=datetime_converter)
def get_ongoing_or_next_event(url, username, password):
now = datetime.now(timezone.utc)
try:
client = DAVClient(url, username=username, password=password)
principal = client.principal()
calendars = principal.calendars()
next_event_dict = {
'event_name': "fake",
'event_begin': datetime(9000, 1, 1, tzinfo=UTC), # in the year 9000
'event_end': datetime(9000, 1, 1, 8, tzinfo=UTC),
}
for calendar in calendars:
for event in calendar.events():
calendar_parsed = Calendar(event.data)
for ics_event in calendar_parsed.events:
event_dict = {}
event_dict['event_name'] = ics_event.name or "(No Title)"
event_dict['event_begin'] = ics_event.begin.astimezone(timezone.utc)
event_dict['event_end'] = ics_event.end.astimezone(timezone.utc)
if event_dict['event_begin'] <= now and now <= event_dict['event_end']:
return event_dict
elif event_dict['event_begin'] >= now and next_event_dict['event_begin'] > event_dict['event_begin']:
next_event_dict = event_dict
return next_event_dict
except Exception as e:
print(f"Error accessing {url}: {e}")
return None
if __name__ == "__main__":
password_file = "/home/nx2/.config/sops-nix/secrets/nx2site/radicale/password" # Path to password file
cache_file = "/tmp/caldav_event_cache.json" # Path to cache file
url = "https://dav.${hyper.domain}/"
username = "${hyper.user}"
password = get_password(password_file)
event_dict = load_cache(cache_file)
now = datetime.now(timezone.utc).timestamp()
if event_dict is None or event_dict['event_begin'].timestamp() <= now and now < event_dict['event_end'].timestamp():
event_dict = get_ongoing_or_next_event(url, username, password)
if event_dict is None:
print("No upcoming events found.")
exit(0)
cache_data = {
"event_name": event_dict['event_name'] if event_dict is not None else None,
"event_begin": event_dict['event_begin'] if event_dict is not None else None,
"event_end": event_dict['event_end'] if event_dict is not None else None
}
save_cache(cache_file, cache_data)
if event_dict:
event_start = event_dict['event_begin'].timestamp()
event_end = event_dict['event_end'].timestamp()
if event_start <= now <= event_end:
time_remaining = event_end - now
hours, rem = divmod(int(time_remaining), 3600)
minutes, _ = divmod(rem, 60)
print(f"{event_dict['event_name']} ends in {hours} hour{'s ' if hours != 1 else ' '}and {minutes} minute{'s ' if minutes != 1 else ' '}")
else:
time_until_start = event_start - now
hours, rem = divmod(int(time_until_start), 3600)
minutes, _ = divmod(rem, 60)
print(f"{event_dict['event_name']} starts in {hours} hour{'s ' if hours != 1 else ' '}and {minutes} minute{'s ' if minutes != 1 else ' '}")
else:
print("No upcoming events found.")
'')
];
programs.waybar = {
@@ -64,6 +175,7 @@ in {
margin-bottom = 0;
margin-right = 0;
spacing = 10;
fixed-center = true;
modules-left = [
# "cpu"
# "memory"
@@ -78,7 +190,7 @@ in {
];
modules-right = [
"custom/mode"
"custom/ctimeremaining"
# "custom/caldav_event"
"custom/cclock"
"tray"
];
@@ -97,10 +209,12 @@ in {
exec = "cclock";
restart-interval = 60;
};
# "custom/ctimeremaining" = {
# exec = "nx_gcal_event lookup";
# restart-interval = 60;
# };
"custom/caldav_event" = {
format = "󰃰${sep}{}";
exec = "caldav_event";
restart-interval = 60;
max-width = 60;
};
"custom/mode" = {
exec = "cat /tmp/waybar-mode";
interval = "once";
@@ -163,7 +277,7 @@ in {
};
style = with rice.color; let f = rice.lib.hex-to-rgb-comma-string; in ''
* {
font-family: ${rice.font.code.name2};
font-family: ${rice.font.code.name};
font-size: 1em;
min-height: 0px;
margin: 0px;
@@ -182,6 +296,7 @@ in {
#clock,
#custom-cclock,
#custom-mode,
#custom-caldav-event,
#battery,
#cpu,
#tray,
@@ -198,6 +313,10 @@ in {
color: rgb(${f accent.bright});
}
#workspaces {
font-family: ${rice.font.code.name};
}
#workspaces button {
color: rgb(${f accent.base});
padding-left: 15px;
@@ -207,7 +326,7 @@ in {
#workspaces button.active {
color: rgb(${f background});
background-color: rgba(${f accent.base},${builtins.toString rice.transparency});
background-color: rgb(${f accent.base});
}
#workspaces button:hover {
@@ -222,8 +341,8 @@ in {
color: rgb(${f red.base});
}
#window, #custom-ctimeremaining {
font-family: ${rice.font.base.name}, ${rice.font.code.name2};
#window, #custom-caldav_event {
font-family: ${rice.font.base.name}, ${rice.font.code.name};
color: rgb(${f tertiary.bright});
}
@@ -238,11 +357,14 @@ in {
color: rgb(${f green.base});;
}
#battery.critical {
color: rgb(${f red.dark});;
background: rgb(${f red.bright});
#battery.charging {
color: rgb(${f green.base});
}
#battery.critical {
background: rgb(${f negative.base});
color: rgb(${f foreground});
}
#battery.charging { color: rgb(${f green.base}); }
'';
#battery.critical:not(.charging) {

0
home-modules/wlogout.nix Executable file → Normal file
View File

227
home-modules/yazi.nix Executable file → Normal file
View File

@@ -1,18 +1,183 @@
{ pkgs, system, rice, inputs, ... }:
{ pkgs, hyper, rice, inputs, ... }:
{
home.packages = with pkgs; [
# yazi
dragon
unar
];
programs.yazi = {
enable = true;
package = inputs.yazi.packages.${system}.default;
# package = pkgs.yazi;
package = inputs.yazi.packages.${hyper.system}.default;
enableFishIntegration = true;
shellWrapperName = "ya";
# plugins = with inputs.yazi-plugins.packages.${hyper.system}; { };
# initLua = /* lua */ '' '';
keymap = {
mgr.keymap = [
{ on = "<Esc>"; run = "escape"; desc = "Exit visual mode, clear selected, or cancel search"; }
{ on = "q"; run = "quit"; desc = "Exit the process"; }
{ on = "Q"; run = "quit --no-cwd-file"; desc = "Exit the process without writing cwd-file"; }
{ on = "<C-w>"; run = "close"; desc = "Close the current tab, or quit if it is last tab"; }
{ on = "<C-z>"; run = "suspend"; desc = "Suspend the process"; }
# Hopping
{ on = "k"; run = "arrow -1"; desc = "Move cursor up"; }
{ on = "j"; run = "arrow 1"; desc = "Move cursor down"; }
{ on = "<Up>"; run = "arrow -1"; desc = "Move cursor up"; }
{ on = "<Down>"; run = "arrow 1"; desc = "Move cursor down"; }
{ on = "<C-u>"; run = "arrow -50%"; desc = "Move cursor up half page"; }
{ on = "<C-d>"; run = "arrow 50%"; desc = "Move cursor down half page"; }
{ on = "<C-b>"; run = "arrow -100%"; desc = "Move cursor up one page"; }
{ on = "<C-f>"; run = "arrow 100%"; desc = "Move cursor down one page"; }
{ on = "<PageUp>"; run = "arrow -100%"; desc = "Move cursor up one page"; }
{ on = "<PageDown>"; run = "arrow 100%"; desc = "Move cursor down one page"; }
{ on = [ "g" "g" ]; run = "arrow down"; desc = "Move cursor to the top"; }
{ on = [ "g" "e" ]; run = "arrow up"; desc = "Move cursor to the end"; }
{ on = [ "g" "h" ]; run = "cd ~"; desc = "Go to the home directory"; }
{ on = [ "g" "n" ]; run = "cd ~/nix-dots"; desc = "Go to the Nix-Dotfiles directory"; }
{ on = [ "g" "n" ]; run = "cd /nix/store"; desc = "Go to the Nix-Store"; }
{ on = [ "g" "c" ]; run = "cd ~/.config"; desc = "Go to the config directory"; }
{ on = [ "g" "l" ]; run = "cd ~/.locale"; desc = "Go to the .locale directory"; }
{ on = [ "g" "C" ]; run = "cd ~/.cache"; desc = "Go to the .cache directory"; }
{ on = [ "g" "m" ]; run = "cd ~/media"; desc = "Go to the media (udiskie mount) directory"; }
{ on = [ "g" "v" ]; run = "cd ~/Videos"; desc = "Go to the Videos directory"; }
{ on = [ "g" "t" ]; run = "cd /tmp"; desc = "Go to the /tmp directory"; }
{ on = [ "g" "d" ]; run = "cd ~/Downloads"; desc = "Go to the downloads directory"; }
{ on = [ "g" "D" ]; run = "cd ~/Documents"; desc = "Go to the Documents directory"; }
{ on = [ "g" "r" ]; run = "cd /"; desc = "Go to the root (/) directory"; }
{ on = [ "g" "/" ]; run = "cd /"; desc = "Go to the root (/) directory"; }
{ on = [ "g" "<Space>" ]; run = "cd --interactive"; desc = "Go to a directory interactively"; }
# Navigation
{ on = "h"; run = "leave"; desc = "Go back to the parent directory"; }
{ on = "l"; run = "enter"; desc = "Enter the child directory"; }
{ on = "<Left>"; run = "leave"; desc = "Go back to the parent directory"; }
{ on = "<Right>"; run = "enter"; desc = "Enter the child directory"; }
{ on = "H"; run = "back"; desc = "Go back to the previous directory"; }
{ on = "L"; run = "forward"; desc = "Go forward to the next directory"; }
# Seeking
{ on = "K"; run = "seek -5"; desc = "Seek up 5 units in the preview"; }
{ on = "J"; run = "seek 5"; desc = "Seek down 5 units in the preview"; }
# Selection
{ on = "<Space>"; run = [ "toggle --state=none" "arrow 1" ]; desc = "Toggle the current selection state"; }
{ on = "v"; run = "visual_mode"; desc = "Enter visual mode (selection mode)"; }
{ on = "V"; run = "visual_mode --unset"; desc = "Enter visual mode (unset mode)"; }
{ on = "<C-a>"; run = "toggle_all --state=on"; desc = "Select all files"; }
{ on = "<C-n>"; run = "toggle_all --state=off"; desc = "Deselect all files"; }
{ on = "<C-r>"; run = "toggle_all --state=none"; desc = "Inverse selection of all files"; }
# Operation
{ on = "o"; run = "open"; desc = "Open selected files"; }
{ on = "O"; run = "open --interactive"; desc = "Open selected files interactively"; }
{ on = "<Enter>"; run = "open"; desc = "Open selected files"; }
{ on = "<S-Enter>"; run = "open --interactive"; desc = "Open selected files interactively"; }
{ on = "y"; run = "yank"; desc = "Yank selected files (copy)"; }
{ on = "x"; run = "yank --cut"; desc = "Yank selected files (cut)"; }
{ on = "p"; run = "paste"; desc = "Paste yanked "; }
{ on = "P"; run = "paste --force"; desc = "Paste yanked (overwrite if exists)"; }
{ on = "-"; run = "link"; desc = "Symlink the absolute path of yanked files"; }
{ on = "_"; run = "link --relative"; desc = "Symlink the relative path of yanked files"; }
{ on = "<C-->"; run = "hardlink"; desc = "Hardlink yanked files"; }
{ on = "Y"; run = "unyank"; desc = "Cancel the yank status"; }
{ on = "X"; run = "unyank"; desc = "Cancel the yank status"; }
{ on = "d"; run = "remove"; desc = "Trash selected files"; }
{ on = "D"; run = "remove --permanently"; desc = "Permanently delete selected files"; }
{ on = "a"; run = "create"; desc = "Create a file (ends with / for directories)"; }
{ on = "r"; run = "rename --cursor=before_ext"; desc = "Rename selected file(s)"; }
{ on = ";"; run = "shell --interactive"; desc = "Run a shell command"; }
{ on = ":"; run = "shell --block --interactive"; desc = "Run a shell command (block until finishes)"; }
{ on = "."; run = "hidden toggle"; desc = "Toggle the visibility of hidden files"; }
{ on = "s"; run = "search fd"; desc = "Search files by name using fd"; }
{ on = "S"; run = "search rg"; desc = "Search files by content using ripgrep"; }
{ on = "<C-s>"; run = "escape --search"; desc = "Cancel the ongoing search"; }
{ on = "z"; run = "plugin zoxide"; desc = "Jump to a directory using zoxide"; }
{ on = "Z"; run = "plugin fzf"; desc = "Jump to a directory or reveal a file using fzf"; }
# Linemode
{ on = [ "m" "s" ]; run = "linemode size"; desc = "Set linemode to size"; }
{ on = [ "m" "p" ]; run = "linemode permissions"; desc = "Set linemode to permissions"; }
{ on = [ "m" "c" ]; run = "linemode ctime"; desc = "Set linemode to ctime"; }
{ on = [ "m" "m" ]; run = "linemode mtime"; desc = "Set linemode to mtime"; }
{ on = [ "m" "o" ]; run = "linemode owner"; desc = "Set linemode to owner"; }
{ on = [ "m" "n" ]; run = "linemode none"; desc = "Set linemode to none"; }
# Copy
{ on = [ "c" "c" ]; run = "copy path"; desc = "Copy the file path"; }
{ on = [ "c" "d" ]; run = "copy dirname"; desc = "Copy the directory path"; }
{ on = [ "c" "f" ]; run = "copy filename"; desc = "Copy the filename"; }
{ on = [ "c" "n" ]; run = "copy name_without_ext"; desc = "Copy the filename without extension"; }
# Filter
{ on = "f"; run = "filter --smart"; desc = "Filter files"; }
# Find
{ on = "/"; run = "find --smart"; desc = "Find next file"; }
{ on = "?"; run = "find --previous --smart"; desc = "Find previous file"; }
{ on = "n"; run = "find_arrow"; desc = "Go to the next found"; }
{ on = "N"; run = "find_arrow --previous"; desc = "Go to the previous found"; }
# Sorting
{ on = [ "," "m" ]; run = [ "sort modified --reverse=no" "linemode mtime" ]; desc = "Sort by modified time"; }
{ on = [ "," "M" ]; run = [ "sort modified --reverse" "linemode mtime" ]; desc = "Sort by modified time (reverse)"; }
{ on = [ "," "c" ]; run = [ "sort created --reverse=no" "linemode ctime" ]; desc = "Sort by created time"; }
{ on = [ "," "C" ]; run = [ "sort created --reverse" "linemode ctime" ]; desc = "Sort by created time (reverse)"; }
{ on = [ "," "e" ]; run = "sort extension --reverse=no"; desc = "Sort by extension"; }
{ on = [ "," "E" ]; run = "sort extension --reverse"; desc = "Sort by extension (reverse)"; }
{ on = [ "," "a" ]; run = "sort alphabetical --reverse=no"; desc = "Sort alphabetically"; }
{ on = [ "," "A" ]; run = "sort alphabetical --reverse"; desc = "Sort alphabetically (reverse)"; }
{ on = [ "," "n" ]; run = "sort natural --reverse=no"; desc = "Sort naturally"; }
{ on = [ "," "N" ]; run = "sort natural --reverse"; desc = "Sort naturally (reverse)"; }
{ on = [ "," "s" ]; run = [ "sort size --reverse=no" "linemode size" ]; desc = "Sort by size"; }
{ on = [ "," "S" ]; run = [ "sort size --reverse" "linemode size" ]; desc = "Sort by size (reverse)"; }
# Tab
{ on = "t"; run = "tab_create --current"; desc = "Create a new tab with CWD"; }
{ on = "<C-w>"; run = "close"; desc = "Close the current tab"; }
{ on = "1"; run = "tab_switch 0"; desc = "Switch to the first tab"; }
{ on = "2"; run = "tab_switch 1"; desc = "Switch to the second tab"; }
{ on = "3"; run = "tab_switch 2"; desc = "Switch to the third tab"; }
{ on = "4"; run = "tab_switch 3"; desc = "Switch to the fourth tab"; }
{ on = "5"; run = "tab_switch 4"; desc = "Switch to the fifth tab"; }
{ on = "6"; run = "tab_switch 5"; desc = "Switch to the sixth tab"; }
{ on = "7"; run = "tab_switch 6"; desc = "Switch to the seventh tab"; }
{ on = "8"; run = "tab_switch 7"; desc = "Switch to the eighth tab"; }
{ on = "9"; run = "tab_switch 8"; desc = "Switch to the ninth tab"; }
{ on = "<C-1>"; run = "tab_swap 0"; desc = "Swap current tab with the first tab"; }
{ on = "<C-2>"; run = "tab_swap 1"; desc = "Swap current tab with the second tab"; }
{ on = "<C-3>"; run = "tab_swap 2"; desc = "Swap current tab with the third tab"; }
{ on = "<C-4>"; run = "tab_swap 3"; desc = "Swap current tab with the fourth tab"; }
{ on = "<C-5>"; run = "tab_swap 4"; desc = "Swap current tab with the fifth tab"; }
{ on = "<C-5>"; run = "tab_swap 4"; desc = "Swap current tab with "; }
{ on = "<C-6>"; run = "tab_swap 5"; desc = "Swap current tab with the sixth tab"; }
{ on = "<C-6>"; run = "tab_swap 5"; desc = "Swap current tab with "; }
{ on = "<C-7>"; run = "tab_swap 6"; desc = "Swap current tab with the seventh tab"; }
{ on = "<C-7>"; run = "tab_swap 6"; desc = "Swap current tab with tab"; }
{ on = "<C-8>"; run = "tab_swap 7"; desc = "Swap current tab with the eighth tab"; }
{ on = "<C-8>"; run = "tab_swap 7"; desc = "Swap current tab with b"; }
{ on = "<C-9>"; run = "tab_swap 8"; desc = "Swap current tab with the ninth tab"; }
{ on = "<C-9>"; run = "tab_swap 8"; desc = "Swap current tab with "; }
{ on = "["; run = "tab_switch -1 --relative"; desc = "Switch to the previous tab"; }
{ on = "["; run = "tab_switch -1 --relative"; desc = "Switch to thtab"; }
{ on = "]"; run = "tab_switch 1 --relative"; desc = "Switch to the next tab"; }
{ on = "]"; run = "tab_switch 1 --relative"; desc = "Switch ttab"; }
{ on = "{"; run = "tab_swap -1"; desc = "Swap current tab with previous tab"; }
{ on = "{"; run = "tab_swap -1"; desc = "Swap current tab wittab"; }
{ on = "}"; run = "tab_swap 1"; desc = "Swap current tab with next tab"; }
# Tasks
{ on = "w"; run = "tasks_show"; desc = "Show task manager"; }
];
tasks.keymap = [
# Task
{ on = "w"; run = "close"; desc = "Close Task View"; }
{ on = "q"; run = "close"; desc = "Close Task View"; }
{ on = "<Esc>"; run = "close"; desc = "Close Task View"; }
{ on = "c"; run = "cancel"; desc = "Cancel Task"; }
{ on = "i"; run = "inspect"; desc = "Inspect Task"; }
{ on = "j"; run = "arrow -1"; desc = "Up in list"; }
{ on = "k"; run = "arrow 1"; desc = "Down in list"; }
{ on = "u"; run = "arrow -5"; desc = "Up in list (fast)"; }
{ on = "d"; run = "arrow 5"; desc = "Down in list (fast)"; }
];
help.keymap = [
# Help
{ on = "~"; run = "help"; desc = "Open help"; }
{ on = "?"; run = "help"; desc = "Open help"; }
{ on = "<F1>"; run = "help"; desc = "Open help"; }
];
};
settings = {
manager = {
mgr = {
layout = [2 3 4];
sort_by = "natural";
sort_sensitive = true;
@@ -21,19 +186,15 @@
linemode = "size";
show_hidden = false;
show_symlink = true;
append_keymap = [
{ on = [ "<C-g>" ]; run = "lazygit"; desc = "Run Lazygit in current directory"; }
{ on = [ "<C-D>" ]; run = ''shell 'dragon -x -i -T "$1"' --confirm''; }
];
};
opener = {
"edit" = [
{ run = ''hx "$@"''; desc = "helix"; block = true; }
{ run = ''codium "$@"''; orphan = true;}
{ run = ''nano "$@"''; desc = "nano"; block = true;}
{ run = ''codium "$@"''; desc = "code"; orphan = true; }
];
"play" = [
{ run = ''mpv "$@"''; }
{ run = ''mpv "$@"''; desc = "mpv"; orphan = true; }
{ run = ''mpv --vf=negate "$@"''; desc = "mpv inverted"; orphan = true; }
{ run = ''mediainfo "$1"; echo "Press enter to exit"; read''; block = true; desc = "Show mediainfo"; }
];
"archive" = [
@@ -42,33 +203,38 @@
{ run = ''unzip "$1"''; desc = "unzip"; }
];
"image" = [
{ run = ''imv "$@"''; desc = "imv";}
{ run = ''gimp "$@"''; desc = "gimp";}
{ run = ''imv "$@"''; desc = "imv"; orphan = true; }
{ run = ''gimp "$@"''; desc = "gimp"; orphan = true; }
{ run = ''swww img --transition-type wipe --transition-angle 60 --transition-step 120 --transition-fps 120 "$@"''; desc = "swww wallpaper"; }
{ run = ''exiftool "$@"; echo "Press enter to exit"; read''; desc = "View Exif Data"; }
{ run = ''for f in "$@"; do magick "$f" -auto-orient "''${f%.*}.pdf"; done''; desc = "Convert to PDF"; }
];
"svg" = [
{ run = ''inkscape "$@"''; desc = "inkscape";}
{ run = ''firefoc "$@"''; desc = "firefox";}
{ run = ''inkscape "$@"''; desc = "inkscape"; orphan = true; }
{ run = ''firefox "$@"''; desc = "firefox"; orphan = true; }
];
"font" = [
{ run = ''fontpreview "$@"''; desc = "fontpreview"; }
{ run = ''fontforge "$@"''; desc = "fortforge"; }
{ run = ''fontpreview "$@"''; desc = "fontpreview"; orphan = true; }
{ run = ''fontforge "$@"''; desc = "fortforge"; orphan = true; }
];
"document" = [
{ run = ''zathura "$@"''; desc = "zathura"; }
{ run = ''xournal "$@"''; desc = "xournal"; }
{ run = ''firefox "$@"''; desc = "firefox"; }
{ run = ''zathura "$@"''; desc = "zathura"; orphan = true; }
{ run = ''xournal "$@"''; desc = "xournal"; orphan = true; }
{ run = ''firefox "$@"''; desc = "firefox"; orphan = true; }
{ run = ''nxgs flip "$@"''; desc = "nxgs flip"; }
{ run = ''nxgs rotate "$@"''; desc = "nxgs rotate"; }
{ run = ''nxgs interactive-merge "$@"''; block = true; desc = "nxgs merge"; }
];
"browser" = [
{ run = ''firefox "$@"''; desc = "firefox"; }
{ run = ''zen "$@"''; desc = "zen"; }
{ run = ''chromium --enable-features=UseOzonePlatform --ozone-platform=wayland "$@"''; desc = "chromium"; }
{ run = ''firefox "$@"''; desc = "firefox"; orphan = true; }
{ run = ''zen "$@"''; desc = "zen"; orphan = true; }
{ run = ''chromium --enable-features=UseOzonePlatform --ozone-platform=wayland "$@"''; desc = "chromium"; orphan = true; }
{ run = ''w3m "$@"''; desc = "w3m"; }
{ run = ''lynx "$@"''; desc = "lynx"; }
];
"office" = [
{ run = ''libreoffice "$@"''; desc = "libreoffice"; }
{ run = ''libreoffice --view "$@"''; desc = "libreoffice read-only"; }
{ run = ''libreoffice "$@"''; desc = "libreoffice"; orphan = true; }
{ run = ''libreoffice --view "$@"''; desc = "libreoffice read-only"; orphan = true; }
];
"shell" = [
{ run = ''bash -c "$@"''; desc = "bash -c"; }
@@ -87,6 +253,7 @@
{ mime = "text/htm"; use = [ "edit" "browser" ]; }
{ mime = "text/x-python"; use = "python"; }
{ mime = "text/*"; use = "edit"; }
{ mime = "text"; use = "edit"; }
{ mine = "inode/x-empty"; use = "edit"; }
{ mine = "inode/directory"; use = "edit"; }
@@ -94,9 +261,11 @@
{ mime = "image/*"; use = "image"; }
{ mime = "image/svg"; use = [ "image" "edit" ]; }
{ mime = "video/*"; use = "video"; }
{ mime = "video/*"; use = "play"; }
{ mime = "audio/*"; use = "play"; }
{ mime = "application/x-httpd-php"; use = [ "edit" "browser" ]; }
{ mime = "application/javascript"; use = "edit"; }
{ mime = "application/json"; use = "edit"; }
{ mime = "application/ld+json"; use = "edit"; }
{ mime = "application/pdf"; use = "document"; }
@@ -120,7 +289,7 @@
];
};
theme = with rice.color; {
manager = {
mgr = {
cwd = { fg = foreground; bg = background; };
hovered = { fg = background; bg = accent.base; };
preview_hovered = { underline = false; };

View File

@@ -1,18 +1,24 @@
{ pkgs, rice, ... }:
{ rice, ... }:
{
programs.zathura = {
enable = true;
options = with rice.color; {
options = let
f = rice.lib.hex-to-rgb-comma-string;
t = builtins.toString rice.transparency;
in with rice.color; {
completion-bg = background;
completion-fg = foreground;
completion-highlight-bg = background;
completion-highlight-fg = accent.base;
default-bg = "rgba(${rice.lib.hex-to-rgb-comma-string background},${builtins.toString rice.transparency})";
default-bg = "rgba(${f background},${t})";
default-fg = foreground;
highlight-active-color = "rgba(${rice.lib.hex-to-rgb-comma-string accent.base},0.5)";
highlight-color = "rgba(${rice.lib.hex-to-rgb-comma-string secondary.base},0.5)";
highlight-fg = "rgba(${rice.lib.hex-to-rgb-comma-string secondary.base},0.5)";
index-active-bg = background;
highlight-active-color = "rgba(${f accent.base},0.5)";
highlight-color = "rgba(${f secondary.base},0.5)";
highlight-fg = "rgba(${f secondary.base},0.5)";
index-fg = accent.bright;
index-bg = black.dark;
index-active-fg = background;
index-active-bg = foreground;
inputbar-bg = background;
inputbar-fg = foreground;
notification-bg = background;
@@ -31,6 +37,19 @@
n-completion-items = 9999999999999;
exec-command = "open";
page-padding = rice.border-width;
#stop at page boundries
scroll-page-aware = true;
smooth-scroll = true;
scroll-full-overlap = 0.01;
scroll-step = 100;
};
mappings = {
h = ''feedkeys "<C-Left>"'';
j = ''feedkeys "<C-Down>"'';
k = ''feedkeys "<C-Up>"'';
l = ''feedkeys "<C-Right>"'';
};
};
}

0
home-modules/zoxide.nix Executable file → Normal file
View File

124
home.nix Executable file → Normal file
View File

@@ -1,19 +1,22 @@
{ pkgs, pkgs-unstable, host, user, inputs, ... }:
{ pkgs, hyper, ... }:
{
imports = [
./home-modules/auto-mount.nix
./home-modules/bash.nix
./home-modules/bitwarden.nix
./home-modules/calendar.nix
./home-modules/chatterino.nix
./home-modules/clipboard.nix
./home-modules/color-pallete.nix
./home-modules/direnv.nix
./home-modules/discord.nix
./home-modules/email.nix
./home-modules/firefox.nix
./home-modules/fish.nix
# ./home-modules/foot.nix
./home-modules/games.nix
./home-modules/gestures.nix
./home-modules/ghostty.nix
./home-modules/gimp.nix
./home-modules/git.nix
./home-modules/gpg.nix
./home-modules/gtk.nix
@@ -28,8 +31,7 @@
./home-modules/nh.nix
./home-modules/nixd.nix
./home-modules/nvidia.nix
./home-modules/nx2site.nix
# ./home-modules/nx-gcal-event.nix
./home-modules/nxgs.nix
./home-modules/obs.nix
./home-modules/office.nix
./home-modules/ollama.nix
@@ -37,10 +39,13 @@
./home-modules/pnx.nix
./home-modules/programming/c.nix
./home-modules/programming/gleam.nix
./home-modules/programming/node.nix
./home-modules/programming/go.nix
./home-modules/programming/java.nix
./home-modules/programming/js.nix
./home-modules/programming/python.nix
./home-modules/qt.nix
./home-modules/rofi.nix
./home-modules/scanning.nix
./home-modules/sent.nix
./home-modules/sops.nix
./home-modules/ssh.nix
@@ -55,73 +60,80 @@
./home-modules/yazi.nix
./home-modules/zathura.nix
./home-modules/zoxide.nix
];
home.username = user;
home.homeDirectory = "/home/${user}";
home.stateVersion = "24.05";
] ++ (if (hyper.host == "NxACE") then [
./home-modules/nx2site.nix
./home-modules/nx2site-backup.nix
] else []);
home.username = hyper.user;
# home.homeDirectory = hyper.home; # for some reason you cant use hyper.home here
home.homeDirectory = "/home/${hyper.user}";
home.stateVersion = pkgs.version;
home.packages = with pkgs; [
bat
brightnessctl
browsh
chromium
# zathura
xfce.thunar
# spotify
spicetify-cli
swww playerctl
imv mpv mediainfo exiftool ffmpeg
pavucontrol
fontpreview gtk2fontsel
lynx w3m browsh
bat du-dust eza neofetch tldr fzf figlet ripgrep lolcat jq glow
brightnessctl wev
piper-tts
sssnake pipes
dig
screen
reflex
gnumake
cmake
speedtest-go
dig
du-dust
exiftool
eza
ffmpeg
figlet
fontpreview
fzf
glib
glow
gnumake
gsettings-desktop-schemas
imagemagick
imv
jq
lolcat
lynx
mediainfo
mpv
neofetch
pavucontrol
pdfgrep
piper-tts
pipes
playerctl
pv
qbittorrent
reflex
ripgrep
screen
spicetify-cli
sssnake
swww
systemctl-tui
tldr
unstable.spotify
w3m
wev
wl-clipboard
xclip
xournal
ghostscript
inputs.zen-browser.packages."${system}".default
] ++ (with pkgs-unstable; [
obsidian
firefox
spotify
]) ++ (if host != "NxACE" then (with pkgs; [
xfce.thunar
yt-dlp
] ++ (if (hyper.host != "NxACE") then [
signal-desktop
obsidian
zoom-us
gimp
inkscape
]) else (with pkgs-unstable; [
]));
] else []);
xdg = {
enable = true;
configHome = /home/${user}/.config;
cacheHome = /home/${user}/.cache;
dataHome = /home/${user}/.local/share;
stateHome = /home/${user}/.local/state;
configHome = "${hyper.home}.config";
cacheHome = "${hyper.home}.cache";
dataHome = "${hyper.home}.local/share";
stateHome = "${hyper.home}.local/state";
mimeApps = {
enable = true;
defaultApplications =
let
defaultApplications = let
browser = "firefox.desktop";
in
{
in {
"default-web-browser" = [ browser ];
"text/html" = [ browser ];
"text/htm" = [ browser ];

24
nix-on-droid.nix Normal file
View File

@@ -0,0 +1,24 @@
{ pkgs, ... }:
{
# Simply install just the packages
environment.packages = with pkgs; [
helix
git
lazygit
yazi
];
# Backup etc files instead of failing to activate generation if a file already exists in /etc
environment.etcBackupExtension = ".bak";
# Read the changelog before changing this value
system.stateVersion = pkgs.version;
# Set up nix for flakes
nix.extraOptions = ''
experimental-features = nix-command flakes
'';
# Set your time zone
time.timeZone = "Europe/Berlin";
}

22
nixos-wsl.nix Normal file
View File

@@ -0,0 +1,22 @@
{ pkgs, hyper, inputs, ... }:
{
imports = [
inputs.nixos-wsl.nixosModules.default
./system-modules/users.nix
./system-modules/gc.nix
./system-modules/docker.nix
./system-modules/gpg.nix
./system-modules/networking.nix
./system-modules/nixd.nix
# ./system-modules/sops.nix
# ./system-modules/sshd.nix
# ./system-modules/syncthing.nix
];
system.stateVersion = pkgs.version;
# system.stateVersion = "24.11";
wsl = {
defaultUser = hyper.user;
enable = true;
};
nix.settings.experimental-features = [ "nix-command" "flakes" ];
}

0
nxlib/ricelib.nix Executable file → Normal file
View File

44
shell-only.nix Normal file
View File

@@ -0,0 +1,44 @@
{ pkgs, hyper, ... }:
{
imports = [
./home-modules/bash.nix
./home-modules/color-pallete.nix
./home-modules/direnv.nix
./home-modules/fish.nix
./home-modules/git.nix
./home-modules/gpg.nix
./home-modules/helix.nix
./home-modules/latex.nix
./home-modules/nh.nix
./home-modules/nixd.nix
./home-modules/nxgs.nix
./home-modules/pandoc.nix
./home-modules/programming/c.nix
./home-modules/programming/gleam.nix
./home-modules/programming/go.nix
./home-modules/programming/java.nix
./home-modules/programming/js.nix
./home-modules/programming/python.nix
# ./home-modules/sops.nix
./home-modules/ssh.nix
./home-modules/starship.nix
./home-modules/vale.nix
./home-modules/yazi.nix
./home-modules/zoxide.nix
./home-modules/pkgs-list/shell.nix
];
home.username = hyper.user;
# home.homeDirectory = hyper.home; # for some reason you cant use hyper.home here
home.homeDirectory = "/home/${hyper.user}";
home.stateVersion = pkgs.version;
xdg = {
enable = true;
configHome = "${hyper.home}/.config";
cacheHome = "${hyper.home}/.cache";
dataHome = "${hyper.home}/.local/share";
stateHome = "${hyper.home}/.local/state";
};
programs.home-manager.enable = true;
}

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,9 @@
{ host, lib, ... }:
lib.mkIf (host != "NxACE")
{ pkgs, hyper, lib, ... }:
lib.mkIf (hyper.host != "NxACE")
{
environment.systemPackages = with pkgs; [
adbfs-rootless
];
programs.adb = {
enable = true;
};

69
system-modules/boot.nix Executable file → Normal file
View File

@@ -1,7 +1,7 @@
{ config, pkgs, pkgs-unstable, lib, host, domain, inputs, ... }:
{ config, pkgs, hyper, inputs, ... }:
let
grub-theme-ascii-diana = (pkgs.fetchFromGitea {
domain = "git.${domain}";
domain = "git.${hyper.domain}";
owner = "nx2";
repo = "grub-theme-ascii-diana";
rev = "0.5.0";
@@ -9,80 +9,30 @@ let
});
in
{
imports = if host == "NxNORTH" then [
imports = if hyper.host == "NxNORTH" then [
inputs.lanzaboote.nixosModules.lanzaboote
] else [];
config = if host == "NxNORTH" then {
config = if hyper.host == "NxNORTH" then {
# I have to boot with secureboot becasue of the chinese spyware called Vanguard
environment.systemPackages = with pkgs; [ sbctl ];
boot = {
lanzaboote =
let
windows-efi-shell-fs-alias = "HD0a65535a2";
in
{
lanzaboote = {
enable = true;
pkiBundle = "/etc/secureboot";
package = lib.mkForce (pkgs.writeShellApplication {
name = "lzbt";
runtimeInputs = [
inputs.lanzaboote.packages.x86_64-linux.tool
pkgs.coreutils
pkgs.sbctl
];
# https://forum.endeavouros.com/t/tutorial-add-a-systemd-boot-loader-menu-entry-for-a-windows-installation-using-a-separate-esp-partition/37431
text = /*bash*/ ''
# execute normal lanazboote functionality
lzbt "$@"
# Create windows.nsh file
ESP='${config.boot.loader.efi.efiSysMountPoint}'
echo "${windows-efi-shell-fs-alias}:EFI\Microsoft\Boot\Bootmgfw.efi" > "$ESP/windows.nsh"
# cp efi-shell boot file
# systemd-boot will automatically add an entry for it
cp -f '${pkgs.edk2-uefi-shell.efi}' "$ESP/shellx64.efi"
# should exist already
mkdir -p "$ESP/loader/entries"
# sign shell file
sbctl sign -s "$ESP/shellx64.efi"
# Create windows.conf boot entry
cat << EOF > "$ESP/loader/entries/windows.conf"
title Windows-Hack
efi /shellx64.efi
options -nointerrupt -noconsolein -noconsoleout windows.nsh
EOF
'';
});
pkiBundle = "/var/lib/sbctl";
};
loader.systemd-boot = {
enable = false; # let lanzaboote install systemd-boot
consoleMode = "max";
configurationLimit = 10;
# extraEntries = {
# "Windo7s-11.conf" = ''
# Windows eleven
# search --file --no-floppy --set=root /EFI/Microsoft/Boot/bootmgfw.efi
# chainloader (''${root})/EFI/Microsoft/Boot/bootmgfw.efi
# '';
# "Firmware.conf" = ''
# Firmware
# fwsetup
# '';
# "Shutdown.conf" = ''
# title Shutdown
# halt
# '';
# };
};
kernelPackages = pkgs-unstable.linuxPackages_zen;
kernelPackages = pkgs.linuxPackages_zen;
extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback ];
kernelModules = [ "v4l2loopback" ];
extraModprobeConfig = ''options v4l2loopback devices=1 video_nr=1 card_label="OBS Cam" exclusive_caps=1'';
};
security.polkit.enable = true;
} else if host == "NxXPS" then {
} else if hyper.host == "NxXPS" then {
boot = {
loader = {
efi.canTouchEfiVariables = true;
@@ -105,7 +55,7 @@ in
'';
};
};
kernelPackages = pkgs-unstable.linuxPackages_6_10;
kernelPackages = pkgs.linuxPackages_latest;
extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback ];
kernelModules = [ "v4l2loopback" ];
extraModprobeConfig = ''options v4l2loopback devices=1 video_nr=1 card_label="OBS VCam" exclusive_caps=1'';
@@ -120,6 +70,7 @@ in
efiSupport = true;
};
};
kernelPackages = pkgs.linuxPackages_6_12;
};
};
}

View File

@@ -0,0 +1,140 @@
{ pkgs, ... }:
{
systemd.timers."nx_cal_dicos" = {
enable = true;
wantedBy = [ "timers.target" ];
timerConfig = {
OnBootSec = "40m";
OnUnitActiveSec = "12h";
Unit = "nx_cal_dicos.service";
};
};
systemd.services."nx_cal_dicos" = {
script = let
nx_cal_dicos = (pkgs.writers.writePython3Bin "nx_cal_dicos" {
libraries = with pkgs.python3Packages; [
ics
];
flakeIgnore = [ "E302" "E305" "E226" "E501" ];
} /* python */ ''
import os
from glob import glob
from ics import Calendar
from ics.event import datetime
NETTO_STUNDE = 18.46
WEEKLY = 12
# week_dict = {}
# latest_week = 0
# latest_goal = WEEKLY
deficit = 0
def fraction_to_unicode(frac):
div, rem = divmod(frac, 1)
if rem == 0.5:
unicode = "½"
elif rem == 0.25:
unicode = "¼"
elif rem == 0.75:
unicode = "¾"
elif rem == 0:
unicode = ""
else:
unicode = rem
if div == 0:
h = ""
else:
h = int(div)
return f"{h}{unicode}"
def modify_event(event):
"""Modify the event if it contains 'DICOS' in the SUMMARY."""
# global week_dict
# global latest_goal
# global latest_week
# global deficit
if event.name is not None and "DICOS" in event.name:
length = (event.end - event.begin).seconds / 3600
money_made = divmod(length * NETTO_STUNDE, 1)
# Calculate total hours for DICOS events in the same week
year, week, _ = event.begin.isocalendar()
# if week != latest_week:
# try:
# deficit = latest_goal - week_dict[f"{year}_{latest_week}"]
# except KeyError:
# deficit = 0
# week_dict[f"{year}_{week}"] = length + (week_dict[f"{year}_{week}"] if f"{year}_{week}" in week_dict else 0)
# progress = week_dict[f"{year}_{week}"]
# goal = WEEKLY + deficit
# if week != latest_week:
# latest_goal = goal
# latest_week = week
try:
new_description = [event.description.split("\n")[0]]
except AttributeError:
new_description = ["::"]
new_description.append("")
new_description.append(f"Netto: {money_made[0]:.0f},{int(money_made[1] * 10):02d}")
# new_description.append(f"This weeks porgress: ({fraction_to_unicode(progress)}/{fraction_to_unicode(goal)})")
# new_description.append(f"You're {fraction_to_unicode(abs(deficit))}h in the {'plus' if deficit < 0 else 'minus'} this week.")
event.description = "\n".join(new_description)
event.name = f"DICOS {fraction_to_unicode(length)}"
return event
def process_ics_file(filepath):
"""Read, modify, and overwrite an ICS file."""
with open(filepath, 'r') as f:
calendar = Calendar(f.read())
modified = False
for event in calendar.events:
if event.name is not None and 'DICOS' in event.name:
event = modify_event(event)
modified = True
if modified:
with open(filepath, 'w') as f:
f.writelines(calendar.serialize_iter())
def get_event_start_time(filepath):
"""Extract the event's start time from an ICS file."""
with open(filepath, 'r') as f:
calendar = Calendar(f.read())
for event in calendar.events:
return event.begin.datetime
else:
return datetime(year=1, month=1, day=1)
if __name__ == "__main__":
directory = "/var/lib/radicale/collections/collection-root/nx2/experience"
ics_files = glob(os.path.join(directory, "*.ics"))
if not ics_files:
print("No ICS files found in the directory.")
sorted_files = sorted(ics_files, key=get_event_start_time)
for ics_file in sorted_files:
process_ics_file(ics_file)
print("Processing complete.")
'');
in ''
${nx_cal_dicos}/bin/nx_cal_dicos
'';
serviceConfig = {
Type = "oneshot";
User = "radicale";
};
};
}

View File

@@ -0,0 +1,89 @@
{ config, pkgs, hyper, ... }:
{
systemd.timers."nx_cal_lec" = {
enable = true;
wantedBy = [ "timers.target" ];
timerConfig = {
OnBootSec = "40m";
OnUnitActiveSec = "24h";
Unit = "nx_cal_lec.service";
};
};
systemd.services."nx_cal_lec" = {
script = let
nx_cal_lec = (pkgs.writers.writePython3Bin "nx_cal_lec" {
libraries = with pkgs.python3Packages; [
ical
ics
requests
dateutils
];
flakeIgnore = [ "E302" "E305" "E226" "E501" ];
} /*python */ ''
from ics import Calendar
import requests
from datetime import timedelta
def adjust_events(events):
"""
Adjust overlapping events to ensure they do not conflict.
"""
sorted_events = sorted(events, key=lambda e: e.begin)
for i in range(1, len(sorted_events)):
previous_event = sorted_events[i - 1]
current_event = sorted_events[i]
if current_event.begin < previous_event.end:
# Adjust the start time of the current event to just after the previous event
current_event.begin = previous_event.end + timedelta(minutes=1)
print(f"Adjusted event '{current_event.name}' to start at {current_event.begin} and end at {current_event.end}")
return sorted_events
def fetch_and_save_ical_events(ical_url, save_path):
"""
Fetch events from an iCal URL and save them as a single combined calendar.
"""
try:
# Fetch the iCal data
response = requests.get(ical_url)
response.raise_for_status()
# Parse the iCal data
calendar = Calendar(response.text)
# Adjust events
adjusted_events = adjust_events(list(calendar.events))
# Create a new combined calendar
combined_calendar = Calendar()
for event in adjusted_events:
combined_calendar.events.add(event)
# Save the combined calendar to a single .ics file
with open(save_path, 'w') as file:
file.writelines(combined_calendar.serialize_iter())
print(f"Saved combined calendar to {save_path}")
except requests.exceptions.RequestException as e:
print(f"Error fetching iCal data: {e}")
except Exception as e:
print(f"Error processing iCal data: {e}")
if __name__ == "__main__":
# Replace with your iCal URL and target file path
ICAL_URL = "https://zlypher.github.io/lol-events/cal/league-of-legends-lec.ical"
SAVE_PATH = "${config.services.nginx.virtualHosts."${hyper.domain}".root}/lec.ics"
fetch_and_save_ical_events(ICAL_URL, SAVE_PATH)
'');
in ''
${nx_cal_lec}/bin/nx_cal_lec
'';
serviceConfig = {
Type = "oneshot";
User = hyper.user;
};
};
}

View File

@@ -0,0 +1,79 @@
{ config, pkgs, hyper, ... }:
{
systemd.timers."nx_cal_lr" = {
enable = true;
wantedBy = [ "timers.target" ];
timerConfig = {
OnBootSec = "41m";
OnUnitActiveSec = "24h";
Unit = "nx_cal_lr.service";
};
};
systemd.services."nx_cal_lr" = {
script = let
nx_cal_lr = (pkgs.writers.writePython3Bin "nx_cal_lr" {
libraries = with pkgs.python3Packages; [
ics
requests
];
flakeIgnore = [ "E302" "E305" "E226" "E501" ];
} /*python */ ''
from ics import Calendar
import requests
def filter_events(events):
return [event for event in events if ("LR" in event.name) or ("TBD" in event.name)]
def fetch_and_save_ical_events(ical_urls, save_path):
"""
Fetch events from an iCal URL and save them as a single combined calendar.
"""
try:
# Create a new combined calendar
combined_calendar = Calendar()
for url in ical_urls:
# Fetch the iCal data
response = requests.get(url)
response.raise_for_status()
# Parse the iCal data
calendar = Calendar(response.text)
# Adjust events
adjusted_events = filter_events(list(calendar.events))
for event in adjusted_events:
combined_calendar.events.add(event)
# Save the combined calendar to a single .ics file
with open(save_path, 'w') as file:
file.writelines(combined_calendar.serialize_iter())
print(f"Saved combined calendar to {save_path}")
except requests.exceptions.RequestException as e:
print(f"Error fetching iCal data: {e}")
except Exception as e:
print(f"Error processing iCal data: {e}")
if __name__ == "__main__":
# Replace with your iCal URL and target file path
ICAL_URLS = [
"https://zlypher.github.io/lol-events/cal/league-of-legends-nlc.ical",
"https://zlypher.github.io/lol-events/cal/league-of-legends-emea-masters.ical"
]
SAVE_PATH = "${config.services.nginx.virtualHosts."${hyper.domain}".root}/lr.ics"
fetch_and_save_ical_events(ICAL_URLS, SAVE_PATH)
'');
in ''
${nx_cal_lr}/bin/nx_cal_lr
'';
serviceConfig = {
Type = "oneshot";
User = hyper.user;
};
};
}

View File

@@ -0,0 +1,138 @@
{ pkgs, hyper, ... }:
let
radicale-root = "/var/lib/radicale";
web-root = "/var/nginx/webroot";
in
{
systemd.timers."nx_cal_publish" = {
enable = true;
wantedBy = [ "timers.target" ];
timerConfig = {
OnBootSec = "2m";
OnUnitActiveSec = "6h";
Unit = "nx_cal_publish.service";
};
};
systemd.services."nx_cal_publish" = {
script = with pkgs; let
nx_cal_publish = (writers.writePython3Bin "nx_cal_publish" {
libraries = with python3Packages; [
ical
ics
requests
dateutils
];
flakeIgnore = [ "E302" "E305" "E226" "E501" ];
} /*python */ ''
import pytz
import os
from ics import Calendar, Event
from ics.grammar.parse import ContentLine
from dateutil.rrule import rrulestr
from ics.event import datetime, timedelta
def combine_ics_from_directories(directories, output_file):
"""
Combine all .ics events from a list of directories into one .ics file, supporting recurring events.
:param directories: List of directories containing .ics files.
:param output_file: Path to the output .ics file.
"""
combined_calendar = Calendar()
for directory in directories:
if not os.path.exists(directory):
print(f"Directory '{directory}' does not exist. Skipping.")
continue
for filename in os.listdir(directory):
if filename.endswith(".ics"):
file_path = os.path.join(directory, filename)
try:
with open(file_path, 'r') as file:
calendar = Calendar(file.read())
for event in calendar.events:
# Handle recurring events
rrule_line = None
for line in event.extra:
if isinstance(line, ContentLine) and line.name == "RRULE":
rrule_line = line
break
if rrule_line:
# Convert UNTIL to UTC if DTSTART is timezone-aware
rrule_params = rrule_line.value.split(";")
rrule_dict = {}
for param in rrule_params:
key, value = param.split("=")
rrule_dict[key] = value
if "UNTIL" in rrule_dict and event.begin.tzinfo:
until = datetime.fromisoformat(rrule_dict["UNTIL"])
if until.tzinfo is None: # If UNTIL is naive, make it UTC
until = until.astimezone(pytz.UTC)
rrule_dict["UNTIL"] = until.astimezone(pytz.UTC).strftime("%Y%m%dT%H%M%SZ")
# Reconstruct RRULE string
rrule_fixed = ";".join(f"{key}={value}" for key, value in rrule_dict.items())
rrule = rrulestr(rrule_fixed, dtstart=event.begin.astimezone(pytz.timezone('CET')))
# Expand recurring events and filter based on the date
for occurrence in rrule:
notTooOld = occurrence.date() >= (datetime.now().astimezone(pytz.UTC) - timedelta(days=1)).date()
notTooFuturisic = occurrence.date() < (datetime.now().astimezone(pytz.UTC) + timedelta(days=60)).date()
if notTooOld and notTooFuturisic:
new_event = Event(
name="",
begin=occurrence,
end=occurrence + (event.end - event.begin),
transparent=event.transparent or True,
)
combined_calendar.events.add(new_event)
else:
# Regular events, directly add if within date range
if event.begin.astimezone(pytz.timezone('CET')).date() >= (datetime.now().astimezone(pytz.timezone('CET')) - timedelta(days=1)).date():
new_event = Event(
name="",
begin=event.begin,
end=event.end,
transparent=event.transparent or True,
)
combined_calendar.events.add(new_event)
except Exception as e:
print(f"Error reading file '{file_path}': {e}")
exit(1)
try:
with open(output_file, 'w') as file:
file.writelines(combined_calendar.serialize_iter())
print(f"Combined .ics file saved to '{output_file}'")
except Exception as e:
print(f"Error saving combined .ics file: {e}")
if __name__ == "__main__":
# List of directories containing .ics files
DIRECTORIES = [
"${radicale-root}/collections/collection-root/${hyper.user}/preservation",
"${radicale-root}/collections/collection-root/${hyper.user}/effort",
"${radicale-root}/collections/collection-root/${hyper.user}/experience",
"${radicale-root}/collections/collection-root/${hyper.user}/exposure",
"${radicale-root}/collections/collection-root/${hyper.user}/engagement",
]
# Path to the output .ics file
OUTPUT_FILE = "${web-root}/schedule.ics"
combine_ics_from_directories(DIRECTORIES, OUTPUT_FILE)
'');
in ''
${nx_cal_publish}/bin/nx_cal_publish
'';
serviceConfig = {
Type = "oneshot";
User = hyper.user;
};
};
}

View File

@@ -0,0 +1,11 @@
{ ... }:
{
programs.dconf.enable = true;
services = {
gnome = {
evolution-data-server.enable = true; # optional to use google/nextcloud calendar
gnome-online-accounts.enable = true; # optional to use google/nextcloud calendar
gnome-keyring.enable = true;
};
};
}

0
system-modules/davmail.nix Executable file → Normal file
View File

4
system-modules/dm.nix Executable file → Normal file
View File

@@ -1,11 +1,11 @@
{ pkgs, user, ... }:
{ pkgs, hyper, ... }:
{
services.greetd = {
enable = true;
settings = rec {
hyprland = {
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --remember --cmd Hyprland --remember-user-session --window-padding 5";
user = user;
user = hyper.user;
};
default_session = hyprland;
vt = 2;

4
system-modules/docker.nix Executable file → Normal file
View File

@@ -1,4 +1,4 @@
{ config, pkgs, user, ... }:
{ pkgs, hyper, ... }:
{
environment.systemPackages = with pkgs; [
@@ -12,7 +12,7 @@
# vpnKitMaxPortIdleTime = 0;
# };
};
users.users."${user}".extraGroups = [ "docker" ];
users.users."${hyper.user}".extraGroups = [ "docker" ];
networking.firewall.allowedTCPPorts = [
80
443

View File

@@ -1,4 +1,4 @@
{ pkgs, pkgs-unstable, ... }:
{ pkgs, ... }:
{
# i18n.inputMethod = {
# type = "fcitx5";
@@ -10,7 +10,8 @@
# ];
# };
i18n.inputMethod = {
enabled = "fcitx5";
enable = true;
type = "fcitx5";
fcitx5.waylandFrontend = true;
fcitx5.addons = with pkgs; [
fcitx5-gtk # alternatively, kdePackages.fcitx5-qt

View File

@@ -1,20 +1,20 @@
{
pkgs,
# pkgs-unstable,
rice,
...
}:
{ pkgs, rice, ... }:
{
fonts.packages = with pkgs; [
noto-fonts
noto-fonts-cjk
noto-fonts-cjk-sans
noto-fonts-cjk-serif
noto-fonts-emoji
newcomputermodern
atkinson-hyperlegible
(nerdfonts.override { fonts = [ "JetBrainsMono" ]; })
nerd-fonts.jetbrains-mono
nerd-fonts.zed-mono
nerd-fonts.profont
nerd-fonts.proggy-clean-tt
nerd-fonts.heavy-data
nerd-fonts._3270
] ++ (with rice.font; [
base.package
code.package
# ]) ++ (with pkgs-unstable; [
]);
}

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