···
91
91
"Mod+q".action = {
92
92
close-window = { };
93
93
};
94
94
+
"Mod+f".action = {
95
95
+
toggle-window-floating = { };
96
96
+
};
97
97
+
"Mod+Shift+f".action = {
98
98
+
switch-focus-between-floating-and-tiling = { };
99
99
+
};
94
100
"Mod+s".action = {
95
101
screenshot = {
96
102
show-pointer = true;
···
108
114
"Mod+Equal".action = {
109
115
set-column-width = "+10%";
110
116
};
117
117
+
"Mod+Shift+r".action.spawn = [
118
118
+
"sh"
119
119
+
"-c"
120
120
+
"pkill quickshell; quickshell &"
121
121
+
];
111
122
"XF86MonBrightnessDown".action.spawn = [
112
123
"brightnessctl"
113
124
"set"
···
247
258
gh # github cli
248
259
signal-desktop
249
260
xwayland-satellite # for running x11 apps
250
250
-
nixfmt-rfc-style # nix formatter
261
261
+
nixfmt # nix formatter
251
262
nil # nix language server
252
263
atac # postman-like TUI
253
264
trippy # network analyzer
···
272
283
docker-compose
273
284
discord
274
285
prismlauncher # minecraft launcher
275
275
-
neofetch
286
286
+
fastfetch
276
287
277
288
# --- FONTS ARE IMPORTANT ---
278
289
# Berkeley Mono is the main system font, keeping JetBrains and Font Awesome for icons
···
294
305
295
306
services.mako = {
296
307
enable = true;
297
297
-
borderRadius = 8;
298
298
-
borderSize = 2;
299
299
-
padding = "12";
300
300
-
margin = "12";
301
301
-
font = "BerkeleyMono Nerd Font 11";
308
308
+
settings = {
309
309
+
border-radius = 8;
310
310
+
border-size = 2;
311
311
+
padding = "12";
312
312
+
margin = "12";
313
313
+
font = "BerkeleyMono Nerd Font 11";
314
314
+
};
302
315
};
303
316
304
317
catppuccin = {
···
393
406
if test -f ~/.config/op/plugins.sh
394
407
source ~/.config/op/plugins.sh
395
408
end
396
396
-
# Show neofetch when inside zellij
409
409
+
# Show fastfetch when inside zellij
397
410
if set -q ZELLIJ
398
398
-
neofetch
411
411
+
fastfetch --logo small
399
412
end
400
413
401
414
function y
···
519
532
name = "nix";
520
533
auto-format = true;
521
534
formatter = {
522
522
-
command = "${pkgs.nixfmt-rfc-style}/bin/nixfmt";
535
535
+
command = "${pkgs.nixfmt}/bin/nixfmt";
523
536
};
524
537
}
525
538
{
···
64
64
readonly property string iconBatCharge: "\uf0e7"
65
65
// Power
66
66
readonly property string iconPower: "\u23fb"
67
67
+
// GitHub
68
68
+
readonly property string iconGithub: "\uf09b"
67
69
68
70
// System data
69
71
property int cpuUsage: 0
···
82
84
property string batteryStatus: ""
83
85
property string powerProfile: ""
84
86
property string weather: ""
87
87
+
property int ghNotifications: 0
88
88
+
property int ghLastCount: 0
85
89
86
90
anchors {
87
91
top: true
···
256
260
Component.onCompleted: running = true
257
261
}
258
262
263
263
+
// GitHub notifications
264
264
+
Process {
265
265
+
id: ghProc
266
266
+
command: ["sh", "-c", "gh api notifications --jq '[.[] | select(.unread)] | length' 2>/dev/null || echo 0"]
267
267
+
stdout: SplitParser {
268
268
+
onRead: data => {
269
269
+
if (!data) return
270
270
+
var count = parseInt(data.trim()) || 0
271
271
+
root.ghNotifications = count
272
272
+
// Send desktop notification if count increased
273
273
+
if (count > root.ghLastCount && count > 0) {
274
274
+
ghNotifyProc.running = true
275
275
+
}
276
276
+
root.ghLastCount = count
277
277
+
}
278
278
+
}
279
279
+
Component.onCompleted: running = true
280
280
+
}
281
281
+
282
282
+
// Desktop notification for new GitHub notifications
283
283
+
Process {
284
284
+
id: ghNotifyProc
285
285
+
command: ["notify-send", "-a", "GitHub", "GitHub", "You have new notifications"]
286
286
+
}
287
287
+
288
288
+
// GitHub timer (refresh every 2 minutes)
289
289
+
Timer {
290
290
+
interval: 120000
291
291
+
running: true
292
292
+
repeat: true
293
293
+
onTriggered: ghProc.running = true
294
294
+
}
295
295
+
259
296
// Weather timer (refresh every 15 minutes)
260
297
Timer {
261
298
interval: 900000
···
282
319
}
283
320
}
284
321
285
285
-
// Center section - absolutely positioned
322
322
+
// Left section - time, weather, github
286
323
RowLayout {
287
287
-
anchors.centerIn: parent
324
324
+
anchors.left: parent.left
325
325
+
anchors.leftMargin: 12
326
326
+
anchors.verticalCenter: parent.verticalCenter
288
327
spacing: 12
289
289
-
290
290
-
Text {
291
291
-
color: root.colText
292
292
-
font { family: root.fontFamily; pixelSize: root.fontSize }
293
293
-
text: root.weather
294
294
-
visible: root.weather !== ""
295
295
-
}
296
328
297
329
Text {
298
330
id: clockText
···
305
337
repeat: true
306
338
onTriggered: clockText.text = Qt.formatDateTime(new Date(), "dd-MM-yyyy HH:mm")
307
339
}
340
340
+
}
341
341
+
342
342
+
Rectangle { width: 1; height: 16; color: root.colOverlay0; visible: root.weather !== "" }
343
343
+
344
344
+
Text {
345
345
+
color: root.colText
346
346
+
font { family: root.fontFamily; pixelSize: root.fontSize }
347
347
+
text: root.weather
348
348
+
visible: root.weather !== ""
349
349
+
}
350
350
+
351
351
+
Rectangle { width: 1; height: 16; color: root.colOverlay0 }
352
352
+
353
353
+
Text {
354
354
+
color: root.ghNotifications > 0 ? root.colBlue : root.colOverlay0
355
355
+
font { family: root.fontFamily; pixelSize: root.fontSize }
356
356
+
text: root.iconGithub + (root.ghNotifications > 0 ? " " + root.ghNotifications : "")
357
357
+
MouseArea {
358
358
+
anchors.fill: parent
359
359
+
cursorShape: Qt.PointingHandCursor
360
360
+
onClicked: ghOpenProc.running = true
361
361
+
}
362
362
+
}
363
363
+
364
364
+
Process {
365
365
+
id: ghOpenProc
366
366
+
command: ["xdg-open", "https://github.com/notifications"]
308
367
}
309
368
}
310
369