Compare commits

...

281 Commits

Author SHA1 Message Date
Lennart J. Kurzweg (Nx2)
60fab5ff9a Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2026-05-26 19:20:24 +02:00
Lennart J. Kurzweg (Nx2)
1a662d9acf xps colors 2026-05-26 19:20:23 +02:00
Lennart J. Kurzweg (Nx2)
6b7f4459fc no headphone jack static 2026-05-26 19:19:58 +02:00
Lennart J. Kurzweg (Nx2)
7f1e43699b spotifi-cli rice fix 2026-05-26 19:19:41 +02:00
Lennart J. Kurzweg (Nx2)
1acf1773d9 xps hyprland shenanigans 2026-05-26 19:19:27 +02:00
Lennart J. Kurzweg (Nx2)
e97e9b62b0 chatterino channel update 2026-05-26 19:18:40 +02:00
Lennart J. Kurzweg (Nx2)
5211c953a3 gemini rice 2026-05-26 19:18:33 +02:00
Lennart J. Kurzweg (Nx2)
e054ee5be4 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2026-05-26 16:22:13 +02:00
Lennart J. Kurzweg (Nx2)
aefa5a48bb chatterino token 2026-05-26 16:21:14 +02:00
Lennart J. Kurzweg (Nx2)
be40aca44b Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2026-05-26 14:32:30 +02:00
Lennart J. Kurzweg (Nx2)
8228bd1f72 no simple sign up nextcloud (working?) 2026-05-26 14:32:15 +02:00
Lennart J. Kurzweg (Nx2)
63af2c4f4e stay up wifi daemon 2026-05-26 14:31:55 +02:00
Lennart J. Kurzweg (Nx2)
6a5863ee52 flake bump 2026-05-26 14:31:28 +02:00
Lennart J. Kurzweg (Nx2)
c28c40c972 rename emails 2026-05-26 14:31:22 +02:00
Lennart J. Kurzweg (Nx2)
e0bd80722c Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2026-05-26 12:46:24 +02:00
Lennart J. Kurzweg (Nx2)
6157666be9 spicetify 2026-05-26 12:46:05 +02:00
Lennart J. Kurzweg (Nx2)
07782f60d1 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2026-05-13 23:58:58 +02:00
Lennart J. Kurzweg (Nx2)
2fbf06da7a nextcloud mail 2026-05-13 23:58:51 +02:00
Lennart J. Kurzweg (Nx2)
47cc5c881c nmap 2026-05-13 23:57:45 +02:00
Lennart J. Kurzweg (Nx2)
f757727858 tuda vpn 2026-05-13 23:57:32 +02:00
Lennart J. Kurzweg (Nx2)
bf074967e5 tuda-vpn (not working?) 2026-05-13 16:08:13 +02:00
Lennart J. Kurzweg (Nx2)
674c83d3ae syntax fix 2026-05-13 16:08:02 +02:00
Lennart J. Kurzweg (Nx2)
ee46aca691 split email, contact, thunderbird 2026-05-12 18:22:42 +02:00
Lennart J. Kurzweg (Nx2)
fa89fe57b0 remove bcrypt 2026-05-10 19:37:00 +02:00
Lennart J. Kurzweg (Nx2)
f7306130ed fix firefox transparency 2026-05-04 14:57:50 +02:00
Lennart J. Kurzweg (Nx2)
dc3f30d94c Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2026-05-04 13:45:12 +02:00
Lennart J. Kurzweg (Nx2)
f7fb8121fd maddy conf 2026-05-04 13:45:11 +02:00
Lennart J. Kurzweg (Nx2)
f4ae5eae27 flake bump 2026-05-04 12:23:08 +02:00
Lennart J. Kurzweg (Nx2)
5fe9578d72 nx2s-email-relay hostname fix 2026-05-04 12:23:03 +02:00
Lennart J. Kurzweg (Nx2)
fc9122be42 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2026-05-04 03:30:45 +02:00
Lennart J. Kurzweg (Nx2)
6ab89d09b7 email smtp2go&google relay 2 2026-05-04 03:30:43 +02:00
Lennart J. Kurzweg (Nx2)
b32a79bdac email smtp2go&google relay 1 2026-05-04 03:30:01 +02:00
Lennart J. Kurzweg (Nx2)
fd5e639b17 fix yazi search 2026-05-03 22:13:34 +02:00
Lennart J. Kurzweg (Nx2)
419bd8fc12 enable nixos-cuda again 2026-05-03 15:20:33 +02:00
Lennart J. Kurzweg (Nx2)
1b18252813 caldav_event to nextcloud 2026-05-03 15:19:56 +02:00
Lennart J. Kurzweg (Nx2)
245fdbb60f Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2026-05-03 00:00:08 +02:00
Lennart J. Kurzweg (Nx2)
6ab13007de nextcloud 2026-05-03 00:00:07 +02:00
Lennart J. Kurzweg (Nx2)
789ed570cf update to nextcloud calendar 2026-05-02 23:59:30 +02:00
Lennart J. Kurzweg (Nx2)
901839dcd1 unstable streamlink 2026-05-02 23:58:40 +02:00
Lennart J. Kurzweg (Nx2)
ae9ae15f3a davfs 2026-05-02 23:58:31 +02:00
Lennart J. Kurzweg (Nx2)
b17f7d95b6 nixos-cuda 502 2026-05-02 23:58:21 +02:00
Lennart J. Kurzweg (Nx2)
b3a0e2914b dm matrix 2026-05-02 23:58:05 +02:00
Lennart J. Kurzweg (Nx2)
9ab9034a02 fix calendar username 2026-04-29 11:44:54 +02:00
Lennart J. Kurzweg (Nx2)
b2a322b269 yazi typo fix 2026-04-24 20:25:32 +02:00
Lennart J. Kurzweg (Nx2)
27d47179ef calendar fix 2026-04-24 20:23:12 +02:00
Lennart J. Kurzweg (Nx2)
ea1fd6a81f flake bump 2026-04-24 20:00:39 +02:00
Lennart J. Kurzweg (Nx2)
2ae3ec3b9b Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2026-04-24 19:58:47 +02:00
Lennart J. Kurzweg (Nx2)
9ccabedbb2 nxcaldav 2026-04-24 19:58:21 +02:00
Lennart J. Kurzweg (Nx2)
5cc13c9b9a shell only gemini-cli 2026-04-24 19:57:45 +02:00
Lennart J. Kurzweg (Nx2)
ea608bd665 gemini chrome 2026-04-24 19:56:37 +02:00
Lennart J. Kurzweg (Nx2)
e6fc668413 calendar to nxc 2026-04-24 19:56:23 +02:00
Lennart J. Kurzweg (Nx2)
12714021b6 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2026-04-22 08:38:34 +00:00
Lennart J. Kurzweg (Nx2)
23b1e6f8cc gemini in shell-only 2026-04-22 08:38:22 +00:00
Lennart J. Kurzweg (Nx2)
375d42d0ed Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2026-04-18 20:42:39 +02:00
Lennart J. Kurzweg (Nx2)
8e5da6e966 chatterino verison 2026-04-18 20:42:27 +02:00
Lennart J. Kurzweg (Nx2)
62d7d91dc0 sort fonts 2026-04-18 20:42:21 +02:00
Lennart J. Kurzweg (Nx2)
4a977f7076 flake bump 2026-04-18 20:42:06 +02:00
Lennart J. Kurzweg (Nx2)
3f7877d5b8 flake bump 2026-04-14 00:47:00 +02:00
Lennart J. Kurzweg (Nx2)
d7a1f55a34 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2026-04-13 22:44:57 +02:00
Lennart J. Kurzweg (Nx2)
a2f5e9828c no zoom 2026-04-13 22:44:33 +02:00
Lennart J. Kurzweg (Nx2)
fa98f9eb2e fixed now (tm) 2026-03-30 21:49:55 +02:00
Lennart J. Kurzweg (Nx2)
2ba41d37fb email fix 2026-03-30 18:02:24 +02:00
Lennart J. Kurzweg (Nx2)
ba1a5a5c10 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2026-03-30 15:00:18 +02:00
Lennart J. Kurzweg (Nx2)
ba1bce57c5 nx2site email 2026-03-30 14:56:45 +02:00
Lennart J. Kurzweg (Nx2)
4951ee898d xps displays 2026-03-30 14:56:38 +02:00
Lennart J. Kurzweg (Nx2)
2e02069629 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2026-03-23 14:29:31 +01:00
Lennart J. Kurzweg (Nx2)
9108c8689a flake bump 2026-03-23 14:29:27 +01:00
Lennart J. Kurzweg (Nx2)
b6853648d6 nxace no dm 2026-03-23 14:29:20 +01:00
Lennart J. Kurzweg (Nx2)
f77d0d2301 nxcaldav (manual for now) 2026-03-23 14:29:08 +01:00
Lennart J. Kurzweg (Nx2)
bfa820a82a gitea push create (still doesnt work) 2026-03-23 14:27:16 +01:00
Lennart J. Kurzweg (Nx2)
113931d088 o7 lr 2026-03-23 14:26:56 +01:00
Lennart J. Kurzweg (Nx2)
1651f7debf fontforge 2026-03-23 14:25:38 +01:00
Lennart J. Kurzweg (Nx2)
bc0d1eed79 unstable chatterino 2026-03-23 14:25:32 +01:00
Lennart J. Kurzweg (Nx2)
16ca72ff24 ly animation 2026-03-23 14:25:17 +01:00
Lennart J. Kurzweg (Nx2)
b977aea25f simple postgres 2026-03-23 14:24:03 +01:00
Lennart J. Kurzweg (Nx2)
8745f42f80 North Colors 2026-03-10 01:51:54 +01:00
Lennart J. Kurzweg (Nx2)
f3e4b617ff hyprland update (vaxerski hat lange weile) 2026-03-10 01:50:54 +01:00
Lennart J. Kurzweg (Nx2)
014a29a7e0 helix fixes 2026-03-10 01:49:51 +01:00
Lennart J. Kurzweg (Nx2)
1e2a0fd591 unstable gemnini 2026-03-10 01:49:19 +01:00
Lennart J. Kurzweg (Nx2)
5a24fc9fda Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2026-03-03 16:48:04 +01:00
Lennart J. Kurzweg (Nx2)
958b1d71ad flake bump 2026-03-03 16:47:57 +01:00
Lennart J. Kurzweg (Nx2)
fe70e6c1e3 hyprland resizing 2026-03-03 16:46:24 +01:00
Lennart J. Kurzweg (Nx2)
e7b4b5fc3a pdftk 2026-03-02 19:05:28 +01:00
Lennart J. Kurzweg (Nx2)
5fafc9e8a3 North colors 2026-02-27 19:03:51 +01:00
Lennart J. Kurzweg (Nx2)
78fb91c311 markdown toggle language tool 2026-02-27 19:02:57 +01:00
Lennart J. Kurzweg (Nx2)
bf67e7d396 update caldav 2026-02-27 19:02:29 +01:00
Lennart J. Kurzweg (Nx2)
89428b966b hyprland shaders keys 2026-02-27 19:02:22 +01:00
Lennart J. Kurzweg (Nx2)
809ce39ad3 NxNORTH tty res fix 2026-02-25 12:59:43 +01:00
Lennart J. Kurzweg (Nx2)
bcd04b836a yazi smart open 2026-02-25 12:59:33 +01:00
Lennart J. Kurzweg (Nx2)
1d23337ed1 typst with language tool 2026-02-25 12:59:15 +01:00
Lennart J. Kurzweg (Nx2)
70c8dfd953 helix use jumplist 2026-02-25 12:59:02 +01:00
Lennart J. Kurzweg (Nx2)
ce690c3cad notebooklm rice 2026-02-25 12:58:46 +01:00
Lennart J. Kurzweg (Nx2)
18719bdc2e Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2026-02-23 18:41:46 +01:00
Lennart J. Kurzweg (Nx2)
68a6a18fcf xps colors 2026-02-23 18:41:35 +01:00
Lennart J. Kurzweg (Nx2)
7c6907f077 fix hypr gestures 2026-02-23 18:41:30 +01:00
Lennart J. Kurzweg (Nx2)
db6dc48ebf switch to ly 2026-02-23 18:40:55 +01:00
Lennart J. Kurzweg (Nx2)
ae6b0e483f tuda vpn 2026-02-23 18:40:35 +01:00
Lennart J. Kurzweg (Nx2)
f54754c792 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2026-02-10 08:47:43 +00:00
Lennart J. Kurzweg (Nx2)
30a3308b6b rename flg to nxflg 2026-02-10 08:46:48 +00:00
Lennart J. Kurzweg (Nx2)
39c03c6c62 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2026-02-06 13:26:33 +01:00
Lennart J. Kurzweg (Nx2)
ee28eadb3b fix typo 2026-02-06 13:26:31 +01:00
Lennart J. Kurzweg (Nx2)
edbc5c0393 fix terminal file chooser (tm2) 2026-02-03 13:28:30 +01:00
Lennart J. Kurzweg (Nx2)
68ec133681 logitiech solaar 2026-02-03 13:28:20 +01:00
Lennart J. Kurzweg (Nx2)
87292666b1 hyprland shader (deactivated) 2026-02-03 13:28:09 +01:00
Lennart J. Kurzweg (Nx2)
7d1ca1d174 flake bump 2026-02-01 21:52:27 +01:00
Lennart J. Kurzweg (Nx2)
3fcf02646a Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2026-02-01 21:51:36 +01:00
Lennart J. Kurzweg (Nx2)
485a554e10 flake bump 2026-02-01 21:51:15 +01:00
Lennart J. Kurzweg (Nx2)
f02686b687 delete ralley 2026-02-01 21:51:10 +01:00
Lennart J. Kurzweg (Nx2)
070695fa4d baikal (deactivated) 2026-02-01 21:50:49 +01:00
Lennart J. Kurzweg (Nx2)
951d03e0b7 unstable yt-dlp 2026-02-01 21:49:19 +01:00
Lennart J. Kurzweg (Nx2)
0dd8e27fcb flake bump 2026-01-30 12:40:29 +01:00
Lennart J. Kurzweg (Nx2)
66ef93c612 clone yazi 2026-01-27 16:45:54 +01:00
Lennart J. Kurzweg (Nx2)
627604d3f7 north color 2026-01-27 15:53:32 +01:00
Lennart J. Kurzweg (Nx2)
2598b7562f TERMINAL var 2026-01-27 15:53:27 +01:00
Lennart J. Kurzweg (Nx2)
b1c16c99ec better yazi 2026-01-27 15:53:19 +01:00
Lennart J. Kurzweg (Nx2)
47cce625be better helix 2026-01-27 15:53:14 +01:00
Lennart J. Kurzweg (Nx2)
9a2eeb694e tab text color fix 2026-01-27 15:52:57 +01:00
Lennart J. Kurzweg (Nx2)
3b84087084 reddit search chrome 2026-01-27 15:52:49 +01:00
Lennart J. Kurzweg (Nx2)
ccff2e66bb chatterino token 2026-01-27 15:52:22 +01:00
Lennart J. Kurzweg (Nx2)
cad9c3e5f5 pretty ssh nxace 2026-01-21 19:13:27 +01:00
Lennart J. Kurzweg (Nx2)
b913c05267 nixld 2026-01-21 19:13:09 +01:00
Lennart J. Kurzweg (Nx2)
21a1efa978 nicer yazi 2026-01-21 19:13:01 +01:00
Lennart J. Kurzweg (Nx2)
f9ea18fd81 nicer helix 2026-01-21 19:12:11 +01:00
Lennart J. Kurzweg (Nx2)
def172c79d ghostts extend 2026-01-21 19:12:01 +01:00
Lennart J. Kurzweg (Nx2)
ec2ea43523 north colors 2026-01-21 19:11:20 +01:00
Lennart J. Kurzweg (Nx2)
03e3f877a6 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2026-01-17 22:48:45 +01:00
Lennart J. Kurzweg (Nx2)
28cd7a1ac3 north colors 2026-01-17 22:47:57 +01:00
Lennart J. Kurzweg (Nx2)
03a53b006b yazi in ~ 2026-01-17 22:47:53 +01:00
Lennart J. Kurzweg (Nx2)
2bac83ec14 wsl fixes 2026-01-17 19:17:04 +00:00
Lennart J. Kurzweg (Nx2)
0953c65a9f Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2026-01-17 17:25:23 +00:00
Lennart J. Kurzweg (Nx2)
02231f2693 wsl fix 2026-01-17 17:25:14 +00:00
Lennart J. Kurzweg (Nx2)
48f246429b uv 2026-01-17 17:24:56 +00:00
Lennart J. Kurzweg (Nx2)
bff8042d85 asciinema 2026-01-17 17:24:51 +00:00
Lennart J. Kurzweg (Nx2)
040f988530 lec 2026-01-17 15:00:14 +01:00
Lennart J. Kurzweg (Nx2)
3be3a7a80a cooler yazi 2026-01-17 14:59:12 +01:00
Lennart J. Kurzweg (Nx2)
8a5604e87b fix termfilechooser (tm) 2026-01-17 14:35:26 +01:00
Lennart J. Kurzweg (Nx2)
336eadc732 north colors 2026-01-15 17:30:46 +01:00
Lennart J. Kurzweg (Nx2)
511d46f527 yazi theme fix 2026-01-15 17:30:35 +01:00
Lennart J. Kurzweg (Nx2)
42685cce35 fix refactor for north 2026-01-15 16:09:56 +01:00
Lennart J. Kurzweg (Nx2)
bb754e99f7 fix termfilechooser 2026-01-15 16:09:11 +01:00
Lennart J. Kurzweg (Nx2)
4f57d39171 caldav-event 1line 2026-01-15 16:08:03 +01:00
Lennart J. Kurzweg (Nx2)
4ed036b5d0 more refactoring 2026-01-13 15:06:37 +01:00
Lennart J. Kurzweg (Nx2)
6d8a7e7194 mf ace 2026-01-13 00:52:38 +01:00
Lennart J. Kurzweg (Nx2)
f2dae2ee81 massive refactor 2026-01-13 00:35:27 +01:00
Lennart J. Kurzweg (Nx2)
b23cc9ce7c LEC 2026-01-12 03:01:11 +01:00
Lennart J. Kurzweg (Nx2)
f25ff57b5b nxace no element 2026-01-12 02:58:36 +01:00
Lennart J. Kurzweg (Nx2)
1403c57356 update python lsp 2026-01-12 02:56:14 +01:00
Lennart J. Kurzweg (Nx2)
fe2a7569c3 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2026-01-12 02:42:26 +01:00
Lennart J. Kurzweg (Nx2)
66977c7f04 update chatterino version 2026-01-12 02:38:32 +01:00
Lennart J. Kurzweg (Nx2)
879239cfd0 fix qtwebengine problem 2026-01-12 02:37:50 +01:00
Lennart J. Kurzweg (Nx2)
9ce989abe1 helix color adjustments 2026-01-12 02:36:57 +01:00
Lennart J. Kurzweg (Nx2)
eca9490eea Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2026-01-04 14:37:01 +01:00
Lennart J. Kurzweg (Nx2)
c41e9f4f17 qtwebengine is cooked 2026-01-04 14:36:56 +01:00
Lennart J. Kurzweg (Nx2)
adc912624d nxace 25.11 fixes 2026-01-04 14:36:21 +01:00
Lennart J. Kurzweg (Nx2)
4bddec49af mpv reset hotkey 2026-01-04 14:35:56 +01:00
Lennart J. Kurzweg (Nx2)
b89f7960df libreoffice 2026-01-04 14:35:18 +01:00
Lennart J. Kurzweg (Nx2)
6c5e125452 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2026-01-04 14:24:59 +01:00
Lennart J. Kurzweg (Nx2)
59bde2cc37 email update 2026-01-04 14:24:49 +01:00
Lennart J. Kurzweg (Nx2)
4d2f244d4b mynixos 2026-01-04 14:24:19 +01:00
Lennart J. Kurzweg (Nx2)
f03e92a7ce ssh key order fix 2025-12-03 14:14:30 +01:00
Lennart J. Kurzweg (Nx2)
1e20d645eb 25.11 fixes 2025-12-03 14:13:17 +01:00
Lennart J. Kurzweg (Nx2)
edda49ee66 25.11 2025-12-03 01:59:12 +01:00
Lennart J. Kurzweg (Nx2)
5d65da4fca Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-11-25 15:03:08 +01:00
Lennart J. Kurzweg (Nx2)
9914f62871 rofi selected readability 2025-11-25 15:02:59 +01:00
Lennart J. Kurzweg (Nx2)
ff91701431 dcs fix 2025-11-24 09:31:15 +00:00
Lennart J. Kurzweg (Nx2)
f49d802bc2 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-11-24 09:04:53 +00:00
Lennart J. Kurzweg (Nx2)
0f83584124 dcs ssh 2025-11-24 09:04:11 +00:00
Lennart J. Kurzweg (Nx2)
744688e2a5 yazi fix 2025-11-23 23:29:27 +01:00
Lennart J. Kurzweg (Nx2)
47b0e9125a yazi fix 2025-11-23 23:11:17 +01:00
Lennart J. Kurzweg (Nx2)
8cda4ed98a flake bump 2025-11-23 23:10:55 +01:00
Lennart J. Kurzweg (Nx2)
8683e608e6 more screenshot options 2025-11-23 23:10:48 +01:00
Lennart J. Kurzweg (Nx2)
3603fbdf41 spash change 2025-11-23 23:07:16 +01:00
Lennart J. Kurzweg (Nx2)
43c8782c6c new chatterrino token 2025-11-23 18:01:56 +01:00
Lennart J. Kurzweg (Nx2)
fe89a049bd antigarvity + flake bump 2025-11-23 18:01:47 +01:00
Lennart J. Kurzweg (Nx2)
5bd5c97e4e Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-11-19 12:54:46 +01:00
Lennart J. Kurzweg (Nx2)
1b8155c9c9 no hyprland overview 2025-11-18 23:21:32 +01:00
Lennart J. Kurzweg (Nx2)
79b2493f23 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-11-18 18:53:57 +01:00
Lennart J. Kurzweg (Nx2)
3a6e1ce3c6 rofi not fully transparent 2025-11-18 16:43:08 +01:00
Lennart J. Kurzweg (Nx2)
c621faf09a games syntac fix 2025-11-18 16:34:35 +01:00
Lennart J. Kurzweg (Nx2)
51d7589975 more games 2025-11-18 16:30:58 +01:00
Lennart J. Kurzweg (Nx2)
4761258eed fix hyper pkgs version 2025-11-18 16:14:27 +01:00
Lennart J. Kurzweg (Nx2)
487f3ff6f0 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-11-18 16:05:42 +01:00
Lennart J. Kurzweg (Nx2)
f1f591368d flake bump 2025-11-18 16:01:21 +01:00
Lennart J. Kurzweg (Nx2)
ed74ebac4e calendar update 2025-11-18 16:01:05 +01:00
Lennart J. Kurzweg (Nx2)
bfae6a5800 error proof caldav_event 2025-11-18 16:00:48 +01:00
Lennart J. Kurzweg (Nx2)
1115e3e4a4 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-11-18 15:58:32 +01:00
Lennart J. Kurzweg (Nx2)
3b48f4d623 s23u ssh key 2025-11-18 15:58:30 +01:00
Lennart J. Kurzweg (Nx2)
aa62213ef6 pasue lec 2025-11-18 15:58:17 +01:00
Lennart J. Kurzweg (Nx2)
28f3fc54c9 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-11-18 15:09:19 +01:00
Lennart J. Kurzweg (Nx2)
ea753c0ebb fix nxf 2025-11-18 15:09:10 +01:00
Lennart J. Kurzweg (Nx2)
79851fa223 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-11-18 14:43:28 +01:00
Lennart J. Kurzweg (Nx2)
f35d0efada Merge branch 'nod' 2025-11-18 12:19:34 +01:00
Lennart J. Kurzweg (Nx2)
c39663adee no autoname workspaces 2025-11-18 12:18:22 +01:00
Lennart J. Kurzweg (Nx2)
8057a6f2ee hyprland better blur 2025-11-18 12:17:57 +01:00
Lennart J. Kurzweg (Nx2)
e73b7333fc Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles into nod 2025-11-11 00:44:25 +01:00
Lennart J. Kurzweg (Nx2)
fcfc125373 nod 2025-11-11 00:43:22 +01:00
Lennart J. Kurzweg (Nx2)
3418cfd8f3 cursor 2025-11-06 19:31:43 +01:00
Lennart J. Kurzweg (Nx2)
68ac093e4a Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-11-06 00:42:28 +01:00
Lennart J. Kurzweg (Nx2)
8f7d685a8b rofi refactor 2025-11-06 00:42:19 +01:00
Lennart J. Kurzweg (Nx2)
851846197d xps dynamic monitors 2025-11-06 00:41:05 +01:00
Lennart J. Kurzweg (Nx2)
2585c76039 audacity 2025-11-02 20:58:02 +01:00
Lennart J. Kurzweg (Nx2)
04f10a4afd thunderbird paste event window dimensions 2025-11-02 20:57:51 +01:00
Lennart J. Kurzweg (Nx2)
651458875c Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-10-30 09:28:31 +01:00
Lennart J. Kurzweg (Nx2)
9d04a09de8 fix xdg-desktop-portal-termfile-chooser 2025-10-30 09:28:25 +01:00
Lennart J. Kurzweg (Nx2)
0eaa052cd5 pinned special border 2025-10-27 13:45:31 +01:00
Lennart J. Kurzweg (Nx2)
64a54b2cd6 switch to lts on xps 2025-10-27 13:43:26 +01:00
Lennart J. Kurzweg (Nx2)
55a22804c5 disable health remonder 2025-10-27 13:43:14 +01:00
Lennart J. Kurzweg (Nx2)
d85386bf9c Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-10-24 12:40:16 +02:00
Lennart J. Kurzweg (Nx2)
1698d0f851 flake bump 2025-10-24 12:39:30 +02:00
Lennart J. Kurzweg (Nx2)
18d93e6b0c dedicated github ssh config host 2025-10-24 12:39:26 +02:00
Lennart J. Kurzweg (Nx2)
91020c0072 trying out other dms 2025-10-24 12:26:05 +02:00
Lennart J. Kurzweg (Nx2)
e6c5cd5ead trying to get boot resolution full screen 2025-10-24 12:25:31 +02:00
Lennart J. Kurzweg (Nx2)
068fd19353 no unused hotkeys 2025-10-24 12:24:53 +02:00
Lennart J. Kurzweg (Nx2)
6f7449839d typst swap lsps 2025-10-24 12:24:40 +02:00
Lennart J. Kurzweg (Nx2)
9e2eb410ab go home-manager module 2025-10-24 12:24:29 +02:00
Lennart J. Kurzweg (Nx2)
fb974329e7 some packages 2025-10-24 12:24:15 +02:00
Lennart J. Kurzweg (Nx2)
7a70d7dae3 caldavevent '' 2025-10-24 12:24:01 +02:00
Lennart J. Kurzweg (Nx2)
e7c1c255bc Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles into nod 2025-10-21 23:51:00 +02:00
Lennart J. Kurzweg (Nx2)
52fe355b0a cleanup color pallete 2025-10-21 15:23:59 +02:00
Lennart J. Kurzweg (Nx2)
29a917ed37 worlds calendar 2025-10-21 15:23:22 +02:00
Lennart J. Kurzweg (Nx2)
7655e7b3bd helix hints 2025-10-21 15:23:12 +02:00
Lennart J. Kurzweg (Nx2)
858a8b77ec tuda rust labs 2025-10-21 15:22:55 +02:00
Lennart J. Kurzweg (Nx2)
ba199f9568 rust 2025-10-21 15:22:31 +02:00
Lennart J. Kurzweg (Nx2)
5f3a3a6f30 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-10-17 12:48:02 +02:00
Lennart J. Kurzweg (Nx2)
9472550aaa north sops 2025-10-17 12:45:01 +02:00
Lennart J. Kurzweg (Nx2)
1b7fe7f7ca random changes 2025-10-17 12:44:51 +02:00
Lennart J. Kurzweg (Nx2)
b64abba7e5 typst 2025-10-17 12:44:14 +02:00
Lennart J. Kurzweg (Nx2)
df06425803 fish nxf indent 2025-10-17 12:43:51 +02:00
Lennart J. Kurzweg (Nx2)
6befb22a59 worlds calendar 2025-10-17 12:43:44 +02:00
Lennart J. Kurzweg (Nx2)
b4cd70b5f6 fix hyprpanel notifications 2025-10-17 12:43:36 +02:00
Lennart J. Kurzweg (Nx2)
78975da970 ssh * identities 2025-10-13 14:38:06 +02:00
Lennart J. Kurzweg (Nx2)
90c093fcef reddit rice 2025-10-13 14:30:34 +02:00
Lennart J. Kurzweg (Nx2)
40eefbf948 fix nxfetch 2025-10-09 15:32:10 +02:00
Lennart J. Kurzweg (Nx2)
042e8c7ee7 further gpg-ssh edits 2025-10-07 16:35:42 +00:00
Lennart J. Kurzweg (Nx2)
685a34fcbb NxWSL -> NxDCS 2025-10-07 16:35:06 +00:00
Lennart J. Kurzweg (Nx2)
812555c467 more ssh keys allowed 2025-10-07 17:31:40 +02:00
Lennart J. Kurzweg (Nx2)
ffddb4773b ssh-agent + port fix 2025-10-07 17:31:27 +02:00
Lennart J. Kurzweg (Nx2)
98c0a26209 no gpg-agent 2025-10-07 17:31:05 +02:00
Lennart J. Kurzweg (Nx2)
e25ad7891d cleanup 2025-10-07 17:30:46 +02:00
Lennart J. Kurzweg (Nx2)
470922dce2 ace colors 2025-10-05 01:51:11 +02:00
Lennart J. Kurzweg (Nx2)
b0cb61f05e hw ace fix 2025-10-05 01:51:05 +02:00
Lennart J. Kurzweg (Nx2)
e8373d6293 no trace 2025-10-05 01:50:49 +02:00
Lennart J. Kurzweg (Nx2)
ff5de39a19 all use vault sops age 2025-10-05 01:50:43 +02:00
Lennart J. Kurzweg (Nx2)
1fc8b2a7cb all use vault gpg 2025-10-05 01:48:18 +02:00
Lennart J. Kurzweg (Nx2)
e19ed3ece1 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-10-05 01:21:38 +02:00
Lennart J. Kurzweg (Nx2)
4c178e57fa ssh use module 2025-10-05 00:59:05 +02:00
Lennart J. Kurzweg (Nx2)
f7de7f740d user accept xps ssh
+ refactor
2025-10-05 00:20:27 +02:00
Lennart J. Kurzweg (Nx2)
6809a6494f Crypto Change
luks for xps
ssh via ssh
sops via age
gpg backbone, but not removed
gpg-agent removed
2025-10-04 22:53:18 +02:00
Lennart J. Kurzweg (Nx2)
21fee7056a hypr.home fix 2025-10-04 22:52:06 +02:00
Lennart J. Kurzweg (Nx2)
d581209fdf Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-10-04 12:29:02 +02:00
Lennart J. Kurzweg (Nx2)
67c1f6fb25 firefox refactor + shadow fix 2025-10-04 12:09:33 +02:00
Lennart J. Kurzweg (Nx2)
c1ca5b2cf5 sleek rclone 2025-10-04 12:08:59 +02:00
Lennart J. Kurzweg (Nx2)
3818645825 more gnome base programs 2025-10-04 12:08:37 +02:00
Lennart J. Kurzweg (Nx2)
8e84355efd Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-09-30 16:29:25 +00:00
Lennart J. Kurzweg (Nx2)
f11db2239e nxf format 2025-09-30 16:29:22 +00:00
Lennart J. Kurzweg (Nx2)
ebfd72baa8 wikipedia rice 2025-09-30 00:32:13 +02:00
Lennart J. Kurzweg (Nx2)
6804f98b99 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-09-30 00:19:47 +02:00
Lennart J. Kurzweg (Nx2)
418dcad22c sops for the stuff below
oops (spotify clinet id etc)
2025-09-30 00:19:45 +02:00
Lennart J. Kurzweg (Nx2)
31925a5074 flake bump 2025-09-30 00:19:04 +02:00
Lennart J. Kurzweg (Nx2)
d3a407f1a5 more rice color pallete 2025-09-30 00:16:39 +02:00
Lennart J. Kurzweg (Nx2)
122a4c6cd8 fix hyprland opacities 2025-09-30 00:11:39 +02:00
Lennart J. Kurzweg (Nx2)
5fda879078 more rice 2025-09-30 00:10:52 +02:00
Lennart J. Kurzweg (Nx2)
7b3d4e5dfd fix yazi tab coloring 2025-09-30 00:09:22 +02:00
Lennart J. Kurzweg (Nx2)
61984aecf9 fix term file chooser 2025-09-30 00:09:11 +02:00
Lennart J. Kurzweg (Nx2)
e422234758 sops use key 13 2025-09-30 00:08:29 +02:00
Lennart J. Kurzweg (Nx2)
b7eb065442 stable opencode 2025-09-30 00:07:48 +02:00
Lennart J. Kurzweg (Nx2)
60b4066e9b lazygit define pkg 2025-09-30 00:07:37 +02:00
Lennart J. Kurzweg (Nx2)
cea416b457 chatterino update 2025-09-30 00:05:15 +02:00
Lennart J. Kurzweg (Nx2)
9d28a08cd4 spotify 2025-09-30 00:04:09 +02:00
Lennart J. Kurzweg (Nx2)
6a4f270959 playerctl 2025-09-30 00:03:30 +02:00
Lennart J. Kurzweg (Nx2)
a4d6b98b4b hyprpanel move media to the left 2025-09-30 00:03:15 +02:00
Lennart J. Kurzweg (Nx2)
ea3d4937ff hyprpanel fix caldav_event polling 2025-09-30 00:02:55 +02:00
Lennart J. Kurzweg (Nx2)
aa6962cb0d twitch oauth chatterino 2025-09-30 00:02:32 +02:00
Lennart J. Kurzweg (Nx2)
fa168f01a6 nxf robustness 2025-09-25 08:03:24 +00:00
Lennart J. Kurzweg (Nx2)
511dac22a8 wsl manages resolv.conf 2025-09-25 07:23:33 +00:00
Lennart J. Kurzweg (Nx2)
74fd62d6dc Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2025-09-25 07:20:38 +00:00
Lennart J. Kurzweg (Nx2)
d8704de501 wsl adjustments 2025-09-25 07:20:36 +00:00
Lennart J. Kurzweg (Nx2)
9f49dbbd98 souce hm-session-vars only if user 2025-09-23 15:39:06 +02:00
Lennart J. Kurzweg (Nx2)
caf48a81dd no element hotkey 2025-09-23 15:34:23 +02:00
Lennart J. Kurzweg (Nx2)
9399657469 opaque vesktop 2025-09-23 15:34:11 +02:00
Lennart J. Kurzweg (Nx2)
10a50773e1 xps monitors 2025-09-23 15:33:56 +02:00
104 changed files with 6461 additions and 1944 deletions

View File

@@ -2,6 +2,9 @@ keys:
- &users: - &users:
- &nx2 22FB2CC03DC5292AB81CF67D0AF27B383170E634 - &nx2 22FB2CC03DC5292AB81CF67D0AF27B383170E634
- &nx2_key_13 age1x2lpsennl74n0f5jl60uv2ffjcuqymzf9ap3frlz2quyv0x3hq3scnewwq - &nx2_key_13 age1x2lpsennl74n0f5jl60uv2ffjcuqymzf9ap3frlz2quyv0x3hq3scnewwq
- &xps-home age1pn4utvwpqdrswn0xurfdexn5nks9cd06jxzwg3m3m6za25ap4vxqxd0p3k
- &ace-home age1ur5zpr325cv7w0yn49azz9f48xsxd73w2sytt22yrnw5qs9r34nsv3vl05
- &north-home age1jr72q042ccgxpdgdaaev0arzc0vh3r02etv2tzhhsejl0mfaxs3q9hhlaz
- &hosts: - &hosts:
- &north age1vkqn2nars5qmpr35tac0x9vshphrq6nnzjfyxwusgn27kt3zualssv0u8e - &north age1vkqn2nars5qmpr35tac0x9vshphrq6nnzjfyxwusgn27kt3zualssv0u8e
- &xps age1jvf2lyrt2dw9jfnwgvnhmj9fmvyq8vvtepqjpkyycc5dqkkd4edqhxsgv6 - &xps age1jvf2lyrt2dw9jfnwgvnhmj9fmvyq8vvtepqjpkyycc5dqkkd4edqhxsgv6
@@ -14,5 +17,8 @@ creation_rules:
- *xps - *xps
- *ace - *ace
- *nx2_key_13 - *nx2_key_13
- *xps-home
- *ace-home
- *north-home
pgp: pgp:
- *nx2 - *nx2

View File

@@ -1,6 +1,6 @@
# ❄️ NixOS Dotfiles # ❄️ NixOS Dotfiles
![Screenshot of my desktop](splash.png) ![Screenshot of my desktop](splash.webp)
## Information ## Information

View File

@@ -1,4 +1,4 @@
{ ... }@all: with all; { { pkgs, ... }@all: with all; {
imports = [ imports = [
inputs.sops-nix.nixosModules.sops inputs.sops-nix.nixosModules.sops
./system-modules/adb.nix ./system-modules/adb.nix
@@ -9,6 +9,7 @@
./system-modules/cache.nix ./system-modules/cache.nix
./system-modules/calendar.nix ./system-modules/calendar.nix
./system-modules/dm.nix ./system-modules/dm.nix
./system-modules/davfs.nix
./system-modules/docker.nix ./system-modules/docker.nix
./system-modules/fcitx5.nix ./system-modules/fcitx5.nix
./system-modules/fonts.nix ./system-modules/fonts.nix
@@ -18,12 +19,12 @@
./system-modules/gpg.nix ./system-modules/gpg.nix
./system-modules/hardware-configuration.nix ./system-modules/hardware-configuration.nix
./system-modules/health_reminder.nix ./system-modules/health_reminder.nix
./system-modules/hsmw.nix
./system-modules/kanata.nix ./system-modules/kanata.nix
./system-modules/terminal.nix ./system-modules/terminal.nix
./system-modules/kodi.nix ./system-modules/kodi.nix
./system-modules/networking.nix ./system-modules/networking.nix
./system-modules/nixd.nix ./system-modules/nixd.nix
./system-modules/nix.nix
./system-modules/nvidia.nix ./system-modules/nvidia.nix
./system-modules/obs.nix ./system-modules/obs.nix
./system-modules/ollama.nix ./system-modules/ollama.nix
@@ -42,12 +43,24 @@
./system-modules/users.nix ./system-modules/users.nix
./system-modules/virtualisation.nix ./system-modules/virtualisation.nix
./system-modules/ydotool.nix ./system-modules/ydotool.nix
] ++ (if (hyper.host == "NxACE") then [
./system-modules/simple-postgres.nix
] ++ (if hyper.isServer then [
./system-modules/stay-up.nix
./system-modules/nx2site.nix ./system-modules/nx2site.nix
./system-modules/hugo.nix ./system-modules/hugo.nix
./system-modules/postgres.nix ./system-modules/postgres.nix
./system-modules/nx2site/proxy.nix ./system-modules/nx2site/proxy.nix
# ./system-modules/nx2site/smtp.nix
# ./system-modules/nx2site/imap.nix
# ./system-modules/nx2site/vmail.nix
./system-modules/nx2site/maddy.nix
./system-modules/nx2site/audiobookshelf.nix ./system-modules/nx2site/audiobookshelf.nix
# ./system-modules/nx2site/baikal.nix
./system-modules/nx2site/nextcloud.nix
./system-modules/nx2site/nxcaldav.nix
./system-modules/nx2site/copyparty.nix ./system-modules/nx2site/copyparty.nix
./system-modules/nx2site/gitea.nix ./system-modules/nx2site/gitea.nix
./system-modules/nx2site/open-web-calendar.nix ./system-modules/nx2site/open-web-calendar.nix
@@ -56,16 +69,16 @@
./system-modules/nx2site/paperless.nix ./system-modules/nx2site/paperless.nix
./system-modules/calendar/publish.nix ./system-modules/calendar/publish.nix
./system-modules/calendar/lec.nix ./system-modules/calendar/lec.nix
./system-modules/calendar/lr.nix # ./system-modules/calendar/lr.nix
./system-modules/calendar/dicos.nix ] else [ ]);
] else [
]);
environment.systemPackages = import ./system-modules/base-packages.nix pkgs; environment.systemPackages = import ./system-modules/base-packages.nix pkgs;
systemd.extraConfig = "DefaultLimitNOFILE=2048"; system.stateVersion = hyper.main-pkgs-version;
system.stateVersion = hyper.pkgs-version;
nix.settings.experimental-features = [ "nix-command" "flakes" ]; programs.nix-ld.enable = true;
programs.bash.shellInit = '' programs.bash.shellInit = ''
source $HOME/.nix-profile/etc/profile.d/hm-session-vars.sh if [[ "$USER" == "${hyper.user}" ]]; then
source $HOME/.nix-profile/etc/profile.d/hm-session-vars.sh
fi
''; '';
} }

View File

@@ -1,47 +1,31 @@
pkgs: rec {
predicate = pkg: (
builtins.elem (pkgs.lib.getName pkg) unfree.packages || builtins.all (
license: license.free || builtins.elem license.shortName unfree.licenses
) (if builtins.isList pkg.meta.license then pkg.meta.license else [ pkg.meta.license ])
);
unfree = {
packages = [
"antigravity"
"cursor"
"discord"
"obsidian"
"spotify"
"steam"
"steam-unwrapped"
"vscode-extension-mhutchie-git-graph"
"zoom"
"zoom-us"
{ "nvidia-x11"
unfree = [ "nvidia-settings"
"discord" ];
"spotify" licenses = [
"obsidian" "CUDA EULA"
"steam" "cuDNN EULA"
"steam-unwrapped" "cuTENSOR EULA"
"zoom-us" "NVidia OptiX EULA"
"zoom" ];
};
# since the predicate ist to be set in the flake and not in a module # insecure = [ ];
# it is impossible to make the list dynamic and respect nvidia.enable
"nvidia-x11"
"nvidia-settings"
"nvidia-persistenced"
"cudatoolkit"
"cuda-merged"
"cuda_cuobjdump"
"cuda_gdb"
"cuda_nvcc"
"cuda_nvdisasm"
"cuda_nvprune"
"cuda_cccl"
"cuda_cudart"
"cuda_cupti"
"cuda_cuxxfilt"
"cuda_nvml_dev"
"cuda_nvrtc"
"cuda_nvtx"
"cuda_profiler_api"
"cuda_sanitizer_api"
"libcublas"
"libcufft"
"libcurand"
"libcusolver"
"libnvjitlink"
"libcusparse"
"libnpp"
"vscode-extension-mhutchie-git-graph"
];
inecure = [
# "electron-25.9.0"
];
} }

View File

@@ -1,13 +1,54 @@
{ {
"base": { "NxXPS": {
"foreground": "#fefefe", "base": {
"background": "#020202" "foreground": "#fccee9",
"background": "#18010e"
},
"to_alter": {
"accent": "#f43da7",
"secondary": "#3269ff",
"tertiary": "#d744ed",
"special": "#3cf48a",
"weird": "#f4c63c"
}
}, },
"to_alter": { "NxACE": {
"accent": "#aaaaff", "base": {
"secondary": "#aaeeff", "foreground": "#dddddd",
"tertiary": "#aaffaa", "background": "#111111"
"special": "#aaffaa", },
"weird": "#ffffaa" "to_alter": {
"accent": "#ff6666",
"secondary": "#ff8866",
"tertiary": "#ff6688",
"special": "#8888ff",
"weird": "#88ff66"
}
},
"NxNORTH": {
"base": {
"foreground": "#dbe7ef",
"background": "#070d11"
},
"to_alter": {
"accent": "#72a2bf",
"secondary": "#fc3535",
"tertiary": "#83ae8a",
"special": "#bf8f71",
"weird": "#a871bf"
}
},
"NxDCS": {
"base": {
"foreground": "#ddcccc",
"background": "#080707"
},
"to_alter": {
"accent": "#d23f36",
"secondary": "#355273",
"tertiary": "#1b789b",
"special": "#66dd66",
"weird": "#dddd66"
}
} }
} }

46
flake-modules/hyper.nix Normal file
View File

@@ -0,0 +1,46 @@
let hyper-base = rec {
host = "BaseHost";
system = "x86_64-linux";
user = "nx2";
domain = "nx2.site";
home = "/home/${user}";
webroot = "/var/lib/hugo/nx2site/public";
main-pkgs-version = "25.11";
isServer = false;
isMobile = false;
isPersonal = false;
isNOD = false;
isWorkstation = false;
nvidia = {
enable = false;
prime = false;
};
}; in host: if host == "NxNORTH" then hyper-base // { inherit host;
nvidia = {
enable = true;
prime = false;
};
isPersonal = true;
isWorkstation = true;
} else if host == "NxXPS" then hyper-base // { inherit host;
nvidia = {
enable = true;
prime = true;
};
isMobile = true;
isPersonal = true;
isWorkstation = true;
} else if host == "NxACE" then hyper-base // { inherit host;
isServer = true;
} else if host == "NxDCS" then hyper-base // { inherit host;
isWorkstation = true;
isMobile = true;
} else if host == "NxS23U" then hyper-base // { inherit host;
isMobile = true;
isNOD = true;
isPersonal = true;
main-pkgs-version = "24.05";
system = "aarch64-linux";
user = "nix-on-droid";
home = "/data/data/com.termux.nix/files/home";
} else assert false "unkown host"; {}

View File

@@ -1,4 +0,0 @@
{
enable = false;
prime = false;
}

View File

@@ -0,0 +1,43 @@
lib: let
# takes in "ff0044" (no hash!) and returns { r = "ff", g = "00", b = "44" }
slice-hex = hex: with builtins; { r = substring 0 2 hex; g = substring 2 2 hex; b = substring 4 2 hex; };
# takes in "44" and returns 64
drune-to-255 = drune: with builtins; (rune-to-num (substring 0 1 drune)) * 16 + (rune-to-num (substring 1 1 drune));
num-to-drune = num: "${num-to-rune (num / 16)}${num-to-rune (num - ((num / 16) * 16))}";
# takes in "D" and returns 13
# inspiration from https://github.com/bertof/nix-rice
rune-to-num = rune: let
dict = { "0" = 0; "1" = 1; "2" = 2; "3" = 3; "4" = 4; "5" = 5; "6" = 6; "7" = 7; "8" = 8; "9" = 9; "A" = 10; "B" = 11; "C" = 12; "D" = 13; "E" = 14; "F" = 15; };
in assert(builtins.hasAttr (lib.strings.toUpper rune) dict); builtins.getAttr (lib.strings.toUpper rune) dict;
# takes in 15 and returns "F"
num-to-rune = num: let
num-string = builtins.toString num;
dict = { "0" = "0"; "1" = "1"; "2" = "2"; "3" = "3"; "4" = "4"; "5" = "5"; "6" = "6"; "7" = "7"; "8" = "8"; "9" = "9"; "10" = "A"; "11" = "B"; "12" = "C"; "13" = "D"; "14" = "E"; "15" = "F"; };
in assert(builtins.hasAttr num-string dict); builtins.getAttr num-string dict;
# Keeps num between 0 and 255
# Make sure to pass in an int not a float
cap-255 = num: (if (num>255) then 255 else if (num<0) then 0 else num);
nohash = hex: with builtins; assert((stringLength hex) == 7); substring 1 6 hex;
in {
## USEFUL FUNCTIONS
# takes in a string like "#ff0044" and returns "ff0044" symbol
inherit nohash;
# This takes in something like "#ff0044" and returns "255,0,64"
hex-to-rgb-comma-string = hex: with (slice-hex (nohash hex)); with builtins; assert(isString hex); "${toString (drune-to-255 r)},${toString (drune-to-255 g)},${toString (drune-to-255 b)}";
# This is useful if you have a float (like a transparency value) and want a drune representation of it
# So 0.0 -> "00" and 1.0 -> "FF"
float-to-drune = f: with builtins; assert(isFloat f); "${num-to-rune (floor((255*f) / 16))}${num-to-rune (floor(255*f) - (floor((255*f) / 16) * 16))}";
# Takes in hex and a float. 0.5 is +50% brightness and (-0.5) is -50% brightness.
# So "#ff0044": 0.3 -> "#ff0055"
alter-luminace-hex = hex: amount: let
color-num = with (slice-hex (nohash hex)); { r = drune-to-255 r; g = drune-to-255 g; b = drune-to-255 b; };
alter = num: (num-to-drune (cap-255 (builtins.floor ((125 * amount) + (num * (1+amount))) )));
in with color-num; "#${alter r}${alter g}${alter b}";
}

29
flake-modules/pkgs.nix Normal file
View File

@@ -0,0 +1,29 @@
inputs: simple-pkgs: hyper: let
args = {
system = hyper.system;
config = {
allowUnfreePredicate = (import ./allowed.nix simple-pkgs).predicate;
cudaSupport = hyper.nvidia.enable;
cudaForwardCompat = hyper.nvidia.enable;
};
};
overlays = [(final: prev: {
unstable = import inputs.nixpkgs-unstable args;
latest = import inputs.nixpkgs-latest args;
pkgs-version = hyper.main-pkgs-version;
})] ++ (if hyper.isServer then [
inputs.copyparty.overlays.default
] else []);
in if !hyper.isNOD then
(import inputs.nixpkgs (args // { inherit overlays; }))
else (
(import inputs.nixpkgs (args // { inherit overlays; })) // # normal as base
(import inputs.nixpkgs24 (args // { # overwrite with old versions
overlays = [(final: prev: {
pkgs-version = "24.05";
})];
}))
)

View File

@@ -1,16 +1,30 @@
pkgs: rec { pkgs: hyper: rec {
lib = import ../nxlib/ricelib.nix pkgs.lib; lib = import ./nxlib/ricelib.nix pkgs.lib;
transparency = 0.8; transparency = 0.8;
rounding = 3; rounding = 3;
gap-size = 5; gap-size = 5;
border-width = 2; border-width = 2;
color = let color = let
dark = (-0.5); dark = (-0.4);
bright = (0.5); darker = (-0.6);
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; }; bright = 0.4;
alter = let f = lib.alter-luminace-hex; in color-value: { base = color-value; dark = f color-value dark; bright = f color-value bright; }; brighter = 0.7;
alter-set = let f = lib.alter-luminace-hex; in color-name: color-value: {
base = color-value;
dark = f color-value dark;
darker = f color-value darker;
bright = f color-value bright;
brighter = f color-value brighter;
};
alter = let f = lib.alter-luminace-hex; in color-value: {
base = color-value;
dark = f color-value dark;
darker = f color-value darker;
bright = f color-value bright;
brighter = f color-value brighter;
};
# ccolor = builtins.mapAttrs alter-set (builtins.fromJSON (builtins.readFile ./colors.json)); # ccolor = builtins.mapAttrs alter-set (builtins.fromJSON (builtins.readFile ./colors.json));
ccolor = builtins.mapAttrs alter-set { ccolor = builtins.mapAttrs alter-set {
black = "#040404"; # "#111111" "#001100"; black = "#040404"; # "#111111" "#001100";
@@ -22,17 +36,13 @@ pkgs: rec {
red = "#dd4444"; # "#dd1111" "#00aa00"; red = "#dd4444"; # "#dd1111" "#00aa00";
yellow = "#dddd44"; # "#dddd11" "#ffff00"; yellow = "#dddd44"; # "#dddd11" "#ffff00";
}; };
facolor = builtins.mapAttrs alter-set (builtins.fromJSON (builtins.readFile ./colors.json)).to_alter; facolor = builtins.mapAttrs alter-set (builtins.fromJSON (builtins.readFile ./colors.json))."${hyper.host}".to_alter;
fbcolor = (builtins.fromJSON (builtins.readFile ./colors.json)).base; fbcolor = (builtins.fromJSON (builtins.readFile ./colors.json))."${hyper.host}".base;
fcolor = facolor // fbcolor; fcolor = facolor // fbcolor;
xcolor = with ccolor; with fcolor; { xcolor = with ccolor; with fcolor; {
# background = "#000000"; # background = "#000000";
# foreground = "#dddddd"; # foreground = "#dddddd";
# accent = blue; subtle = { darker = "#111111"; dark = "#444444"; base = "#777777"; bright = "#999999"; brighter = "#cccccc"; };
# secondary = cyan;
# tertiary = magenta;
# special = yellow;
# weird = green;
positive = alter "#00dd00"; positive = alter "#00dd00";
negative = alter "#dd0000"; negative = alter "#dd0000";
border = accent.base; border = accent.base;
@@ -40,13 +50,12 @@ pkgs: rec {
}; };
in ccolor // fcolor // xcolor; in ccolor // fcolor // xcolor;
font = { font = {
code = { code = rec {
name = "JetBrainsMono Nerd Font"; name = "JetBrainsMono Nerd Font";
package = pkgs.nerd-fonts.jetbrains-mono; package = pkgs.nerd-fonts.jetbrains-mono;
regular-path = "${package}/share/fonts/truetype/NerdFonts/JetBrainsMonoNerdFont-Regular.ttf";
}; };
base = { base = {
# name = "NewComputerModern08";
# package = pkgs.newcomputermodern;
name = "Atkinson Hyperlegible"; name = "Atkinson Hyperlegible";
package = pkgs.atkinson-hyperlegible-next; package = pkgs.atkinson-hyperlegible-next;
}; };

391
flake.lock generated
View File

@@ -20,11 +20,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1755946532, "lastModified": 1778857089,
"narHash": "sha256-POePremlUY5GyA1zfbtic6XLxDaQcqHN6l+bIxdT5gc=", "narHash": "sha256-TclWRW2SdFeETLaiTG4BA8C8C4m/LppQEldncqyTzAQ=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "aquamarine", "repo": "aquamarine",
"rev": "81584dae2df6ac79f6b6dae0ecb7705e95129ada", "rev": "ab2b0af63fbc9fb779d684f19149b790978be8a8",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -39,11 +39,11 @@
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs"
}, },
"locked": { "locked": {
"lastModified": 1756320983, "lastModified": 1779740183,
"narHash": "sha256-huaJ1CvBsylibf55pjiFEpiKxYU235iAzwMhJ+iDSjw=", "narHash": "sha256-WgZFCa8mutaHzVVdS9QedtDWpVKsOGtqou8LNqHwvn4=",
"owner": "9001", "owner": "9001",
"repo": "copyparty", "repo": "copyparty",
"rev": "f4f702c39dd2365f6ca43ed6b72a84c708fded8d", "rev": "e32718303cd7560f60d3e0ddd473a8a69d7dfa81",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -70,15 +70,15 @@
"flake-compat": { "flake-compat": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1747046372, "lastModified": 1767039857,
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "edolstra", "owner": "NixOS",
"repo": "flake-compat", "repo": "flake-compat",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "edolstra", "owner": "NixOS",
"repo": "flake-compat", "repo": "flake-compat",
"type": "github" "type": "github"
} }
@@ -102,11 +102,11 @@
"flake-compat_3": { "flake-compat_3": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1747046372, "lastModified": 1767039857,
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "edolstra", "owner": "edolstra",
"repo": "flake-compat", "repo": "flake-compat",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -153,7 +153,7 @@
}, },
"flake-utils_2": { "flake-utils_2": {
"inputs": { "inputs": {
"systems": "systems_3" "systems": "systems_2"
}, },
"locked": { "locked": {
"lastModified": 1731533236, "lastModified": 1731533236,
@@ -220,21 +220,21 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1756245065, "lastModified": 1779506708,
"narHash": "sha256-aAZNbGcWrVRZgWgkQbkabSGcDVRDMgON4BipMy69gvI=", "narHash": "sha256-QOD/CNm196nCJRheux/URi4/HE66fthdOMqCJoPP1Y0=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "54b2879ce622d44415e727905925e21b8f833a98", "rev": "3ee51fbdac8c8bdfe1e7e1fcaba6520a563f394f",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nix-community", "owner": "nix-community",
"ref": "release-25.05", "ref": "release-25.11",
"repo": "home-manager", "repo": "home-manager",
"type": "github" "type": "github"
} }
}, },
"home-manager-nod": { "home-manager24": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
"nixpkgs24" "nixpkgs24"
@@ -255,27 +255,6 @@
"type": "github" "type": "github"
} }
}, },
"home-manager_2": {
"inputs": {
"nixpkgs": [
"nix-on-droid",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709445365,
"narHash": "sha256-DVv6nd9FQBbMWbOmhq0KVqmlc3y3FMSYl49UXmMcO+0=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "4de84265d7ec7634a69ba75028696d74de9a44a7",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"hyprcursor": { "hyprcursor": {
"inputs": { "inputs": {
"hyprlang": [ "hyprlang": [
@@ -292,11 +271,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1753964049, "lastModified": 1776511930,
"narHash": "sha256-lIqabfBY7z/OANxHoPeIrDJrFyYy9jAM4GQLzZ2feCM=", "narHash": "sha256-fCpwFiTW0rT7oKJqr3cqHMnkwypSwQKpbtUEtxdkgrM=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprcursor", "repo": "hyprcursor",
"rev": "44e91d467bdad8dcf8bbd2ac7cf49972540980a5", "rev": "39435900785d0c560c6ae8777d29f28617d031ef",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -321,11 +300,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1755678602, "lastModified": 1776426399,
"narHash": "sha256-uEC5O/NIUNs1zmc1aH1+G3GRACbODjk2iS0ET5hXtuk=", "narHash": "sha256-RUESLKNikIeEq9ymGJ6nmcDXiSFQpUW1IhJ245nL3xM=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprgraphics", "repo": "hyprgraphics",
"rev": "157cc52065a104fc3b8fa542ae648b992421d1c7", "rev": "68d064434787cf1ed4a2fe257c03c5f52f33cf84",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -339,22 +318,23 @@
"aquamarine": "aquamarine", "aquamarine": "aquamarine",
"hyprcursor": "hyprcursor", "hyprcursor": "hyprcursor",
"hyprgraphics": "hyprgraphics", "hyprgraphics": "hyprgraphics",
"hyprland-guiutils": "hyprland-guiutils",
"hyprland-protocols": "hyprland-protocols", "hyprland-protocols": "hyprland-protocols",
"hyprland-qtutils": "hyprland-qtutils",
"hyprlang": "hyprlang", "hyprlang": "hyprlang",
"hyprutils": "hyprutils", "hyprutils": "hyprutils",
"hyprwayland-scanner": "hyprwayland-scanner", "hyprwayland-scanner": "hyprwayland-scanner",
"hyprwire": "hyprwire",
"nixpkgs": "nixpkgs_2", "nixpkgs": "nixpkgs_2",
"pre-commit-hooks": "pre-commit-hooks", "pre-commit-hooks": "pre-commit-hooks",
"systems": "systems", "systems": "systems",
"xdph": "xdph" "xdph": "xdph"
}, },
"locked": { "locked": {
"lastModified": 1756325904, "lastModified": 1779729308,
"narHash": "sha256-PRz3GE4ZBScWrHTVegpM4B2YLZplp1iPwmZ9AeYBbsg=", "narHash": "sha256-tMt7oeAahwHGDgSIf5XKZoUXenOvlxjI0KBPku97tzM=",
"ref": "refs/heads/main", "ref": "refs/heads/main",
"rev": "378e130f1426648d8d734049800128f9882805bf", "rev": "bb3353f864be97e9236cfafca68ce71d7cf590dc",
"revCount": 6395, "revCount": 7364,
"submodules": true, "submodules": true,
"type": "git", "type": "git",
"url": "https://github.com/hyprwm/Hyprland" "url": "https://github.com/hyprwm/Hyprland"
@@ -365,33 +345,49 @@
"url": "https://github.com/hyprwm/Hyprland" "url": "https://github.com/hyprwm/Hyprland"
} }
}, },
"hyprland-plugins": { "hyprland-guiutils": {
"inputs": { "inputs": {
"hyprland": [ "aquamarine": [
"hyprland" "hyprland",
"aquamarine"
],
"hyprgraphics": [
"hyprland",
"hyprgraphics"
],
"hyprlang": [
"hyprland",
"hyprlang"
],
"hyprtoolkit": "hyprtoolkit",
"hyprutils": [
"hyprland",
"hyprutils"
],
"hyprwayland-scanner": [
"hyprland",
"hyprwayland-scanner"
], ],
"nixpkgs": [ "nixpkgs": [
"hyprland-plugins",
"hyprland", "hyprland",
"nixpkgs" "nixpkgs"
], ],
"systems": [ "systems": [
"hyprland-plugins",
"hyprland", "hyprland",
"systems" "systems"
] ]
}, },
"locked": { "locked": {
"lastModified": 1756325158, "lastModified": 1776426575,
"narHash": "sha256-aJ9jAYtZ64MWBpWPfH1q+t6U9b6kJWc2yK9Vrlj6fZY=", "narHash": "sha256-KI6nIfVihn/DPaeB5Et46Xg3dkNHrrEtUd5LBBVomB0=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprland-plugins", "repo": "hyprland-guiutils",
"rev": "bf843fc6adf90d43a5dd7742e9df61d395ba780d", "rev": "a968d211048e3ed538e47b84cb3649299578f19d",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprland-plugins", "repo": "hyprland-guiutils",
"type": "github" "type": "github"
} }
}, },
@@ -407,11 +403,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1749046714, "lastModified": 1772460177,
"narHash": "sha256-kymV5FMnddYGI+UjwIw8ceDjdeg7ToDVjbHCvUlhn14=", "narHash": "sha256-/6G/MsPvtn7bc4Y32pserBT/Z4SUUdBd4XYJpOEKVR4=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprland-protocols", "repo": "hyprland-protocols",
"rev": "613878cb6f459c5e323aaafe1e6f388ac8a36330", "rev": "1cb6db5fd6bb8aee419f4457402fa18293ace917",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -420,74 +416,6 @@
"type": "github" "type": "github"
} }
}, },
"hyprland-qt-support": {
"inputs": {
"hyprlang": [
"hyprland",
"hyprland-qtutils",
"hyprlang"
],
"nixpkgs": [
"hyprland",
"hyprland-qtutils",
"nixpkgs"
],
"systems": [
"hyprland",
"hyprland-qtutils",
"systems"
]
},
"locked": {
"lastModified": 1749154592,
"narHash": "sha256-DO7z5CeT/ddSGDEnK9mAXm1qlGL47L3VAHLlLXoCjhE=",
"owner": "hyprwm",
"repo": "hyprland-qt-support",
"rev": "4c8053c3c888138a30c3a6c45c2e45f5484f2074",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-qt-support",
"type": "github"
}
},
"hyprland-qtutils": {
"inputs": {
"hyprland-qt-support": "hyprland-qt-support",
"hyprlang": [
"hyprland",
"hyprlang"
],
"hyprutils": [
"hyprland",
"hyprland-qtutils",
"hyprlang",
"hyprutils"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1753819801,
"narHash": "sha256-tHe6XeNeVeKapkNM3tcjW4RuD+tB2iwwoogWJOtsqTI=",
"owner": "hyprwm",
"repo": "hyprland-qtutils",
"rev": "b308a818b9dcaa7ab8ccab891c1b84ebde2152bc",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-qtutils",
"type": "github"
}
},
"hyprlang": { "hyprlang": {
"inputs": { "inputs": {
"hyprutils": [ "hyprutils": [
@@ -504,11 +432,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1753622892, "lastModified": 1777320127,
"narHash": "sha256-0K+A+gmOI8IklSg5It1nyRNv0kCNL51duwnhUO/B8JA=", "narHash": "sha256-Qu+Wf2Bp5qUjyn2YpZNq8a7JyzTGowhT1knrwE38a9U=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprlang", "repo": "hyprlang",
"rev": "23f0debd2003f17bd65f851cd3f930cff8a8c809", "rev": "090117506ddc3d7f26e650ff344d378c2ec329cc",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -517,24 +445,55 @@
"type": "github" "type": "github"
} }
}, },
"hyprspace": { "hyprtoolkit": {
"inputs": { "inputs": {
"hyprland": [ "aquamarine": [
"hyprland" "hyprland",
"hyprland-guiutils",
"aquamarine"
], ],
"systems": "systems_2" "hyprgraphics": [
"hyprland",
"hyprland-guiutils",
"hyprgraphics"
],
"hyprlang": [
"hyprland",
"hyprland-guiutils",
"hyprlang"
],
"hyprutils": [
"hyprland",
"hyprland-guiutils",
"hyprutils"
],
"hyprwayland-scanner": [
"hyprland",
"hyprland-guiutils",
"hyprwayland-scanner"
],
"nixpkgs": [
"hyprland",
"hyprland-guiutils",
"nixpkgs"
],
"systems": [
"hyprland",
"hyprland-guiutils",
"systems"
]
}, },
"locked": { "locked": {
"lastModified": 1754887838, "lastModified": 1772462885,
"narHash": "sha256-npC+H+Wl60EdrV75sjqm+bbbLbKgCCGn4ALSM0B2OWA=", "narHash": "sha256-5pHXrQK9zasMnIo6yME6EOXmWGFMSnCITcfKshhKJ9I=",
"owner": "KZDKM", "owner": "hyprwm",
"repo": "Hyprspace", "repo": "hyprtoolkit",
"rev": "2b61fd2115262243b03aa9afe8dfd8a78e71636c", "rev": "9af245a69fa6b286b88ddfc340afd288e00a6998",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "KZDKM", "owner": "hyprwm",
"repo": "Hyprspace", "repo": "hyprtoolkit",
"type": "github" "type": "github"
} }
}, },
@@ -550,11 +509,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1756117388, "lastModified": 1779475241,
"narHash": "sha256-oRDel6pNl/T2tI+nc/USU9ZP9w08dxtl7hiZxa0C/Wc=", "narHash": "sha256-Nw4DN0A5krWNcPBvuWe5Gz2yuxsUUPiDgtu6SVPJQeU=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprutils", "repo": "hyprutils",
"rev": "b2ae3204845f5f2f79b4703b441252d8ad2ecfd0", "rev": "3cd3972b2ee658a14d2610d8494e09259e530124",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -575,11 +534,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1755184602, "lastModified": 1777159683,
"narHash": "sha256-RCBQN8xuADB0LEgaKbfRqwm6CdyopE1xIEhNc67FAbw=", "narHash": "sha256-Jxixw6wZphUp+nHYxOKUYSckL17QMBx2d5Zp0rJHr1g=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprwayland-scanner", "repo": "hyprwayland-scanner",
"rev": "b3b0f1f40ae09d4447c20608e5a4faf8bf3c492d", "rev": "b8632713a6beaf28b56f2a7b0ab2fb7088dbb404",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -588,6 +547,35 @@
"type": "github" "type": "github"
} }
}, },
"hyprwire": {
"inputs": {
"hyprutils": [
"hyprland",
"hyprutils"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1778410714,
"narHash": "sha256-o6RzFj4nJXaPRY7EM01siuCQeT41RfwwmcmFQqwFJJg=",
"owner": "hyprwm",
"repo": "hyprwire",
"rev": "85148a8e612808cf5ddb25d0b3c5840f3498a7dc",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprwire",
"type": "github"
}
},
"lanzaboote": { "lanzaboote": {
"inputs": { "inputs": {
"crane": "crane", "crane": "crane",
@@ -637,7 +625,9 @@
}, },
"nix-on-droid": { "nix-on-droid": {
"inputs": { "inputs": {
"home-manager": "home-manager_2", "home-manager": [
"home-manager24"
],
"nix-formatter-pack": "nix-formatter-pack", "nix-formatter-pack": "nix-formatter-pack",
"nixpkgs": [ "nixpkgs": [
"nixpkgs24" "nixpkgs24"
@@ -667,11 +657,11 @@
"nixpkgs": "nixpkgs_4" "nixpkgs": "nixpkgs_4"
}, },
"locked": { "locked": {
"lastModified": 1755261305, "lastModified": 1777732699,
"narHash": "sha256-EOqCupB5X5WoGVHVcfOZcqy0SbKWNuY3kq+lj1wHdu8=", "narHash": "sha256-2uX/XtOWZ/oy2rerRynVhqVA//ZXZ3Fo60PikLHEPQc=",
"owner": "nix-community", "owner": "nix-community",
"repo": "NixOS-WSL", "repo": "NixOS-WSL",
"rev": "203a7b463f307c60026136dd1191d9001c43457f", "rev": "5482f113fd31ebac131d1ebeb2ae90bf0d5e41f5",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -730,11 +720,11 @@
}, },
"nixpkgs-latest": { "nixpkgs-latest": {
"locked": { "locked": {
"lastModified": 1756326156, "lastModified": 1779791687,
"narHash": "sha256-EvRCnKAE5oL9wOIT/LrA5+pJVpTvhH71OReJDTOZDyk=", "narHash": "sha256-ynEmhfOI9cWkI8AUiFimNWutJ+RNibt1Ge4azZVbTQ8=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "636dea4f2cd65b8c558149a957423da47c1cbc95", "rev": "8d10ccfc5381d4129e7730b5bfbe67709f06777e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -762,11 +752,11 @@
}, },
"nixpkgs-unstable": { "nixpkgs-unstable": {
"locked": { "locked": {
"lastModified": 1756266583, "lastModified": 1779560665,
"narHash": "sha256-cr748nSmpfvnhqSXPiCfUPxRz2FJnvf/RjJGvFfaCsM=", "narHash": "sha256-tpyBcxPpcQb8ukyNF7DoCwfSY3VPsxHoYwj00Cayv5o=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "8a6d5427d99ec71c64f0b93d45778c889005d9c2", "rev": "64c08a7ca051951c8eae34e3e3cb1e202fe36786",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -793,11 +783,11 @@
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1756266583, "lastModified": 1779357205,
"narHash": "sha256-cr748nSmpfvnhqSXPiCfUPxRz2FJnvf/RjJGvFfaCsM=", "narHash": "sha256-cCO8aTqss5x9Ky8GWkpY0Hy5fyTZEbtifSUV8QjSzic=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "8a6d5427d99ec71c64f0b93d45778c889005d9c2", "rev": "f83fc3c307e74bc5fd5adb7eb6b8b13ffd2a36e1",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -825,11 +815,11 @@
}, },
"nixpkgs_4": { "nixpkgs_4": {
"locked": { "locked": {
"lastModified": 1754725699, "lastModified": 1776169885,
"narHash": "sha256-iAcj9T/Y+3DBy2J0N+yF9XQQQ8IEb5swLFzs23CdP88=", "narHash": "sha256-l/iNYDZ4bGOAFQY2q8y5OAfBBtrDAaPuRQqWaFHVRXM=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "85dbfc7aaf52ecb755f87e577ddbe6dbbdbc1054", "rev": "4bd9165a9165d7b5e33ae57f3eecbcb28fb231c9",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -841,26 +831,26 @@
}, },
"nixpkgs_5": { "nixpkgs_5": {
"locked": { "locked": {
"lastModified": 1756217674, "lastModified": 1779467186,
"narHash": "sha256-TH1SfSP523QI7kcPiNtMAEuwZR3Jdz0MCDXPs7TS8uo=", "narHash": "sha256-nOesoDCiXcUftqbRBMz9tt4blI5PvljMWbm3kuCA+0s=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "4e7667a90c167f7a81d906e5a75cba4ad8bee620", "rev": "b77b3de8775677f84492abe84635f87b0e153f0f",
"type": "github" "type": "github"
}, },
"original": { "original": {
"id": "nixpkgs", "id": "nixpkgs",
"ref": "nixos-25.05", "ref": "nixos-25.11",
"type": "indirect" "type": "indirect"
} }
}, },
"nixpkgs_6": { "nixpkgs_6": {
"locked": { "locked": {
"lastModified": 1752596105, "lastModified": 1776329215,
"narHash": "sha256-lFNVsu/mHLq3q11MuGkMhUUoSXEdQjCHvpReaGP1S2k=", "narHash": "sha256-a8BYi3mzoJ/AcJP8UldOx8emoPRLeWqALZWu4ZvjPXw=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "dab3a6e781554f965bde3def0aa2fda4eb8f1708", "rev": "b86751bc4085f48661017fa226dee99fab6c651b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -934,11 +924,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1755960406, "lastModified": 1778507602,
"narHash": "sha256-RF7j6C1TmSTK9tYWO6CdEMtg6XZaUKcvZwOCD2SICZs=", "narHash": "sha256-kTwur1wV+01SdqskVMSo6JMEpg71ps3HpbFY2GsflKs=",
"owner": "cachix", "owner": "cachix",
"repo": "git-hooks.nix", "repo": "git-hooks.nix",
"rev": "e891a93b193fcaf2fc8012d890dc7f0befe86ec2", "rev": "61ab0e80d9c7ab14c256b5b453d8b3fb0189ba0a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -978,10 +968,8 @@
"inputs": { "inputs": {
"copyparty": "copyparty", "copyparty": "copyparty",
"home-manager": "home-manager", "home-manager": "home-manager",
"home-manager-nod": "home-manager-nod", "home-manager24": "home-manager24",
"hyprland": "hyprland", "hyprland": "hyprland",
"hyprland-plugins": "hyprland-plugins",
"hyprspace": "hyprspace",
"lanzaboote": "lanzaboote", "lanzaboote": "lanzaboote",
"nix-on-droid": "nix-on-droid", "nix-on-droid": "nix-on-droid",
"nixos-wsl": "nixos-wsl", "nixos-wsl": "nixos-wsl",
@@ -1022,11 +1010,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1752633862, "lastModified": 1776741231,
"narHash": "sha256-Bj7ozT1+5P7NmvDcuAXJvj56txcXuAhk3Vd9FdWFQzk=", "narHash": "sha256-k9G98qzn+7npROUaks8VqCFm7cFtEG8ulQLBBo5lItg=",
"owner": "oxalica", "owner": "oxalica",
"repo": "rust-overlay", "repo": "rust-overlay",
"rev": "8668ca94858206ac3db0860a9dec471de0d995f8", "rev": "02061303f7c4c964f7b4584dabd9e985b4cd442b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1058,11 +1046,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1754988908, "lastModified": 1777944972,
"narHash": "sha256-t+voe2961vCgrzPFtZxha0/kmFSHFobzF00sT8p9h0U=", "narHash": "sha256-VfGRo1qTBKOe3s2gOv8LSoA6Fk19PvBlwQ1ECN0Evn8=",
"owner": "Mic92", "owner": "Mic92",
"repo": "sops-nix", "repo": "sops-nix",
"rev": "3223c7a92724b5d804e9988c6b447a0d09017d48", "rev": "c591bf665727040c6cc5cb409079acb22dcce33c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1087,21 +1075,6 @@
} }
}, },
"systems_2": { "systems_2": {
"locked": {
"lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
"owner": "nix-systems",
"repo": "default-linux",
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default-linux",
"type": "github"
}
},
"systems_3": {
"locked": { "locked": {
"lastModified": 1681028828, "lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
@@ -1144,11 +1117,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1755354946, "lastModified": 1778265244,
"narHash": "sha256-zdov5f/GcoLQc9qYIS1dUTqtJMeDqmBmo59PAxze6e4=", "narHash": "sha256-8jlPtGSsv/CQY6tVVyLF4Jjd0gnS+Zbn9yk/V13A9nM=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland", "repo": "xdg-desktop-portal-hyprland",
"rev": "a10726d6a8d0ef1a0c645378f983b6278c42eaa0", "rev": "813ea5ca9a1702a9a2d1f5836bc00172ef698968",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1164,11 +1137,11 @@
"rust-overlay": "rust-overlay_2" "rust-overlay": "rust-overlay_2"
}, },
"locked": { "locked": {
"lastModified": 1756309929, "lastModified": 1779676204,
"narHash": "sha256-udly1zNvxR6UKFZSkbutSEZ9EihUd+pPCDBaseppB5s=", "narHash": "sha256-/DLVKPqrU3WuY99jrHjYuIR0yGl98mGS6izK5rC1gZM=",
"owner": "sxyazi", "owner": "sxyazi",
"repo": "yazi", "repo": "yazi",
"rev": "dd7afaa64aa54fac5bd30404eb44ccd9d68f31c5", "rev": "cf8b54179ea0de392629d93081afca9e5587225e",
"type": "github" "type": "github"
}, },
"original": { "original": {

141
flake.nix
View File

@@ -2,121 +2,90 @@
description = "Multisystem NixOS Flake of Lennart J. Kurzweg"; description = "Multisystem NixOS Flake of Lennart J. Kurzweg";
inputs = { inputs = {
nixpkgs = { url = "nixpkgs/nixos-25.05"; }; nixpkgs.url = "nixpkgs/nixos-25.11";
nixpkgs-unstable = { url = "nixpkgs/nixos-unstable"; }; nixpkgs-unstable.url = "nixpkgs/nixos-unstable";
nixpkgs-latest = { url = "github:nixos/nixpkgs?ref=master"; }; nixpkgs-latest.url = "github:nixos/nixpkgs?ref=master";
nixpkgs24.url = "github:NixOS/nixpkgs/nixos-24.05";
home-manager = { url = "github:nix-community/home-manager/release-25.05"; inputs.nixpkgs.follows = "nixpkgs"; }; home-manager = { url = "github:nix-community/home-manager/release-25.11"; inputs.nixpkgs.follows = "nixpkgs"; };
home-manager24 = { url = "github:nix-community/home-manager/release-24.05"; inputs.nixpkgs.follows = "nixpkgs24"; };
nix-on-droid = { url = "github:nix-community/nix-on-droid/release-24.05"; inputs.nixpkgs.follows = "nixpkgs24"; }; nix-on-droid = {
nixpkgs24 = { url = "github:NixOS/nixpkgs/nixos-24.05"; }; url = "github:nix-community/nix-on-droid/release-24.05";
home-manager-nod = { url = "github:nix-community/home-manager/release-24.05"; inputs.nixpkgs.follows = "nixpkgs24"; }; inputs = { nixpkgs.follows = "nixpkgs24"; home-manager.follows = "home-manager24"; };
};
nixos-wsl = { url = "github:nix-community/NixOS-WSL/main"; }; nixos-wsl.url = "github:nix-community/NixOS-WSL/main";
sops-nix = { url = "github:Mic92/sops-nix"; inputs.nixpkgs.follows = "nixpkgs"; }; sops-nix = { url = "github:Mic92/sops-nix"; inputs.nixpkgs.follows = "nixpkgs"; };
lanzaboote = { url = "github:nix-community/lanzaboote/v0.4.2"; }; lanzaboote.url = "github:nix-community/lanzaboote/v0.4.2";
hyprland = { url = "git+https://github.com/hyprwm/Hyprland?submodules=1"; }; hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1";
hyprland-plugins = { url = "github:hyprwm/hyprland-plugins"; inputs.hyprland.follows = "hyprland"; }; yazi.url = "github:sxyazi/yazi";
hyprspace = { url = "github:KZDKM/Hyprspace"; inputs.hyprland.follows = "hyprland"; }; copyparty.url = "github:9001/copyparty";
yazi = { url = "github:sxyazi/yazi"; };
copyparty = { url = "github:9001/copyparty"; };
}; };
outputs = { ... }@inputs: with inputs; let outputs = { ... }@inputs: with inputs; let
system = "x86_64-linux"; system = "x86_64-linux";
simple-pkgs = import nixpkgs { inherit system; }; simple-pkgs = import nixpkgs { inherit system; };
config = { allowUnfreePredicate = pkg: builtins.elem (simple-pkgs.lib.getName pkg) (import ./flake-modules/allowed.nix).unfree; }; get-pkgs = import ./flake-modules/pkgs.nix inputs simple-pkgs;
get-hyper = import ./flake-modules/hyper.nix;
hyper-base = rec { secrets = import ./git-crypt/secrets.nix;
system = "x86_64-linux"; get-rice = import ./flake-modules/rice.nix simple-pkgs;
user = "nx2";
domain = "nx2.site";
home = "/home/${user}";
webroot = "/var/lib/hugo/nx2site/public";
};
get-pkgs = { host, system?system, nixpkgs?inputs.nixpkgs, version?"25.05" }: import nixpkgs {
inherit system config;
overlays = [(final: prev: {
unstable = import nixpkgs-unstable { inherit system config; };
latest = import nixpkgs-latest { inherit system config; };
inherit version;
})] ++ (if host == "NxACE" then [
copyparty.overlays.default
] else []);
};
nvidia-base = import ./flake-modules/nvidia.nix;
secrets = import ./git-crypt/secrets.nix;
rice = import ./flake-modules/rice.nix simple-pkgs;
in { in {
nixosConfigurations = let nixosConfigurations = let
make-nixos-system = host: nvidia-settings: nixpkgs.lib.nixosSystem { make-nixos-system = host: let
pkgs = get-pkgs { inherit host; }; hyper = get-hyper host;
rice = get-rice hyper;
in nixpkgs.lib.nixosSystem {
pkgs = get-pkgs hyper;
modules = [ ./configuration.nix ]; modules = [ ./configuration.nix ];
specialArgs = let specialArgs = { inherit inputs hyper rice secrets; };
hyper = hyper-base // { inherit host; nvidia = (nvidia-base // nvidia-settings); };
in { inherit inputs hyper rice secrets; };
}; };
make-nixos-wsl-system = host: nixpkgs.lib.nixosSystem { make-nixos-wsl-system = host: let hyper = get-hyper host; in nixpkgs.lib.nixosSystem {
pkgs = get-pkgs { inherit host; }; pkgs = get-pkgs hyper;
modules = [ ./nixos-wsl.nix ]; modules = [ ./wsl.nix ];
specialArgs = let specialArgs = { inherit inputs hyper rice; };
hyper = hyper-base // { inherit host; };
rice = import ./flake-modules/rice.nix pkgs;
in { inherit inputs hyper rice; };
}; };
in { in {
NxXPS = make-nixos-system "NxXPS" { enable = true; prime = true; }; NxNORTH = make-nixos-system "NxNORTH";
NxNORTH = make-nixos-system "NxNORTH" { enable = true; prime = false; }; NxXPS = make-nixos-system "NxXPS";
NxACE = make-nixos-system "NxACE" { enable = false; }; NxACE = make-nixos-system "NxACE";
NxWSL = make-nixos-wsl-system "NxWSL"; NxDCS = make-nixos-wsl-system "NxDCS";
}; };
nixOnDroidConfigurations = let nixOnDroidConfigurations = let
makeNODConfiguration = host: nix-on-droid.lib.nixOnDroidConfiguration rec { makeNODConfiguration = host: nix-on-droid.lib.nixOnDroidConfiguration rec {
pkgs = get-pkgs { host = "NxS23U"; system = "aarch64-linux"; version = "25.05"; } // ( hyper = get-hyper host;
get-pkgs { host = "NxS23U"; system = "aarch64-linux"; nixpkgs = nixpkgs24; version = "24.05"; } pkgs = get-pkgs hyper;
); modules = [ ./nod.nix ];
modules = [ ./nix-on-droid.nix ]; home-manager-path = home-manager24.outPath;
home-manager-path = home-manager-nod.outPath; extraSpecialArgs = { inherit inputs hyper rice; };
extraSpecialArgs = let
hyper = hyper-base // {
inherit host;
system = "aarch64-linux";
user = "nix-on-droid";
home = "/data/data/com.termux.nix/files/home";
};
rice = import ./flake-modules/rice.nix pkgs;
in { inherit inputs hyper rice; };
}; };
in { NxS23U = makeNODConfiguration "NxS23U"; }; in { NxS23U = makeNODConfiguration "NxS23U"; };
homeConfigurations = let homeConfigurations = let
make-home-configuration = host: user: nvidia-settings: home-manager.lib.homeManagerConfiguration { make-home-configuration = host: let
pkgs = get-pkgs { inherit host; }; hyper = get-hyper host;
rice = get-rice hyper;
in home-manager.lib.homeManagerConfiguration {
pkgs = get-pkgs hyper;
modules = [ ./home.nix ]; modules = [ ./home.nix ];
extraSpecialArgs = let extraSpecialArgs = { inherit inputs hyper rice secrets; };
hyper = hyper-base // { inherit host; nvidia = nvidia-base // nvidia-settings; };
in { inherit inputs hyper rice secrets; };
}; };
make-shell-configuration = host: user: home-manager.lib.homeManagerConfiguration { make-shell-configuration = host: let
pkgs = get-pkgs { inherit host; }; hyper = get-hyper host;
rice = get-rice hyper;
in home-manager.lib.homeManagerConfiguration {
pkgs = get-pkgs hyper;
modules = [ ./shell-only.nix ]; modules = [ ./shell-only.nix ];
extraSpecialArgs = let extraSpecialArgs = { inherit inputs hyper rice secrets; };
hyper = hyper-base // { inherit host; };
in { inherit inputs hyper rice secrets; };
}; };
in { in {
"${hyper-base.user}@NxXPS" = make-home-configuration "NxXPS" hyper-base.user { enable = true; prime = true; }; "nx2@NxXPS" = make-home-configuration "NxXPS";
"${hyper-base.user}@NxNORTH" = make-home-configuration "NxNORTH" hyper-base.user { enable = true; prime = false; }; "nx2@NxNORTH" = make-home-configuration "NxNORTH";
"${hyper-base.user}@NxACE" = make-home-configuration "NxACE" hyper-base.user { enable = false; }; "nx2@NxACE" = make-home-configuration "NxACE";
"nx2@NxDCS" = make-shell-configuration "NxDCS";
"${hyper-base.user}@NxWSL" = make-shell-configuration { user = hyper.user; host = "NxWSL"; inherit pkgs; };
}; };
}; };
} }

Binary file not shown.

View File

@@ -1,16 +1,17 @@
{ pkgs, ... }@all: with all; { { pkgs, ... }@all: with all; let
username = "lennart";
in {
sops.secrets = { sops.secrets = {
"nx2site/radicale/password" = { }; "nx2site/nextcloud/lennart_pass" = { };
}; };
home.packages = [ home.packages = [
(pkgs.writers.writePython3Bin "caldav_event" { (pkgs.writers.writePython3Bin "caldav_event" {
libraries = with pkgs.python3Packages; [ caldav ics pytz ]; libraries = with pkgs.python3Packages; [ caldav ics pytz ];
flakeIgnore = [ "E302" "E305" "E501" "E261" ]; flakeIgnore = [ "E302" "E305" "E501" "E261" ];
} /* python */ '' } /* python */ ''
import os
import json import json
from caldav import DAVClient from caldav import DAVClient
from datetime import datetime, timezone from datetime import datetime, timezone, timedelta
from ics import Calendar from ics import Calendar
from pytz import UTC from pytz import UTC
@@ -33,13 +34,15 @@ def datetime_parser(dct):
return dct return dct
def load_cache(cache_file): def load_cache(cache_file):
if os.path.exists(cache_file): try:
with open(cache_file, "r") as file: with open(cache_file, "r") as file:
return json.load(file, object_hook=datetime_parser) return json.load(file, object_hook=datetime_parser)
return None except (json.JSONDecodeError, FileNotFoundError):
return None
def save_cache(cache_file, data): def save_cache(cache_file, data):
with open(cache_file, "w") as file: with open(cache_file, "w") as file:
data['last_checked'] = datetime.now(timezone.utc)
json.dump(data, file, default=datetime_converter, indent=4) json.dump(data, file, default=datetime_converter, indent=4)
@@ -59,6 +62,8 @@ def get_ongoing_or_next_event(url, username, password):
for calendar in calendars: for calendar in calendars:
for event in calendar.search(start=now): for event in calendar.search(start=now):
if "VEVENT" not in event.data:
continue
calendar_parsed = Calendar(event.data) calendar_parsed = Calendar(event.data)
for ics_event in calendar_parsed.events: for ics_event in calendar_parsed.events:
event_dict = {} event_dict = {}
@@ -73,7 +78,7 @@ def get_ongoing_or_next_event(url, username, password):
return next_event_dict return next_event_dict
except Exception as e: except Exception as e:
print(f"Error accessing {url}: {e}") print(f"Error accessing {url}: {str(e)}".splitlines()[0])
return None return None
def is_expired(event_dict: dict): def is_expired(event_dict: dict):
@@ -81,17 +86,22 @@ def is_expired(event_dict: dict):
event_end = event_dict['event_end'].timestamp() event_end = event_dict['event_end'].timestamp()
return not (now <= event_end) return not (now <= event_end)
def is_too_old(event_dict: dict) -> bool:
last_checked = event_dict['last_checked']
now = datetime.now(timezone.utc)
return now - last_checked >= timedelta(minutes=10)
if __name__ == "__main__": if __name__ == "__main__":
password_file = "${config.sops.secrets."nx2site/radicale/password".path}" # Path to password file password_file = "${config.sops.secrets."nx2site/nextcloud/lennart_pass".path}" # Path to password file
cache_file = "/tmp/caldav_event_cache.json" # Path to cache file cache_file = "/tmp/caldav_event_cache.json" # Path to cache file
url = "https://dav.${hyper.domain}/" url = "https://n.${hyper.domain}/remote.php/dav/calendars/${username}/"
username = "nx2" username = "${username}"
password = get_password(password_file) password = get_password(password_file)
now = datetime.now(timezone.utc).timestamp() now = datetime.now(timezone.utc).timestamp()
event_dict = load_cache(cache_file) event_dict = load_cache(cache_file)
if (event_dict is None) or (is_expired(event_dict)): if (event_dict is None) or is_expired(event_dict) or is_too_old(event_dict):
event_dict = get_ongoing_or_next_event(url, username, password) event_dict = get_ongoing_or_next_event(url, username, password)
save_cache(cache_file, event_dict) save_cache(cache_file, event_dict)
@@ -120,7 +130,7 @@ if __name__ == "__main__":
else: else:
time_string = "in " + hour_string + "and " + minu_string time_string = "in " + hour_string + "and " + minu_string
print(f"{event_dict['event_name']} {action_string} {time_string}") print(f"\'{event_dict['event_name']}\' {action_string} {time_string}".splitlines()[0])
'') '')
]; ];
} }

View File

@@ -27,7 +27,7 @@
"custom/caldav_event" = { "custom/caldav_event" = {
execute = "caldav_event"; execute = "caldav_event";
label = "󰃰 {}"; label = "󰃰 {}";
interval = 1000; interval = 60000;
hideOnEmpty = false; hideOnEmpty = false;
actions = {}; actions = {};
}; };
@@ -51,12 +51,12 @@
# "bluetooth" # "bluetooth"
"network" "network"
"windowtitle" "windowtitle"
"media"
]; ];
"middle" = [ "workspaces" ]; "middle" = [ "workspaces" ];
"right" = [ "right" = [
"submap" "submap"
"custom/caldav_event" "custom/caldav_event"
"media"
"custom/cclock" "custom/cclock"
"notifications" "notifications"
"systray" "systray"
@@ -425,8 +425,8 @@
"theme.bar.menus.menu.notifications.label" = accent.base; "theme.bar.menus.menu.notifications.label" = accent.base;
"theme.bar.menus.menu.notifications.no_notifications_label" = accent.base; "theme.bar.menus.menu.notifications.no_notifications_label" = accent.base;
"theme.bar.menus.menu.notifications.pager.background" = background; "theme.bar.menus.menu.notifications.pager.background" = background;
"theme.bar.menus.menu.notifications.pager.button" = accent.dark; "theme.bar.menus.menu.notifications.pager.button" = accent.base;
"theme.bar.menus.menu.notifications.pager.label" = accent.base; "theme.bar.menus.menu.notifications.pager.label" = accent.bright;
"theme.bar.menus.menu.notifications.scrollbar.color" = accent.base; "theme.bar.menus.menu.notifications.scrollbar.color" = accent.base;
"theme.bar.menus.menu.notifications.switch.disabled" = accent.base; "theme.bar.menus.menu.notifications.switch.disabled" = accent.base;
"theme.bar.menus.menu.notifications.switch_divider" = accent.base; "theme.bar.menus.menu.notifications.switch_divider" = accent.base;
@@ -492,12 +492,12 @@
"theme.notification.actions.background" = background; "theme.notification.actions.background" = background;
"theme.notification.actions.text" = foreground; "theme.notification.actions.text" = foreground;
"theme.notification.background" = background; "theme.notification.background" = background;
"theme.notification.border" = accent.base; "theme.notification.border" = border;
"theme.notification.close_button.background" = accent.dark; "theme.notification.close_button.background" = accent.dark;
"theme.notification.close_button.label" = accent.base; "theme.notification.close_button.label" = accent.base;
"theme.notification.label" = accent.base; "theme.notification.label" = accent.bright;
"theme.notification.labelicon" = accent.base; "theme.notification.labelicon" = accent.base;
"theme.notification.opacity" = 1.0; "theme.notification.opacity" = 100;
"theme.notification.text" = foreground; "theme.notification.text" = foreground;
"theme.notification.time" = accent.base; "theme.notification.time" = accent.base;

View File

@@ -22,7 +22,7 @@
} // pkgs.lib.mkIf (pkgs.version != "24.05") { } // pkgs.lib.mkIf (pkgs.version != "24.05") {
shellInit = init; shellInit = init;
} // pkgs.lib.mkIf (pkgs.version != "25.05") { } // pkgs.lib.mkIf (pkgs.version != "25.11") {
profileExtra = init; profileExtra = init;
}; };
} }

View File

@@ -1,6 +1,6 @@
{ pkgs, ... }@all: with all; { pkgs, ... }@all: with all;
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
bitwarden bitwarden-desktop
]; ];
} }

View File

@@ -1,31 +1,44 @@
{ pkgs, ... }@all: with all; let { pkgs, ... }@all: with all; let
calendars = with hyper; [ v = "nxc";
user = "lennart";
domain = hyper.domain;
calendars = let
bs = "https://n.${domain}/remote.php/dav/calendars/lennart";
in [
{ {
name = "Preservation"; name = "Preservation";
primary = true; primary = true;
url = "https://dav.${domain}/${user}/preservation/"; url = "${bs}/preservation/";
color = "#dddddd"; color = "#dddddd";
} }
{ {
name = "Effort"; name = "Effort";
url = "https://dav.${domain}/${user}/effort/"; url = "${bs}/effort/";
color = "#dd2222"; color = "#dd2222";
} }
{ {
name = "Experience"; name = "Experience";
url = "https://dav.${domain}/${user}/experience/"; url = "${bs}/experience/";
color = "#2222dd"; color = "#2222dd";
} }
{ {
name = "Exposure"; name = "Leisure";
url = "https://dav.${domain}/${user}/exposure/"; # name = "Exposure";
url = "${bs}/leisure/";
# url = "https://${v}.${domain}/${user}/exposure/";
color = "#22aa22"; color = "#22aa22";
} }
{ # {
name = "Engagement"; # name = "Engagement";
url = "https://dav.${domain}/${user}/engagement/"; # url = "https://${v}.${domain}/${user}/engagement/";
color = "#8800CC"; # color = "#8800CC";
} # }
# {
# {
# name = "Family";
# url = "${bs}/family/";
# color = "#dddd22";
# }
{ {
name = "Sleep as Android"; name = "Sleep as Android";
url = secrets.calendar.sleep-as-android-url; url = secrets.calendar.sleep-as-android-url;
@@ -40,13 +53,6 @@
read-only = true; read-only = true;
type = "ics"; type = "ics";
} }
{
name = "LR";
url = "https://${domain}/lr.ics";
color = "#005040";
read-only = true;
type = "ics";
}
{ {
name = "Feiertage Hessen"; name = "Feiertage Hessen";
url = "https://ics.tools/Feiertage/hessen.ics"; url = "https://ics.tools/Feiertage/hessen.ics";
@@ -54,13 +60,6 @@
read-only = true; read-only = true;
type = "ics"; 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 = { default_set = {
# name = # name =
@@ -82,7 +81,7 @@ in {
inherit primary; inherit primary;
remote = { remote = {
inherit url name; inherit url name;
userName = hyper.user; # my globally set username userName = user;
}; };
}; };
in lib.attrsets.mergeAttrsList ( in lib.attrsets.mergeAttrsList (
@@ -102,7 +101,7 @@ in {
"calendar.registry.${to_safe_name calendar.name}.name" = name; "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}.type" = type;
"calendar.registry.${to_safe_name calendar.name}.uri" = url; "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}.username" = user;
"calendar.registry.${to_safe_name calendar.name}.readOnly" = read-only; "calendar.registry.${to_safe_name calendar.name}.readOnly" = read-only;
}) calendars }) calendars
) // { ) // {

View File

@@ -2,32 +2,34 @@
let let
channels = [ channels = [
"Caedrel" "Caedrel"
"Caedrel247"
# "agurin" # "agurin"
# "asmongold" # "asmongold"
# "Caedrel" # "Caedrel"
# "EintrachtSpandau" # "EintrachtSpandau"
"GamesDoneQuick" # "GamesDoneQuick"
"Odoamne" # "Odoamne"
"iwdominate" # "iwdominate"
"imls" # "imls"
"gdolphn" # "gdolphn"
"GRONKH" "GRONKH"
"handofblood" # "handofblood"
"HisWattson" # "HisWattson"
"Jankos" # "Jankos"
# "KuruHS" # "KuruHS"
"LEC" "LEC"
"lol_nemesis" "lol_nemesis"
# "NASA" # "NASA"
"NoWay4u_Sir" # "nattynattlol"
"OfficialMikeShinoda" # "NoWay4u_Sir"
"Rekkles" # "OfficialMikeShinoda"
# "Rekkles"
"riotgames" "riotgames"
"thebausffs" # "thebausffs"
"ThePrimeagen" # "ThePrimeagen"
"Tolkin" # "Tolkin"
# "TSM_ImperialHal" # "imperialhal__"
"velja_lol" # "velja_lol"
# "Xisuma" # "Xisuma"
"zackrawrr" "zackrawrr"
]; ];
@@ -46,12 +48,12 @@ let
}; };
}; };
in { in {
sops.secrets."streamlink/twitch-oauth" = { path = "%r/secrets/streamlink/twich-oauth"; }; # sops.secrets."streamlink/twitch-oauth" = { path = "%r/secrets/streamlink/twich-oauth"; };
home = { home = {
packages = with pkgs; [ packages = with pkgs; [
chatterino2 unstable.chatterino2
streamlink unstable.streamlink
# mpv # mpv
]; ];
file = { file = {
@@ -191,7 +193,7 @@ in {
}, },
"misc": { "misc": {
"askOnTabVisibilityToggle": false, "askOnTabVisibilityToggle": false,
"currentVersion": "2.5.3", "currentVersion": "2.5.5",
"lockNotebookLayout": false "lockNotebookLayout": false
}, },
"similarity": { "similarity": {
@@ -207,7 +209,7 @@ in {
"external": { "external": {
"streamlink": { "streamlink": {
"quality": "", "quality": "",
"options": "--config ${hyper.home}.config/streamlink/config" "options": "--config ${hyper.home}/.config/streamlink/config"
} }
} }
} }

View File

@@ -3,20 +3,30 @@
home.file.".config/color-pallete.html".text = with rice.color; let home.file.".config/color-pallete.html".text = with rice.color; let
cb = color-set: color-name: size: /* html */ '' cb = color-set: color-name: size: /* html */ ''
<div class="color-container" style="border-color: ${color-set.base}"> <div class="color-container" style="border-color: ${color-set.base}">
<div class="color-box" style="background: ${color-set.darker}; height: ${builtins.toString size}px;">
<p style="color: ${color-set.bright}"> ${color-name}.darker </p>
<p sktyle="color: ${color-set.bright}"> ${color-set.darker} </p>
</div>
<div class="color-box" style="background: ${color-set.dark}; height: ${builtins.toString size}px;"> <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.brighter}"> ${color-name}.dark </p>
<p style="color: ${color-set.bright}"> ${color-set.dark} </p> <p style="color: ${color-set.brighter}"> ${color-set.dark} </p>
</div> </div>
<div class="color-box" style="background: ${color-set.base}; height: ${builtins.toString size}px;"> <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-name}.base </p>
<p class="dynamic-text"> ${color-set.base} </p> <p class="dynamic-text"> ${color-set.base} </p>
</div> </div>
<div class="color-box" style="background: ${color-set.bright}; height: ${builtins.toString size}px;"> <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.darker}"> ${color-name}.bright </p>
<p style="color: ${color-set.dark}"> ${color-set.bright} </p> <p style="color: ${color-set.darker}"> ${color-set.bright} </p>
</div>
<div class="color-box" style="background: ${color-set.brighter}; height: ${builtins.toString size}px;">
<p style="color: ${color-set.dark}"> ${color-name}.brighter </p>
<p style="color: ${color-set.dark}"> ${color-set.brighter} </p>
</div> </div>
</div> </div>
''; '';
rgb = rice.lib.hex-to-rgb-comma-string;
s = builtins.toString;
in /* html */ '' in /* html */ ''
<!DOCTYPE html> <!DOCTYPE html>
<head> <head>
@@ -30,27 +40,26 @@
padding: 0px; padding: 0px;
} }
html { html {
background: rgba(${rice.lib.hex-to-rgb-comma-string background},${builtins.toString rice.transparency}); background: transparent;
padding: auto;
} }
body { body {
font-family: ${rice.font.base.name}; font-family: ${rice.font.base.name};
color: ${foreground}; color: ${foreground};
width: fit-content; width: fit-content;
margin: 10px auto 10px auto; margin: 10px auto 10px auto;
background: rgba(${rice.lib.hex-to-rgb-comma-string background},${builtins.toString rice.transparency}); background: rgba(${rgb background},${s rice.transparency});
border: ${builtins.toString rice.border-width}px solid ${border}; border: ${s rice.border-width}px solid ${border};
border-radius: ${builtins.toString rice.rounding}px; border-radius: ${s rice.rounding}px;
padding: ${builtins.toString rice.gap-size}px; padding: ${s rice.gap-size}px;
} }
h1 { h1 {
margin: ${builtins.toString rice.gap-size}px; margin: ${s rice.gap-size}px;
} }
.color-container { .color-container {
font-family: ${rice.font.code.name}; font-family: ${rice.font.code.name};
display: flex; display: flex;
gap: ${builtins.toString rice.gap-size}px; gap: ${s rice.gap-size}px;
margin: ${builtins.toString rice.gap-size}px; margin: ${s rice.gap-size}px;
} }
.color-box { .color-box {
width: 200px; width: 200px;
@@ -58,7 +67,7 @@
flex-direction: column; flex-direction: column;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
border-radius: ${builtins.toString rice.rounding}px; border-radius: ${s rice.rounding}px;
} }
</style> </style>
</head> </head>
@@ -67,8 +76,9 @@
${cb accent "accent" 100} ${cb accent "accent" 100}
${cb secondary "secondary" 100} ${cb secondary "secondary" 100}
${cb tertiary "tertiary" 100} ${cb tertiary "tertiary" 100}
${cb weird "weird" 100} ${cb weird "weird" 80}
${cb special "special" 100} ${cb special "special" 80}
${cb subtle "subtle" 80}
<br> <br>
${cb positive "positive" 70} ${cb positive "positive" 70}
${cb negative "negative" 70} ${cb negative "negative" 70}

28
home-modules/contact.nix Normal file
View File

@@ -0,0 +1,28 @@
{ pkgs, ... }@all: with all; lib.mkIf (hyper.isPersonal) {
# sops.secrets."nx2site/nextcloud/lennart_pass".path = "nx2site/nextcloud/lennart_pass";
# accounts.contact = {
# basePath = "~/.local/share/contacts";
# accounts = let
# nc = name: { "${name}" = let
# un = "lennart";
# in {
# inherit name;
# remote = {
# url = "https://n.${hyper.domain}/remote.php/dav/addressbooks/users/${un}/${name}/";
# type = "carddav";
# username = un;
# passwordCommand = "cat /run/user/1000/secrets/nx2site/nextcloud/lennart_pass";
# thunderbird = {
# enable = builtins.trace config.programs.thunderbird.enable config.programs.thunderbird.enable;
# prifiles = [ hyper.user ];
# };
# };
# local = {
# type = "filesystem";
# path = "${name}";
# };
# };};
# in (pkgs.lib.mergeAttrsList (builtins.map nc [ "TUDa" "CWG" "HSMW" "DICOS" "Accounts" "Familie & Freunde" "Friedrich Schiller Grundschule" "Handball" "Phönix" "Util & Miscellaneous" ]));
# };
# };
}

View File

@@ -1,102 +1,12 @@
{ pkgs, ... }@all: with all; { pkgs, ... }@all: with all; lib.mkIf (hyper.isPersonal) {
lib.mkIf (hyper.host != "NxACE")
{
home.packages = with pkgs; [
thunderbird
];
programs.thunderbird = let
inherit (lib.generators) toJSON;
extensions = toJSON {} {
"addon@darkreader.org" = "71d6c69d-55f9-4c56-888c-abdcf6efd73d";
};
in {
enable = true;
profiles = {
"${hyper.user}" = {
isDefault = true;
settings = with rice.color; {
"calendar.alarms.showmissed" = false;
"calendar.alarms.playsound" = false;
"calendar.alarms.show" = false;
"extensions.webextensions.uuids" = extensions;
"mail.startup.enabledMailCheckOnce" = true;
"mailnews.mark_message_read.delay" = true;
"mailnews.mark_message_read.delay.interval" = 3;
"mailnews.tags.$label1.color" = red.base;
"mailnews.tags.$label1.tag" = "Important";
"mailnews.tags.$label2.color" = yellow.base;
"mailnews.tags.$label2.tag" = "Work";
"mailnews.tags.$label3.color" = green.base;
"mailnews.tags.$label3.tag" = "Personal";
"mailnews.tags.$label4.color" = cyan.base;
"mailnews.tags.$label4.tag" = "To Do";
"mailnews.tags.$label5.color" = blue.base;
"mailnews.tags.$label5.tag" = "Later";
"mailnews.headers.showMessageId" = true;
"mailnews.headers.showOrganization" = true;
"mailnews.headers.showReferences" = true;
"mailnews.headers.showSender" = true;
"mailnews.headers.showUserAgent" = true;
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
};
userChrome = with rice.color; /* css */ ''
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;
}
.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;
}
'';
};
};
};
accounts.email.accounts = let accounts.email.accounts = let
OAuth2Settings = id: { OAuth2Settings = id: {
"mail.smtpserver.smtp_${id}.authMethod" = 10; "mail.smtpserver.smtp_${id}.authMethod" = 10;
"mail.server.server_${id}.authMethod" = 10; "mail.server.server_${id}.authMethod" = 10;
}; };
in { in {
gmail-online = { gmail-online-accounts = {
address = secrets.email.gmail-online.mail; address = secrets.email.gmail-online-accounts.mail;
realName = "Lennart J. Kurzweg"; realName = "Lennart J. Kurzweg";
flavor = "gmail.com"; flavor = "gmail.com";
primary = true; primary = true;
@@ -117,8 +27,8 @@ lib.mkIf (hyper.host != "NxACE")
}; };
}; };
gmail-business = { gmail-ljk = {
address = secrets.email.gmail-business.mail; address = secrets.email.gmail-ljk.mail;
realName = "Lennart J. Kurzweg"; realName = "Lennart J. Kurzweg";
flavor = "gmail.com"; flavor = "gmail.com";
signature = { signature = {
@@ -136,36 +46,22 @@ lib.mkIf (hyper.host != "NxACE")
settings = OAuth2Settings; settings = OAuth2Settings;
}; };
}; };
# pnx-nix = {
# hsmw = with secrets.email.hsmw; { # address = secrets.email.pnx.mail;
# address = "${un}@hs-mittweida.de";
# userName = "${un}@hs-mittweida.de";
# realName = "Lennart J. Kurzweg"; # realName = "Lennart J. Kurzweg";
# imap = { # flavor = "outlook.office365.com";
# port = 993;
# host = "xc.hs-mittweida.de";
# };
# smtp = {
# port = 587;
# host = "xc.hs-mittweida.de";
# tls.useStartTls = true;
# };
# signature = { # signature = {
# text = '' # text = ''
# MatNr: ${mnr} # Phönix Metallbau GmbH
# SemGr: ${semgr} # Tel: 036374 2270
# About Me: https://nx2.site/about-me
# Contact: https://nx2.site/contact
# GPG: https://nx2.site/gpg
# ''; # '';
# showSignature = "append"; # showSignature = "append";
# }; # };
# thunderbird = { # thunderbird = mkIf config.thunderbird.enable {
# enable = true; # enable = true;
# profiles = [ "nx2" ]; # profiles = [ "nx2" ];
# settings = id: { # # The id given as argument is an automatically generated account identifier.
# "mail.server.server_${id}.fcc_folder" = "imap://${un}%40hs-mittweida.de@xc.hs-mittweida.de/Sent"; # # settings = OAuth2Settings;
# };
# }; # };
# }; # };
tuda = with secrets.email.tuda; { tuda = with secrets.email.tuda; {
@@ -195,9 +91,37 @@ lib.mkIf (hyper.host != "NxACE")
thunderbird = { thunderbird = {
enable = true; enable = true;
profiles = [ "nx2" ]; profiles = [ "nx2" ];
settings = id: { settings = id: { };
"mail.server.server_${id}.fcc_folder" = "imap://${un}%40hs-mittweida.de@xc.hs-mittweida.de/Sent"; };
}; };
nx2site = {
address = "lennart@${hyper.domain}";
userName = "lennart@${hyper.domain}";
realName = "Lennart J. Kurzweg";
imap = {
port = 993;
host = "ssh.${hyper.domain}";
tls.enable = true;
};
smtp = {
port = 465;
host = "mail-eu.smtp2go.com";
tls.enable = true;
# port = 587;
# host = "mail.${hyper.domain}";
# tls.useStartTls = true;
};
signature = {
text = ''
About Me: https://nx2.site/about-me
Contact: https://nx2.site/contact
GPG: https://nx2.site/gpg
'';
showSignature = "append";
};
thunderbird = {
enable = true;
profiles = [ "nx2" ];
}; };
}; };
}; };
@@ -205,3 +129,35 @@ lib.mkIf (hyper.host != "NxACE")
# hsmw = with secrets.email.hsmw; {
# address = "${un}@hs-mittweida.de";
# userName = "${un}@hs-mittweida.de";
# realName = "Lennart J. Kurzweg";
# imap = {
# port = 993;
# host = "xc.hs-mittweida.de";
# };
# smtp = {
# port = 587;
# host = "xc.hs-mittweida.de";
# tls.useStartTls = true;
# };
# signature = {
# text = ''
# MatNr: ${mnr}
# SemGr: ${semgr}
# About Me: https://nx2.site/about-me
# Contact: https://nx2.site/contact
# GPG: https://nx2.site/gpg
# '';
# showSignature = "append";
# };
# thunderbird = {
# enable = true;
# profiles = [ "nx2" ];
# settings = id: {
# "mail.server.server_${id}.fcc_folder" = "imap://${un}%40hs-mittweida.de@xc.hs-mittweida.de/Sent";
# };
# };
# };

View File

@@ -3,7 +3,7 @@
home = { home = {
packages = with pkgs; [ packages = with pkgs; [
figlet figlet
(pkgs.writeShellScriptBin "fgl" '' (pkgs.writeShellScriptBin "nxfgl" ''
figlet -f ${hyper.home}/.local/share/figlet/nx2.flf -w 9999 figlet -f ${hyper.home}/.local/share/figlet/nx2.flf -w 9999
'') '')
]; ];

View File

@@ -1,7 +1,4 @@
{ pkgs, ... }@all: with all; { pkgs, ... }@all: with all; {
# browser.tabs.allow_transparent_browser
# https://www.reddit.com/r/FirefoxCSS/comments/1dqws4b/firefox_128_will_allow_the_main_browser_content/
{
programs.firefox.profiles."{hyper.user}".settings = { programs.firefox.profiles."{hyper.user}".settings = {
"widget.use-xdg-desktop-portal.file-picker" = 1; "widget.use-xdg-desktop-portal.file-picker" = 1;
}; };
@@ -9,272 +6,11 @@
packages = with pkgs; [ packages = with pkgs; [
firefox firefox
]; ];
file = with rice.color; let file = {
blur = builtins.toString 20; ".mozilla/firefox/${hyper.user}/chrome/userChrome.css".text = import ./userChrome.nix rice;
in { ".mozilla/firefox/${hyper.user}/chrome/userContent.css".text = import ./userContent.nix rice;
".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;
--arrowpanel-border-color : ${border} !important;
--arrowpanel-color : ${secondary.base} !important;
--arrowpanel-dimmed : rgba(${rice.lib.hex-to-rgb-comma-string background},0.4) !important;
--arrowpanel-dimmed-further : rgba(${rice.lib.hex-to-rgb-comma-string background},0.6) !important;
--arrowpanel-dimmed-even-further : rgba(${rice.lib.hex-to-rgb-comma-string background},0.8) !important;
/* Autocomplete */
--autocomplete-popup-background : rgba(${rice.lib.hex-to-rgb-comma-string background}, ${builtins.toString rice.transparency}) !important;
--autocomplete-popup-color : ${foreground} !important;
--autocomplete-popup-highlight-background: ${accent.base} !important;
--autocomplete-popup-highlight-color : ${foreground} !important;
/* Toolbar background */
--toolbar-bgcolor : rgba(${rice.lib.hex-to-rgb-comma-string background},0.4) !important;
--toolbar-non-lwt-bgcolor : rgba(${rice.lib.hex-to-rgb-comma-string background}, ${builtins.toString rice.transparency}) !important;
--toolbar-non-lwt-bgimage : none !important;
--toolbar-color : ${foreground} !important;
/* Tabs */
--tab-selected-bgcolor : ${accent.base} !important;
--tabs-border-color : ${border} !important;
--tab-line-color : ${accent.base} !important;
--tab-loader-size : 16px !important;
/* Sidebar */
--lwt-sidebar-background-color : rgba(${rice.lib.hex-to-rgb-comma-string background}, ${builtins.toString rice.transparency}) !important;
--lwt-sidebar-text-color : ${foreground} !important;
--sidebar-background-color : rgba(${rice.lib.hex-to-rgb-comma-string background}, ${builtins.toString rice.transparency}) !important;
--sidebar-text-color : ${foreground} !important;
--sidebar-border-color : ${border} !important;
/* URL bar */
--urlbar-popup-url-color : ${foreground} !important;
--urlbar-popup-action-color : ${secondary.base} !important;
--toolbar-field-background-color : rgba(${rice.lib.hex-to-rgb-comma-string background}, ${builtins.toString rice.transparency}) !important;
--toolbar-field-focus-background-color : rgba(${rice.lib.hex-to-rgb-comma-string background}, ${builtins.toString rice.transparency}) !important;
--toolbar-field-color : ${accent.base} !important;
--toolbar-field-focus-color : ${foreground} !important;
--toolbar-field-focus-border-color : ${accent.base} !important;
/* Buttons */
--toolbarbutton-icon-fill : ${foreground} !important;
--toolbarbutton-hover-background : rgba(${rice.lib.hex-to-rgb-comma-string accent.base}, 0.2) !important;
--toolbarbutton-active-background : rgba(${rice.lib.hex-to-rgb-comma-string accent.base}, 0.4) !important;
/* Notification and panel */
--panel-disabled-color : rgba(${rice.lib.hex-to-rgb-comma-string foreground},0.3) !important;
--panel-separator-color : ${border} !important;
/* New tab page */
--newtab-background-color : ${background} !important;
--newtab-background-color-secondary : ${secondary.dark} !important;
--newtab-text-primary-color : ${foreground} !important;
--newtab-text-secondary-color : ${secondary.base} !important;
--newtab-search-icon-color : ${accent.base} !important;
--tabpanel-background-color : transparent !important;
background : linear-gradient(180deg,rgba(${rice.lib.hex-to-rgb-comma-string secondary.dark}, ${builtins.toString rice.transparency}) 0%, rgba(${rice.lib.hex-to-rgb-comma-string background}, ${builtins.toString rice.transparency}) 100%) !important;
}
.tabbrowser-tab[selected="true"] {
color: ${background} !important;
}
#appcontent {
background: transparent !important;
}
#navigator-toolbox {
--tabs-border-color: transparent !important;
}
#toolbar-menubar, #TabsToolbar, #PersonalToolbar, #navigator-toolbox, #sidebar-box {
background-color: transparent !important;
-moz-appearance: none !important;
background-image: none !important;
}
window, #nav-bar{
background-color: transparent !important;
-moz-appearance: none !important;
background-image: none !important;
}
'';
".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) {
html:not(#ublock0-epicker), html:not(#ublock0-epicker) body, #newtab-customize-overlay {
background: ${background} !important;
}
}
/* Sets up minimal incognito scrollbar */
@-moz-document url(about:privatebrowsing) {
:root{
scrollbar-width: thin !important;
scrollbar-color: rgb(161, 161, 161) transparent !important;
}
}
/* new-tab */
@-moz-document url-prefix(about:home), url-prefix(about:newtab) {
:root{
--newtab-background-color-secondary: ${background} !important;
}
body, html {
background: transparent !important;
}
.tile, .search-handoff-button {
border: ${builtins.toString rice.border-width}px solid ${border} !important;
}
}
@-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(${blur}px);
}
body, html, .bg-neutral-background, .threadline, reddit-sidebar-nav, shreddit-post, aside, .reddit-search-bar, comment-body-header, shreddit-comment-tree{
background-color: transparent !important;
}
}
@-moz-document domain(reddit.com) {
header {
background-color: rgba(${rice.lib.hex-to-rgb-comma-string background},${builtins.toString rice.transparency}) !important;
}
body, html, reddit-sidebar-nav, shreddit-post, aside, .reddit-search-bar{
background-color: transparent !important;
}
}
@-moz-document domain(google.com) {
.sfbg {
background-color: rgba(${rice.lib.hex-to-rgb-comma-string background},${builtins.toString rice.transparency}) !important;
backdrop-filter: blur(${blur}px);
}
body, html, div#search > * {
background-color: transparent !important;
border: ${builtins.toString rice.border-width} solid ${border};
}
.g, .appbar {
background-color: transparent !important;
border: ${builtins.toString rice.border-width} solid ${border};
}
div#rso {
* {
background-color: transparent !important;
border: ${builtins.toString rice.border-width} solid ${border};
}
}
div#cnt > div {
}
}
@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;
}
}
@-moz-document domain(youtube.com) {
body, html, div#content, ytd-app, #frosted-glass.with-chipbar.ytd-app, ytd-shorts[is-dark] #cinematic-shorts-scrim.ytd-shorts {
background-color: transparent !important;
}
#background.ytd-masthead, div#background {
background-color: rgba(${rice.lib.hex-to-rgb-comma-string background}, ${builtins.toString rice.transparency}) !important;
backdrop-filter: blur(100px);
}
* {
--yt-spec-base-background: transparent;
--yt-spec-raised-background: rgba(${rice.lib.hex-to-rgb-comma-string background}, ${builtins.toString rice.transparency}) !important;
--yt-spec-menu-background: rgba(${rice.lib.hex-to-rgb-comma-string accent.dark}, ${builtins.toString rice.transparency}) !important;
--yt-spec-inverted-background: rgba(${rice.lib.hex-to-rgb-comma-string secondary.dark}, ${builtins.toString rice.transparency}) !important;
}
}
@-moz-document domain(mynixos.com) {
body, html {
background-color: transparent !important;
}
header, footer {
background-color: rgba(0,0,0,1) !important;
backdrop-filter: blur(100px);
border-radius: ${builtins.toString rice.rounding}px;
}
}
@-moz-document domain(moodle.informatik.tu-darmstadt.de) {
body, html , .main-inner, .main-inner * {
background-color: transparent !important;
}
.bg-primary {
background-color: rgba(${rice.lib.hex-to-rgb-comma-string accent.base},0.5) !important;
}
}
@-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;
# }
# }
}; };
}; };
} }
# browser.tabs.allow_transparent_browser
# https://www.reddit.com/r/FirefoxCSS/comments/1dqws4b/firefox_128_will_allow_the_main_browser_content/

View File

@@ -0,0 +1,19 @@
{ pkgs, ... }@all: with all;
# browser.tabs.allow_transparent_browser
# https://www.reddit.com/r/FirefoxCSS/comments/1dqws4b/firefox_128_will_allow_the_main_browser_content/
{
programs.firefox.profiles."{hyper.user}".settings = {
"widget.use-xdg-desktop-portal.file-picker" = 1;
};
home = {
packages = with pkgs; [
firefox
];
file = with rice.color; let
blur = builtins.toString 20;
f = rice.lib.hex-to-rgb-comma-string;
in {
".mozilla/firefox/${hyper.user}/chrome/userChrome.css".text = import ./userChrome.nix rice;
".mozilla/firefox/${hyper.user}/chrome/userContent.css".text = import ./userContent.nix rice; };
};
}

View File

@@ -0,0 +1,107 @@
rice: with rice.color; let
f = rice.lib.hex-to-rgb-comma-string;
# blur = builtins.toString 20;
in /* css */ ''
:root{
/* Popup panels */
--arrowpanel-background : rgba(${f background}, ${builtins.toString rice.transparency}) !important;
--arrowpanel-border-color : ${border} !important;
--arrowpanel-color : ${secondary.base} !important;
--arrowpanel-dimmed : rgba(${f background},0.4) !important;
--arrowpanel-dimmed-further : rgba(${f background},0.6) !important;
--arrowpanel-dimmed-even-further : rgba(${f background},0.8) !important;
/* Autocomplete */
--autocomplete-popup-background : rgba(${f background}, ${builtins.toString rice.transparency}) !important;
--autocomplete-popup-color : ${foreground} !important;
--autocomplete-popup-highlight-background: ${accent.base} !important;
--autocomplete-popup-highlight-color : ${foreground} !important;
/* Toolbar background */
--toolbar-bgcolor : transparent !important;
--toolbar-non-lwt-bgcolor : rgba(${f background}, ${builtins.toString rice.transparency}) !important;
--toolbar-non-lwt-bgimage : none !important;
--toolbar-color : ${foreground} !important;
/* Tabs */
--tab-selected-bgcolor : ${accent.base} !important;
--tabs-border-color : ${border} !important;
--tab-line-color : ${accent.base} !important;
--tab-loader-size : 16px !important;
/* Sidebar */
--lwt-sidebar-background-color : rgba(${f background}, ${builtins.toString rice.transparency}) !important;
--lwt-sidebar-text-color : ${foreground} !important;
--sidebar-background-color : rgba(${f background}, ${builtins.toString rice.transparency}) !important;
--sidebar-text-color : ${foreground} !important;
--sidebar-border-color : ${border} !important;
/* URL bar */
--urlbar-popup-url-color : ${foreground} !important;
--urlbar-popup-action-color : ${secondary.base} !important;
--toolbar-field-background-color : rgba(${f background}, ${builtins.toString rice.transparency}) !important;
--toolbar-field-focus-background-color : rgba(${f background}, ${builtins.toString rice.transparency}) !important;
--toolbar-field-color : ${accent.base} !important;
--toolbar-field-focus-color : ${foreground} !important;
--toolbar-field-focus-border-color : ${accent.base} !important;
/* Buttons */
--toolbarbutton-icon-fill : ${foreground} !important;
--toolbarbutton-hover-background : rgba(${f accent.base}, 0.2) !important;
--toolbarbutton-active-background : rgba(${f accent.base}, 0.4) !important;
/* Notification and panel */
--panel-disabled-color : rgba(${f foreground},0.3) !important;
--panel-separator-color : ${border} !important;
/* New tab page */
--newtab-background-color : transparent !important;
--newtab-background-color-secondary : ${secondary.dark} !important;
--newtab-text-primary-color : ${foreground} !important;
--newtab-text-secondary-color : ${secondary.base} !important;
--newtab-search-icon-color : ${accent.base} !important;
--newtab-background-card : ${accent.dark} !important;
--tabpanel-background-color : transparent !important;
background : transparent !important;
}
body {
background-color: unset !important;
background-color: transparent !important;
background-image: linear-gradient(0deg,rgba(${f accent.dark}, ${builtins.toString rice.transparency}) 0%, rgba(${f secondary.dark}, ${builtins.toString rice.transparency}) 100%) !important;
background-size: 100% 150% !important;
background-position: 0% 0% !important;
will-change: background-position;
transition: background-position 300ms !important;
&:-moz-window-inactive {
background-position: 0% 50% !important;
background-color: transparent !important;
}
}
.tabbrowser-tab[selected="true"], .tab-text[selected=""],
.tab-close-button[selected=""] {
color: ${background} !important;
}
hbox#browser {
backround-color: transparent: !important;
}
#appcontent {
background: transparent !important;
}
#navigator-toolbox {
--tabs-border-color: transparent !important;
}
#toolbar-menubar, #TabsToolbar, #PersonalToolbar, #navigator-toolbox, #sidebar-box {
background-color: transparent !important;
-moz-appearance: none !important;
background-image: none !important;
}
window, #nav-bar{
background-color: transparent !important;
-moz-appearance: none !important;
background-image: none !important;
}
''

View File

@@ -0,0 +1,271 @@
rice: with rice.color; let
f = rice.lib.hex-to-rgb-comma-string;
blur = builtins.toString 20;
in /* css */ ''
/* Removes the white loading page */
/* url(about:newtab), url(about:home) */
@-moz-document url(about:blank) {
html:not(#ublock0-epicker), html:not(#ublock0-epicker) body, #newtab-customize-overlay {
background: transparent !important;
}
}
/* Sets up minimal incognito scrollbar */
@-moz-document url(about:privatebrowsing) {
:root{
scrollbar-width: thin !important;
scrollbar-color: rgb(161, 161, 161) transparent !important;
}
}
/* new-tab */
@-moz-document url-prefix(about:home), url-prefix(about:newtab) {
:root {
--newtab-background-color-secondary: rgba(${f background},0.5) !important;
}
body, html {
background: transparent !important;
}
.tile, .search-handoff-button {
border: ${builtins.toString rice.border-width}px solid ${border} !important;
}
}
@-moz-document url-prefix("https://n.nx2.site/") {
:root, [data-theme-dark] {
--color-main-background: #00000055;
--color-main-background-rgb: 0,0,0;
--color-primary-element-light: #550000;
}
.app-navigation, .app-content {
background: rgba(0,0,0,0.8) !important;
backdrop-filter: blur(5px) !important;
}
.files-list__row-head, .files-list__tfoot {
background: rgba(0,0,0,0.5) !important;
}
.fc-day-today {
background: #ff000055 !important;
}
.files-list__thead {
background: transparent !important;
}
}
@-moz-document domain(reddit.com) {
header {
background-color: rgba(${f background},${builtins.toString rice.transparency}) !important;
backdrop-filter: blur(${blur}px);
}
body, html, .bg-neutral-background, .threadline, reddit-sidebar-nav, shreddit-post, aside, .reddit-search-bar, comment-body-header, shreddit-comment-tree, #flex-left-nav-container {
background-color: transparent !important;
}
#search-dropdown-results-container {
background: rgba(${f background},0.8) !important;
}
#main-content {
background-color: rgba(${f background},0.5)!important;
}
}
@-moz-document domain(reddit.com) {
header {
background-color: rgba(${rice.lib.hex-to-rgb-comma-string background},${builtins.toString rice.transparency}) !important;
}
body, html, reddit-sidebar-nav, shreddit-post, aside, .reddit-search-bar{
background-color: transparent !important;
}
}
@-moz-document domain(google.com) {
.sfbg {
background-color: rgba(${rice.lib.hex-to-rgb-comma-string background},${builtins.toString rice.transparency}) !important;
backdrop-filter: blur(${blur}px);
}
body, html, div#search > * {
background-color: transparent !important;
border: ${builtins.toString rice.border-width} solid ${border};
}
.g, .appbar {
background-color: transparent !important;
border: ${builtins.toString rice.border-width} solid ${border};
}
div#rso {
* {
background-color: transparent !important;
border: ${builtins.toString rice.border-width} solid ${border};
}
}
div#cnt > div {
}
}
@-moz-document domain(gemini.google.com) {
input-container, input-container::before {
background: transparent !important;
}
bard-sidenav {
background: rgba(${rice.lib.hex-to-rgb-comma-string background},0.5) !important;
}
}
@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;
}
}
@-moz-document domain(youtube.com) {
body, html, div#content, ytd-app, #frosted-glass.with-chipbar.ytd-app, ytd-shorts[is-dark] #cinematic-shorts-scrim.ytd-shorts {
background-color: transparent !important;
}
#background.ytd-masthead, div#background {
background-color: rgba(${rice.lib.hex-to-rgb-comma-string background}, ${builtins.toString rice.transparency}) !important;
backdrop-filter: blur(100px);
}
* {
--yt-spec-base-background: transparent;
--yt-spec-raised-background: rgba(${rice.lib.hex-to-rgb-comma-string background}, ${builtins.toString rice.transparency}) !important;
--yt-spec-menu-background: rgba(${rice.lib.hex-to-rgb-comma-string accent.dark}, ${builtins.toString rice.transparency}) !important;
--yt-spec-inverted-background: rgba(${rice.lib.hex-to-rgb-comma-string secondary.dark}, ${builtins.toString rice.transparency}) !important;
}
}
@-moz-document domain(mynixos.com) {
body, html {
background-color: transparent !important;
}
header, footer {
background-color: rgba(0,0,0,0.5) !important;
backdrop-filter: blur(100px);
border-radius: ${builtins.toString rice.rounding}px;
}
}
@-moz-document domain(notebooklm.google.com) {
body, html, notebook, omnibar {
background-color: transparent !important;
}
header, footer, .studio-panel, .chat-panel, .source-panel {
background-color: rgba(0,0,0,0.5) !important;
backdrop-filter: blur(100px);
border-radius: ${builtins.toString rice.rounding}px;
}
}
@-moz-document domain(moodle.informatik.tu-darmstadt.de) {
body, html , .main-inner, .main-inner * {
background-color: transparent !important;
}
.bg-primary {
background-color: rgba(${rice.lib.hex-to-rgb-comma-string accent.base},0.5) !important;
}
}
@-moz-document domain(wikipedia.org) {
body, html, div.mw-page-container, .vector-header, .mw-header {
background-color: transparent !important;
}
:root {
--color-base: ${foreground} !important;
--color-base--hover: ${accent.bright} !important;
--color-emphasized: ${accent.base} !important;
--color-progressive: ${accent.base} !important;
--color-progressive--hover: ${accent.brighter} !important;
--color-progressive--active: ${secondary.bright} !important;
--color-destructive: ${negative.base} !important;
--color-destructive--hover: ${negative.brighter} !important;
--color-destructive--active: ${negative.bright} !important;
--color-visited: ${secondary.base} !important;
--color-visited--hover: ${secondary.brighter} !important;
--color-visited--active: ${secondary.bright} !important;
--color-error: ${negative.base} !important;
--color-error--hover: ${negative.bright} !important;
--color-error--active: ${negative.bright} !important;
--color-warning: ${weird.base} !important;
--color-success: ${positive.base} !important;
--color-notice: ${special.base} !important;
--color-content-added: ${positive.base} !important;
--color-content-removed: ${negative.base} !important;
--color-base--subtle: ${accent.dark} !important;
--box-shadow-color-base: ${black.base} !important;
--background-color-base: transparent !important;
--background-color-neutral: transparent !important;
--background-color-neutral-subtle: transparent !important;
--background-color-interactive: ${accent.darker} !important;
--background-color-interactive--hover: ${accent.dark} !important;
--background-color-interactive--active: ${secondary.dark} !important;
--background-color-interactive-subtle: ${subtle.darker} !important;
--background-color-interactive-subtle--hover: ${subtle.dark} !important;
--background-color-interactive-subtle--active: ${subtle.base} !important;
--border-color-base: ${border} !important;
--border-color-emphasized: ${border2} !important;
--border-color-subtle: ${subtle.base} !important;
--border-color-muted: ${subtle.dark} !important;
}
}
@-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;
# }
# }

View File

@@ -3,33 +3,35 @@
home.packages = with pkgs; [ home.packages = with pkgs; [
any-nix-shell any-nix-shell
(writeShellScriptBin "nxfetch" '' (writeShellScriptBin "nxfetch" /* bash */ ''
logo=$(echo -e " logo=$(echo -e "
OS OS
DE/WM DE/WM
TERM TERM
SHELL SHELL
ISHELL ISHELL
KERNEL KERNEL
EDITOR EDITOR
TFM TFM
PROMPT PROMPT
" | lolcat --force 2> /dev/null) " | lolcat --force 2> /dev/null)
msg=" release_line=$(cat /etc/*-release 2> /dev/null || echo 'PRETTY_NAME="[No Release]"')
$(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^} msg="
$(echo -e "$logo" | sed -n 5p): ''${TERM^} $(echo -e "$logo" | sed -n 3p): $(echo "$release_line" | grep PRETTY_NAME | cut -c 14- | rev | cut -c 2- | rev)
$(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 4p): ''${XDG_CURRENT_DESKTOP^}
$(echo -e "$logo" | sed -n 7p): fish $(fish --version | rev | cut -f 1 -d' ' | rev | sed 's/./\U&/') $(echo -e "$logo" | sed -n 5p): ''${TERM^}
$(echo -e "$logo" | sed -n 8p): ''$(uname -r) $(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 9p): $($EDITOR --version | head -n 1 | sed -E 's-(.+?) \(.*-\1-g' | sed 's/./\U&/') $(echo -e "$logo" | sed -n 7p): fish $(fish --version | rev | cut -f 1 -d' ' | rev | sed 's/./\&/')
$(echo -e "$logo" | sed -n 10p): $(yazi --version | sed -E 's-(.*?) \(.*-\1-g') $(echo -e "$logo" | sed -n 8p): ''$(uname -r | sed -E 's=(.+-.+-.+-.+)-.+=\1=g')
$(echo -e "$logo" | sed -n 11p): $(starship --version | head -n 1 | sed 's/./\U&/') $(echo -e "$logo" | sed -n 9p): $($EDITOR --version | head -n 1 | sed -E 's-(.+?) \(.*-\1-g' | awk '{print toupper(substr($0,1,1)) substr($0,2)}')
" $(echo -e "$logo" | sed -n 10p): $(yazi --version | sed -E 's-(.*?) \(.*-\1-g')
echo -e "$msg" $(echo -e "$logo" | sed -n 11p): $(starship --version | head -n 1 | awk '{print toupper(substr($0,1,1)) substr($0,2)}')
"
echo -e "$msg"
'') '')
]; ];
@@ -85,6 +87,7 @@
d = "docker"; d = "docker";
dcmp = "docker compose"; dcmp = "docker compose";
stui = "sudo systemctl-tui"; stui = "sudo systemctl-tui";
wlc = "wl-copy";
# nxsent = ''sent -c \${rice.color.foreground} -b \${rice.color.background}''; # nxsent = ''sent -c \${rice.color.foreground} -b \${rice.color.background}'';
# ya = "yazi"; # function # ya = "yazi"; # function
@@ -93,16 +96,17 @@
interactiveShellInit = /* fish */ '' interactiveShellInit = /* fish */ ''
set -g fish_greeting set -g fish_greeting
if not set -q IN_NIX_SHELL if not set -q IN_NIX_SHELL
if set -q SESSION_FROM_DE if set -q SESSION_FROM_DE; or set -q SESSION_CLONED_FROM_YAZI
set -e SESSION_FROM_DE
set -e SESSION_CLONED_FROM_YAZI
set tmp (mktemp -t "yazi-cwd.XXXXX") set tmp (mktemp -t "yazi-cwd.XXXXX")
yazi --cwd-file="$tmp" yazi --cwd-file="$tmp" ~
if set cwd (cat -- "$tmp"); and [ -n "$cwd" ]; and [ "$cwd" != "$PWD" ] if set cwd (cat -- "$tmp"); and [ -n "$cwd" ]; and [ "$cwd" != "$PWD" ]
builtin cd -- "$cwd" builtin cd -- "$cwd"
end end
rm -f -- "$tmp" rm -f -- "$tmp"
end end
nxfetch nxfetch
set -e SESSION_FROM_DE
end end
''; '';
functions = { functions = {
@@ -112,10 +116,21 @@
''; '';
nx_backup = let nx_backup = let
destination = if hyper.host == "NxNORTH" then "${hyper.home}/shared/" else "${hyper.home}/backups/"; destination = if hyper.host == "NxNORTH" then "${hyper.home}/shared/" else "${hyper.home}/backups/";
in pkgs.lib.mkIf (hyper.host == "NxXPS" || hyper.host == "NxNORTH") '' in pkgs.lib.mkIf (hyper.isPersonal) /* fish */ ''
set RPATH (curl -s https://${hyper.domain}/latest-backup) set RPATH (curl -s https://${hyper.domain}/latest-backup)
rsync -avz --info=progress2 -e "ssh -p ${builtins.toString secrets.ssh.port}" ${hyper.user}@ssh.${hyper.domain}:"$RPATH" ${destination} rsync -avz --info=progress2 -e "ssh -p ${builtins.toString secrets.ssh.port}" ${hyper.user}@ssh.${hyper.domain}:"$RPATH" ${destination}
''; '';
nx_yazi_into_fish = /* fish */ ''
set tmp (mktemp -t "yazi-cwd.XXXXX")
echo "$PWD" > "$tmp"
yazi --cwd-file="$tmp"
if set cwd (cat -- "$tmp"); and [ -n "$cwd" ]; and [ "$cwd" != "$PWD" ]
builtin cd -- "$cwd"
end
rm -f "$tmp"
set -g SESSION_CLONED_FROM_YAZI TRUE
'';
# gpg = ''; # gpg = '';
# set bold \e[1m # set bold \e[1m
# set green \e[32m # set green \e[32m

View File

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

View File

@@ -5,6 +5,7 @@
package = pkgs.ghostty; package = pkgs.ghostty;
settings = with rice.color; { settings = with rice.color; {
background = background; background = background;
window-padding-color = "extend";
background-opacity = builtins.toString rice.transparency; background-opacity = builtins.toString rice.transparency;
clipboard-paste-protection = false; clipboard-paste-protection = false;
clipboard-read = "allow"; clipboard-read = "allow";

View File

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

View File

@@ -5,13 +5,27 @@
(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)") (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 = { programs = {
enable = true; git = {
package = pkgs.gitFull; enable = true;
userName = ''Lennart J. Kurzweg (Nx2)''; package = pkgs.gitFull;
userEmail = "git@${hyper.domain}"; settings = {
user = {
Name = ''Lennart J. Kurzweg (Nx2)'';
Email = "git@${hyper.domain}";
};
credential = {
"https://git.da.dicos.de".username = lib.mkIf (hyper.host == "NxDCS") "lkurzweg";
"https://git.da.dicos.de".password = lib.mkIf (hyper.host == "NxDCS") "Test";
};
url."ssh://git@git.da.dicos.de/".insteadOf = lib.mkIf (hyper.host == "NxDCS") "https://git.da.dicos.de/";
url."ssh://git@github.com/".insteadOf = "https://github.com/";
pull.rebase = false; # true
};
};
delta = { delta = {
enable = true; enable = true;
enableGitIntegration = true;
options = { options = {
line-numbers = true; line-numbers = true;
side-by-side = false; side-by-side = false;
@@ -19,35 +33,27 @@
whitespace-error-style = "22 reverse"; whitespace-error-style = "22 reverse";
}; };
}; };
extraConfig = { lazygit = {
credential = { enable = true;
"https://git.da.dicos.de".username = lib.mkIf (hyper.host =="NxWSL") "lkurzweg"; package = pkgs.lazygit;
"https://git.da.dicos.de".password = lib.mkIf (hyper.host =="NxWSL") "Test"; settings = {
}; windowSize = "normal";
url."ssh://git@git.da.dicos.de/".insteadOf = lib.mkIf (hyper.host =="NxWSL") "https://git.da.dicos.de/"; gui.theme = with rice.color; {
url."ssh://git@github.com/".insteadOf = "https://github.com/"; lightTheme = false;
pull.rebase = false; # true activeBorderColor = [ foreground "bold" ];
}; inactiveBorderColor = [ border ];
}; optionsTextColor = [ tertiary.base ];
programs.lazygit = { selectedLineBgColor = [ secondary.base ];
enable = true; selectedRangeByColor = [ weird.bright ];
settings = { showRandomTip = true;
windowSize = "normal"; animateExplosion = true;
gui.theme = with rice.color; { cherryPickedCommitFgColor = [ accent.base ]; # Foreground color of copied commit
lightTheme = false; cherryPickedCommitBgColor = [ secondary.dark ]; # Background color of copied commit
activeBorderColor = [ foreground "bold" ]; markedBaseCommitFgColor = [ accent.base ]; # Foreground color of marked base commit (for rebase)
inactiveBorderColor = [ border ]; markedBaseCommitBgColor = [ secondary.dark ]; # Background color of marked base commit (for rebase)
optionsTextColor = [ tertiary.base ]; unstagedChangesColor = [ negative.base ]; # Color for file with unstaged changes
selectedLineBgColor = [ secondary.base ]; defaultFgColor = [ "default" ]; # Default text color
selectedRangeByColor = [ weird.bright ]; };
showRandomTip = true;
animateExplosion = true;
cherryPickedCommitFgColor = [ accent.base ]; # Foreground color of copied commit
cherryPickedCommitBgColor = [ secondary.dark ]; # Background color of copied commit
markedBaseCommitFgColor = [ accent.base ]; # Foreground color of marked base commit (for rebase)
markedBaseCommitBgColor = [ secondary.dark ]; # Background color of marked base commit (for rebase)
unstagedChangesColor = [ negative.base ]; # Color for file with unstaged changes
defaultFgColor = [ "default" ]; # Default text color
}; };
}; };
}; };

View File

@@ -1,16 +1,41 @@
{ pkgs, ... }@all: with all; { pkgs, ... }@all: with all; {
{
# there also is a system module
home.packages = with pkgs; [ home.packages = with pkgs; [
gnupg # pinentry-all
gpg-tui # pinentry-curses
pinentry-all pinentry-gtk2
# pinentry-tty
]; ];
programs.gpg = {
services.gpg-agent = let
min2sec = min: (min * 60);
in {
enable = true; enable = true;
package = pkgs.gnupg;
homedir = "${hyper.home}/vault/gnupg";
settings = {
armor = true;
cert-digest-algo = "SHA512";
charset = "utf-8";
default-preference-list = "SHA512 SHA384 SHA256 AES256 AES192 AES ZLIB BZIP2 ZIP Uncompressed";
keyid-format = "0xlong";
list-options = "show-uid-validity";
no-comments = true;
no-emit-version = true;
no-greeting = true;
no-symkey-cache = true;
personal-cipher-preferences = "AES256 AES192 AES";
personal-compress-preferences = "ZLIB BZIP2 ZIP Uncompressed";
personal-digest-preferences = "SHA512 SHA384 SHA256";
pinentry-mode = "loopback";
require-cross-certification = true;
s2k-cipher-algo = "AES256";
s2k-digest-algo = "SHA512";
use-agent = true;
verify-options = "show-uid-validity";
with-fingerprint = true;
};
};
services.gpg-agent = let
min2sec = min: (min * 60);
in {
enable = false;
verbose = true; verbose = true;
sshKeys = [ sshKeys = [
"97081264F7FD72D890D496E839AA9A4C7892A7D8" # Keygrip (not Fingerprint!) of [A] Subkey "97081264F7FD72D890D496E839AA9A4C7892A7D8" # Keygrip (not Fingerprint!) of [A] Subkey
@@ -22,33 +47,5 @@
extraConfig = '' extraConfig = ''
allow-loopback-pinentry allow-loopback-pinentry
''; '';
} // (if (pkgs.version != "24.05") then { };
pinentry = {
package = pkgs.pinentry;
program = "pinentry";
};
} else {});
home.file.".gnupg/gpg.conf".text = ''
personal-cipher-preferences AES256 AES192 AES
personal-digest-preferences SHA512 SHA384 SHA256
personal-compress-preferences ZLIB BZIP2 ZIP Uncompressed
default-preference-list SHA512 SHA384 SHA256 AES256 AES192 AES ZLIB BZIP2 ZIP Uncompressed
cert-digest-algo SHA512
s2k-digest-algo SHA512
s2k-cipher-algo AES256
charset utf-8
no-comments
no-emit-version
no-greeting
keyid-format 0xlong
list-options show-uid-validity
verify-options show-uid-validity
with-fingerprint
require-cross-certification
no-symkey-cache
armor
use-agent
pinentry-mode loopback
'';
} }

View File

@@ -1,5 +1,4 @@
{ pkgs, ... }@all: with all; { pkgs, ... }@all: with all; {
{
home = { home = {
packages = with pkgs; [ packages = with pkgs; [
# nixfmt-classic # nix formater # nixfmt-classic # nix formater
@@ -99,7 +98,6 @@
cursor-shape = { cursor-shape = {
normal = "block"; normal = "block";
insert = "bar"; insert = "bar";
select = "underline";
}; };
file-picker = { file-picker = {
hidden = false; # Enables ignoring hidden files hidden = false; # Enables ignoring hidden files
@@ -191,7 +189,7 @@
keys = { keys = {
normal = { normal = {
"C-g" = [ ":new" ":insert-output lazygit" ":buffer-close!" ":redraw" ]; "C-g" = [ ":new" ":insert-output lazygit" ":buffer-close!" ":redraw" ];
"C-i" = [ ":pipe fgl" "toggle_comments" ]; "C-m" = [ ":pipe nxfgl" "toggle_comments" ];
"A-`" = [ "no_op" ]; "A-`" = [ "no_op" ];
"`" = [ "no_op" ]; "`" = [ "no_op" ];
"ö" = { "s" = [ "switch_case" ]; "u" = [ "switch_to_uppercase" ]; "l" = [ "switch_to_lowercase" ]; }; "ö" = { "s" = [ "switch_case" ]; "u" = [ "switch_to_uppercase" ]; "l" = [ "switch_to_lowercase" ]; };
@@ -205,22 +203,41 @@
language = [ language = [
{ {
name = "nix"; name = "nix";
language-servers = [ language-servers = [ "nixd" ];
"nixd"
# "llm"
];
} }
{ {
name = "latex"; name = "latex";
language-servers = [ "texlab" "language-tool" ]; language-servers = [ "texlab" "language-tool" ];
} }
{
name = "typst";
language-servers = [ "tinymist" ];
# language-servers = [ "language-tool" "tinymist" ];
}
{
name = "typst-with-language-tool";
scope = "";
language-servers = [ "language-tool" "tinymist" ];
injection-regex = "";
file-types = [""];
comment-tokens = "//";
indent = { tab-width = 2; unit = " "; };
}
{ {
name = "markdown"; name = "markdown";
# language-servers = [ "marksman" "style-check" "language-tool" ]; language-servers = [ "marksman" ];
language-servers = [ "language-tool" "marksman" ];
file-types = [ "md" "MD" ]; file-types = [ "md" "MD" ];
scope = "text.<name>"; scope = "text.<name>";
} }
{
name = "markdown-with-language-tool";
language-servers = [ "language-tool" "marksman" ];
scope = "text.<name>";
injection-regex = "";
file-types = [""];
# blcok-comment-tokens = { start = "<!--"; end = "-->"; };
indent = { tab-width = 2; unit = " "; };
}
{ {
name = "python"; name = "python";
language-servers = [ "pyright" "ruff" ]; language-servers = [ "pyright" "ruff" ];
@@ -299,37 +316,45 @@
base16 = with rice.color; { base16 = with rice.color; {
"attributes" = foreground; "attributes" = foreground;
"comment" = { "comment" = {
fg = black.bright; fg = subtle.base;
modifiers = [ "italic" ]; modifiers = [ "italic" ];
}; };
"constant" = accent.bright; "constant" = accent.bright;
"constant.character.escape" = special.bright; "constant.character.escape" = special.bright;
"constant.numeric" = foreground; "constant.numeric" = foreground;
"constructor" = weird.base; "constructor" = secondary.bright;
"debug" = yellow.base; "debug" = yellow.base;
"diagnostic.modifiers" = [ "underline" ]; "diff.delta" = subtle.bright;
"diff.delta" = blue.bright;
"diff.minus" = negative.bright; "diff.minus" = negative.bright;
"diff.plus" = positive.bright; "diff.plus" = positive.bright;
"error" = red.base; "error" = negative.base;
"function" = secondary.bright; "function" = secondary.bright;
"hint" = tertiary.bright; "hint" = tertiary.bright;
"info" = foreground; "info" = foreground;
"keyword" = special.base; "keyword" = {
"keyword.modifiers" = [ "italic" ]; fg = special.base;
modifiers = [ "bold" ];
};
"label" = foreground; "label" = foreground;
"namespace" = weird.bright; "namespace" = weird.bright;
"operator" = foreground; "operator" = foreground;
"special" = special.base; "special" = special.base;
"string" = secondary.bright; "string" = secondary.bright;
"type" = red.base; "type" = {
"variable" = accent.base; fg = tertiary.base;
"variableother.member" = foreground; };
"warning" = red.base; "variable" = { fg = accent.base; };
"variable.builtin" = { fg = accent.base; bg = subtle.darker; };
"variable.parameter" = { fg = accent.base; bg = accent.darker; };
"warning" = yellow.base;
"markup.heading" = accent.base; "markup.heading" = {
fg = accent.base;
bg = accent.darker;
modifiers = [ "bold" ];
};
"markup.bold" = { "markup.bold" = {
fg = tertiary.bright; fg = secondary.bright;
modifiers = [ "bold" ]; modifiers = [ "bold" ];
}; };
"italic" = { "italic" = {
@@ -339,7 +364,7 @@
"markup.linktext" = accent.base; "markup.linktext" = accent.base;
"markup.linkurl" = { "markup.linkurl" = {
fg = tertiary.dark; fg = tertiary.dark;
modifiers = [ "underlined" ]; underline.style = "line";
}; };
"markup.list" = accent.bright; "markup.list" = accent.bright;
"markup.quote" = weird.bright; "markup.quote" = weird.bright;
@@ -356,7 +381,7 @@
}; };
"ui.bufferline" = { # the top line ("tab"-line) "ui.bufferline" = { # the top line ("tab"-line)
fg = accent.base; fg = accent.base;
bg = black.base; bg = accent.darker;
}; };
"ui.bufferline.active" = { # the active "tab" "ui.bufferline.active" = { # the active "tab"
fg = background; fg = background;
@@ -368,22 +393,22 @@
modifiers = [ "reversed" ]; modifiers = [ "reversed" ];
}; };
"ui.cursorline.primary" = { # the line on which the cursor is on "ui.cursorline.primary" = { # the line on which the cursor is on
bg = black.base; bg = secondary.darker;
}; };
"ui.cursor.match" = { # Matching bracket etc. "ui.cursor.match" = { # Matching bracket etc.
bg = green.dark; bg = special.dark;
modifiers = [ ]; modifiers = [ ];
}; };
"ui.gutter" = { "ui.gutter" = {
bg = black.base; bg = accent.darker;
}; };
"ui.help" = { "ui.help" = {
fg = green.base; fg = accent.base;
bg = black.base; bg = accent.darker;
}; };
"ui.linenr" = { "ui.linenr" = {
fg = white.dark; fg = accent.bright;
bg = black.base; bg = accent.darker;
}; };
"ui.linenr.selected" = { "ui.linenr.selected" = {
fg = accent.bright; fg = accent.bright;
@@ -391,32 +416,32 @@
}; };
"ui.menu" = { "ui.menu" = {
fg = accent.base; fg = accent.base;
bg = black.base; bg = accent.darker;
}; };
"ui.menu.scroll" = { "ui.menu.scroll" = {
fg = yellow.dark; fg = subtle.base;
bg = background; bg = background;
}; };
"ui.menu.selected" = { "ui.menu.selected" = {
fg = red.base; fg = secondary.bright;
bg = blue.dark; bg = secondary.darker;
}; };
"ui.popup" = { "ui.popup" = {
bg = black.base; bg = accent.darker;
}; };
"ui.selection" = { "ui.selection" = {
bg = white.dark; bg = accent.dark;
}; };
"ui.selection.primary" = { "ui.selection.primary" = {
bg = black.bright; bg = accent.dark;
}; };
"ui.statusline" = { "ui.statusline" = {
fg = blue.bright; fg = accent.bright;
bg = black.base; bg = accent.darker;
}; };
"ui.statusline.inactive" = { "ui.statusline.inactive" = {
fg = red.bright; fg = secondary.bright;
bg = red.dark; bg = secondary.dark;
}; };
"ui.statusline.insert" = { "ui.statusline.insert" = {
fg = green.bright; fg = green.bright;
@@ -433,23 +458,23 @@
"ui.text" = foreground; "ui.text" = foreground;
"ui.text.focus" = accent.base; "ui.text.focus" = accent.base;
"ui.virtual.indent-guide" = { "ui.virtual.indent-guide" = {
fg = black.bright; fg = subtle.dark;
}; };
"ui.virtual.inlay-hint" = { "ui.virtual.inlay-hint" = {
fg = background; fg = subtle.base;
bg = tertiary.dark; bg = subtle.dark;
}; };
"ui.virtual.ruler" = { "ui.virtual.ruler" = {
bg = background; bg = background;
}; };
"ui.virtual.jump-label" = { "ui.virtual.jump-label" = {
fg = special.base; fg = special.base;
underline = { bg = special.dark;
style = "dotted"; underline.style = "dotted";
}; modifiers = [ "bold" ];
}; };
"ui.window" = { "ui.window" = {
bg = black.base; bg = accent.darker;
}; };
}; };
}; };

View File

@@ -1,50 +1,68 @@
{ pkgs, ... }@all: with all; { pkgs, ... }@all: with all; let
let
animation-speed = "5"; animation-speed = "5";
transparency = builtins.toString rice.transparency; transparency = builtins.toString rice.transparency;
terminal = "ghostty"; terminal = "ghostty";
terminal-exec = "ghostty --command="; terminal-exec = "ghostty --command=";
monitors = { monitors = {
xps = { xps = {
main = { name = "eDP-1"; resolution = "1920x1200"; position = "1920x1080"; scale = "1.0"; }; # def
second = { name = "DP-5"; resolution = "1920x1080"; position = "1920x0"; scale = "1.0"; }; # main = { name = "eDP-1"; resolution = "preferred"; position = "0x0"; scale = "1.0"; };
third = { name = "DP-6"; resolution = "1920x1080"; position = "0x0"; scale = "1.0"; }; # second = { name = "eDP-1"; resolution = "preferred"; position = "0x0"; scale = "1.0"; };
# third = { name = "eDP-1"; resolution = "preferred"; position = "0x0"; scale = "1.0"; };
# Home
main = { name = "eDP-1"; resolution = "1920x1200"; position = "0x1080"; scale = "1.0"; };
second = { name = "desc:Sony SONY TV 0x01010101"; resolution = "1920x1080"; position = "0x0"; scale = "1.0"; };
third = { name = ""; resolution = "preferred"; position = "auto"; scale ="1, mirror, eDP-1"; };
# Presentation
# main = { name = "eDP-1"; resolution = "1920x1080"; position = "1920x1080"; scale = "1.0"; };
# second = { name = ""; resolution = "preferred"; position = "auto"; scale ="1, mirror, eDP-1"; };
# third = { name = ""; resolution = "preferred"; position = "auto"; scale ="1, mirror, eDP-1"; };
# thunderbolt docking
# main = { name = "eDP-1"; resolution = "1920x1200"; position = "1920x1200"; scale = "1.0"; };
# second = { name = "DP-5"; resolution = "1920x1200"; position = "1920x0"; scale = "1.0"; };
# third = { name = "DP-4"; resolution = "1920x1200"; position = "0x0"; scale = "1.0"; };
# second = { name = "DP-6"; resolution = "1920x1200"; position = "0x0"; scale = "1.0"; };
# third = { name = "DP-7"; resolution = "1920x1200"; position = "1920x0"; scale = "1.0"; };
}; };
north = { north = {
main = { name = "desc:Iiyama North America PL3270Q na"; resolution = "2560x1440"; position = "1920x0"; scale = "1.0"; }; main = { name = "desc:Iiyama North America PL3270Q na"; resolution = "2560x1440"; position = "1920x0"; scale = "1.0"; };
left = { name = "desc:Philips Consumer Electronics Company 273PLPH AU11423002132"; resolution = "1920x1080"; position = "0x0"; scale = "1.0"; }; left = { name = "desc:Philips Consumer Electronics Company 273PLPH AU11423002132"; resolution = "1920x1080"; position = "0x0"; scale = "1.0"; };
# right = { name = "HDMI-A-2"; resolution = "1920x1080"; position = "4480x360"; scale = "1.0"; }; # right = { name = "HDMI-A-2"; resolution = "1920x1080"; position = "4480x360"; scale = "1.0"; };
}; };
ace = { ace.main = { name = "HDMI-A-1"; resolution = "3840x2160"; position = "0x0"; scale = "2.0"; };
main = { name = "HDMI-A-1"; resolution = "3840x2160"; position = "0x0"; scale = "2.0"; };
};
}; };
in { in {
home.packages = with pkgs; [ home.packages = with pkgs; [
grim
hyprcursor
hypridle
hyprland-protocols hyprland-protocols
hyprlock hyprlock
hypridle
hyprshot
hyprpicker hyprpicker
hyprcursor hyprshade
grim hyprshot
slurp slurp
# xdg-desktop-portal-hyprland
]; ];
wayland.windowManager.hyprland = { wayland.windowManager.hyprland = {
enable = true; enable = true;
# package = pkgs-unstable.hyprland; # package = pkgs.hyprland;
package = pkgs.hyprland; package = inputs.hyprland.packages.${hyper.system}.hyprland;
# package = inputs.hyprland.packages.${pkgs.system}.hyprland; # package = config.programs.hyprland.package;
xwayland.enable = true; xwayland.enable = true;
systemd.enable = true; systemd.enable = true;
plugins = [ plugins = let s = pkgs.stdenv.hostPlatform.system; in [
# inputs.hyprland-plugins.packages.${pkgs.system}.hyprexpo # inputs.hyprland-plugins.packages.${s}.hyprexpo
# inputs.hyprfocus.packages.${pkgs.system}.hyprfocus # inputs.hyprfocus.packages.${s}.hyprfocus
# inputs.hycov.packages.${pkgs.system}.hycov # inputs.hycov.packages.${s}.hycov
pkgs.hyprlandPlugins.hyprspace # inputs.hyprspace.packages.${s}.Hyprspace
# inputs.hyprspace.packages.${pkgs.system}.Hyprspace # inputs.hyprtasking.packages.${s}.hyprtasking
# inputs.hyprland-easymotion.packages.${s}.hyprland-easymotion
]; ];
settings = { settings = {
@@ -161,10 +179,12 @@ in {
dim_strength = "0.2"; dim_strength = "0.2";
dim_around = "0.8"; dim_around = "0.8";
# screen_shader = "/home/nx2/.config/hypr/shaders/e.glsl";
blur = { blur = {
enabled = true; enabled = true;
size = "10"; size = "2";
passes = "2"; passes = "4";
xray = false; xray = false;
vibrancy = 0.5; vibrancy = 0.5;
ignore_opacity = true; ignore_opacity = true;
@@ -186,10 +206,10 @@ in {
}; };
gestures = { gestures = {
workspace_swipe = true;
workspace_swipe_fingers = "4";
workspace_swipe_distance = "300"; workspace_swipe_distance = "300";
# workspace_swipe_touch = true;
workspace_swipe_invert = true; workspace_swipe_invert = true;
# workspace_swipe_touch_invert = true;
workspace_swipe_min_speed_to_force = "30"; workspace_swipe_min_speed_to_force = "30";
workspace_swipe_cancel_ratio = "0.5"; workspace_swipe_cancel_ratio = "0.5";
workspace_swipe_create_new = false; workspace_swipe_create_new = false;
@@ -199,6 +219,14 @@ in {
workspace_swipe_use_r = false; workspace_swipe_use_r = false;
}; };
gesture = [
"4, horizontal, workspace"
# "3, down, mod: ALT, close"
# "3, up, mod: SUPER, scale: 1.5, fullscreen"
# "3, left, scale: 1.5, float"
];
dwindle = { dwindle = {
preserve_split = true; # you probably want this preserve_split = true; # you probably want this
}; };
@@ -215,83 +243,85 @@ in {
exec-once = [ exec-once = [
"waybar" "waybar"
"swww-daemon" "swww-daemon"
"hyprland-autoname-workspaces" # "hyprland-autoname-workspaces"
"/usr/lib/polkit-kde-authentication-agent-1 " "/usr/lib/polkit-kde-authentication-agent-1 "
"dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP" "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"
"syncthing -no-browser" "syncthing -no-browser"
"fcitx5" "fcitx5"
# "ibus engine xkb:de::deu" # "ibus engine xkb:de::deu"
"libinput-gestures" "libinput-gestures"
"systemctl --user start hyprpanel"
# "hyprswitch --daemon" # "hyprswitch --daemon"
]; ];
windowrulev2 = [ windowrule = [
"bordercolor rgba(${rice.lib.nohash rice.color.magenta.bright}ff), pinned:1" "border_color rgba(${rice.lib.nohash rice.color.special.bright}ff) rgba(${rice.lib.nohash rice.color.special.brighter}ff), match:pin 1"
"bordersize 0, floating:0, onworkspace:w[tv1]" "border_size 0, match:float 0, match:workspace w[tv1]"
"rounding 0, floating:0, onworkspace:w[tv1]" "rounding 0, match:float 0, match:workspace w[tv1]"
"bordersize 0, floating:0, onworkspace:f[1]" "border_size 0, match:float 0, match:workspace f[1]"
"rounding 0, floating:0, onworkspace:f[1]" "rounding 0, match:float 0, match:workspace f[1]"
] ++ [ ] ++ [
"center 1,class:^(gimp)$" "center 1,match:class ^(gimp)$"
"float, class:^(ibus-ui.*)$" "float on, match:class ^(ibus-ui.*)$"
"float, class:^(ibus-ui-gtk3)$" "float on, match:class ^(ibus-ui-gtk3)$"
"float, class:^(imv)$" "float on, match:class ^(imv)$"
"float, class:^(org.kde.polkit-kde-authentication-agent-1)$" "float on, match:class ^(org.kde.polkit-kde-authentication-agent-1)$"
"float, class:^(presenter)$" # sent "float on, match:class ^(presenter)$" # sent
"float, class:^(thunderbird)$" "float on, match:class ^(thunderbird)$"
"float, title:^(Compact folders)$" "float on, match:title ^(Compact folders)$"
"float, title:^(Ibus-ui.*)$" "float on, match:title ^(Ibus-ui.*)$"
"float, title:^(Ibus-ui-gtk3)$" "float on, match:title ^(Ibus-ui-gtk3)$"
"float, title:^(Page Info .*)$" "float on, match:title ^(Page Info .*)$"
"float, title:^(Picture-in-Picture)$" "float on, match:title ^(Picture-in-Picture)$"
"float, title:^(wlogout)$" "float on, match:title ^(wlogout)$"
"fullscreen, class:^(imv)$" "fullscreen on, match:class ^(imv)$"
"fullscreen, class:^(sent)$" "fullscreen on, match:class ^(sent)$"
"fullscreen, class:^(wlogout)$" "fullscreen on, match:class ^(wlogout)$"
"noanim, class:^(imv)$" "no_anim on, match:class ^(imv)$"
"noanim, class:^(presenter)$" # sent "no_anim on, match:class ^(presenter)$" # sent
"opacity ${transparency}, class:^(Code)$" "opacity ${transparency}, match:class ^(Code)$"
"opacity ${transparency}, class:^(code-oss)$" "opacity ${transparency}, match:class ^(code-oss)$"
"opacity ${transparency}, class:^(discord)$" "opacity ${transparency}, match:class ^(discord)$"
"opacity ${transparency}, class:^(vesktop)$" # "opacity ${transparency}, match:class ^(vesktop)$"
# "opacity ${transparency}, class:^(Element)$" # "opacity ${transparency}, match:class ^(Element)$"
"opacity ${transparency}, class:^(lutris)$" "opacity ${transparency}, match:class ^(lutris)$"
"opacity ${transparency}, class:^(neovide)$" "opacity ${transparency}, match:class ^(neovide)$"
# "opacity ${transparency}, class:^(obsidian)$" # "opacity ${transparency}, match:class ^(obsidian)$"
"opacity ${transparency}, class:^(vesktop)$" "opacity ${transparency}, match:class ^(VSCodium)$"
"opacity ${transparency}, class:^(VSCodium)$" "opacity ${transparency}, match:title ^(wlogout)$"
"opacity ${transparency}, title:^(wlogout)$" "opaque on, match:title ^(GNU Image Manipulation Program)$"
"opaque on, match:fullscreen 1"
"opaque, title:^(GNU Image Manipulation Program)$"
"pin, title:^(Picture-in-Picture)$" "pin on, match:title ^(Picture-in-Picture)$"
"tile, class:^(sent)$" "tile on, match:class ^(sent)$"
"workspace 100, class:^(gamescope)$" "workspace 100, match:class ^(gamescope)$"
"float, title:^(terminal-file-picker)$" "float on, match:title ^(terminal-file-picker)$"
"dimaround, title:^(terminal-file-picker)$" "dim_around on, match:title ^(terminal-file-picker)$"
"center, title:^(terminal-file-picker)$" "center on, match:title ^(terminal-file-picker)$"
"size 80% 80%, title:^(terminal-file-picker)$" "size 80% 80%, match:title ^(terminal-file-picker)$"
];
"float on, match:initial_title ^(Select Calendar)$"
"size 30% 30%, match:initial_title ^(Select Calendar)$"
];
layerrule = [ layerrule = [
"blur,waybar" "blur on, match:namespace waybar"
"blur,bar-0" # hyprpanel "blur on, match:namespace bar-0" # hyprpanel
"blur,bar-1" "blur on, match:namespace bar-1"
"blur,bar-2" "blur on, match:namespace bar-2"
"blur,bar-3" "blur on, match:namespace bar-3"
"blur,bar-4" "blur on, match:namespace bar-4"
"dimaround,rofi" "blur on, match:namespace rofi"
"blur,rofi" "dim_around on, match:namespace rofi"
"xray,rofi"
]; ];
@@ -356,25 +386,28 @@ in {
## ROW 2: ## ROW 2:
# "SUPER, TAB, hycov:toggleoverview" # "SUPER, TAB, hycov:toggleoverview"
"SUPER, TAB, overview:toggle" # "SUPER, TAB, overview:toggle"
# "SUPER, TAB, hyprexpo:expo, toggle" # "SUPER, TAB, hyprexpo:expo, toggle"
# "SUPER, TAB, hyprtasking:killhovered"
# ", Escape, hyprtasking:if_active, hyprtasking:toggle cursor"
"ALT, TAB, focuscurrentorlast" "ALT, TAB, focuscurrentorlast"
# "SUPER, TAB, exec, hyprswitch --daemon" # "SUPER, TAB, exec, hyprswitch --daemon"
"SUPER, Q, killactive" "SUPER, Q, killactive"
"SUPER, W, exec, submap_indicator set '󰈹 '" "SUPER, W, exec, submap_indicator set '󰈹 '"
"SUPER, W, submap, browserSM " "SUPER, W, submap, browserSM "
"SUPER, E, exec, element-desktop" # "SUPER, E, exec, element-desktop"
"SUPER, R, exec, rofi -show drun" "SUPER, R, exec, rofi -show drun"
"SUPER SHIFT, R, exec, rofi -show drun"
# "SUPER, T, exec, alacritty" # "SUPER, T, exec, alacritty"
# "SUPER SHIFT, T, exec, alacritty -e sh -c "ssh nxace"" # "SUPER SHIFT, T, exec, alacritty -e sh -c "ssh nxace""
"SUPER, T, exec, SESSION_FROM_DE=TRUE ${terminal}" "SUPER, T, exec, SESSION_FROM_DE=TRUE ${terminal}"
"SUPER SHIFT, T, exec, ${terminal-exec}'ssh nxace'" ''SUPER SHIFT, T, exec, ${terminal-exec}'echo -e "\\e]11;#${rice.color.secondary.darker}\\e\\\\" && ssh nxace' '' # yes this is a double hash.
"SUPER, Z, exec, zathura" "SUPER, Z, exec, zathura"
"SUPER, U, exec, [tile] thunderbird " "SUPER, U, exec, [tile] thunderbird "
"SUPER, I, exec, ${terminal-exec}'hx ~/nix-dots/ && fish'" "SUPER, I, exec, ${terminal-exec}'hx ~/nix-dots/ && fish'"
"SUPER SHIFT, I, exec, ${terminal-exec}'nh home switch || read'" "SUPER SHIFT, I, exec, ${terminal-exec}'nh home switch || read'"
"SUPER CTRL, I, exec, ${terminal-exec}'nh os switch || read'" "SUPER CTRL, I, exec, ${terminal-exec}'nh os switch || read'"
"SUPER, O, exec, obsidian " # "SUPER, O, exec, obsidian "
"SUPER, P, pin " "SUPER, P, pin "
# "SUPER, Ü," # "SUPER, Ü,"
# "SUPER, +," # "SUPER, +,"
@@ -390,7 +423,7 @@ in {
"SUPER, D, exec, vesktop" "SUPER, D, exec, vesktop"
# "SUPER, D, exec, discord" # "SUPER, D, exec, discord"
"SUPER, F, fullscreen" "SUPER, F, fullscreen"
# "SUPER, G," # "SUPER, G, action:hyprctl dispatch focuswindow address:{}"
"SUPER, H, movefocus, l" "SUPER, H, movefocus, l"
"SUPER, J, movefocus, d" "SUPER, J, movefocus, d"
"SUPER, K, movefocus, u" "SUPER, K, movefocus, u"
@@ -410,9 +443,11 @@ in {
"SUPER, C, exec, chatterino" "SUPER, C, exec, chatterino"
"SUPER SHIFT, C, exec, hyprpicker -n -a" "SUPER SHIFT, C, exec, hyprpicker -n -a"
"SUPER, V, togglefloating, " "SUPER, V, togglefloating, "
"SUPER, B, exec, bitwarden" # "SUPER, B, exec, bitwarden"
"SUPER, N, togglesplit" "SUPER, N, layoutmsg, togglesplit"
# "SUPER, M, exec, /home/nx2/scripts/meme-full-screen/meme-full-screen.sh " # "SUPER, M, exec, /home/nx2/scripts/meme-full-screen/meme-full-screen.sh "
''SUPER, M, exec, sh -c "hyprshade on $(find ${hyper.home}/.config/hypr/shaders -type f | sed -E 's-.*shaders/(.+)\.glsl-\1-g' | rofi -dmenu)"''
"SUPER Shift, M, exec, hyprshade off"
# "SUPER, comma, exec, /home/nx2/scripts/change-language.sh" # "SUPER, comma, exec, /home/nx2/scripts/change-language.sh"
"SUPER, ., exec, echo key x:Prior | dotool" "SUPER, ., exec, echo key x:Prior | dotool"
"SUPER, -, exec, echo key x:Next | dotool" "SUPER, -, exec, echo key x:Next | dotool"
@@ -480,6 +515,10 @@ in {
# "SUPER, TAB, exec, hyprswitch --daemon --do-initial-execute" # "SUPER, TAB, exec, hyprswitch --daemon --do-initial-execute"
"SUPER, Next, resizeactive, 10% 10%" "SUPER, Next, resizeactive, 10% 10%"
"SUPER, Prior, resizeactive, -10% -10%" "SUPER, Prior, resizeactive, -10% -10%"
"SUPER ALT, j, resizeactive, 0% 7%"
"SUPER ALT, k, resizeactive, 0% -7%"
"SUPER ALT, l, resizeactive, 7% 0%"
"SUPER ALT, h, resizeactive, -7% 0%"
]; ];
plugin = { plugin = {
overview = { overview = {
@@ -513,6 +552,59 @@ in {
reverseSwipe = true; # reverses the direction of swipe gesture, for macOS peeps? reverseSwipe = true; # reverses the direction of swipe gesture, for macOS peeps?
exitKey = true; exitKey = true;
}; };
hypertasking = {
layout = "grid";
gap_size = 20;
bg_color = "0xff${rice.color.background}";
border_size = 4;
exit_on_hovered = false;
warp_on_move_window = 1;
close_overview_on_reload = true;
drag_button = "0x110"; # left mouse button
select_button = "0x111"; # right mouse button
# for other mouse buttons see <linux/input-event-codes.h>
gestures = {
enabled = true;
move_fingers = 3;
move_distance = 300;
open_fingers = 4;
open_distance = 300;
open_positive = true;
};
grid = {
rows = 3;
cols = 3;
loop = false;
layers = 2;
loop_layers = true;
gaps_use_aspect_ratio = false;
};
linear ={
top = false;
height = 400;
scroll_speed = 1.0;
blur = false;
};
};
easymotion = {
textsize = 15;
textcolor = "rgba(ffffffff)";
bgcolor = "rgba(000000ff)";
blur = 0;
blurA = 1.0;
xray = 0;
textfont = "Sans";
textpadding = 0;
bordersize = 0;
bordercolor = "rgba(ffffffff)";
rounding = 0;
fullscreen_action = "none";
motionkeys = "abcdefghijklmnopqrstuvwxyz1234567890";
motionlabels = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
only_special = "true";
};
}; };
}; };
@@ -603,7 +695,9 @@ in {
submap = screenshot submap = screenshot
${action_simple { key = "W"; cmd = ''exec,hyprshot -m window''; }} ${action_simple { key = "W"; cmd = ''exec,hyprshot -m window''; }}
${action_simple { key = "M"; cmd = ''exec,hyprshot -m output''; }} ${action_simple { key = "M"; cmd = ''exec,hyprshot -m output''; }}
${action_simple { key = "S"; cmd = ''exec,hyprshot -m output''; }}
${action_simple { key = "R"; cmd = ''exec,hyprshot -m region''; }} ${action_simple { key = "R"; cmd = ''exec,hyprshot -m region''; }}
${action_simple { key = "A"; cmd = ''exec,hyprshot -m region''; }}
bind = , Escape, execr, submap_indicator unset bind = , Escape, execr, submap_indicator unset
bind = , Escape, submap, reset bind = , Escape, submap, reset
submap = reset submap = reset

View File

@@ -1,6 +1,4 @@
{ pkgs, ... }@all: with all; { pkgs, ... }@all: with all; {
lib.mkIf (hyper.host != "NxACE")
{
home.packages = with pkgs; [ home.packages = with pkgs; [
texlab # LSP texlab # LSP
(texlive.combine { inherit (texlive) scheme-full xifthen ifmtarg framed paralist titlesec xcolor; }) (texlive.combine { inherit (texlive) scheme-full xifthen ifmtarg framed paralist titlesec xcolor; })

View File

@@ -0,0 +1,5 @@
{ pkgs, ... }@all: with all; {
home.packages = with pkgs; [
solaar
];
}

View File

@@ -1,5 +1,4 @@
{ config, pkgs, ... }@all: with all; { config, pkgs, ... }@all: with all; {
{
home.packages = with pkgs; [ libnotify ]; home.packages = with pkgs; [ libnotify ];
services.mako = with rice; { services.mako = with rice; {
enable = if config.programs.hyprpanel.enable then false else true; enable = if config.programs.hyprpanel.enable then false else true;

View File

@@ -32,9 +32,11 @@
thumbfast # thumbnails on timeline hover thumbfast # thumbnails on timeline hover
# uosc # custom ui # uosc # custom ui
sponsorblock sponsorblock
# visualizer
]; ];
bindings = { bindings = {
"O" = ''no-osd cycle-values glsl-shaders "~~/shaders/invert.glsl" ""; show-text "Invert Shader"''; "O" = ''no-osd cycle-values glsl-shaders "~~/shaders/invert.glsl" ""; show-text "Invert Shader"'';
"F5" = ''set contrast 0;set brightness 0;set gamma 0;set saturation 0;set hue 0;set sub-pos 100;set sub-scale 1;set panscan 0;set zoom 0;show-text default'';
# "tab" = ''script-binding uosc/toggle-ui''; # "tab" = ''script-binding uosc/toggle-ui'';
# "space" = ''cycle pause; script-binding uosc/flash-pause-indicator''; # "space" = ''cycle pause; script-binding uosc/flash-pause-indicator'';
# "right" = ''seek 5''; # "right" = ''seek 5'';

View File

@@ -1,4 +1,4 @@
{ pkgs, ... }@all: with all; { pkgs, ... }@all: with all; let
sep = " "; sep = " ";
in { in {
home = { home = {

View File

@@ -1,5 +1,4 @@
{ pkgs, ... }@all: with all; { pkgs, ... }@all: with all; {
{
home.packages = [ home.packages = [
(pkgs.writeShellApplication { (pkgs.writeShellApplication {
name = "nx_backup"; name = "nx_backup";

View File

@@ -1,29 +1,60 @@
{ pkgs, ... }@all: with all; { { pkgs, ... }@all: with all; {
home = { programs.opencode = {
packages = with pkgs; [ enable = true;
latest.opencode package = pkgs.opencode;
]; themes.theme = with rice.color; let
file.".config/opencode/opencode.json".text = let dl = color: { dark = color; light = color; };
model = "qwen2.5-coder:7b"; in {
in builtins.toJSON { accent = dl accent.base;
"$schema" = "https://opencode.ai/config.json"; background = dl background;
model = "ollama/${model}"; backgroundElement = dl subtle.dark;
theme = "matrix"; backgroundPanel = dl subtle.darker;
provider = { border = dl subtle.base;
ollama = { borderActive = dl border;
name = "Ollama (local)"; borderSubtle = dl subtle.dark;
npm = "@ai-sdk/openai-compatible"; diffAdded = dl positive.base;
options = { diffAddedBg = dl positive.darker;
baseURL = "http://localhost:11434/v1"; diffAddedLineNumberBg = dl positive.dark;
}; diffContext = dl foreground;
models = { diffContextBg = dl subtle.dark;
"${model}" = { diffHighlightAdded = dl positive.bright;
tools = true; diffHighlightRemoved = dl negative.bright;
}; diffHunkHeader = dl foreground;
}; diffLineNumber = dl subtle.base;
}; diffRemoved = dl negative.base;
}; diffRemovedBg = dl negative.darker;
diffRemovedLineNumberBg = dl negative.dark;
error = dl negative.dark;
info = dl special.base;
markdownBlockQuote = dl accent.base;
markdownCode = dl secondary.base;
markdownCodeBlock = dl secondary.base;
markdownEmph = dl accent.base;
markdownHeading = dl accent.base;
markdownHorizontalRule = dl border;
markdownImage = dl accent.base;
markdownImageText = dl accent.bright;
markdownLink = dl accent.base;
markdownLinkText = dl accent.bright;
markdownListEnumeration = dl foreground;
markdownListItem = dl foreground;
markdownStrong = dl accent.base;
markdownText = dl foreground;
primary = dl accent.base;
secondary = dl secondary.base;
success = dl positive.base;
syntaxComment = dl subtle.base;
syntaxFunction = dl accent.base;
syntaxKeyword = dl special.base;
syntaxNumber = dl tertiary.base;
syntaxOperator = dl accent.base;
syntaxPunctuation = dl foreground;
syntaxString = dl accent.base;
syntaxType = dl tertiary.base;
syntaxVariable = dl accent.base;
text = dl foreground;
textMuted = dl subtle.bright;
warning = dl weird.base;
}; };
}; };
} }

View File

@@ -1,5 +1,6 @@
{ pkgs, ... }@all: with all; { { pkgs, ... }@all: with all; {
home.packages = with pkgs; [ home.packages = with pkgs; [
xdg-desktop-portal
brightnessctl brightnessctl
blueman blueman
fontpreview fontpreview
@@ -7,10 +8,12 @@
gsettings-desktop-schemas gsettings-desktop-schemas
imv imv
pavucontrol pavucontrol
# playerctl playerctl
swww swww
wev wev
wl-clipboard wl-clipboard
xclip xclip
wlr-randr
cava
]; ];
} }

View File

@@ -1,15 +1,22 @@
{ pkgs, hyper, ... }: { { pkgs, hyper, ... }: {
home.packages = with pkgs; [ home.packages = (with pkgs; [
chromium chromium
element-desktop gnome-clocks
gnome-calculator
gnome-characters
gnome-2048
qbittorrent qbittorrent
unstable.spotify
wl-clipboard wl-clipboard
xfce.thunar xfce.thunar
] ++ (if (hyper.host != "NxACE") then [ ]) ++ (if hyper.isWorkstation then (with pkgs; [
signal-desktop signal-desktop
unstable.code-cursor-fhs
latest.antigravity
element-desktop
obsidian obsidian
zoom-us fontforge-gtk
inkscape inkscape
] else []); audacity
libreoffice
]) else []);
} }

View File

@@ -1,9 +1,11 @@
{ pkgs, ... }@all: with all; { { pkgs, ... }@all: with all; {
home.packages = with pkgs; [ home.packages = with pkgs; [
asciinema
bat bat
cmake cmake
cmatrix
dig dig
du-dust dust
dysk dysk
exiftool exiftool
eza eza
@@ -17,12 +19,15 @@
htop htop
imagemagick imagemagick
jq jq
libxml2
lolcat lolcat
lynx lynx
mediainfo mediainfo
neofetch neofetch
nmap
pastel pastel
pdfgrep pdfgrep
pdftk
pipes pipes
pv pv
reflex reflex
@@ -32,8 +37,11 @@
sssnake sssnake
systemctl-tui systemctl-tui
tldr tldr
unstable.gemini-cli
unstable.gemini-cli
unstable.yt-dlp
unstable.yt-dlp
w3m w3m
which which
yt-dlp
]; ];
} }

View File

@@ -0,0 +1,12 @@
{ ... }: {
imports = [
./programming/c.nix
# ./programming/gleam.nix
./programming/glsl.nix
./programming/go.nix
./programming/java.nix
./programming/js.nix
./programming/python.nix
./programming/rust.nix
];
}

View File

@@ -1,6 +1,4 @@
{ pkgs, ... }@all: with all; { pkgs, ... }@all: with all; {
lib.mkIf (hyper.host != "NxACE")
{
home.packages = with pkgs; [ home.packages = with pkgs; [
erlang erlang
rebar3 rebar3

View File

@@ -1,8 +1,7 @@
{ pkgs, ... }@all: with all; { pkgs, ... }@all: with all; {
{ programs.go = {
home = { enable = true;
packages = with pkgs; [ package = pkgs.go;
go env.goPath = "${config.xdg.dataHome}/go";
];
}; };
} }

View File

@@ -1,17 +1,18 @@
{ pkgs, ... }@all: with all; { pkgs, ... }@all: with all; {
{
home = let home = let
python-with-packages = pkgs.python3.withPackages (pp: with pp; [ python-with-packages = pkgs.python3.withPackages (pp: with pp; [
ipython ipython
requests requests
debugpy # debugpy
black black
uv
uv-build
]); ]);
in { in {
packages = [ packages = [
python-with-packages python-with-packages
] ++ (with pkgs; [ ] ++ (with pkgs; [
python311Packages.python-lsp-server python313Packages.python-lsp-server
ruff ruff
pyright pyright
]); ]);

View File

@@ -0,0 +1,12 @@
{ pkgs, ... }@all: with all; {
home = {
packages = with pkgs; [
gdb
cargo
clippy
rustc
rustfmt
rust-analyzer
];
};
}

View File

@@ -23,9 +23,7 @@
}; };
}; };
}; };
secrets = { secrets.pass = "/run/user/1000/secrets/copyparty/user-password/${hyper.user}";
pass = "/run/user/1000/secrets/copyparty/user-password/${hyper.user}";
};
}; };
}; };
}; };

View File

@@ -1,114 +1,46 @@
{ pkgs, ... }@all: with all; { pkgs, ... }@all: with all; {
{ home = {
home.packages = with pkgs; [ packages = with pkgs; [ rofi ];
rofi-wayland file = let # the home-manager module sucks
]; trdr = "${rice.lib.float-to-drune rice.transparency}";
home.file = let ts = builtins.toString;
trdr = "${rice.lib.float-to-drune rice.transparency}"; in with rice.color; {
in with rice.color; { ".config/rofi/config.rasi".text = ''
".config/rofi/config.rasi".text = '' configuration {
configuration { show-icons: false;
show-icons: false; display-drun: "";
display-drun: ""; disable-history: false;
disable-history: false; }
drun-display-format: "{name} [<span weight='light' size='small'><i>({generic})</i></span>] [<span weight='light' size='small'><i>({exec})</i></span>]"; * {
} font: "${rice.font.code.name} 12";
foreground: ${foreground};
* { text-color: ${foreground};
font: "${rice.font.code.name} 12"; background-color: transparent;
foreground: ${foreground}; padding: 0px;
background-color: ${background}${trdr}; margin: 0px;
padding: 0px; spacing: 0px;
margin: 0px; border-width: 0px;
spacing: 0px; }
border-width: 0px; window {
} background-color: ${background}${trdr};
border: ${ts rice.border-width}px;
#window { border-radius: ${ts rice.rounding}px;
background-color: ${background}${trdr}; border-color: ${ts rice.color.border};
border: ${builtins.toString rice.border-width}px; }
border-radius: ${builtins.toString rice.rounding}; listview { scrollbar: false; }
border-color: ${border}; element { border-radius: ${ts rice.rounding}px; }
} element.normal.normal { background-color: ${accent.darker}; text-color: ${accent.base}; }
#mainbox { element.selected.normal { background-color: ${accent.base}; text-color: ${accent.darker}; }
border: 0; element.alternate.normal { background-color: ${secondary.darker}; text-color: ${secondary.base}; }
padding: 0; inputbar { children: [ prompt,textbox-prompt-colon,entry,case-indicator ]; }
} prompt { }
#message { textbox-prompt-colon {
border: 0px; expand: false;
} str: ">";
#textbox { }
text-color: ${foreground}; case-indicator { }
} entry { placeholder: ""; }
#listview { '';
fixed-height: 0; };
border: 0px;
spacing: 0px ;
scrollbar: false;
padding: 0px;
}
#element {
border: 0;
padding: 0px;
border-radius: ${if rice.rounding > 0 then "2" else "0"}px;
}
#element.normal.normal { background-color: ${background}${trdr}; text-color: ${accent.base}; }
#element.selected.normal { background-color: ${tertiary.base}${trdr}; text-color: ${background}; }
#element.alternate.normal { background-color: ${background}${trdr}; text-color: ${secondary.base}; }
#scrollbar {
width: ${builtins.toString rice.border-width}px ;
border: 0;
handle-width: 8px ;
padding: 0;
}
#sidebar {
border: ${builtins.toString rice.border-width}px dash;
}
#button.selected {
text-color: ${foreground};
}
#inputbar {
spacing: 0;
text-color: ${background};
background-color: ${accent.base}${trdr};
padding: 0;
margine-bottom: 2px;
children: [ prompt,textbox-prompt-colon,entry,case-indicator ];
}
#prompt {
spacing: 0;
background-color: transparent;
text-color: ${foreground};
}
#textbox-prompt-colon {
expand: false;
str: ">";
margin: 0px 0.3em 0em 0em ;
text-color: ${background};
background-color: transparent;
}
#case-indicator {
spacing: 0;
text-color: ${foreground};
background-color: transparent;
}
#entry {
spacing: 0;
text-color: ${background};
background-color: transparent;
placeholder: "";
}
element-text, element-icon {
background-color: inherit;
text-color: inherit;
}
'';
}; };
} }

View File

@@ -1,23 +1,7 @@
{ pkgs, ... }@all: with all; { pkgs, ... }@all: with all; {
{ imports = [ inputs.sops-nix.homeManagerModules.sops ];
imports = [
inputs.sops-nix.homeManagerModules.sops
];
sops = { sops = {
age.keyFile = lib.mkIf (hyper.host == "NxACE") "${hyper.home}/.age_nx2_key_13.txt"; age.keyFile = "${hyper.home}/vault/age/sopsnix-${hyper.host}-home.key";
gnupg.home = lib.mkIf (hyper.host != "NxACE") "${hyper.home}/.gnupg";
defaultSopsFile = ../sops-secrets.yaml; defaultSopsFile = ../sops-secrets.yaml;
# %r is $XDG_RUNTIME_DIR
secrets = {
"example" = {
path = "%r/secrets/example";
};
# "sops-age-private-key" = { # Bootstrapping doens't work
# mode = "0400";
# path = "/home/${user}/.config/sops/age/keys.txt";
# };
};
}; };
} }

57
home-modules/spotify.nix Normal file
View File

@@ -0,0 +1,57 @@
{ pkgs, ... }@all: with all;
{
home.packages = with pkgs; [
unstable.spotify
unstable.spicetify-cli
];
services.librespot = {
enable = true;
package = pkgs.unstable.librespot;
};
sops.secrets."spotify/spotiy-player-clinet-id" = { path = "%r/secrets/spotify/spotiy-player-clinet-id"; };
programs.spotify-player = {
enable = true;
package = pkgs.unstable.spotify-player;
settings = {
border_type = "Rounded";
client_id_command = "cat $XDG_RUNTIME_DIR/secrets/spotify/spotiy-player-clinet-id";
copy_command.command = "wl-copy";
cover_img_length = 20;
cover_img_scale = 1; # if this is not 1 it doesnt fit in the box (for me)
cover_img_width = 9; # this ratio depends on your terminal font
device.normalization = true;
genre_num = 32; # all of them
liked_icon = "";
name = "spotify-player-${hyper.host}";
pause_icon = "";
playback_window_position = "Bottom";
play_icon = "";
progress_bar_position = "Right"; # "Bottom"
progress_bar_type = "Rectangle"; # "Line"
theme = "${hyper.user}";
};
themes = [{
name = "${hyper.user}";
component_style = with rice.color; {
block_title = { fg = accent.bright; };
border = { fg = border; };
current_playing = { fg = special.base; bg = special.darker; modifiers = ["Italic"]; };
like = { fg = positive.base; };
lyrics_played = { fg = subtle.base; };
lyrics_playing = { fg = special.base; };
page_desc = { fg = secondary.base; };
playback_album = { fg = secondary.base; };
playback_artists = { fg = secondary.base; };
playback_genres = { fg = subtle.base; };
playback_metadata = { fg = accent.base; bg = background; };
playback_progress_bar = { fg = accent.brighter; bg = accent.dark; modifiers = ["Bold"]; };
playback_status = { fg = accent.bright; };
playback_track = { fg = accent.bright; modifiers = ["Bold"]; };
secondary_row = { fg = accent.brighter; };
selection = { bg = accent.dark; };
table_header = { fg = tertiary.bright; };
# playback_progress_bar_unfilled (Specific to progress_bar_type as Line) = "";
};
}];
};
}

View File

@@ -1,27 +1,52 @@
{ pkgs, ... }@all: with all; { pkgs, ... }@all: with all; {
{ home.packages = with pkgs; [ sshfs ];
home = { programs.ssh = {
packages = with pkgs; [ openssh sshfs ]; enable = true;
file.".ssh/config".text = '' package = pkgs.openssh;
HOST nxace enableDefaultConfig = false;
HostName ssh.${hyper.domain} matchBlocks = let
User nx2 default = {
Port 50022 addKeysToAgent = "yes";
forwardAgent = false;
HOST nxacel compression = false;
HostName 10.0.1.1 serverAliveInterval = 0;
User nx2 serverAliveCountMax = 3;
Port 50022 hashKnownHosts = false;
userKnownHostsFile = "~/.ssh/known_hosts";
HOST nxrpil controlMaster = "no";
HostName 10.0.1.31 controlPath = "~/.ssh/master-%r@%n:%p";
User nx2 controlPersist = "no";
Port 22 };
nxace = name: default // {
HOST nxgit host = name;
HostName ssh.${hyper.domain} hostname = "ssh.${hyper.domain}";
User git user = "nx2";
Port 50022 port = 50022;
''; identityFile = [ "${hyper.home}/vault/ssh/nxace-nx2-${hyper.host}" ];
};
in {
"*" = default;
"ssh.nx2.site" = default // { identityFile = [
"${hyper.home}/vault/ssh/nxgit-nx2-${hyper.host}"
"${hyper.home}/vault/ssh/nxace-nx2-${hyper.host}"
]; };
"tg.dm.informatik.tu-darmstadt.de" = default // { identityFile = [ "${hyper.home}/vault/ssh/tg-dm-informatik-tuda" ]; };
"git.da.dicos.de" = default // { identityFile = [ "${hyper.home}/vault/ssh/dcsgit-lkurzweg-${hyper.host}" ]; };
"github.com" = default // { identityFile = [ "${hyper.home}/vault/ssh/github-noggynoggy-${hyper.host}" ]; };
"nxace" = (nxace "nxace" );
"nxacel" = (nxace "nxacel") // { hostname = "10.0.1.1"; };
"nxrpli" = (nxace "nxrpil") // { hostname = "10.0.1.31"; port = 22; };
"nx2s-email-relay" = default // {
identityFile = "${hyper.home}/vault/ssh/nx2s-email-relay";
hostname = "35.243.218.208";
port = 22;
user = secrets.ssh.nx2s-email-relay-user;
};
};
};
services.ssh-agent = {
enable = true;
# socket = "ssh-agent"; # suffix to $XDG_RUNTIME_DIR
# package = pkgs.openssh;
}; };
} }

View File

@@ -0,0 +1,84 @@
{ pkgs, ... }@all: with all; lib.mkIf (hyper.isPersonal) {
programs.thunderbird = let
inherit (lib.generators) toJSON;
extensions = toJSON {} {
"addon@darkreader.org" = "71d6c69d-55f9-4c56-888c-abdcf6efd73d";
};
in {
enable = true;
profiles = {
"${hyper.user}" = {
isDefault = true;
settings = with rice.color; {
"calendar.alarms.showmissed" = false;
"calendar.alarms.playsound" = false;
"calendar.alarms.show" = false;
"extensions.webextensions.uuids" = extensions;
"mail.startup.enabledMailCheckOnce" = true;
"mailnews.mark_message_read.delay" = true;
"mailnews.mark_message_read.delay.interval" = 3;
"mailnews.tags.$label1.color" = red.base;
"mailnews.tags.$label1.tag" = "Important";
"mailnews.tags.$label2.color" = yellow.base;
"mailnews.tags.$label2.tag" = "Work";
"mailnews.tags.$label3.color" = green.base;
"mailnews.tags.$label3.tag" = "Personal";
"mailnews.tags.$label4.color" = cyan.base;
"mailnews.tags.$label4.tag" = "To Do";
"mailnews.tags.$label5.color" = blue.base;
"mailnews.tags.$label5.tag" = "Later";
"mailnews.headers.showMessageId" = true;
"mailnews.headers.showOrganization" = true;
"mailnews.headers.showReferences" = true;
"mailnews.headers.showSender" = true;
"mailnews.headers.showUserAgent" = true;
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
};
userChrome = with rice.color; /* css */ ''
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;
}
.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;
}
'';
};
};
};
}

View File

@@ -1,8 +1,8 @@
{ pkgs, ... }@all: with all; { pkgs, ... }@all: with all;
{ {
home.packages = with pkgs; [ home.packages = [
(writers.writePython3Bin "change_colors_json" { (pkgs.writers.writePython3Bin "change_colors_json" {
libraries = with python3Packages; [ numpy pillow scikit-learn ]; libraries = with pkgs.python3Packages; [ numpy pillow scikit-learn ];
flakeIgnore = [ "E302" "E305" "E226" "E501" ]; flakeIgnore = [ "E302" "E305" "E226" "E501" ];
} /*python */ '' } /*python */ ''
from colorsys import hls_to_rgb, rgb_to_hls from colorsys import hls_to_rgb, rgb_to_hls
@@ -141,7 +141,10 @@
foreground = alter_l(accent, 0.9) foreground = alter_l(accent, 0.9)
background = alter_l(accent, 0.05) background = alter_l(accent, 0.05)
d = { with open("${hyper.home}/nix-dots/flake-modules/colors.json", "r") as f:
full_d = json.load(f)
full_d['${hyper.host}'] = {
"base": { "base": {
"foreground": list_to_hex(foreground), "foreground": list_to_hex(foreground),
"background": list_to_hex(background) "background": list_to_hex(background)
@@ -155,8 +158,8 @@
} }
} }
with open("/home/nx2/nix-dots/flake-modules/colors.json", "w") as f: with open("${hyper.home}/nix-dots/flake-modules/colors.json", "w") as f:
f.write(json.dumps(d, indent=4)) f.write(json.dumps(full_d, indent=4))
'') '')
]; ];
} }

View File

@@ -8,25 +8,25 @@
mimeApps = { mimeApps = {
enable = true; enable = true;
defaultApplications = let defaultApplications = let
browser = "firefox.desktop"; browser = "firefox.desktop";
image = "imv.desktop"; image = "imv.desktop";
in { in {
"default-web-browser" = [ browser ]; "default-web-browser" = [ browser ];
"text/html" = [ browser ]; "text/html" = [ browser ];
"text/htm" = [ browser ]; "text/htm" = [ browser ];
"x-scheme-handler/http" = [ browser ]; "x-scheme-handler/http" = [ browser ];
"x-scheme-handler/https" = [ browser ]; "x-scheme-handler/https" = [ browser ];
"x-scheme-handler/about" = [ browser ]; "x-scheme-handler/about" = [ browser ];
"x-scheme-handler/unknown" = [ browser ]; "x-scheme-handler/unknown" = [ browser ];
"x-scheme-handler/mailto" = "thunderbird.desktop"; "x-scheme-handler/mailto" = "thunderbird.desktop";
"image/png" = image; "image/png" = image;
"image/jpg" = image; "image/jpg" = image;
"image/jpeg" = image; "image/jpeg" = image;
"image/webp" = image; "image/webp" = image;
"image/gif" = image; "image/gif" = image;
"application/pdf" = "zathura.desktop"; "application/pdf" = "zathura.desktop";
"inode/directory" = "thunar.desktop"; "inode/directory" = "thunar.desktop";
}; };
}; };
}; };
} }

View File

@@ -1,12 +1,11 @@
{ pkgs, ... }@all: with all; let { pkgs, ... }@all: with all; let
tfc = pkgs.latest.xdg-desktop-portal-termfilechooser; not-nod = (pkgs.pkgs-version != "24.05");
x = (pkgs.version != "24.05"); tfc = pkgs.unstable.xdg-desktop-portal-termfilechooser;
in { in {
home.packages = [ home.packages = [
pkgs.unar pkgs.unar
tfc tfc
]; ];
programs.yazi = { programs.yazi = {
enable = true; enable = true;
# package = pkgs.yazi; # package = pkgs.yazi;
@@ -31,24 +30,24 @@ in {
{ on = "<C-f>"; run = "arrow 100%"; desc = "Move cursor down 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 = "<PageUp>"; run = "arrow -100%"; desc = "Move cursor up one page"; }
{ on = "<PageDown>"; run = "arrow 100%"; desc = "Move cursor down one page"; } { on = "<PageDown>"; run = "arrow 100%"; desc = "Move cursor down one page"; }
{ on = [ "g" "g" ]; run = "arrow top"; desc = "Move cursor to the top"; }
{ on = [ "g" "e" ]; run = "arrow bot"; 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"; }
(pkgs.lib.mkIf (hyper.host == "NxACE") { on = [ "g" "s" ]; run = "cd /var/lib/hugo/nx2site"; desc = "Go to the Hugo Nx2.Site 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" "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" "c" ]; run = "cd ~/.config"; desc = "Go to the config 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" "D" ]; run = "cd ~/Documents"; desc = "Go to the Documents directory"; }
{ on = [ "g" "r" ]; run = "cd /"; desc = "Go to the root (/) directory"; } { on = [ "g" "d" ]; run = "cd ~/Downloads"; desc = "Go to the downloads directory"; }
{ on = [ "g" "e" ]; run = "arrow bot"; desc = "Move cursor to the end"; }
{ on = [ "g" "g" ]; run = "arrow top"; desc = "Move cursor to the top"; }
{ on = [ "g" "h" ]; run = "cd ~"; desc = "Go to the home directory"; }
{ on = [ "g" "l" ]; run = "cd ~/.locale"; desc = "Go to the .locale directory"; }
{ on = [ "g" "m" ]; run = "cd ~/media"; desc = "Go to the media (udiskie mount) 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" "p" ]; run = "cd ~/projects"; desc = "Go to the projects directory"; } { on = [ "g" "p" ]; run = "cd ~/projects"; desc = "Go to the projects directory"; }
{ on = [ "g" "r" ]; run = "cd /"; desc = "Go to the root (/) directory"; }
{ on = [ "g" "/" ]; run = "cd /"; desc = "Go to the root (/) directory"; } { on = [ "g" "/" ]; run = "cd /"; desc = "Go to the root (/) directory"; }
{ on = [ "g" "t" ]; run = "cd /tmp"; desc = "Go to the /tmp directory"; }
{ on = [ "g" "v" ]; run = "cd ~/Videos"; desc = "Go to the Videos directory"; }
{ on = [ "g" "<Space>" ]; run = "cd --interactive"; desc = "Go to a directory interactively"; } { on = [ "g" "<Space>" ]; run = "cd --interactive"; desc = "Go to a directory interactively"; }
(pkgs.lib.mkIf (hyper.isServer) { on = [ "g" "s" ]; run = "cd /var/lib/hugo/nx2site"; desc = "Go to the Hugo Nx2.Site directory"; })
# Navigation # Navigation
{ on = "h"; run = "leave"; desc = "Go back to the parent directory"; } { on = "h"; run = "leave"; desc = "Go back to the parent directory"; }
{ on = "l"; run = "enter"; desc = "Enter the child directory"; } { on = "l"; run = "enter"; desc = "Enter the child directory"; }
@@ -69,10 +68,10 @@ in {
# Operation # Operation
{ on = "o"; run = "open"; desc = "Open selected files"; } { on = "o"; run = "open"; desc = "Open selected files"; }
{ on = "O"; run = "open --interactive"; desc = "Open selected files interactively"; } { on = "O"; run = "open --interactive"; desc = "Open selected files interactively"; }
{ on = "<Enter>"; run = "open"; desc = "Open selected files"; } { on = "<Enter>"; run = "plugin smart-enter"; desc = "Open selected files"; }
# { on = "<Enter>"; run = "open"; desc = "Open selected files"; }
{ on = "<S-Enter>"; run = "open --interactive"; desc = "Open selected files interactively"; } { on = "<S-Enter>"; run = "open --interactive"; desc = "Open selected files interactively"; }
{ on = "y"; run = [ ''shell -- for path in "$@"; do echo "file://$path"; done | wl-copy -t text/uri-list'' { on = "y"; run = [ ''shell -- for path in "$@"; do echo "file://$path"; done | wl-copy -t text/uri-list'' "yank" ]; desc = "Yank selected files (copy)"; }
"yank" ]; desc = "Yank selected files (copy)"; }
{ on = "y"; run = "yank"; desc = "Yank selected files (copy)"; } { on = "y"; run = "yank"; desc = "Yank selected files (copy)"; }
{ on = "x"; run = "yank --cut"; desc = "Yank selected files (cut)"; } { on = "x"; run = "yank --cut"; desc = "Yank selected files (cut)"; }
{ on = "p"; run = "paste"; desc = "Paste yanked "; } { on = "p"; run = "paste"; desc = "Paste yanked "; }
@@ -89,8 +88,8 @@ in {
{ on = ";"; run = "shell --interactive"; desc = "Run a shell command"; } { on = ";"; run = "shell --interactive"; desc = "Run a shell command"; }
{ on = ":"; run = "shell --block --interactive"; desc = "Run a shell command (block until finishes)"; } { 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 = "."; 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 --via=fd"; desc = "Search files by name using fd"; }
{ on = "S"; run = "search rg"; desc = "Search files by content using ripgrep"; } { on = "S"; run = "search --via=rg"; desc = "Search files by content using ripgrep"; }
{ on = "<C-s>"; run = "escape --search"; desc = "Cancel the ongoing search"; } { 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 zoxide"; desc = "Jump to a directory using zoxide"; }
{ on = "Z"; run = "plugin fzf"; desc = "Jump to a directory or reveal a file using fzf"; } { on = "Z"; run = "plugin fzf"; desc = "Jump to a directory or reveal a file using fzf"; }
@@ -159,8 +158,13 @@ in {
{ on = "{"; run = "tab_swap -1"; desc = "Swap current tab with previous tab"; } { 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 wittab"; }
{ on = "}"; run = "tab_swap 1"; desc = "Swap current tab with next tab"; } { on = "}"; run = "tab_swap 1"; desc = "Swap current tab with next tab"; }
{ on = "<Tab>"; run = "spot"; desc = "Show Spot View"; }
# Tasks # Tasks
{ on = "w"; run = "tasks:show"; desc = "Show Task View"; } { on = "w"; run = "tasks:show"; desc = "Show Task View"; }
# Magic
{ on = "<C-h>"; run = "shell 'hx .' --block"; desc = "Open current directoy in Helix"; }
{ on = "<C-g>"; run = "shell 'lazygit' --block"; desc = "Open current directoy in Lazygit"; }
{ on = "<C-y>"; run = ''shell 'ghostty --command="fish -C nx_yazi_into_fish"' --orphan ''; desc = "Open current directoy in a new ghostty window"; }
]; ];
tasks.keymap = [ tasks.keymap = [
# Task # Task
@@ -169,8 +173,8 @@ in {
{ on = "<Esc>"; run = "close"; desc = "Close Task View"; } { on = "<Esc>"; run = "close"; desc = "Close Task View"; }
{ on = "c"; run = "cancel"; desc = "Cancel Task"; } { on = "c"; run = "cancel"; desc = "Cancel Task"; }
{ on = "i"; run = "inspect"; desc = "Inspect Task"; } { on = "i"; run = "inspect"; desc = "Inspect Task"; }
{ on = "j"; run = "arrow -1"; desc = "Up in list"; } { on = "k"; run = "arrow -1"; desc = "Up in list"; }
{ on = "k"; run = "arrow 1"; desc = "Down in list"; } { on = "j"; run = "arrow 1"; desc = "Down in list"; }
{ on = "u"; run = "arrow -5"; desc = "Up in list (fast)"; } { on = "u"; run = "arrow -5"; desc = "Up in list (fast)"; }
{ on = "d"; run = "arrow 5"; desc = "Down in list (fast)"; } { on = "d"; run = "arrow 5"; desc = "Down in list (fast)"; }
]; ];
@@ -180,6 +184,19 @@ in {
{ on = "?"; run = "help"; desc = "Open help"; } { on = "?"; run = "help"; desc = "Open help"; }
{ on = "<F1>"; run = "help"; desc = "Open help"; } { on = "<F1>"; run = "help"; desc = "Open help"; }
]; ];
spot.keymap = [
# Spot
{ on = "<Tab>"; run = "close"; desc = "Close Spot View"; }
{ on = "q"; run = "close"; desc = "Close Spot View"; }
{ on = "<Esc>"; run = "close"; desc = "Close Spot View"; }
{ on = "k"; run = "arrow -1"; desc = "Up in list"; }
{ on = "j"; 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)"; }
{ on = [ "g" "g" ]; run = "arrow top"; desc = "Move cursor to the top"; }
{ on = [ "g" "e" ]; run = "arrow bot"; desc = "Move cursor to the end"; }
{ on = "c"; run = "copy cell"; desc = "Copy Selected Cell"; }
];
}; };
settings = { settings = {
mgr = { mgr = {
@@ -194,74 +211,74 @@ in {
}; };
opener = { opener = {
"edit" = [ "edit" = [
{ run = ''hx "$@"''; desc = "helix"; block = true; } { run = ''hx "$@"''; desc = "Helix"; block = true; }
{ run = ''codium "$@"''; desc = "code"; orphan = true; } { run = ''codium "$@"''; desc = "VS Code"; orphan = true; }
{ run = ''cat "$@" | wl-copy''; desc = "Copy Contents"; }
]; ];
"play" = [ "play" = [
{ run = ''mpv "$@"''; desc = "mpv"; orphan = true; } { run = ''mpv "$@"''; desc = "MPV"; orphan = true; }
{ run = ''mpv --vf=negate "$@"''; desc = "mpv inverted"; 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"; } { run = ''mediainfo "$1"; echo "Press enter to return to yazi"; read''; block = true; desc = "Show mediainfo"; }
]; ];
"archive" = [ "archive" = [
{ run = ''unar "$1"''; desc = "Extract here"; } { run = ''unar "$@"''; desc = "Extract here"; }
{ run = ''tar -x "$1"''; desc = "tar -x"; } { run = ''tar -x "$@"''; desc = "tar -x"; }
{ run = ''unzip "$1"''; desc = "unzip"; } { run = ''unzip "$@"''; desc = "unzip"; }
]; ];
"image" = [ "image" = [
{ run = ''imv "$@"''; desc = "imv"; orphan = true; } { run = ''imv "$@"''; desc = "IMV"; orphan = true; }
{ run = ''gimp "$@"''; desc = "gimp"; 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 = ''swww img --transition-type wipe --transition-angle 60 --transition-step 120 --transition-fps 120 "$1"''; desc = "swww wallpaper"; }
{ run = ''exiftool "$@"; echo "Press enter to exit"; read''; desc = "View Exif Data"; } { run = ''exiftool "$1"; echo "Press enter to return to yazi"; read''; desc = "View Exif Data"; }
{ run = ''for f in "$@"; do magick "$f" -auto-orient "''${f%.*}.pdf"; done''; desc = "Convert to PDF"; } { run = ''for f in "$1"; do magick "$f" -auto-orient "''${f%.*}.pdf"; done''; desc = "Convert to PDF"; }
]; ];
"svg" = [ "svg" = [
{ run = ''inkscape "$@"''; desc = "inkscape"; orphan = true; } { run = ''inkscape "$@"''; desc = "Inkscape"; orphan = true; }
{ run = ''firefox "$@"''; desc = "firefox"; orphan = true; } { run = ''firefox "$@"''; desc = "Firefox"; orphan = true; }
]; ];
"font" = [ "font" = [
{ run = ''fontpreview "$@"''; desc = "fontpreview"; orphan = true; } { run = ''fontpreview "$@"''; desc = "Fontpreview"; orphan = true; }
{ run = ''fontforge "$@"''; desc = "fortforge"; orphan = true; } { run = ''fontforge "$@"''; desc = "Fortforge"; orphan = true; }
]; ];
"document" = [ "document" = [
{ run = ''zathura "$@"''; desc = "zathura"; orphan = true; } { run = ''zathura "$@"''; desc = "Zathura"; orphan = true; }
{ run = ''xournal "$@"''; desc = "xournal"; orphan = true; } { run = ''firefox "$@"''; desc = "Firefox"; orphan = true; }
{ run = ''firefox "$@"''; desc = "firefox"; orphan = true; }
{ run = ''nxgs flip "$@"''; desc = "nxgs flip"; } { run = ''nxgs flip "$@"''; desc = "nxgs flip"; }
{ run = ''nxgs rotate "$@"''; desc = "nxgs rotate"; } { run = ''nxgs rotate "$@"''; desc = "nxgs rotate"; }
{ run = ''nxgs interactive-merge "$@"''; block = true; desc = "nxgs merge"; } { run = ''nxgs interactive-merge "$@"''; block = true; desc = "nxgs merge"; }
]; ];
"browser" = [ "browser" = [
{ run = ''firefox "$@"''; desc = "firefox"; orphan = true; } { 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 = ''chromium --enable-features=UseOzonePlatform --ozone-platform=wayland "$@"''; desc = "chromium"; orphan = true; }
{ run = ''w3m "$@"''; desc = "w3m"; } { run = ''w3m "$@"''; desc = "w3m"; }
{ run = ''lynx "$@"''; desc = "lynx"; } { run = ''lynx "$@"''; desc = "Lynx"; }
]; ];
"office" = [ "office" = [
{ run = ''libreoffice "$@"''; desc = "libreoffice"; orphan = true; } { run = ''libreoffice "$@"''; desc = "LibreOffice"; orphan = true; }
{ run = ''libreoffice --view "$@"''; desc = "libreoffice read-only"; orphan = true; } { run = ''libreoffice --view "$@"''; desc = "LibreOffice read-only"; orphan = true; }
]; ];
"shell" = [ "shell" = [
{ run = ''bash -c "$@"''; desc = "bash -c"; } { run = ''bash -c "$1"; echo "Press enter to return to yazi"; read''; desc = "bash -c"; }
{ run = ''fish -c "$@"''; desc = "fish -c"; } { run = ''fish -c "$1"; echo "Press enter to return to yazi"; read''; desc = "fish -c"; }
{ run = ''sh -c "$@"''; desc = "sh -c"; } { run = ''sh -c "$1"; echo "Press enter to return to yazi"; read''; desc = "sh -c"; }
]; ];
"python" = [ "python" = [
{ run = ''python "$@"''; desc = "python"; } { run = ''python "$@"; echo "Press enter to return to yazi"; read''; desc = "Python"; block = true; }
]; ];
"directory" = [ "directory" = [
{ run = ''lazygit "$@"''; desc = "python"; } { run = ''lazygit "$1"''; desc = "LazyGit"; }
]; ];
}; };
open.rules = [ open.rules = [
{ mime = "text/html"; use = [ "edit" "browser" ]; } { mime = "text/html"; use = [ "edit" "browser" ]; }
{ mime = "text/htm"; use = [ "edit" "browser" ]; } { mime = "text/htm"; use = [ "edit" "browser" ]; }
{ mime = "text/x-python"; use = "python"; } { mime = "text/x-script.python"; use = [ "edit" "python" ]; }
{ mime = "text/script.python"; use = [ "edit" "python" ]; }
{ mime = "text/*"; use = "edit"; } { mime = "text/*"; use = "edit"; }
{ mime = "text"; use = "edit"; } { mime = "text"; use = "edit"; }
{ mine = "inode/x-empty"; use = "edit"; } { mime = "inode/x-empty"; use = "directory"; }
{ mine = "inode/directory"; use = "edit"; } { mime = "inode/directory"; use = "directory"; }
{ mime = "image/*"; use = "image"; } { mime = "image/*"; use = "image"; }
{ mime = "image/svg"; use = [ "image" "edit" ]; } { mime = "image/svg"; use = [ "image" "edit" ]; }
@@ -310,31 +327,75 @@ in {
border_style = { fg = border; }; border_style = { fg = border; };
}; };
tabs = { tabs = {
active = { fg = accent.dark; bg = accent.base; }; active = { fg = secondary.dark; bg = secondary.base; };
inactive = { fg = secondary.base; bg = secondary.dark; }; inactive = { fg = secondary.base; bg = secondary.dark; };
# sep_inner = # sep_inner = { open = "[", close = "]" };
# sep_outer = # sep_outer = { open = "[", close = "]" };
};
mode = {
main_main = { fg = yellow.bright; bg = yellow.dark; };
select_main = { fg = cyan.bright; bg = cyan.dark; };
unset_main = { fg = blue.bright; bg = blue.dark; };
main_alternative = { fg = yellow.brighter; bg = yellow.dark; };
select_alternative = { fg = cyan.brighter; bg = cyan.dark; };
unset_alternative = { fg = blue.brighter; bg = blue.dark; };
};
confirm = {
border = { fg = border; };
title = { fg = accent.bright; };
body = { fg = "#ff0000"; };
list = { fg = "#ff0000"; };
btn_yes = { fg = positive.base; bg = positive.dark; };
btn_no = { fg = negative.base; bg = negative.dark; };
btn_labels = [ " BET " " HELLNAW " ];
};
spot = {
border = { fg = border; };
title = { fg = accent.bright; };
tbl_col = { fg = accent.base; };
tbl_cell = { fg = secondary.base; };
};
notify = {
title_info = { fg = accent.base; };
title_warn = { fg = weird.base; };
title_error = { fg = special.base; };
};
pick = {
border = { fg = border; };
active = { fg = accent.bright; };
inactive = { fg = subtle.bright; };
}; };
status = { status = {
separator_open = " "; #""; # sep_right = { open = ""; close = ""; };
separator_close = " "; #""; # sep_left = { open = ""; close = ""; };
separator_style = { fg = accent.base; bg = black.base; }; sepr_style = { fg = accent.base; bg = black.base; };
mode_normal = { fg = yellow.bright; bg = yellow.dark; };
mode_select = { fg = cyan.bright; bg = cyan.dark; };
mode_unset = { fg = blue.bright; bg = blue.dark; };
progress_label = { fg = secondary.base; bold = true; }; progress_label = { fg = secondary.base; bold = true; };
progress_normal = { fg = accent.base; bg = black.base; }; progress_normal = { fg = accent.base; bg = black.base; };
progress_error = { fg = negative.base; bg = black.base; }; progress_error = { fg = negative.base; bg = black.base; };
permissions_t = { fg = special.base; }; perm_type = { fg = special.base; };
permissions_r = { fg = accent.base; }; perm_read = { fg = accent.base; };
permissions_w = { fg = secondary.base; }; perm_write = { fg = secondary.base; };
permissions_x = { fg = tertiary.base; }; perm_exec = { fg = tertiary.base; };
permissions_s = { fg = special.base; }; perm_sep = { fg = special.base; };
};
indicator = { # your "cursor"
parent = { fg = secondary.darker; bg = secondary.base; };
current = { fg = accent.darker; bg = accent.base; };
preview = { fg = secondary.base; bg = secondary.darker; };
# padding = { open = " "; close = " "; };
};
cmp = {
border = { fg = border; };
active = { fg = accent.base; };
inactive = { fg = subtle.base; };
# icon_file =
# icon_folder =
# icon_command
}; };
input = { input = {
border = { fg = border; }; border = { fg = border; };
title = {}; title = { fg = accent.bright; };
value = {}; value = { fg = foreground; };
selected = { reversed = true; }; selected = { reversed = true; };
}; };
select = { select = {
@@ -344,8 +405,8 @@ in {
}; };
tasks = { tasks = {
border = { fg = border2; }; border = { fg = border2; };
title = {}; title = { fg = accent.base; bold = true; };
hovered = { underline = true; }; hovered = { fg = accent.bright; };
}; };
which = { which = {
mask = { bg = black.base; }; mask = { bg = black.base; };
@@ -356,11 +417,11 @@ in {
separator_style = { fg = foreground; }; separator_style = { fg = foreground; };
}; };
help = { help = {
on = { fg = "#fe8019"; }; on = { fg = accent.base; };
exec = { fg = "#83a598"; }; run = { fg = secondary.base; };
desc = { fg = "#928374"; }; desc = { fg = tertiary.base; italic = true; };
hovered = { bg = "#504945"; bold = true; }; hovered = { bg = accent.bright; bold = true; };
footer = { fg = "#3c3836"; bg = "#a89984"; }; footer = { fg = accent.base; bg = subtle.dark; };
}; };
filetype = { filetype = {
rules = [ rules = [
@@ -368,21 +429,21 @@ in {
{ mime = "inode/x-empty"; fg = white.dark; } { mime = "inode/x-empty"; fg = white.dark; }
{ mime = "inode/directory"; fg = accent.base; } { mime = "inode/directory"; fg = accent.base; }
{ name = "*"; is = "link"; fg = tertiary.base; } { url = "*"; is = "link"; fg = tertiary.base; }
{ name = "*"; is = "orphan"; fg = negative.base; } { url = "*"; is = "orphan"; fg = negative.base; }
{ name = "*"; is = "block"; fg = special.base; } { url = "*"; is = "block"; fg = special.base; }
{ name = "*"; is = "char"; fg = special.bright; } { url = "*"; is = "char"; fg = special.bright; }
{ name = "*"; is = "exec"; fg = secondary.base; } { url = "*"; is = "exec"; fg = secondary.base; }
{ name = "*"; is = "fifo"; fg = weird.base; } { url = "*"; is = "fifo"; fg = weird.base; }
{ name = "*"; is = "sock"; fg = weird.bright; } { url = "*"; is = "sock"; fg = weird.bright; }
{ name = "*"; is = "sticky"; fg = special.base; } { url = "*"; is = "sticky"; fg = special.base; }
# Fallback # Fallback
{ name = "*"; fg = foreground; } { url = "*"; fg = foreground; }
]; ];
}; };
}; };
} // (if x then { } // (if not-nod then {
shellWrapperName = "ya"; shellWrapperName = "ya";
initLua = /* lua */ '' initLua = /* lua */ ''
require("zoxide"):setup { require("zoxide"):setup {
@@ -401,9 +462,16 @@ in {
" ", " ",
} }
end, 500, Status.RIGHT) end, 500, Status.RIGHT)
Header:children_add(function()
if ya.target_family() ~= "unix" then
return ""
end
return ui.Span(ya.user_name() .. "@" .. ya.host_name() .. ":"):fg("blue")
end, 500, Header.LEFT)
''; '';
plugins = with pkgs; { plugins = { inherit (pkgs.yaziPlugins)
inherit glow git; glow git smart-enter;
}; };
} else {}); } else {});
@@ -413,17 +481,22 @@ in {
text = '' text = ''
[filechooser] [filechooser]
cmd=${tfc}/share/xdg-desktop-portal-termfilechooser/yazi-wrapper.sh cmd=${tfc}/share/xdg-desktop-portal-termfilechooser/yazi-wrapper.sh
env=TERMCMD=ghostty --title="terminal-file-picker -e"
default_dir=$HOME default_dir=$HOME
env=TERMCMD=ghostty --title="terminal-file-picker -e"
open_mode=suggested open_mode=suggested
save_mode=last save_mode=suggested
''; '';
}; };
portal = { portal = {
enable = true; enable = true;
xdgOpenUsePortal = true; xdgOpenUsePortal = true;
config.common."org.freedesktop.impl.portal.FileChooser" = "termfilechooser"; config.common."org.freedesktop.impl.portal.FileChooser" = "termfilechooser";
extraPortals = [ tfc ]; extraPortals = [ tfc ] ++ (with pkgs; [
xdg-desktop-portal
xdg-desktop-portal-gnome
xdg-desktop-portal-gtk
xdg-desktop-portal-wlr
]);
}; };
}; };
home.sessionVariables."GTK_USE_PORTAL" = "1"; home.sessionVariables."GTK_USE_PORTAL" = "1";

View File

@@ -8,11 +8,12 @@
./home-modules/chatterino.nix ./home-modules/chatterino.nix
./home-modules/clipboard.nix ./home-modules/clipboard.nix
./home-modules/color-pallete.nix ./home-modules/color-pallete.nix
./home-modules/contact.nix
./home-modules/direnv.nix ./home-modules/direnv.nix
./home-modules/discord.nix ./home-modules/discord.nix
./home-modules/email.nix ./home-modules/email.nix
./home-modules/figlet.nix ./home-modules/figlet.nix
./home-modules/firefox.nix ./home-modules/firefox/firefox.nix
./home-modules/fish.nix ./home-modules/fish.nix
./home-modules/games.nix ./home-modules/games.nix
./home-modules/gestures.nix ./home-modules/gestures.nix
@@ -25,7 +26,8 @@
./home-modules/hyprland-autoname-workspaces.nix ./home-modules/hyprland-autoname-workspaces.nix
./home-modules/hyprland.nix ./home-modules/hyprland.nix
./home-modules/kitty.nix ./home-modules/kitty.nix
./home-modules/latex.nix # ./home-modules/latex.nix
./home-modules/logitech.nix
./home-modules/mako.nix ./home-modules/mako.nix
# ./home-modules/matrix.nix # ./home-modules/matrix.nix
./home-modules/mpv.nix ./home-modules/mpv.nix
@@ -34,29 +36,25 @@
./home-modules/nvidia.nix ./home-modules/nvidia.nix
./home-modules/nxgs.nix ./home-modules/nxgs.nix
./home-modules/obs.nix ./home-modules/obs.nix
./home-modules/office.nix # ./home-modules/office.nix
./home-modules/ollama.nix ./home-modules/ollama.nix
./home-modules/opencode.nix ./home-modules/opencode.nix
./home-modules/pandoc.nix ./home-modules/pandoc.nix
./home-modules/pkgs-list/desktop.nix ./home-modules/pkgs-list/desktop.nix
./home-modules/pkgs-list/programs.nix ./home-modules/pkgs-list/programs.nix
./home-modules/pkgs-list/shell.nix ./home-modules/pkgs-list/shell.nix
./home-modules/pnx.nix # ./home-modules/pnx.nix
./home-modules/programming/c.nix ./home-modules/programming.nix
./home-modules/programming/gleam.nix
./home-modules/programming/glsl.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/qt.nix
./home-modules/rclone.nix ./home-modules/rclone.nix
./home-modules/rofi.nix ./home-modules/rofi.nix
./home-modules/scanning.nix ./home-modules/scanning.nix
./home-modules/sent.nix ./home-modules/sent.nix
./home-modules/sops.nix ./home-modules/sops.nix
./home-modules/spotify.nix
./home-modules/ssh.nix ./home-modules/ssh.nix
./home-modules/starship.nix ./home-modules/starship.nix
./home-modules/thunderbird.nix
./home-modules/tts.nix ./home-modules/tts.nix
./home-modules/typst.nix ./home-modules/typst.nix
./home-modules/vale.nix ./home-modules/vale.nix
@@ -68,14 +66,14 @@
./home-modules/yazi.nix ./home-modules/yazi.nix
./home-modules/zathura.nix ./home-modules/zathura.nix
./home-modules/zoxide.nix ./home-modules/zoxide.nix
] ++ (if (hyper.host == "NxACE") then [ ] ++ (if hyper.isServer then [
./home-modules/nx2site.nix ./home-modules/nx2site.nix
./home-modules/nx2site-backup.nix ./home-modules/nx2site-backup.nix
./home-modules/calendar-campuszeit-fix.nix ./home-modules/calendar-campuszeit-fix.nix
] else []); ] else []);
home.username = hyper.user; home.username = hyper.user;
# home.homeDirectory = hyper.home; # for some reason you cant use hyper.home here home.homeDirectory = hyper.home;
home.homeDirectory = "/home/${hyper.user}"; # home.homeDirectory = "/home/${hyper.user}";
home.stateVersion = hyper.pkgs-version; home.stateVersion = hyper.main-pkgs-version;
programs.home-manager.enable = true; programs.home-manager.enable = true;
} }

View File

@@ -1,9 +1,11 @@
{ pkgs, ... }@all: { pkgs, ... }@all: with all; {
{
environment = { environment = {
packages = import ./system-modules/base-packages.nix pkgs; packages = import ./system-modules/base-packages.nix pkgs;
etcBackupExtension = ".bak"; etcBackupExtension = ".bak";
motd = "";
};
terminal = {
font = rice.font.code.regular-path;
}; };
android-integration = { android-integration = {
termux-setup-storage.enable = true; termux-setup-storage.enable = true;
@@ -12,12 +14,17 @@
nix.extraOptions = '' nix.extraOptions = ''
experimental-features = nix-command flakes experimental-features = nix-command flakes
''; '';
user ={
shell = "${pkgs.fish}/bin/fish";
# userName = pkgs.lib.mkForce hyper.user; if its read-only, whats the point of this option???
};
# Set your time zone # Set your time zone
time.timeZone = "Europe/Berlin"; time.timeZone = "Europe/Berlin";
home-manager = { home-manager = {
config = ./shell-only.nix; config = import ./shell-only.nix;
useGlobalPkgs = true; useGlobalPkgs = true;
backupFileExtension = "backup"; backupFileExtension = "backup";
extraSpecialArgs = { inherit (all) inputs hyper rice; }; extraSpecialArgs = { inherit (all) inputs hyper rice; };

View File

@@ -1,96 +0,0 @@
lib:
let
# takes in "ff0044" (no hash!) and returns { r = "ff", g = "00", b = "44" }
slice-hex = hex: with builtins; { r = substring 0 2 hex; g = substring 2 2 hex; b = substring 4 2 hex; };
# takes in "44" and returns 64
drune-to-255 = drune: with builtins; (rune-to-num (substring 0 1 drune)) * 16 + (rune-to-num (substring 1 1 drune));
num-to-drune = num: "${num-to-rune (num / 16)}${num-to-rune (num - ((num / 16) * 16))}";
# takes in "D" and returns 13
rune-to-num = rune: # inspiration from https://github.com/bertof/nix-rice
let
dict = {
"0" = 0;
"1" = 1;
"2" = 2;
"3" = 3;
"4" = 4;
"5" = 5;
"6" = 6;
"7" = 7;
"8" = 8;
"9" = 9;
"A" = 10;
"B" = 11;
"C" = 12;
"D" = 13;
"E" = 14;
"F" = 15;
};
in
assert(builtins.hasAttr (lib.strings.toUpper rune) dict);
builtins.getAttr (lib.strings.toUpper rune) dict;
# takes in 15 and returns "F"
num-to-rune = num:
let
num-string = builtins.toString num;
dict = {
"0" = "0";
"1" = "1";
"2" = "2";
"3" = "3";
"4" = "4";
"5" = "5";
"6" = "6";
"7" = "7";
"8" = "8";
"9" = "9";
"10" = "A";
"11" = "B";
"12" = "C";
"13" = "D";
"14" = "E";
"15" = "F";
};
in
assert(builtins.hasAttr num-string dict);
builtins.getAttr num-string dict;
# Keeps num between 0 and 255
# Make sure to pass in an int not a float
cap-255 = num: (if (num>255) then 255 else if (num<0) then 0 else num);
nohash = hex: with builtins; assert((stringLength hex) == 7); substring 1 6 hex;
in
{
## USEFUL FUNCTIONS
# --------------------------------------------------------------------------------
# takes in a string like "#ff0044" and returns "ff0044" symbol
inherit nohash;
# --------------------------------------------------------------------------------
# This takes in something like "#ff0044" and returns "255,0,64"
hex-to-rgb-comma-string = hex:
with (slice-hex (nohash hex));
with builtins;
assert(isString hex);
"${toString (drune-to-255 r)},${toString (drune-to-255 g)},${toString (drune-to-255 b)}";
# --------------------------------------------------------------------------------
# This is useful if you have a float (like a transparency value) and want a drune representation of it
# So 0.0 -> "00" and 1.0 -> "FF"
float-to-drune = f: with builtins; assert(isFloat f); "${num-to-rune (floor((255*f) / 16))}${num-to-rune (floor(255*f) - (floor((255*f) / 16) * 16))}";
# --------------------------------------------------------------------------------
# Takes in hex and a float. 0.5 is +50% brightness and (-0.5) is -50% brightness.
# So "#ff0044": 0.3 -> "#ff0055"
alter-luminace-hex = hex: amount:
let
color-num = with (slice-hex (nohash hex)); { r = drune-to-255 r; g = drune-to-255 g; b = drune-to-255 b; };
alter = num: (num-to-drune (cap-255 (builtins.floor ((125 * amount) + (num * (1+amount))) )));
in
with color-num; "#${alter r}${alter g}${alter b}";
}

View File

@@ -1,5 +1,4 @@
{ pkgs, ... }@all: with all; { pkgs, ... }@all: with all; {
{
imports = [ imports = [
./home-modules/bash.nix ./home-modules/bash.nix
./home-modules/color-pallete.nix ./home-modules/color-pallete.nix
@@ -8,7 +7,7 @@
./home-modules/git.nix ./home-modules/git.nix
./home-modules/gpg.nix ./home-modules/gpg.nix
./home-modules/helix.nix ./home-modules/helix.nix
./home-modules/latex.nix # ./home-modules/latex.nix
./home-modules/nh.nix ./home-modules/nh.nix
./home-modules/nixd.nix ./home-modules/nixd.nix
./home-modules/nxgs.nix ./home-modules/nxgs.nix
@@ -28,10 +27,11 @@
./home-modules/pkgs-list/shell.nix ./home-modules/pkgs-list/shell.nix
]; ];
home.username = hyper.user; home = {
home.homeDirectory = hyper.home; username = hyper.user;
# home.homeDirectory = "/home/${hyper.user}"; homeDirectory = hyper.home;
home.stateVersion = pkgs.version; stateVersion = hyper.main-pkgs-version;
};
xdg = { xdg = {
enable = true; enable = true;
configHome = "${hyper.home}/.config"; configHome = "${hyper.home}/.config";

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 MiB

BIN
splash.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

View File

@@ -5,7 +5,7 @@ pkgs: with pkgs; [
git-crypt git-crypt
wget wget
curlHTTP3 curl
zip zip
unzip unzip
p7zip p7zip

View File

@@ -1,5 +1,4 @@
{ pkgs, ... }@all: with all; { pkgs, ... }@all: with all; let
let
grub-theme-ascii-diana = (pkgs.fetchFromGitea { grub-theme-ascii-diana = (pkgs.fetchFromGitea {
domain = "git.${hyper.domain}"; domain = "git.${hyper.domain}";
owner = "nx2"; owner = "nx2";
@@ -9,6 +8,12 @@ let
}); });
device-boot = if hyper.host == "NxNORTH" then { device-boot = if hyper.host == "NxNORTH" then {
kernelPackages = pkgs.linuxPackages_zen; kernelPackages = pkgs.linuxPackages_zen;
kernelParams = [
# "fbcon=margin:1"
"fbcon=nodefer"
"video=DP-4:2560x1440@60"
# "video=HDMI-A-3:d"
];
lanzaboote = { lanzaboote = {
enable = true; enable = true;
pkiBundle = "/var/lib/sbctl"; pkiBundle = "/var/lib/sbctl";
@@ -19,10 +24,14 @@ let
configurationLimit = 10; configurationLimit = 10;
}; };
} else if hyper.host == "NxXPS" then { } else if hyper.host == "NxXPS" then {
kernelPackages = pkgs.linuxPackages_latest; kernelPackages = pkgs.linuxPackages;
extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback ]; extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback ];
kernelModules = [ "v4l2loopback" ]; kernelModules = [ "v4l2loopback" ];
extraModprobeConfig = ''options v4l2loopback devices=1 video_nr=1 card_label="OBS VCam" exclusive_caps=1''; extraModprobeConfig = ''
options v4l2loopback devices=1 video_nr=1 card_label="OBS VCam" exclusive_caps=1
options snd_hda_intel power_save=0
options snd_ac97_codec power_save=0
'';
loader = { loader = {
efi.canTouchEfiVariables = true; efi.canTouchEfiVariables = true;
grub = { grub = {
@@ -62,8 +71,24 @@ in {
] else []; ] else [];
config = { config = {
environment.systemPackages = with pkgs; lib.mkIf ( host == "NxNORTH" ) [ sbctl ]; environment.systemPackages = with pkgs; lib.mkIf ( host == "NxNORTH" ) [ sbctl ];
boot ={ boot = { tmp.useTmpfs = false; } // device-boot;
tmp.useTmpfs = false; # thx fxzzi
} // device-boot; # sh*tty nvidia makes the tty on my 1440p monitor 1080p
# so just resize it to 1440p
systemd.services.fbset = lib.mkIf (hyper.host == "NxNORTH") {
enable = true;
wantedBy = ["multi-user.target"];
unitConfig = {
Description = "Set framebuffer resolution";
Before = "display-manager.service";
};
serviceConfig = {
Type = "oneshot";
ExecStart = "${lib.getExe pkgs.fbset} -xres 2560 -yres 1440 -match --all";
RemainAfterExit = "yes";
StandardOutput = "journal";
StandardError = "journal";
};
};
}; };
} }

View File

@@ -23,7 +23,8 @@ from ics import Calendar
import requests import requests
def filter_events(events): def filter_events(events):
return [event for event in events if ("LR" in event.name)] return [event for event in events if ("WT" in event.name)]
# return [event for event in events if ("LR" in event.name)]
# return [event for event in events if ("LR" in event.name) or ("TBD" in event.name)] # 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): def fetch_and_save_ical_events(ical_urls, save_path):
@@ -62,7 +63,7 @@ def fetch_and_save_ical_events(ical_urls, save_path):
if __name__ == "__main__": if __name__ == "__main__":
# Replace with your iCal URL and target file path # Replace with your iCal URL and target file path
ICAL_URLS = [ ICAL_URLS = [
"https://zlypher.github.io/lol-events/cal/league-of-legends-nlc.ical", # "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" "https://zlypher.github.io/lol-events/cal/league-of-legends-emea-masters.ical"
] ]
SAVE_PATH = "${config.services.nginx.virtualHosts."${hyper.domain}".root}/lr.ics" SAVE_PATH = "${config.services.nginx.virtualHosts."${hyper.domain}".root}/lr.ics"

19
system-modules/davfs.nix Normal file
View File

@@ -0,0 +1,19 @@
{ pkgs, ... }@all: with all; let
# user = "lennart";
in {
services.davfs2 = {
enable = true;
settings = {
globalSection = {
use_locks = true;
};
sections = {
"${hyper.home}/webdav" = {
gui_optimize = true;
};
};
};
};
users.users."${hyper.user}".extraGroups = [ "davfs2" ];
}

View File

@@ -1,24 +1,87 @@
{ pkgs, ... }@all: with all; { config, pkgs, ... }@all: with all; {
{ # services.greetd = {
services.greetd = { # enable = true;
# settings = rec {
# hyprland = {
# command = "${pkgs.tuigreet}/bin/tuigreet --time --remember --cmd Hyprland --remember-user-session --window-padding 5";
# user = hyper.user;
# };
# default_session = hyprland;
# vt = 2;
# };
# # useTextGreeter = true;
# };
services.xserver.displayManager.lightdm.enable = false;
services.displayManager.ly = pkgs.lib.mkIf (!hyper.isServer) {
# info and docs at https://codeberg.org/fairyglade/ly/src/branch/master/res/config.ini
enable = true; enable = true;
settings = rec { package = pkgs.ly;
hyprland = { settings = with rice.color; let h = rice.lib.nohash; in {
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --remember --cmd Hyprland --remember-user-session --window-padding 5"; allow_empty_password = false;
user = hyper.user; animation = "matrix";
}; # animation = "gameoflife";
default_session = hyprland; animation_timeout_sec = 0; # forever
vt = 2; asterisk = "*";
}; auth_fails = 10;
}; # auto_login_session = "hyprland";
systemd.services.greetd.serviceConfig = { # auto_login_user = hyper.user;
Type = "idle"; battery_id = if hyper.isMobile then "BAT0" else null;
StandardInput = "tty"; bg = "0x00${h background}";
StandardOutput = "tty"; bigclock_12hr = false;
Standarderror = "journal"; # Without this errors will spam on screen bigclock = "en";
# Without these bootlogs will spam on screen bigclock_seconds = false;
TTYReset = true; blank_box = true; # not transparent
TTYVHangup = true; border_fg = "0x00${h border}";
TTYVTDisallocate = true; box_title = " Optimistic Nihilism ";
clear_password = true;
clock = "%c";
cmatrix_fg = "0x00${h accent.base}";
cmatrix_head_col = "0x01${h accent.bright}";
cmatrix_max_codepoint = "0x7B";
cmatrix_min_codepoint = "0x21";
colormix_col1 = "0x00${h accent.base}";
colormix_col2 = "0x00${h secondary.base}";
colormix_col3 = "0x20${h tertiary.base}";
default_input = "password";
# doom_bottom_color = 0x00FFFFFF;
# doom_fire_height = 6; # 1-9
# doom_fire_spread = 2; # 0-4
# doom_middle_color = 0x00C78F17;
# doom_top_color = 0x009F2707;
# dur_file_path = $CONFIG_DIRECTORY/ly/example.dur;
# dur_offset_alignment = center; # Available inputs: topleft, topcenter, topright, centerleft, center, centerright, bottomleft, bottomcenter, bottomright
# Dur offset x direction (value is added to the current position determined by alignment, negatives are supported)
# dur_x_offset = 0;
# dur_y_offset = 0; # Dur offset y direction (value is added to the current position determined by alignment, negatives are supported)
# edge_margin = 0; # Set margin to the edges of the DM (useful for curved monitors)
error_bg = "0x00${h negative.darker}";
error_fg = "0x01${h negative.base}";
fg = "0x00${h foreground}";
full_color = true;
# gameoflife_entropy_interval = 20; # None
# gameoflife_fg = "0x00${h accent.base}";
# gameoflife_frame_delay = 6;
# gameoflife_initial_density = 0.4;
# # hibernate_cmd = null;
# # hibernate_key = F4;
hide_borders = false; # Remove main box borders
hide_keyboard_locks = false; # Remove keyboard lock states from the top right corner
hide_key_hints = false; # Remove power management command hints
hide_version_string = true;
# initial_info_text = "Login to ${hyper.host}";
# input_len = 35;
lang = "de";
save = true; # Save the current desktop and login as defaults, and load them on startup
# numlock = false;
# text_in_center = true; # Center the session name.
# vi_default_mode = "normal";
# vi_mode = true;
# xinitrc = null;
# xsessions = null;
};
}; };
environment.systemPackages = with pkgs; [
cmatrix
];
} }

View File

@@ -3,6 +3,7 @@
variables = { variables = {
EDITOR = "hx"; EDITOR = "hx";
VISUAL = "hx"; VISUAL = "hx";
TERMINAL = "ghostty";
}; };
systemPackages = with pkgs; [ systemPackages = with pkgs; [
helix helix

View File

@@ -1,88 +1,14 @@
{ pkgs, ... }@all: with all; { pkgs, ... }@all: with all; {
{
# i18n.inputMethod = {
# type = "fcitx5";
# enable = true;
# fcitx5.addons = with pkgs; [
# fcitx5-gtk # alternatively, kdePackages.fcitx5-qt
# fcitx5-chinese-addons # table input method support
# fcitx5-nord # a color theme
# ];
# };
i18n.inputMethod = { i18n.inputMethod = {
enable = true; enable = true;
type = "fcitx5"; type = "fcitx5";
fcitx5.waylandFrontend = true; fcitx5 = {
fcitx5.addons = with pkgs; [ waylandFrontend = true;
fcitx5-gtk # alternatively, kdePackages.fcitx5-qt addons = with pkgs; [
fcitx5-chinese-addons # table input method support fcitx5-gtk
fcitx5-nord # a color theme kdePackages.fcitx5-chinese-addons
]; fcitx5-nord
];
};
}; };
# i18n.inputMethod = {
# enabled = "fcitx5";
# ignoreUserConfig = true;
# waylandFrontend = true;
# fcitx5 = {
# addons = with pkgs-unstable; [
# rime-data
# fcitx5-rime
# # Chinese
# fcitx5-chinese-addons
# fcitx5-table-extra
# fcitx5-pinyin-moegirl
# fcitx5-pinyin-zhwiki
# # Japanese
# # fcitx5-mozc
# ];
# settings = {
# globalOptions = {
# Hotkey = {
# # Enumerate when press trigger key repeatedly
# EnumerateWithTriggerKeys = "True";
# # Skip first input method while enumerating
# EnumerateSkipFirst = "False";
# };
# "Hotkey/EnumerateForwardKeys" = { "0" = "Control+space"; };
# "Hotkey/EnumerateBackwardKeys" = { "0" = "Control+Shift+space"; };
# "Hotkey/PrevPage" = { "0" = "Up"; };
# "Hotkey/NextPage" = { "0" = "Down"; };
# "Hotkey/PrevCandidate" = { "0" = "Shift+Tab"; };
# "Hotkey/NextCandidate" = { "0" = "Tab"; };
# Behavior = {
# ActiveByDefault = "False"; # Active By Default
# ShareInputState = "No"; # Share Input State
# PreeditEnabledByDefault = "True"; # Show preedit in application
# ShowInputMethodInformation = "True"; # Show Input Method Information when switch input method
# showInputMethodInformationWhenFocusIn = "False"; # Show Input Method Information when changing focus
# CompactInputMethodInformation = "True"; # Show compact input method information
# ShowFirstInputMethodInformation = "True"; # Show first input method information
# DefaultPageSize = "5"; # Default page size
# OverrideXkbOption = "False"; # Override Xkb Option
# PreloadInputMethod = "True"; # Preload input method to be used by default
# };
# };
# inputMethod = {
# "Groups/0" = {
# "Name" = "Default";
# "Default Layout" = "us";
# "DefaultIM" = "mozc";
# };
# "Groups/0/Items/0" = {
# "Name" = "keyboard-us";
# "Layout" = null;
# };
# "Groups/0/Items/1" = {
# "Name" = "mozc";
# "Layout" = null;
# };
# "GroupOrder" = {
# "0" = "Default";
# };
# };
# };
# };
# };
} }

View File

@@ -1,18 +1,18 @@
{ pkgs, ... }@all: with all; { pkgs, ... }@all: with all;
{ {
fonts.packages = with pkgs; [ fonts.packages = with pkgs; [
atkinson-hyperlegible
nerd-fonts._3270
nerd-fonts.heavy-data
nerd-fonts.jetbrains-mono
nerd-fonts.profont
nerd-fonts.proggy-clean-tt
nerd-fonts.zed-mono
newcomputermodern
noto-fonts noto-fonts
noto-fonts-cjk-sans noto-fonts-cjk-sans
noto-fonts-cjk-serif noto-fonts-cjk-serif
noto-fonts-emoji noto-fonts-color-emoji
newcomputermodern
atkinson-hyperlegible
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; [ ] ++ (with rice.font; [
base.package base.package
code.package code.package

View File

@@ -1,15 +1,7 @@
{ pkgs, ... }@all: with all; { pkgs, ... }@all: with all; {
lib.mkIf (hyper.host == "NxNORTH" || hyper.host == "NxACE")
{
programs = { programs = {
steam = { steam.enable = true;
enable = true; gamemode.enable = true;
}; gamescope.enable = true;
gamemode = {
enable = true;
};
gamescope = {
enable = true;
};
}; };
} }

View File

@@ -1,14 +1,8 @@
{ pkgs, ... }@all: with all; { pkgs, ... }@all: with all; {
{
environment.systemPackages = with pkgs; [
gnupg
gpg-tui
];
programs.gnupg = { programs.gnupg = {
dirmngr.enable = true; dirmngr.enable = true;
agent = { agent = {
enable = true; enable = false;
enableSSHSupport = true; enableSSHSupport = true;
enableExtraSocket = true; enableExtraSocket = true;
enableBrowserSocket = true; enableBrowserSocket = true;

View File

@@ -1,6 +1,7 @@
{ ... }: { { pkgs, ... }@all: with all; {
programs.hyprland = { programs.hyprland = {
enable = true; enable = true;
package = inputs.hyprland.packages.${hyper.system}.hyprland;
xwayland.enable = true; xwayland.enable = true;
}; };
services.xserver.enable = true; services.xserver.enable = true;

View File

@@ -1,54 +1,50 @@
{ pkgs, ... }@all: with all; { pkgs, ... }@all: with all; {
{ imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
imports = [ environment = {
(modulesPath + "/installer/scan/not-detected.nix") systemPackages = with pkgs; [ ntfs3g cryptsetup ];
]; variables = pkgs.lib.mkIf (hyper.host == "NxXPS") {
VDPAU_DRIVER = lib.mkIf config.hardware.graphics.enable (lib.mkDefault "va_gl");
environment.systemPackages = with pkgs; [ };
ntfs3g };
]; boot = {
initrd = {
boot.initrd.availableKernelModules = [ "xhci_pci" "thunderbolt" "vmd" "nvme" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ]; availableKernelModules = [ "xhci_pci" "thunderbolt" "vmd" "nvme" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ];
# boot.initrd.kernelModules = [ ]; luks.devices = pkgs.lib.mkIf (hyper.host == "NxXPS") {
boot.kernelModules = [ "kvm-intel" ]; "vault".device = "/dev/nvme0n1p7";
boot.extraModulePackages = [ ]; };
kernelModules = pkgs.lib.mkIf (hyper.host == "NxXPS") [ "i915" "cryptd" ];
fileSystems = if hyper.host != "NxACE" then { };
"/" = { device = "/dev/disk/by-label/nixos"; fsType = "ext4"; }; kernelModules = [ "kvm-intel" ];
"/boot" = { device = "/dev/disk/by-label/EFI"; fsType = "vfat"; }; extraModulePackages = [ ];
"/home/${hyper.user}/shared" = { device = "/dev/disk/by-label/shared"; fsType = "ntfs"; options = [ "uid=1000" "gid=100" ]; }; extraModprobeConfig = pkgs.lib.mkIf (hyper.host == "NxXPS") ''
} else { options iwlwifi 11n_disable=8
"/" = { device = "/dev/disk/by-label/nixos"; fsType = "ext4"; }; '';
"/boot" = { device = "/dev/disk/by-label/EFI"; fsType = "vfat"; }; };
"/vault" = { device = "/dev/disk/by-label/vault"; fsType = "ext4"; }; fileSystems = let
ntfs = { fsType = "ntfs"; options = [ "uid=1000" "gid=100" ]; };
}; in {
"/" = { device = "/dev/disk/by-label/nixos"; fsType = "ext4"; };
"/boot" = { device = "/dev/disk/by-label/EFI"; fsType = "vfat"; };
swapDevices = [ } // (if hyper.host == "NxXPS" then {
{ device = "/dev/disk/by-label/swap"; } "${hyper.home}/shared" = { device = "/dev/disk/by-label/shared"; } // ntfs;
]; "${hyper.home}/vault" = { device = "/dev/disk/by-label/vault"; fsType = "ext4"; };
} else if hyper.host == "NxNORTH" then {
"${hyper.home}/shared" = { device = "/dev/disk/by-label/shared"; } // ntfs;
} else if hyper.host == "NxACE" then {
"/vault" = { device = "/dev/disk/by-label/vault"; fsType = "ext4"; };
} else {});
hardware = {
cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
graphics.extraPackages = with pkgs.lib; mkIf (hyper.host == "NxXPS") [
(if (versionOlder (versions.majorMinor version) "25.05") then pkgs.vaapiIntel else pkgs.intel-vaapi-driver)
pkgs.libvdpau-va-gl
pkgs.intel-media-driver
];
};
swapDevices = [ { device = "/dev/disk/by-label/swap"; } ];
networking.useDHCP = lib.mkDefault true; networking.useDHCP = lib.mkDefault true;
services = {
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; thermald.enable = lib.mkDefault true;
upower.enable = true;
# from nixos-hardware };
services.thermald.enable = lib.mkDefault true;
boot.extraModprobeConfig = if hyper.host == "NxXPS" then ''
options iwlwifi 11n_disable=8
'' else "";
boot.initrd.kernelModules = if hyper.host == "NxXPS" then [ "i915" ] else [];
environment.variables = if hyper.host == "NxXPS" then {
VDPAU_DRIVER = lib.mkIf config.hardware.graphics.enable (lib.mkDefault "va_gl");
} else {};
hardware.graphics.extraPackages = if hyper.host == "NxXPS" then with pkgs; [
(if (lib.versionOlder (lib.versions.majorMinor lib.version) "25.05") then vaapiIntel else intel-vaapi-driver)
libvdpau-va-gl
intel-media-driver
] else [];
services.upower.enable = true;
} }

View File

@@ -2,7 +2,7 @@
lib.mkIf (hyper.host != "NxACE") lib.mkIf (hyper.host != "NxACE")
{ {
systemd.timers."health_reminder" = { systemd.timers."health_reminder" = {
enable = true; enable = false;
wantedBy = [ "timers.target" ]; wantedBy = [ "timers.target" ];
timerConfig = { timerConfig = {
OnBootSec = "30m"; OnBootSec = "30m";

View File

@@ -27,8 +27,6 @@
"hsmw-vpn-secret" = { path = "/etc/ipsec.d/hsmw.secret"; mode = "600"; }; "hsmw-vpn-secret" = { path = "/etc/ipsec.d/hsmw.secret"; mode = "600"; };
}; };
networking.networkmanager.enableStrongSwan = true;
services.strongswan = { services.strongswan = {
enable = true; enable = true;
setup = { setup = {

View File

@@ -1,11 +1,6 @@
{ config, pkgs, ... }@all: with all; { config, pkgs, ... }@all: with all; {
{
# sops.secrets = {
# "wireless-networking.env" = {};
# };
networking = { networking = {
nameservers = [ nameservers = pkgs.lib.mkIf (hyper.host != "NxDCS") [ # wsl manages resolv.conf
"1.1.1.1" "1.1.1.1"
"8.8.8.8" "8.8.8.8"
]; ];
@@ -15,11 +10,15 @@
}; };
enableIPv6 = true; enableIPv6 = true;
firewall.allowedTCPPorts = [ firewall.allowedTCPPorts = [
(pkgs.lib.mkIf config.services.ollama.enable 11434)
80
443
8000 8000
8080 8080
(pkgs.lib.mkIf config.services.nginx.enable 80)
(pkgs.lib.mkIf config.services.nginx.enable 443)
(pkgs.lib.mkIf config.services.ollama.enable 11434)
(pkgs.lib.mkIf config.services.maddy.enable 587)
(pkgs.lib.mkIf config.services.maddy.enable 465)
(pkgs.lib.mkIf config.services.maddy.enable 993)
(pkgs.lib.mkIf config.services.maddy.enable 25025)
]; ];
}; };
} }

14
system-modules/nix.nix Normal file
View File

@@ -0,0 +1,14 @@
{ ... }: {
nix.settings = {
experimental-features = [ "nix-command" "flakes" ];
substituters = [
"https://cache.nixos.org/"
"https://cache.nixos-cuda.org"
"https://nix-community.cachix.org"
];
trusted-public-keys = [
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"cache.nixos-cuda.org:74DUi4Ye579gUqzH4ziL9IyiJBlDpMRn9MBN8oNan9M="
];
};
}

View File

@@ -1,9 +1,7 @@
{ pkgs, ... }@all: with all; { pkgs, ... }@all: with all; lib.mkIf hyper.nvidia.enable {
lib.mkIf hyper.nvidia.enable
{
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
lshw lshw
glxinfo mesa-demos
(pkgs.writeShellScriptBin "nvidia-offload" '' (pkgs.writeShellScriptBin "nvidia-offload" ''
export __NV_PRIME_RENDER_OFFLOAD=1 export __NV_PRIME_RENDER_OFFLOAD=1
export __NV_PRIME_RENDER_OFFLOAD_PROVIDER=NVIDIA-G0 export __NV_PRIME_RENDER_OFFLOAD_PROVIDER=NVIDIA-G0

View File

@@ -40,13 +40,15 @@ let dns-user = "cloudflare"; in
sub = "fc861353142bc05d5dbad1799178e6a1"; sub = "fc861353142bc05d5dbad1799178e6a1";
sub6 = "b8082b7afe9e80971fc9f9dda16ec284"; sub6 = "b8082b7afe9e80971fc9f9dda16ec284";
ssh = "c0f14f17f32d6595c202f041dd836eb3"; ssh = "c0f14f17f32d6595c202f041dd836eb3";
ssh6 = "f1ecb2d9d0522d4eec06437688ca76da"; ssh6 = "0067f396b3efb21e12f63e0c50643161";
dev = "80e76834acc9243696d9763759b22147"; dev = "80e76834acc9243696d9763759b22147";
mail = "d62a0dc01614b9f8f2b469219788fe0f";
mail6 = "f1ecb2d9d0522d4eec06437688ca76da";
}; };
passord-file-path = config.sops.secrets."nx2site/cloudflare/global-api-key".path; passord-file-path = config.sops.secrets."nx2site/cloudflare/global-api-key".path;
in pkgs.writers.writePython3Bin "dyn_dns" { in pkgs.writers.writePython3Bin "dyn_dns" {
libraries = with pkgs.python3Packages; [ requests ]; libraries = with pkgs.python3Packages; [ requests ];
flakeIgnore = [ "E302" "E305" "E226" "E501" "E261" ]; flakeIgnore = [ "E302" "E305" "E226" "E501" "E261" "E241" ];
} /* python */ '' } /* python */ ''
import requests import requests
import subprocess import subprocess
@@ -55,7 +57,7 @@ from time import sleep
def get_public_ip(ipv6: bool = False) -> str: def get_public_ip(ipv6: bool = False) -> str:
return subprocess.run(['${pkgs.curl}/bin/curl', '-s', '-6' if ipv6 else '-4', 'https://ifconfig.me'], capture_output=True, text=True).stdout.strip() return subprocess.run(['${pkgs.curl}/bin/curl', '-s', '-6' if ipv6 else '-4', 'https://ifconfig.me'], capture_output=True, text=True).stdout.strip()
def update_record(record_id: str, record_name: str, ip: str, type: str, proxied: bool, pw: str) -> None: def update_record(record_id: str, record_name: str, ip: str, type: str, proxied: bool, pw: str) -> requests.Response:
sleep(5) sleep(5)
return requests.patch( return requests.patch(
f'https://api.cloudflare.com/client/v4/zones/${zone_id}/dns_records/{record_id}', f'https://api.cloudflare.com/client/v4/zones/${zone_id}/dns_records/{record_id}',
@@ -85,14 +87,16 @@ def main():
# Perform DNS updates # Perform DNS updates
# https://developers.cloudflare.com/api/operations/dns-records-for-a-zone-update-dns-record # https://developers.cloudflare.com/api/operations/dns-records-for-a-zone-update-dns-record
print(f"${hyper.domain}: {update_record(record_id="${record_id.base}", record_name="${hyper.domain}", ip=my_ip, type="A", proxied=True, pw=pw).status_code}", end=", ") print(f"${hyper.domain}: {update_record(record_id="${record_id.base}", record_name="${hyper.domain}", ip=my_ip, type="A", proxied=True, pw=pw).status_code}")
print(f"*.${hyper.domain}: {update_record(record_id="${record_id.sub}", record_name="*.${hyper.domain}", ip=my_ip, type="A", proxied=True, pw=pw).status_code}", end=", ") print(f"*.${hyper.domain}: {update_record(record_id="${record_id.sub}", record_name="*.${hyper.domain}", ip=my_ip, type="A", proxied=True, pw=pw).status_code}")
print(f"ssh.${hyper.domain}: {update_record(record_id="${record_id.ssh}", record_name="ssh.${hyper.domain}", ip=my_ip, type="A", proxied=False, pw=pw).status_code}", end=", ") print(f"ssh.${hyper.domain}: {update_record(record_id="${record_id.ssh}", record_name="ssh.${hyper.domain}", ip=my_ip, type="A", proxied=False, pw=pw).status_code}")
print(f"dev.${hyper.domain}: {update_record(record_id="${record_id.dev}", record_name="dev.${hyper.domain}", ip=my_ip, type="A", proxied=False, pw=pw).status_code}", end=", ") print(f"dev.${hyper.domain}: {update_record(record_id="${record_id.dev}", record_name="dev.${hyper.domain}", ip=my_ip, type="A", proxied=False, pw=pw).status_code}")
# print(f"mail.${hyper.domain}: {update_record(record_id="${record_id.mail}", record_name="mail.${hyper.domain}", ip=my_ip, type="A", proxied=False, pw=pw).status_code}")
print(f"${hyper.domain}: {update_record(record_id="${record_id.base6}", record_name="${hyper.domain}", ip=my_ip6, type="AAAA", proxied=True, pw=pw).status_code}", end=", ") print(f"${hyper.domain}: {update_record(record_id="${record_id.base6}", record_name="${hyper.domain}", ip=my_ip6, type="AAAA", proxied=True, pw=pw).status_code}")
print(f"*.${hyper.domain}: {update_record(record_id="${record_id.sub6}", record_name="*.${hyper.domain}", ip=my_ip6, type="AAAA", proxied=True, pw=pw).status_code}", end=", ") print(f"*.${hyper.domain}: {update_record(record_id="${record_id.sub6}", record_name="*.${hyper.domain}", ip=my_ip6, type="AAAA", proxied=True, pw=pw).status_code}")
print(f"ssh.${hyper.domain}: {update_record(record_id="${record_id.ssh6}", record_name="ssh.${hyper.domain}", ip=my_ip6, type="AAAA", proxied=False, pw=pw).status_code}", end="") print(f"ssh.${hyper.domain}: {update_record(record_id="${record_id.ssh6}", record_name="ssh.${hyper.domain}", ip=my_ip6, type="AAAA", proxied=False, pw=pw).status_code}")
# print(f"mail.${hyper.domain}: {update_record(record_id="${record_id.mail6}", record_name="mail.${hyper.domain}", ip=my_ip6, type="AAAA", proxied=False, pw=pw).status_code}")
if __name__ == "__main__": if __name__ == "__main__":
main() main()

View File

@@ -0,0 +1,22 @@
{ pkgs, ... }@all: with all; {
services.baikal = {
enable = true;
# pool =
user = "baikal";
group = "baikal";
package = pkgs.php.buildComposerProject2 (finalAttrs: {
pname = "baikal";
version = "0.10.1";
src = pkgs.fetchFromGitHub {
owner = "sabre-io";
repo = "Baikal";
tag = "0.10.1";
hash = "sha256-YQQwTdwfHQZdUhO5HbScj/Bl8ype7TtPI3lHjvz2k04=";
};
# It doesn't provide a composer.lock file, we have to generate manually.
composerLock = ./composer.lock;
vendorHash = "sha256-dYg7cULL4gquR5EenA0lD9ZC9Ge4qNwFFDNhELKgSso=";
});
virtualHost = "baikal.${hyper.domain}";
};
}

3208
system-modules/nx2site/composer.lock generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,5 @@
{ pkgs, ... }@all: with all; # THIS IS NOT USED
{ { pkgs, ... }@all: with all; {
sops.secrets = { sops.secrets = {
# "nx2site/namecheap.pw" = { }; # "nx2site/namecheap.pw" = { };
# "nx2site/cloudflare/api-token-dns-edit" = { }; # "nx2site/cloudflare/api-token-dns-edit" = { };
@@ -16,6 +16,8 @@
"${hyper.domain}" "${hyper.domain}"
"*.${hyper.domain}" "*.${hyper.domain}"
"ssh.${hyper.domain}" "ssh.${hyper.domain}"
"mail.${hyper.domain}"
"dev.${hyper.domain}"
]; ];
proxied = true; proxied = true;
apiTokenFile = config.sops.secrets."nx2site/cloudflare/global-api-key-env".path; apiTokenFile = config.sops.secrets."nx2site/cloudflare/global-api-key-env".path;

View File

@@ -26,7 +26,7 @@ let git-user = "git"; in
user = git-user; user = git-user;
appName = "NxGit"; appName = "NxGit";
stateDir = "/var/lib/gitea"; # default stateDir = "/var/lib/gitea"; # default
useWizard = false; # default # useWizard = false; # default
# camoHmacKeyFile = ; # camoHmacKeyFile = ;
database = { database = {
createDatabase = false; # default createDatabase = false; # default
@@ -65,6 +65,8 @@ let git-user = "git"; in
SSH_PORT = secrets.ssh.port; SSH_PORT = secrets.ssh.port;
DOMAIN = "git.${hyper.domain}"; DOMAIN = "git.${hyper.domain}";
SSH_DOMAIN = "ssh.${hyper.domain}"; SSH_DOMAIN = "ssh.${hyper.domain}";
ENABLE_PUSH_CREATE_USER = true;
ENABLE_PUSH_CREATE_ORG = true;
# HTTP_ADDR = "${config.services.gitea.settings.server.DOMAIN}"; # HTTP_ADDR = "${config.services.gitea.settings.server.DOMAIN}";
# HTTP_PORT = 3000; # default # HTTP_PORT = 3000; # default
# PROTOCOL = "http"; # default # PROTOCOL = "http"; # default

View File

@@ -0,0 +1,68 @@
{ config, pkgs, ... }@all: with all; {
sops.secrets = {
"nx2site/dovecot" = {
owner = "dovecot2";
group = "dovecot2";
mode = "600";
};
};
services.dovecot2 = {
enable = true;
enablePAM = false; # independen from linux users
enableImap = true;
enableLmtp = true;
extraConfig = ''
# force to use full user name plus domain name
# for disambiguation
auth_username_format = %Lu
# Authentication configuration:
auth_mechanisms = plain
passdb {
driver = passwd-file
args = ${config.sops.secrets."nx2site/dovecot".path}
}
# for vitual users:
userdb {
driver = static
# the full e-mail address inside passwd-file is the username (%u)
# user@example.com
# %d for domain_name %n for user_name
args = uid=vmail gid=vmail username_format=%u home=/var/spool/mail/vmail/%d/%n
}
# for connecting with postfix
service lmtp {
unix_listener /var/spool/postfix/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
}
service auth {
unix_listener /var/spool/postfix/auth {
mode = 0600
user = postfix
group = postfix
}
}
'';
createMailUser = true;
mailUser = "vmail";
mailGroup = "vmail";
mailLocation = "maildir:~/Maildir";
mailboxes = { # RFC standart
All = { auto = "create"; autoexpunge = null; specialUse = "All"; };
Archive = { auto = "create"; autoexpunge = null; specialUse = "Archive"; };
Drafts = { auto = "create"; autoexpunge = null; specialUse = "Drafts"; };
Flagged = { auto = "create"; autoexpunge = null; specialUse = "Flagged"; };
Junk = { auto = "create"; autoexpunge = "60d"; specialUse = "Junk"; };
Sent = { auto = "create"; autoexpunge = null; specialUse = "Sent"; };
Trash = { auto = "create"; autoexpunge = "60d"; specialUse = "Trash"; };
};
sslServerCert = "/var/lib/acme/${hyper.domain}/fullchain.pem";
sslServerKey = "/var/lib/acme/${hyper.domain}/key.pem";
sslCACert = "/var/lib/acme/${hyper.domain}/chain.pem";
};
}

View File

@@ -0,0 +1,234 @@
{ config, pkgs, ... }@all: with all; let
users = [ "nxcaldav" "nextcloud" "lennart" "daniel" "diane" "georg" "tessa" ];
in {
sops.secrets = {
"nx2site/maddy/nxcaldav_password" = { owner = "maddy"; group = "maddy"; mode = "600"; };
"nx2site/maddy/nextcloud_password" = { owner = "maddy"; group = "maddy"; mode = "600"; };
"nx2site/maddy/lennart_password" = { owner = "maddy"; group = "maddy"; mode = "600"; };
"nx2site/maddy/daniel_password" = { owner = "maddy"; group = "maddy"; mode = "600"; };
"nx2site/maddy/diane_password" = { owner = "maddy"; group = "maddy"; mode = "600"; };
"nx2site/maddy/georg_password" = { owner = "maddy"; group = "maddy"; mode = "600"; };
"nx2site/maddy/tessa_password" = { owner = "maddy"; group = "maddy"; mode = "600"; };
};
users.users."maddy" = {
extraGroups = [ "acme" "nginx" ];
};
services.maddy = {
enable = true;
primaryDomain = hyper.domain;
user = "maddy";
group = "maddy";
hostname = "ssh.${hyper.domain}";
ensureAccounts = [
"nxcaldav@${hyper.domain}"
"nextcloud@${hyper.domain}"
"lennart@${hyper.domain}"
"daniel@${hyper.domain}"
"diane@${hyper.domain}"
"georg@${hyper.domain}"
"tessa@${hyper.domain}"
];
ensureCredentials = {
"nxcaldav@${hyper.domain}".passwordFile = config.sops.secrets."nx2site/maddy/nxcaldav_password".path;
"nextcloud@${hyper.domain}".passwordFile = config.sops.secrets."nx2site/maddy/nextcloud_password".path;
"lennart@${hyper.domain}".passwordFile = config.sops.secrets."nx2site/maddy/lennart_password".path;
"daniel@${hyper.domain}".passwordFile = config.sops.secrets."nx2site/maddy/daniel_password".path;
"diane@${hyper.domain}".passwordFile = config.sops.secrets."nx2site/maddy/diane_password".path;
"georg@${hyper.domain}".passwordFile = config.sops.secrets."nx2site/maddy/georg_password".path;
"tessa@${hyper.domain}".passwordFile = config.sops.secrets."nx2site/maddy/tessa_password".path;
};
openFirewall = true;
tls = {
loader = "file";
certificates = [{
keyPath = "/var/lib/acme/nx2.site/key.pem";
certPath = "/var/lib/acme/nx2.site/cert.pem";
}];
};
# Enable TLS listeners. Configuring this via the module is not yet
# implemented, see https://github.com/NixOS/nixpkgs/pull/153372
config = let
admin = "lennart@${hyper.domain}";
domains = hyper.domain; # could be more
inherit (hyper) domain;
# nix adds 3 variables, hostname, and tls info before the file (see /etc/maddy/maddy.conf)
in /* ini */''
auth.pass_table local_authdb {
table sql_table {
driver sqlite3
dsn credentials.db
table_name passwords
}
}
storage.imapsql local_mailboxes {
driver sqlite3
dsn imapsql.db
}
table.chain local_rewrites {
# tagging with - or +
# alice-something@${domain} or alice+something@${domain} lands in inbox alice@${domain}
optional_step regexp "(.+)[\+-](.+)@(.+)" "$1@$3"
optional_step static {
entry postmaster ${admin}
entry admin ${admin}
}
}
msgpipeline local_routing {
destination ${domains} {
modify {
replace_rcpt &local_rewrites
}
reroute {
destination_in &local_mailboxes {
deliver_to &local_mailboxes
}
default_destination {
modify {
replace_rcpt regexp ".*" "${admin}"
}
deliver_to &local_mailboxes
}
}
}
# should never happen
default_destination {
reject 550 5.1.1 "User doesn't exist"
}
}
smtp tcp://0.0.0.0:25 {
limits {
all rate 20 1s
all concurrency 10
}
dmarc yes
check {
require_mx_record
dkim
spf
}
source ${domains} {
reject 501 5.1.8 "Use Submission for outgoing SMTP"
}
default_source {
destination postmaster ${domains} {
deliver_to &local_routing
}
default_destination {
reject 550 5.1.1 "User doesn't exist"
}
}
}
submission tls://0.0.0.0:465 tcp://0.0.0.0:587 {
limits {
all rate 50 1s
}
auth &local_authdb
source ${domains} {
check {
authorize_sender {
prepare_email &local_rewrites
user_to_email identity
}
}
destination postmaster ${domains} {
deliver_to &local_routing
}
default_destination {
modify {
dkim ${domain} ${domains} default
}
deliver_to &remote_queue
}
}
default_source {
reject 501 5.1.8 "Non-local sender domain"
}
}
target.remote outbound_delivery {
limits {
destination rate 20 1s
destination concurrency 10
}
mx_auth {
dane
mtasts {
cache fs
fs_dir mtasts_cache/
}
local_policy {
min_tls_level encrypted
min_mx_level none
}
}
}
target.queue remote_queue {
target &outbound_delivery
autogenerated_msg_domain ${domain}
bounce {
destination postmaster ${domains} {
deliver_to &local_routing
}
default_destination {
reject 550 5.0.0 "Refusing to send DSNs to non-local addresses"
}
}
}
imap tls://0.0.0.0:993 tcp://0.0.0.0:143 {
auth &local_authdb
storage &local_mailboxes
}
# localhost only - test purposes only (->spam!)
smtp tcp://127.0.0.1:2525 {
tls off
destination postmaster ${domains} {
deliver_to &local_routing
}
default_destination {
modify {
dkim ${domain} ${domains} default
}
deliver_to &remote_queue
}
}
# nx2s-email-relay backdor
smtp tcp://0.0.0.0:25025 {
# 1. Allow incoming mail from the VM for your domains
destination postmaster ${domains} {
deliver_to &local_routing
}
# 2. Prevent the world from using you as an open relay
default_destination {
reject 521 5.0.0 "User not local"
}
}
'';
};
}
# --- Receive
# 1. mx to mail.nx2.site
# 2. mail.nx2.site to nx2s-email-relay (google e2-micro)
# 3. nx2s-email-relay uses emaul-relay.service to socat 25 to 25025 home
# 4. home gets 25025 and handles it
# -- Send
# 1. Via Smtp2go (mail-eu.smtp2go.com)
# SPF is coverd by CNAME (return) (somehow)

View File

@@ -1,27 +1,108 @@
{ pkgs, ...}@all: with all; { config, pkgs, ... }@all: with all; let
{ user = "nextcloud";
sops.secrets = { in {
"nx2site/nextcloud/admin-pass" = { owner = "nextcloud"; }; sops.secrets = let ss = { owner = user; group = user; mode = "600"; }; in {
"nx2site/nextcloud/db-pass" = { owner = "nextcloud"; }; "nx2site/nextcloud/admin_pass" = ss;
# "nx2site/nextcloud/users-pass/nx2" = { owner = "nextcloud"; }; "nx2site/nextcloud/db_pass" = ss;
"nx2site/nextcloud/lennart_pass" = ss;
"nx2site/nextcloud/daniel_pass" = ss;
"nx2site/nextcloud/diane_pass" = ss;
"nx2site/nextcloud/georg_pass" = ss;
"nx2site/nextcloud/tessa_pass" = ss;
"nx2site/smtp2go/nextcloud_api_key" = ss;
}; };
users.users."${user}" = {
isSystemUser = true;
isNormalUser = false;
group = user;
};
# users.groups."${user}" = {};
users.groups.nextcloud.members = [ "nextcloud" config.services.nginx.user ];
services.nextcloud = {
enable = true;
hostName = "n.${hyper.domain}";
# Need to manually increment with every major upgrade.
package = pkgs.nextcloud33;
# Let NixOS install and configure the database automatically.
# database.createLocally = false;
# Let NixOS install and configure Redis caching automatically.
configureRedis = true;
# Increase the maximum file upload size.
maxUploadSize = "16G";
https = true;
# autoUpdateApps.enable = true;
appstoreEnable = false;
extraAppsEnable = true;
extraApps = with config.services.nextcloud.package.packages.apps; {
inherit calendar contacts mail notes tasks;
};
settings = {
overwriteProtocol = "https";
default_phone_region = "DE";
# # local
# "mail_smtpmode" = "smtp";
# "mail_smtphost" = "127.0.0.1";
# "mail_smtpport" = 2525;
# "mail_from_address" = "nextcloud";
# "mail_domain" = hyper.domain;
# "mail_smtpsecure" = ""; # = STARTTLS
services = { "mail_smtpmode" = "smtp";
nextcloud = { "mail_smtphost" = "mail-eu.smtp2go.com";
enable = true; "mail_smtpport" = 2525;
package = pkgs.nextcloud; "mail_from_address" = "nextcloud";
hostName = "nc.${hyper.domain}"; "mail_domain" = hyper.domain;
https = true; "mail_smtpsecure" = ""; # = STARTTLS
configureRedis = true; "mail_smtpauth" = true;
config = { "mail_smtpauthtype" = "LOGIN";
adminpassFile = config.sops.secrets."nx2site/nextcloud/admin-pass".path; "mail_smtpname" = "nextcloud@${hyper.domain}";
adminuser = "nx2"; "simpleSignUpLink.shown" = false;
};
dbtype = "pgsql"; secrets."mail_smtppassword" = config.sops.secrets."nx2site/smtp2go/nextcloud_api_key".path;
# dbhost = config.services.postgresql.settings.port; # using usix socket # secrets.settings."mail_smtppassword" = config.sops.secrets."nx2site/maddy/nextcloud_password".path;
dbname = "nextcloud"; config = {
dbpassFile = config.sops.secrets."nx2site/nextcloud/db-pass".path; adminpassFile = config.sops.secrets."nx2site/nextcloud/admin_pass".path;
}; dbtype = "pgsql";
adminuser = "nextcloud";
# dbhost = "localhost:5432";
dbhost = "/run/postgresql";
dbname = "nextcloud";
dbuser = "nextcloud";
dbpassFile = config.sops.secrets."nx2site/nextcloud/db_pass".path;
};
phpOptions = {
"memory_limit" = pkgs.lib.mkForce "2G";
"opcache.interned_strings_buffer" = "16";
}; };
}; };
systemd.services.nextcloud-ensure-users = let
users = pkgs.lib.mergeAttrsList (pkgs.lib.map (name: {
"${name}" = {
email = "${name}@nx2.site";
passwordFile = config.sops.secrets."nx2site/nextcloud/${name}_pass".path;
};
}) [ "lennart" "daniel" "diane" "georg" "tessa" ]);
in {
enable = true;
script = let occ = "${config.services.nextcloud.occ}/bin/nextcloud-occ"; in /* bash */ ''
${pkgs.lib.optionalString (users != {}) ''
${pkgs.lib.concatStringsSep "\n" (pkgs.lib.mapAttrsToList (name: cfg: ''
if ${occ} user:info "${name}" | grep "user not found"; then
export OC_PASS="$(cat ${pkgs.lib.escapeShellArg cfg.passwordFile})"
${occ} user:add --password-from-env "${name}"
fi
${pkgs.lib.optionalString (cfg.email != null) ''
${occ} user:setting "${name}" settings email "${cfg.email}"
''}
'') users)}
''}
'';
wantedBy = [ "multi-user.target" ];
after = [ "nextcloud-setup.service" ];
};
services.phpfpm.pools.nextcloud.settings = pkgs.lib.mkIf config.services.nextcloud.enable {
"listen.owner" = config.services.nginx.user;
"listen.group" = config.services.nginx.group;
};
} }

View File

@@ -0,0 +1,121 @@
{ pkgs, ... }@all: with all; let
x = rec { version = "0.0.11";
user = "nxcaldav";
nxcsrc = pkgs.fetchFromGitea {
domain = "git.${hyper.domain}";
owner = "nx2";
repo = "NxCalDav";
rev = version;
hash = "sha256-Hk27BQCBtdRQ1aSHVEQ1EVjPrsC2jOUPDT4yuU9OCXQ=";
};
nxc = pkgs.buildGoModule {
pname = "NxCalDav";
inherit version;
src = nxcsrc;
vendorHash = "sha256-prstYDJuwS5E5uRwUkX0M+QdnIaQ0QewKe8HaoZ0Db4=";
};
nxc_helpers = pkgs.python3Packages.buildPythonApplication {
inherit version;
format = "other";
pname = "nxc_helpers";
src = nxcsrc;
propagatedBuildInputs = with pkgs.python313Packages; [ pyyaml psycopg2 ];
installPhase = ''
sed -i "15s|.*| parser.add_argument('--config', default='${cfg}', help='Path to config.yaml')|" ./export_events.py
sed -i "17s|.*| parser.add_argument('--config', default='${cfg}', help='Path to config.yaml')|" ./import_events.py
install -Dm755 "./export_events.py" "$out/bin/nxc_export"
install -Dm755 "./import_events.py" "$out/bin/nxc_import"
'';
};
cfg = (pkgs.formats.yaml { }).generate "nxcaldav-config.yaml" {
server = {
bind_address = "0.0.0.0:14243";
public_url = "http://nxc.${hyper.domain}/";
redaction_text = "[-]";
default_class = "CONFIDENTIAL";
};
database.url = "postgres://nxcaldav@localhost:5432/nxcaldav?sslmode=disable";
users = let dfu = name: {
name = name;
password_cmd = ''cat ${config.sops.secrets."nx2site/nxcaldav/${name}_password".path}'';
groups = [ "family" ];
}; in [
(dfu "lennart")
(dfu "daniel")
(dfu "diane")
(dfu "georg")
(dfu "tessa")
(dfu "shared")
];
calendars = [
{ owner = "lennart"; color = "#dddddd"; id = "preservation"; }
{ owner = "lennart"; color = "#dd2222"; id = "effort"; }
{ owner = "lennart"; color = "#2222dd"; id = "experience"; }
{ owner = "lennart"; color = "#22aa22"; id = "leisure"; }
{ id = "family";
owner = "shared";
color = "#dddd22";
access = [
{ group = "family"; mode = "read-write"; }
];
}
];
address_books = [
{ owner = "lennart"; id = "Others"; }
{ owner = "lennart"; id = "TUDa"; }
{ owner = "lennart"; id = "HSMW"; }
{ owner = "lennart"; id = "CWG"; }
{ owner = "lennart"; id = "Handball"; }
{ id = "Family & Freinds";
owner = "shared";
access = [
{ group = "family"; mode = "read-write"; }
];
}
];
aggregates = [
{ id = "lennart-aggregate";
owner = "shared";
sources = [ "preservation" "effort" "experience" "leisure" ];
access = [
{ group = "family" ; mode = "read-only"; }
{ ics = "future-only"; }
];
}
];
};
}; in with x; {
sops.secrets = let ss = { owner = user; group = user; mode = "600"; }; in {
"nx2site/nxcaldav/lennart_password" = ss;
"nx2site/nxcaldav/daniel_password" = ss;
"nx2site/nxcaldav/diane_password" = ss;
"nx2site/nxcaldav/georg_password" = ss;
"nx2site/nxcaldav/tessa_password" = ss;
"nx2site/nxcaldav/shared_password" = ss;
};
users = {
groups."${user}" = {};
users = {
"${hyper.user}".extraGroups = [ user ];
"${user}" = {
isSystemUser = true;
isNormalUser = false;
group = user;
};
};
};
environment.systemPackages = [ nxc_helpers ];
systemd.services."nxcaldav" = {
enable = true;
path = [ pkgs.bash pkgs.coreutils ];
serviceConfig = {
User = user;
Group = user;
ExecStart = ''${nxc}/bin/nxcaldav -c ${cfg}'';
Restart = "on-failure";
RestartSec = 5;
StartLimitBurst = 5;
StartLimitIntervalSec = 60;
};
};
}

View File

@@ -1,9 +1,8 @@
{ pkgs, ... }@all: with all; { pkgs, ... }@all: with all; {
{
services = { services = {
open-web-calendar = { open-web-calendar = {
enable = true; enable = true;
domain = "cal.${hyper.domain}"; domain = "owc.${hyper.domain}";
package = pkgs.open-web-calendar; package = pkgs.open-web-calendar;
settings = { settings = {
# PORT = 21342; # PORT = 21342;
@@ -11,4 +10,5 @@
calendarSettings = { }; calendarSettings = { };
}; };
}; };
# proxy endpoint is done is done automatically
} }

View File

@@ -1,5 +1,4 @@
{ pkgs, ...}@all: with all; { pkgs, ...}@all: with all; {
{
sops.secrets = { sops.secrets = {
"nx2site/sslCertificate.pem" = { owner = config.services.nginx.user; }; "nx2site/sslCertificate.pem" = { owner = config.services.nginx.user; };
"nx2site/sslCertificateKey.pem" = { owner = config.services.nginx.user; }; "nx2site/sslCertificateKey.pem" = { owner = config.services.nginx.user; };
@@ -14,19 +13,26 @@
}; };
certs = { certs = {
"${hyper.domain}" = { "${hyper.domain}" = {
extraDomainNames = builtins.map (subd: "${subd}.${hyper.domain}") [ "sync" ]; extraDomainNames = builtins.map (subd: "${subd}.${hyper.domain}") [
"sync"
"ssh"
# "mail"
];
}; };
}; };
}; };
users.users."nginx" = { users.users = {
extraGroups = [ "nginx" "acme" "copyparty" ]; "nginx" = {
useDefaultShell = false; extraGroups = [ "nginx" "acme" "copyparty" ];
linger = true; useDefaultShell = false;
home = "/var/nginx/"; linger = true;
homeMode = "770"; home = "/var/nginx/";
createHome = true; homeMode = "770";
isSystemUser = true; createHome = true;
isNormalUser = false; isSystemUser = true;
isNormalUser = false;
};
"acme".extraGroups = [ "nginx" "acme" "hugo" ];
}; };
systemd.services.nginx.serviceConfig.ProtectHome = "read-only"; systemd.services.nginx.serviceConfig.ProtectHome = "read-only";
services.nginx = let services.nginx = let
@@ -50,7 +56,7 @@
defaultSSLListenPort = 443; defaultSSLListenPort = 443;
enableQuicBPF = true; enableQuicBPF = true;
enableReload = true; enableReload = true;
package = pkgs.nginxQuic; package = pkgs.nginx;
proxyResolveWhileRunning = false; proxyResolveWhileRunning = false;
proxyTimeout = "20s"; proxyTimeout = "20s";
recommendedBrotliSettings = true; recommendedBrotliSettings = true;
@@ -58,7 +64,7 @@
recommendedOptimisation = true; recommendedOptimisation = true;
recommendedProxySettings = true; recommendedProxySettings = true;
recommendedTlsSettings = true; recommendedTlsSettings = true;
recommendedZstdSettings = true; # recommendedZstdSettings = true;
serverTokens = false; serverTokens = false;
sslDhparam = config.sops.secrets."nx2site/dhparams.pem".path; sslDhparam = config.sops.secrets."nx2site/dhparams.pem".path;
sslProtocols = "TLSv1.2 TLSv1.3"; sslProtocols = "TLSv1.2 TLSv1.3";
@@ -101,8 +107,23 @@
"~ ^(/gpg)$".return = "301 /cards/gpg"; "~ ^(/gpg)$".return = "301 /cards/gpg";
"~ ^(/contact)$".return = "301 /cards/contact"; "~ ^(/contact)$".return = "301 /cards/contact";
"~ ^(/ba)$".return = "301 /BA.pdf"; "~ ^(/ba)$".return = "301 /BA.pdf";
"~ ^(/schedule)$".return = "301 https://owc.${hyper.domain}/calendar.html?specification_url=https://${hyper.domain}/owc-schedule.json?";
}; };
}; };
"mail.${hyper.domain}" = {
listen = [
{ addr = "0.0.0.0"; port = 80; }
{ addr = "[::0]"; port = 80; }
];
locations."/.well-known/acme-challenge".root = "/var/lib/acme/acme-challenge";
};
"ssh.${hyper.domain}" = {
listen = [
{ addr = "0.0.0.0"; port = 80; }
{ addr = "[::0]"; port = 80; }
];
locations."/.well-known/acme-challenge".root = "/var/lib/acme/acme-challenge";
};
"matrix.${hyper.domain}" = { "matrix.${hyper.domain}" = {
listen = dl; listen = dl;
locations."~.*".return = "502"; locations."~.*".return = "502";
@@ -156,6 +177,18 @@
listen = dl; listen = dl;
locations = { "/" = { proxyPass = "http://127.0.0.1:5232"; }; }; locations = { "/" = { proxyPass = "http://127.0.0.1:5232"; }; };
}); });
"nxc.${hyper.domain}" = (vh // {
listen = dl;
locations = { "/" = { proxyPass = "http://127.0.0.1:14243"; }; };
});
"n.${hyper.domain}" = {
listen = dl;
forceSSL = true;
enableACME = true;
# rest is done by the nextcloud module
};
# "nc.${hyper.domain}" = vh // { # "nc.${hyper.domain}" = vh // {
# # directly to nc # # directly to nc
# }; # };
@@ -179,13 +212,15 @@
}; };
"dev.${hyper.domain}" = vh // { "dev.${hyper.domain}" = vh // {
listen = dl; listen = dl;
locations."/" = { locations = {
proxyPass = "http://127.0.0.1:8080"; "/" = {
proxyWebsockets = true; proxyPass = "http://127.0.0.1:8080";
}; proxyWebsockets = true;
};
};
}; };
# is done atomatically # is done atomatically
# "cal.${hyper.domain}" = vh // { # "owc.${hyper.domain}" = vh // {
# listen = dl; # listen = dl;
# locations = { "/" = { # locations = { "/" = {
# proxyPass = "http://unix:///run/open-web-calendar/socket"; # proxyPass = "http://unix:///run/open-web-calendar/socket";
@@ -223,7 +258,7 @@
}; };
}; };
}; };
"~^(.*).${hyper.domain}$" = { "~^(?!n\.)(.*)\.${hyper.domain}$" = {
listen = dl; listen = dl;
root = "/var/nginx/webroot"; root = "/var/nginx/webroot";
locations."~.*".return = "502"; locations."~.*".return = "502";

View File

@@ -1,20 +0,0 @@
{ pkgs, ... }@all: with all;
{
environment.systemPackages = [
(pkgs.mkYarnPackage {
name = "rallly";
src = pkgs.fetchFromGitHub {
owner = "lukevella";
repo = "rallly";
rev = "v3.11.2";
hash = "sha256-ej6Y0ouiheoH6dSBWsSIW6qt9UvsLh9ODDQA5Fqt3zs=";
};
packageJson = ./package.json;
yarnLock = ./yarn.lock;
yarnNix = ./yarn.nix;
# patchPhase = /* shell */ ''
# cp ........ ?
# '';
})
];
}

View File

@@ -0,0 +1,60 @@
{ pkgs, ... }@all: with all; {
# Postfix: The SMTP server (MTA)
# Handles sending, receiving, and local delivery routing.
services.postfix = {
enable = true;
enableSubmission = true;
enableSubmissions = true;
# main.cf configuration
settings.main = {
hostname = "mail.${hyper.domain}";
domain = hyper.domain;
# Allow local services (like CalDAV) to send mail without authentication
networks = [ "127.0.0.0/8" "[::1]/128" ];
# TLS settings - using ACME certs from proxy.nix
smtpd_tls_security_level = "may";
smtpd_tls_auth_only = "yes";
smtpd_tls_cert_file = "/var/lib/acme/${hyper.domain}/fullchain.pem";
smtpd_tls_key_file = "/var/lib/acme/${hyper.domain}/key.pem";
# Use Dovecot for authentication (SASL)
smtpd_sasl_type = "dovecot";
smtpd_sasl_path = "/var/spool/postfix/auth";
smtpd_sasl_auth_enable = "yes";
smtpd_sasl_security_options = "noanonymous";
# Use Dovecot for delivery (LMTP)
virtual_transport = "lmtp:unix:/var/spool/postfix/dovecot-lmtp";
virtual_mailbox_domains = [ hyper.domain ];
mailbox_transport = "lmtp:unix:/var/spool/postfix/dovecot-lmtp";
# Basic relay restrictions
smtpd_recipient_restrictions = [
"permit_mynetworks"
"permit_sasl_authenticated"
"reject_unauth_destination"
];
# master.cf configuration: Enable submission (port 587) for mail clients
# submission-options = {
# type = "inet";
# private = false;
# command = "smtpd";
# args = [
# "-o smtpd_tls_security_level=encrypt"
# "-o smtpd_sasl_auth_enable=yes"
# "-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject"
# "-o milter_macro_daemon_name=ORIGINATING"
# ];
# };
};
};
# create socket ala wiki
users.users."postfix" = {
createHome = true;
home = "/var/spool/postfix";
};
}

View File

@@ -0,0 +1,17 @@
{ ... }:{
users = {
groups."vmail" = {};
users = {
"vmail" = {
isSystemUser = true;
group = "vmail";
home = "/var/spool/mail/vmail";
createHome = true;
};
# Permissions to allow Postfix and Dovecot to read ACME certificates
"postfix".extraGroups = [ "acme" ];
"dovecot2".extraGroups = [ "acme" ];
};
};
}

View File

@@ -27,6 +27,7 @@
"gitea" "gitea"
"vaultwarden" "vaultwarden"
"paperless" "paperless"
"nxcaldav"
"nextcloud" "nextcloud"
]; ];
settings = { settings = {
@@ -47,13 +48,17 @@
ensureDBOwnership = true; ensureDBOwnership = true;
} }
{ {
name = "nextcloud"; name = "paperless";
ensureDBOwnership = true; ensureDBOwnership = true;
} }
{ {
name = "paperless"; name = "nxcaldav";
ensureDBOwnership = true; ensureDBOwnership = true;
} }
{
name = "nextcloud";
ensureDBOwnership = true;
}
]; ];
}; };
postgresqlBackup = { postgresqlBackup = {

View File

@@ -2,12 +2,9 @@
{ {
hardware.keyboard.qmk.enable = true; hardware.keyboard.qmk.enable = true;
# home.packages = with pkgs; [
# via
# ];
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
via # via
qmk qmk
]; ];
services.udev.packages = [ pkgs.via ]; # services.udev.packages = [ pkgs.via ];
} }

View File

@@ -0,0 +1,31 @@
{ pkgs, ... }@all: with all; {
services.postgresql = lib.mkIf (!hyper.isServer) {
enable = false;
ensureUsers = [{
name = "nxcaldav";
ensureDBOwnership = true;
}];
package = pkgs.postgresql_16; # https://stackoverflow.com/questions/51688193/how-to-upgrade-postgresql-in-nixos
dataDir = "/var/lib/postgresql/${config.services.postgresql.package.psqlSchema}"; # default
enableJIT = false; # default
initdbArgs = []; # default
checkConfig = true; # default
enableTCPIP = false;
# # extraPlugins =
initialScript = null; # default
authentication = lib.mkForce ''
# TYPE DATABASE USER ADDRESS METHOD
local all all trust
host all all 127.0.0.1/32 trust #scram-sha-256
host all all ::1/128 trust #scram-sha-256
'';
settings = {
port = 5432; # default
listen_addresses = lib.mkForce "127.0.0.1";
log_line_prefix = "[%p] "; # default
shared_preload_libraries = [ ]; # default
};
ensureDatabases = [ "nxcaldav" ];
};
}

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