···
78
78
},
79
79
"crane": {
80
80
"locked": {
81
81
+
"lastModified": 1773857772,
82
82
+
"narHash": "sha256-5xsK26KRHf0WytBtsBnQYC/lTWDhQuT57HJ7SzuqZcM=",
83
83
+
"owner": "ipetkov",
84
84
+
"repo": "crane",
85
85
+
"rev": "b556d7bbae5ff86e378451511873dfd07e4504cd",
86
86
+
"type": "github"
87
87
+
},
88
88
+
"original": {
89
89
+
"owner": "ipetkov",
90
90
+
"repo": "crane",
91
91
+
"type": "github"
92
92
+
}
93
93
+
},
94
94
+
"crane_2": {
95
95
+
"locked": {
81
96
"lastModified": 1771438068,
82
97
"narHash": "sha256-nGBbXvEZVe/egCPVPFcu89RFtd8Rf6J+4RFoVCFec0A=",
83
98
"owner": "ipetkov",
···
162
177
"fenix_3": {
163
178
"inputs": {
164
179
"nixpkgs": [
165
165
-
"trmnl-rs",
180
180
+
"mako-tui",
166
181
"nixpkgs"
167
182
],
168
183
"rust-analyzer-src": "rust-analyzer-src_3"
169
184
},
170
185
"locked": {
186
186
+
"lastModified": 1773818109,
187
187
+
"narHash": "sha256-Wsk92HrZODmCgBb+v7XfTMUAIEhqU+Obwj+09IKRTpU=",
188
188
+
"owner": "nix-community",
189
189
+
"repo": "fenix",
190
190
+
"rev": "b8b443c5a1bd8dd99df899b4ac786a7f410193e5",
191
191
+
"type": "github"
192
192
+
},
193
193
+
"original": {
194
194
+
"owner": "nix-community",
195
195
+
"repo": "fenix",
196
196
+
"type": "github"
197
197
+
}
198
198
+
},
199
199
+
"fenix_4": {
200
200
+
"inputs": {
201
201
+
"nixpkgs": [
202
202
+
"trmnl-rs",
203
203
+
"nixpkgs"
204
204
+
],
205
205
+
"rust-analyzer-src": "rust-analyzer-src_4"
206
206
+
},
207
207
+
"locked": {
171
208
"lastModified": 1757400094,
172
209
"narHash": "sha256-5Rcs6juMoMTaMJSR1glravl4QB9yLAFBD8s7KLi4kdQ=",
173
210
"owner": "nix-community",
···
232
269
"flake-utils_3": {
233
270
"inputs": {
234
271
"systems": "systems_4"
272
272
+
},
273
273
+
"locked": {
274
274
+
"lastModified": 1731533236,
275
275
+
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
276
276
+
"owner": "numtide",
277
277
+
"repo": "flake-utils",
278
278
+
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
279
279
+
"type": "github"
280
280
+
},
281
281
+
"original": {
282
282
+
"owner": "numtide",
283
283
+
"repo": "flake-utils",
284
284
+
"type": "github"
285
285
+
}
286
286
+
},
287
287
+
"flake-utils_4": {
288
288
+
"inputs": {
289
289
+
"systems": "systems_5"
235
290
},
236
291
"locked": {
237
292
"lastModified": 1731533236,
···
355
410
"type": "github"
356
411
}
357
412
},
413
413
+
"mako-tui": {
414
414
+
"inputs": {
415
415
+
"crane": "crane",
416
416
+
"fenix": "fenix_3",
417
417
+
"flake-utils": "flake-utils_3",
418
418
+
"nixpkgs": [
419
419
+
"nixpkgs"
420
420
+
]
421
421
+
},
422
422
+
"locked": {
423
423
+
"lastModified": 1773925569,
424
424
+
"narHash": "sha256-YxBuMvOJcntRT7BSfDLK3tNr2NFhgOOm25aaUHf9ARY=",
425
425
+
"ref": "refs/heads/main",
426
426
+
"rev": "cc512df992b8acb92010c2257e6a65d9c3cb4ace",
427
427
+
"revCount": 4,
428
428
+
"type": "git",
429
429
+
"url": "https://codeberg.org/seanaye/mako-tui"
430
430
+
},
431
431
+
"original": {
432
432
+
"type": "git",
433
433
+
"url": "https://codeberg.org/seanaye/mako-tui"
434
434
+
}
435
435
+
},
358
436
"naersk": {
359
437
"inputs": {
360
438
"fenix": "fenix",
···
688
766
"fsel": "fsel",
689
767
"home-manager": "home-manager_2",
690
768
"kaleidux": "kaleidux",
769
769
+
"mako-tui": "mako-tui",
691
770
"niri": "niri",
692
771
"nixarr": "nixarr",
693
772
"nixos-hardware": "nixos-hardware",
···
732
811
}
733
812
},
734
813
"rust-analyzer-src_3": {
814
814
+
"flake": false,
815
815
+
"locked": {
816
816
+
"lastModified": 1773775226,
817
817
+
"narHash": "sha256-413aE+fhubk1GA2v4IlRrpdZZzW/b89wJGuDfZCVtEs=",
818
818
+
"owner": "rust-lang",
819
819
+
"repo": "rust-analyzer",
820
820
+
"rev": "4eac290b58a70961e78f2e0c04f61a08b995b2cb",
821
821
+
"type": "github"
822
822
+
},
823
823
+
"original": {
824
824
+
"owner": "rust-lang",
825
825
+
"ref": "nightly",
826
826
+
"repo": "rust-analyzer",
827
827
+
"type": "github"
828
828
+
}
829
829
+
},
830
830
+
"rust-analyzer-src_4": {
735
831
"flake": false,
736
832
"locked": {
737
833
"lastModified": 1757362324,
···
808
904
"type": "github"
809
905
}
810
906
},
907
907
+
"systems_5": {
908
908
+
"locked": {
909
909
+
"lastModified": 1681028828,
910
910
+
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
911
911
+
"owner": "nix-systems",
912
912
+
"repo": "default",
913
913
+
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
914
914
+
"type": "github"
915
915
+
},
916
916
+
"original": {
917
917
+
"owner": "nix-systems",
918
918
+
"repo": "default",
919
919
+
"type": "github"
920
920
+
}
921
921
+
},
811
922
"trmnl-rs": {
812
923
"inputs": {
813
813
-
"crane": "crane",
814
814
-
"fenix": "fenix_3",
815
815
-
"flake-utils": "flake-utils_3",
924
924
+
"crane": "crane_2",
925
925
+
"fenix": "fenix_4",
926
926
+
"flake-utils": "flake-utils_4",
816
927
"nixpkgs": [
817
928
"nixpkgs"
818
929
],
···
43
43
url = "github:seanaye/berkeley-mono";
44
44
inputs.nixpkgs.follows = "nixpkgs";
45
45
};
46
46
+
mako-tui = {
47
47
+
url = "git+https://codeberg.org/seanaye/mako-tui";
48
48
+
inputs.nixpkgs.follows = "nixpkgs";
49
49
+
};
46
50
nixos-raspberrypi.url = "github:nvmd/nixos-raspberrypi/main";
47
51
};
48
52
···
31
31
zellij # terminal multiplexer
32
32
alacritty
33
33
inputs.fsel.packages.${pkgs.system}.default # App launcher / fuzzy finder
34
34
+
inputs.mako-tui.packages.${pkgs.system}.default # Notification TUI
34
35
bemoji # emoji picker
35
36
networkmanager_dmenu # network picker for fuzzel
36
37
quickshell # Status bar (QML-based)
···
43
44
})
44
45
fd
45
46
ripgrep
47
47
+
opencode
46
48
yazi # tui file browser
47
49
gh # github cli
50
50
+
forgejo-cli
48
51
gh-dash # github dashboard TUI
49
52
diffnav # git diff viewer
50
53
signal-desktop
···
64
67
(pkgs.writeShellScriptBin "claude-notify" ''
65
68
PANE_ID="$ZELLIJ_PANE_ID"
66
69
SESSION="$ZELLIJ_SESSION_NAME"
70
70
+
ID_FILE="/tmp/claude-notify-''${PANE_ID}"
67
71
(
68
68
-
ACTION=$(${pkgs.libnotify}/bin/notify-send "Claude Code" "Waiting for your approval" \
72
72
+
{
73
73
+
read -r NOTIFY_ID
74
74
+
echo "$NOTIFY_ID" > "$ID_FILE"
75
75
+
while read -r line; do
76
76
+
if [ "$line" = "default" ]; then
77
77
+
WIN_ID=$(niri msg windows | ${pkgs.gnugrep}/bin/grep -B1 "$SESSION" | ${pkgs.gnugrep}/bin/grep -oP '(?<=Window ID )\d+')
78
78
+
if [ -n "$WIN_ID" ]; then
79
79
+
niri msg action focus-window --id "$WIN_ID"
80
80
+
fi
81
81
+
zjctl pane focus --pane "id:terminal:$PANE_ID"
82
82
+
fi
83
83
+
done
84
84
+
} < <(${pkgs.libnotify}/bin/notify-send "Claude Code" "Waiting for your approval" \
69
85
--app-name=claude-code \
70
86
--action=default=Open \
87
87
+
--print-id \
71
88
--wait)
72
72
-
if [ "$ACTION" = "default" ]; then
73
73
-
WIN_ID=$(niri msg windows | ${pkgs.gnugrep}/bin/grep -B1 "$SESSION" | ${pkgs.gnugrep}/bin/grep -oP '(?<=Window ID )\d+')
74
74
-
if [ -n "$WIN_ID" ]; then
75
75
-
niri msg action focus-window --id "$WIN_ID"
76
76
-
fi
77
77
-
zjctl pane focus --pane "id:terminal:$PANE_ID"
78
78
-
fi
89
89
+
rm -f "$ID_FILE"
79
90
) &
80
91
'')
92
92
+
(pkgs.writeShellScriptBin "claude-notify-clear" ''
93
93
+
PANE_ID="$ZELLIJ_PANE_ID"
94
94
+
ID_FILE="/tmp/claude-notify-''${PANE_ID}"
95
95
+
if [ -f "$ID_FILE" ]; then
96
96
+
NOTIFY_ID=$(cat "$ID_FILE")
97
97
+
${pkgs.dbus}/bin/dbus-send --session \
98
98
+
--print-reply \
99
99
+
--dest=org.freedesktop.Notifications \
100
100
+
--type=method_call \
101
101
+
/org/freedesktop/Notifications \
102
102
+
org.freedesktop.Notifications.CloseNotification \
103
103
+
"uint32:$NOTIFY_ID" >/dev/null 2>&1
104
104
+
rm -f "$ID_FILE"
105
105
+
fi
106
106
+
'')
81
107
nautilus # file browser
82
108
sqlitebrowser
83
109
gnome-characters # symbol picker
···
122
148
clip-to-geometry = true;
123
149
draw-border-with-background = false;
124
150
}
151
151
+
{
152
152
+
matches = [ { app-id = "^fsel$"; } ];
153
153
+
open-floating = true;
154
154
+
default-column-width.fixed = 800;
155
155
+
default-window-height.fixed = 500;
156
156
+
}
157
157
+
{
158
158
+
matches = [ { app-id = "^mako-tui$"; } ];
159
159
+
open-floating = true;
160
160
+
default-column-width.fixed = 800;
161
161
+
default-window-height.fixed = 500;
162
162
+
}
125
163
];
126
164
debug = {
127
165
honor-xdg-activation-with-invalid-serial = { };
···
148
186
binds = {
149
187
"Mod+d".action.spawn = [
150
188
"alacritty"
189
189
+
"--class"
190
190
+
"fsel"
151
191
"-e"
152
192
"fsel"
153
193
"--detach"
154
194
];
155
195
"Mod+c".action.spawn = [
156
196
"alacritty"
197
197
+
"--class"
198
198
+
"fsel"
157
199
"-e"
158
200
"fsel"
159
201
"--cclip"
160
202
];
161
203
"Mod+e".action.spawn = "bemoji";
162
162
-
"Mod+n".action.spawn = "networkmanager_dmenu";
204
204
+
"Mod+n".action.spawn = [
205
205
+
"alacritty"
206
206
+
"--class"
207
207
+
"mako-tui"
208
208
+
"-e"
209
209
+
"mako-tui"
210
210
+
];
163
211
"Mod+a".action.spawn = "alacritty";
164
212
"Mod+h".action = {
165
213
focus-column-left = { };
···
550
598
};
551
599
};
552
600
load_plugins = {
553
553
-
"\"file:~/.config/zellij/plugins/zrpc.wasm\"" = {};
601
601
+
"\"file:~/.config/zellij/plugins/zrpc.wasm\"" = { };
554
602
};
555
603
pane_frames = false;
556
604
show_startup_tips = false;
···
571
619
Notification = [
572
620
{
573
621
matcher = "permission_prompt";
574
574
-
hooks = [{ type = "command"; command = "claude-notify"; }];
622
622
+
hooks = [
623
623
+
{
624
624
+
type = "command";
625
625
+
command = "claude-notify";
626
626
+
}
627
627
+
];
628
628
+
}
629
629
+
];
630
630
+
Stop = [
631
631
+
{
632
632
+
hooks = [
633
633
+
{
634
634
+
type = "command";
635
635
+
command = "claude-notify-clear";
636
636
+
}
637
637
+
];
575
638
}
576
639
];
577
640
};