summaryrefslogtreecommitdiff
path: root/accounts/gkleen@sif/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'accounts/gkleen@sif/default.nix')
-rw-r--r--accounts/gkleen@sif/default.nix376
1 files changed, 39 insertions, 337 deletions
diff --git a/accounts/gkleen@sif/default.nix b/accounts/gkleen@sif/default.nix
index 00707e87..58cfb425 100644
--- a/accounts/gkleen@sif/default.nix
+++ b/accounts/gkleen@sif/default.nix
@@ -80,7 +80,7 @@ let
80 ]; 80 ];
81 }; 81 };
82 82
83 lockCommand = "${config.systemd.package}/bin/systemctl --user start gtklock.service"; 83 lockCommand = "${lib.getExe' config.systemd.package "systemctl"} --user start gtklock.service";
84in { 84in {
85 imports = with flake.nixosModules.userProfiles.${userName}; [ 85 imports = with flake.nixosModules.userProfiles.${userName}; [
86 mpv yt-dlp (args: import ./xcompose.nix (inputs // args)) 86 mpv yt-dlp (args: import ./xcompose.nix (inputs // args))
@@ -92,6 +92,7 @@ in {
92 home-manager.users.${userName} = { 92 home-manager.users.${userName} = {
93 imports = [ 93 imports = [
94 ./libvirt 94 ./libvirt
95 ./niri
95 flakeInputs.nix-index-database.hmModules.nix-index 96 flakeInputs.nix-index-database.hmModules.nix-index
96 flakeInputs.impermanence.nixosModules.home-manager.impermanence 97 flakeInputs.impermanence.nixosModules.home-manager.impermanence
97 ]; 98 ];
@@ -160,7 +161,7 @@ in {
160 yaml-mode json-mode shakespeare-mode smart-mode-line 161 yaml-mode json-mode shakespeare-mode smart-mode-line
161 highlight-parentheses highlight-symbol ag sass-mode lua-mode 162 highlight-parentheses highlight-symbol ag sass-mode lua-mode
162 fira-code-mode use-package wanderlust # notmuch 163 fira-code-mode use-package wanderlust # notmuch
163 use-package-ensure-system-package git-gutter emacsScratch 164 git-gutter emacsScratch
164 edit-server mediawiki editorconfig typescript-mode 165 edit-server mediawiki editorconfig typescript-mode
165 markdown-mode nftables-mode rustic lsp-mode lsp-ui 166 markdown-mode nftables-mode rustic lsp-mode lsp-ui
166 direnv company projectile tomorrow-night-paradise-theme 167 direnv company projectile tomorrow-night-paradise-theme
@@ -184,7 +185,12 @@ in {
184 }; 185 };
185 }; 186 };
186 187
187 zathura.enable = true; 188 zathura = {
189 enable = true;
190 options = {
191 scroll-page-aware = true;
192 };
193 };
188 imv.enable = true; 194 imv.enable = true;
189 195
190 mpv.config = { 196 mpv.config = {
@@ -250,286 +256,6 @@ in {
250 "kitty_mod+m" = "detach_window ask"; 256 "kitty_mod+m" = "detach_window ask";
251 }; 257 };
252 }; 258 };
253 waybar = {
254 enable = true;
255 systemd = {
256 enable = true;
257 target = "hyprland-session.target";
258 };
259 settings = let
260 windowRewrites = {
261 "(.*) — Mozilla Firefox" = "$1";
262 "(.*) - Mozilla Thunderbird" = "$1";
263 "(.*) - mpv" = "$1";
264 };
265 iconSize = 11;
266 in [
267 {
268 layer = "top";
269 position = "top";
270 height = 14;
271 output = [ "eDP-1" "DP-2" "DP-3" ];
272 modules-left = [ "hyprland/workspaces" ];
273 modules-center = [ "hyprland/window" ];
274 modules-right = [ "custom/worktime" "custom/worktime-today" "custom/weather" "custom/keymap" "privacy" "tray" "wireplumber" "backlight" "battery" "idle_inhibitor" "clock" ];
275
276 "custom/weather" = {
277 format = "{}";
278 tooltip = true;
279 interval = 3600;
280 exec = "${lib.getExe pkgs.wttrbar} --hide-conditions --custom-indicator \"<span font=\\\"Symbols Nerd Font Mono\\\" size=\\\"120%\\\">{ICON}</span> {FeelsLikeC}°\"";
281 return-type = "json";
282 };
283 "custom/keymap" = {
284 format = "{}";
285 tooltip = true;
286 return-type = "json";
287 exec = pkgs.writers.writePython3 "keymap" {} ''
288 import os
289 import socket
290 import re
291 import subprocess
292 import json
293
294
295 def output(keymap):
296 short = keymap
297 if keymap == "English (programmer Dvorak)":
298 short = "dvp"
299 elif keymap == "English (US)":
300 short = "<span color=\"#ffffff\">us</span>"
301 print(json.dumps({'text': short, 'tooltip': keymap}, separators=(',', ':')), flush=True) # noqa: E501
302
303
304 r = subprocess.run(["hyprctl", "devices", "-j"], check=True, stdout=subprocess.PIPE, text=True) # noqa: E501
305 for keyboard in json.loads(r.stdout)['keyboards']:
306 if keyboard['name'] != "at-translated-set-2-keyboard":
307 continue
308 output(keyboard['active_keymap'])
309
310 sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
311 sock.connect(os.environ["XDG_RUNTIME_DIR"] + "/hypr/" + os.environ["HYPRLAND_INSTANCE_SIGNATURE"] + "/.socket2.sock") # noqa: E501
312 expected = re.compile(r'^activelayout>>at-translated-set-2-keyboard,(?P<keymap>.+)$') # noqa: E501
313 for line in sock.makefile(buffering=1, encoding='utf-8'):
314 if match := expected.match(line):
315 output(match.group("keymap"))
316 '';
317 on-click = "hyprctl switchxkblayout at-translated-set-2-keyboard next";
318 };
319 "custom/worktime" = {
320 interval = 60;
321 exec = getExe pkgs.worktime;
322 tooltip = false;
323 };
324 "custom/worktime-today" = {
325 interval = 60;
326 exec = "${getExe pkgs.worktime} today";
327 tooltip = false;
328 };
329 "hyprland/workspaces" = {
330 all-outputs = true;
331 };
332 "hyprland/window" = {
333 separate-outputs = true;
334 icon = true;
335 icon-size = 14;
336 rewrite = windowRewrites;
337 };
338 clock = {
339 interval = 1;
340 # timezone = "Europe/Berlin";
341 format = "W{:%V-%u %F %H:%M:%S%Ez}";
342 tooltip-format = "<tt><small>{calendar}</small></tt>";
343 calendar = {
344 mode = "year";
345 mode-mon-col = 3;
346 weeks-pos = "left";
347 on-scroll = 1;
348 format = {
349 months = "<span color='#ffead3'><b>{}</b></span>";
350 days = "{}";
351 weeks = "<span color='#99ffdd'><b>{}</b></span>";
352 weekdays = "<span color='#ffcc66'><b>{}</b></span>";
353 today = "<span color='#ff6699'><b>{}</b></span>";
354 };
355 };
356 };
357 battery = {
358 format = "<span font=\"Symbols Nerd Font Mono\" size=\"90%\">{icon}</span>";
359 icon-size = iconSize - 2;
360 states = { warning = 30; critical = 15; };
361 format-icons = ["&#xf008e;" "&#xf007a;" "&#xf007b;" "&#xf007c;" "&#xf007d;" "&#xf007e;" "&#xf007f;" "&#xf0080;" "&#xf0081;" "&#xf0082;" "&#xf0079;" ];
362 format-charging = "&#xf0084;";
363 format-plugged = "&#xf06a5;";
364 tooltip-format = "{capacity}% {timeTo}";
365 interval = 20;
366 };
367 tray = {
368 icon-size = 16;
369 # show-passive-items = true;
370 spacing = 1;
371 };
372 privacy = {
373 icon-spacing = 7;
374 icon-size = iconSize;
375 modules = [
376 { type = "screenshare"; }
377 { type = "audio-in"; }
378 ];
379 };
380 idle_inhibitor = {
381 format = "<span font=\"Symbols Nerd Font Mono\" size=\"90%\">{icon}</span>";
382 icon-size = iconSize;
383 format-icons = { activated = "&#xf0208;"; deactivated = "&#xf0209;"; };
384 timeout = 120;
385 };
386 backlight = {
387 format = "<span font=\"Symbols Nerd Font Mono\" size=\"90%\">{icon}</span>";
388 icon-size = iconSize;
389 tooltip-format = "{percent}%";
390 format-icons = ["&#xf00da;" "&#xf00db;" "&#xf00dc;" "&#xf00dd;" "&#xf00de;" "&#xf00df;" "&#xf00e0;"];
391 on-scroll-up = "lightctl -d -e4 -n1 up";
392 on-scroll-down = "lightctl -d -e4 -n1 down";
393 };
394 wireplumber = {
395 format = "<span font=\"Symbols Nerd Font Mono\" size=\"90%\">{icon}</span>";
396 icon-size = iconSize;
397 tooltip-format = "{volume}% {node_name}";
398 format-icons = ["&#xf057f;" "&#xf0580;" "&#xf057e;"];
399 format-muted = "<span font=\"Symbols Nerd Font Mono\" size=\"90%\">&#xf075f;</span>";
400 # ignored-sinks = ["Easy Effects Sink"];
401 on-scroll-up = "volumectl -d -u up";
402 on-scroll-down = "volumectl -d -u down";
403 on-click = "volumectl -d toggle-mute";
404 };
405 }
406 {
407 layer = "top";
408 position = "top";
409 height = 14;
410 output = [ "!eDP-1" "!DP-2" "!DP-3" ];
411 modules-left = [ "hyprland/workspaces" ];
412 modules-center = [ "hyprland/window" ];
413 modules-right = [ "clock" ];
414
415 "hyprland/workspaces" = {
416 all-outputs = false;
417 };
418 "hyprland/window" = {
419 separate-outputs = true;
420 icon = true;
421 icon-size = 14;
422 rewrite = windowRewrites;
423 };
424 clock = {
425 interval = 1;
426 # timezone = "Europe/Berlin";
427 format = "{:%H:%M}";
428 tooltip-format = "W{:%V-%u %F %H:%M:%S%Ez}";
429 };
430 }
431 ];
432 style = ''
433 @define-color white #ffffff;
434 @define-color grey #555555;
435 @define-color blue #1a8fff;
436 @define-color green #23fd00;
437 @define-color orange #f28a21;
438 @define-color red #f2201f;
439
440 * {
441 border: none;
442 font-family: "Fira Sans Nerd Font";
443 font-size: 10pt;
444 min-height: 0;
445 }
446
447 window#waybar {
448 background-color: rgba(0, 0, 0, 0.66);
449 color: @white;
450 }
451
452 .modules-left {
453 margin-left: 9px;
454 }
455 .modules-right {
456 margin-right: 9px;
457 }
458
459 .module {
460 margin: 0 5px;
461 }
462
463 #workspaces button {
464 color: @grey;
465 }
466 #workspaces button.hosting-monitor {
467 color: @white;
468 }
469 #workspaces button.visible {
470 color: @blue;
471 }
472 #workspaces button.active {
473 color: @green;
474 }
475 #workspaces button.urgent {
476 color: @red;
477 }
478
479 #custom-weather, #custom-keymap, #custom-worktime, #custom-worktime-today {
480 color: @grey;
481 margin: 0 5px;
482 }
483 #custom-weather, #custom-worktime-today {
484 margin-right: 3px;
485 }
486 #custom-keymap, #custom-weather {
487 margin-left: 3px;
488 }
489
490 #tray {
491 margin: 0;
492 }
493 #battery, #idle_inhibitor, #backlight, #wireplumber {
494 color: @grey;
495 margin: 0 5px 0 2px;
496 }
497 #idle_inhibitor {
498 margin-right: 2px;
499 margin-left: 3px;
500 }
501 #battery {
502 margin-right: 3px;
503 }
504 #battery.discharging {
505 color: @white;
506 }
507 #battery.warning {
508 color: @orange;
509 }
510 #battery.critical {
511 color: @red;
512 }
513 #battery.charging {
514 color: @white;
515 }
516 #idle_inhibitor.activated {
517 color: @white;
518 }
519
520 #idle_inhibitor {
521 padding-top: 1px;
522 }
523
524 #privacy {
525 color: @red;
526 margin: -1px 2px 0px 5px;
527 }
528 #clock {
529 /* margin-right: 5px; */
530 }
531 '';
532 };
533 wpaperd = { 259 wpaperd = {
534 enable = true; 260 enable = true;
535 settings.default = { 261 settings.default = {
@@ -542,7 +268,7 @@ in {
542 enable = true; 268 enable = true;
543 settings = { 269 settings = {
544 main = { 270 main = {
545 terminal = lib.getExe pkgs.kitty; 271 terminal = lib.getExe cfg.programs.kitty.package;
546 layer = "overlay"; 272 layer = "overlay";
547 icon-theme = "Paper"; 273 icon-theme = "Paper";
548 font = "Fira Sans"; 274 font = "Fira Sans";
@@ -564,14 +290,6 @@ in {
564 }; 290 };
565 291
566 services = { 292 services = {
567 dunst = {
568 settings = import ./dunst-settings.nix inputs;
569 iconTheme = {
570 package = pkgs.paper-icon-theme;
571 name = "Paper";
572 };
573 enable = true;
574 };
575 emacs = { 293 emacs = {
576 enable = true; 294 enable = true;
577 socketActivation.enable = true; 295 socketActivation.enable = true;
@@ -599,6 +317,12 @@ in {
599 notification_actions = { 317 notification_actions = {
600 device_mounted = []; 318 device_mounted = [];
601 }; 319 };
320 device_config = [
321 { loop_file = "/nix/store/*-etc-metadata.erofs"; is_mounted = false; ignore = true; }
322 { mount_path = "/run/nixos-etc-metadata"; ignore = true; }
323 { mount_path = "/run/nixos-etc-metadata.*"; ignore = true; }
324 ];
325 icon_names.media = ["drive-removable-media-symbolic"];
602 }; 326 };
603 }; 327 };
604 network-manager-applet.enable = true; 328 network-manager-applet.enable = true;
@@ -635,31 +359,17 @@ in {
635 enable = true; 359 enable = true;
636 events = [ 360 events = [
637 { event = "before-sleep"; command = lockCommand; } 361 { event = "before-sleep"; command = lockCommand; }
638 { event = "after-resume"; command = "${cfg.wayland.windowManager.hyprland.package}/bin/hyprctl dispatch dpms on"; }
639 { event = "lock"; command = lockCommand; } 362 { event = "lock"; command = lockCommand; }
640 ]; 363 ];
641 timeouts = [ 364 timeouts = [
642 { timeout = 300;
643 command = "${cfg.wayland.windowManager.hyprland.package}/bin/hyprctl dispatch dpms off";
644 }
645 { timeout = 330; command = lockCommand; } 365 { timeout = 330; command = lockCommand; }
646 ]; 366 ];
647 extraArgs = [ 367 extraArgs = [
368 "-w"
648 "idlehint" "30" 369 "idlehint" "30"
649 ]; 370 ];
650 }; 371 };
651 poweralertd.enable = true; 372 poweralertd.enable = true;
652 avizo = {
653 enable = true;
654 settings.default = {
655 time = "1.0";
656 background = "rgba(0, 0, 0, 0.8)";
657 border-color = "rgba(0, 0, 0, 1)";
658 bar-fg-color = "rgba(160, 160, 160, 1)";
659 bar-bg-color = "rgba(32, 32, 32, 0.96)";
660 # y-offset = "0.25";
661 };
662 };
663 }; 373 };
664 374
665 home.pointerCursor = { 375 home.pointerCursor = {
@@ -700,16 +410,18 @@ in {
700 fira fira-code pwvucontrol wrappedKeepassxc wl-clipboard-rs 410 fira fira-code pwvucontrol wrappedKeepassxc wl-clipboard-rs
701 mumble pulseaudio-ctl pamixer libnotify screen-message 411 mumble pulseaudio-ctl pamixer libnotify screen-message
702 wrappedYTMDesktop libsForQt5.qt5ct playerctl evince 412 wrappedYTMDesktop libsForQt5.qt5ct playerctl evince
703 thunderbird zoom-us steam steam-run wireshark virt-manager 413 thunderbird zoom-us xdg-desktop-portal steam steam-run
704 rclone cached-nix-shell worktime fira-code-symbols 414 wireshark virt-manager rclone cached-nix-shell worktime
705 libreoffice xournalpp google-chrome nixos-shell virt-viewer 415 fira-code-symbols libreoffice xournalpp google-chrome
706 freerdp gnome-icon-theme paper-icon-theme sshpassSecret 416 nixos-shell virt-viewer freerdp gnome-icon-theme
707 weechat element-desktop matrix-synapse-tools.synadm 417 paper-icon-theme sshpassSecret weechat element-desktop
418 matrix-synapse-tools.synadm
708 flakeInputs.deploy-rs.packages.${config.nixpkgs.system}.deploy-rs 419 flakeInputs.deploy-rs.packages.${config.nixpkgs.system}.deploy-rs
709 sieve-connect gimp inkscape udiskie glab nitrokey-app 420 sieve-connect gimp inkscape udiskie glab nitrokey-app
710 pynitrokey gtklock wlrctl remmina openscad spice-record 421 pynitrokey gtklock wlrctl remmina openscad spice-record
711 libguestfs-with-appliance nerd-fonts.fira-mono 422 libguestfs-with-appliance nerd-fonts.fira-mono
712 nerd-fonts.symbols-only nerd-fonts.fira-code powerline-fonts 423 nerd-fonts.symbols-only nerd-fonts.fira-code powerline-fonts
424 swtpm
713 ]; 425 ];
714 426
715 file = { 427 file = {
@@ -744,13 +456,6 @@ in {
744 }; 456 };
745 457
746 xdg.configFile = { 458 xdg.configFile = {
747 "dunst/dunstrc.d" = {
748 source = ./dunstrc.d;
749 recursive = true;
750 onChange = ''
751 ${pkgs.systemd}/bin/systemctl --user try-restart dunst
752 '';
753 };
754 "wireplumber" = { 459 "wireplumber" = {
755 source = ./wireplumber; 460 source = ./wireplumber;
756 recursive = true; 461 recursive = true;
@@ -782,6 +487,18 @@ in {
782 }; 487 };
783 }; 488 };
784 "emacs/init.el".source = ./emacs.el; 489 "emacs/init.el".source = ./emacs.el;
490 "systemd/user/xdg-desktop-portal.service.d/after-graphical-session.conf".text = ''
491 [Unit]
492 After=graphical-session.target
493 '';
494 "systemd/user/home-manager.service.d/before-graphical-session.conf".text = ''
495 [Unit]
496 Before=graphical-session-pre.target
497 '';
498 "pdfpc/pdfpcrc".text = ''
499 mouse 8 prev
500 mouse 9 next
501 '';
785 }; 502 };
786 503
787 xdg.dataFile = { 504 xdg.dataFile = {
@@ -899,7 +616,6 @@ in {
899 --property 'CPUAccounting=yes' --property 'CPUQuotaPeriodSec=50ms' \ 616 --property 'CPUAccounting=yes' --property 'CPUQuotaPeriodSec=50ms' \
900 --property 'Environment=DSCP=46' \ 617 --property 'Environment=DSCP=46' \
901 -- ${pkgs.dscp}/bin/dscp ${pkgs.google-chrome}/bin/google-chrome-stable \ 618 -- ${pkgs.dscp}/bin/dscp ${pkgs.google-chrome}/bin/google-chrome-stable \
902 --force-device-scale-factor=1.5 \
903 --class=Rainbow \ 619 --class=Rainbow \
904 --kiosk "https://web.openrainbow.com" \ 620 --kiosk "https://web.openrainbow.com" \
905 --user-data-dir=''${HOME}/.config/google-chrome-rainbow 621 --user-data-dir=''${HOME}/.config/google-chrome-rainbow
@@ -908,6 +624,9 @@ in {
908 url = "https://web.openrainbow.com/rb/2.139.17/assets/skins/rainbow/images/homepage/logo__rainbow.svg"; 624 url = "https://web.openrainbow.com/rb/2.139.17/assets/skins/rainbow/images/homepage/logo__rainbow.svg";
909 hash = "sha256-5fmo8rDqVDpzkGaPjk4Y+SsSZpAsY7VUQSFW6WdHwuU="; 625 hash = "sha256-5fmo8rDqVDpzkGaPjk4Y+SsSZpAsY7VUQSFW6WdHwuU=";
910 }; 626 };
627 settings = {
628 StartupWMClass = "Rainbow";
629 };
911 }; 630 };
912 }; 631 };
913 632
@@ -923,23 +642,6 @@ in {
923 color-scheme = "prefer-dark"; 642 color-scheme = "prefer-dark";
924 }; 643 };
925 }; 644 };
926
927 wayland.windowManager.hyprland = {
928 enable = true;
929 settings = import ./hyprland.nix inputs;
930 };
931
932 xdg.portal = {
933 enable = true;
934 xdgOpenUsePortal = true;
935 config = {
936 common.default = [ "gtk" ];
937 hyprland.default = [ "gtk" "kde" "hyprland" ];
938 };
939 extraPortals = with pkgs; [
940 xdg-desktop-portal-kde xdg-desktop-portal-gtk xdg-desktop-portal-wlr xdg-desktop-portal-hyprland
941 ];
942 };
943 }; 645 };
944 }; 646 };
945} 647}