diff options
Diffstat (limited to 'accounts')
-rw-r--r-- | accounts/gkleen@sif/default.nix | 84 | ||||
-rw-r--r-- | accounts/gkleen@sif/emacs.el | 2 | ||||
-rw-r--r-- | accounts/gkleen@sif/niri/default.nix | 101 | ||||
-rw-r--r-- | accounts/gkleen@sif/niri/mako.nix | 1 | ||||
-rw-r--r-- | accounts/gkleen@sif/niri/waybar.nix | 21 | ||||
-rw-r--r-- | accounts/gkleen@sif/synadm/default.nix | 9 | ||||
-rw-r--r-- | accounts/gkleen@sif/synadm/synadm_yaml | 15 |
7 files changed, 206 insertions, 27 deletions
diff --git a/accounts/gkleen@sif/default.nix b/accounts/gkleen@sif/default.nix index 36a81f83..706eb241 100644 --- a/accounts/gkleen@sif/default.nix +++ b/accounts/gkleen@sif/default.nix | |||
@@ -71,6 +71,7 @@ in { | |||
71 | imports = [ | 71 | imports = [ |
72 | ./libvirt | 72 | ./libvirt |
73 | ./niri | 73 | ./niri |
74 | ./synadm | ||
74 | flakeInputs.nix-index-database.hmModules.nix-index | 75 | flakeInputs.nix-index-database.hmModules.nix-index |
75 | flakeInputs.impermanence.nixosModules.home-manager.impermanence | 76 | flakeInputs.impermanence.nixosModules.home-manager.impermanence |
76 | ]; | 77 | ]; |
@@ -282,6 +283,16 @@ in { | |||
282 | pro = "$HOME/projects/pro"; | 283 | pro = "$HOME/projects/pro"; |
283 | media = "$HOME/media"; | 284 | media = "$HOME/media"; |
284 | }; | 285 | }; |
286 | jq.colors = { | ||
287 | arrays = "1;37"; | ||
288 | "false" = "0;37"; | ||
289 | "null" = "2;37"; | ||
290 | numbers = "0;37"; | ||
291 | objectKeys = "1;34"; | ||
292 | objects = "1;37"; | ||
293 | strings = "0;32"; | ||
294 | "true" = "0;37"; | ||
295 | }; | ||
285 | 296 | ||
286 | obs-studio = { | 297 | obs-studio = { |
287 | enable = true; | 298 | enable = true; |
@@ -317,12 +328,11 @@ in { | |||
317 | # notify_on_cmd_finish = "invisible 120"; | 328 | # notify_on_cmd_finish = "invisible 120"; |
318 | }; | 329 | }; |
319 | keybindings = { | 330 | keybindings = { |
320 | "kitty_mod+n" = "detach_window"; | 331 | "kitty_mod+n" = "new_os_window_with_cwd"; |
321 | "kitty_mod+m" = "detach_window ask"; | 332 | "kitty_mod+m" = "detach_window ask"; |
333 | "kitty_mod+enter" = "new_window_with_cwd"; | ||
334 | "kitty_mod+t" = "new_tab_with_cwd"; | ||
322 | }; | 335 | }; |
323 | extraConfig = '' | ||
324 | envinclude KITTY_CONF_* | ||
325 | ''; | ||
326 | }; | 336 | }; |
327 | fuzzel = { | 337 | fuzzel = { |
328 | enable = true; | 338 | enable = true; |
@@ -334,7 +344,7 @@ in { | |||
334 | font = "Fira Sans"; | 344 | font = "Fira Sans"; |
335 | }; | 345 | }; |
336 | colors = { | 346 | colors = { |
337 | background = "000000aa"; | 347 | background = "000000cc"; |
338 | text = "cdd6f4ff"; | 348 | text = "cdd6f4ff"; |
339 | match = "94e2d5ff"; | 349 | match = "94e2d5ff"; |
340 | selection = "585b70ff"; | 350 | selection = "585b70ff"; |
@@ -355,6 +365,7 @@ in { | |||
355 | enable = true; | 365 | enable = true; |
356 | settings.show_banner = false; | 366 | settings.show_banner = false; |
357 | }; | 367 | }; |
368 | fd.enable = true; | ||
358 | }; | 369 | }; |
359 | 370 | ||
360 | services = { | 371 | services = { |
@@ -480,6 +491,13 @@ in { | |||
480 | }; | 491 | }; |
481 | }; | 492 | }; |
482 | 493 | ||
494 | qt.kde.settings = { | ||
495 | kwalletrc = { | ||
496 | KSecretD.Enabled = false; | ||
497 | Wallet."Default Wallet" = "store"; | ||
498 | }; | ||
499 | }; | ||
500 | |||
483 | xsession.preferStatusNotifierItems = true; | 501 | xsession.preferStatusNotifierItems = true; |
484 | 502 | ||
485 | xresources.properties = import ./xresources.nix; | 503 | xresources.properties = import ./xresources.nix; |
@@ -499,8 +517,7 @@ in { | |||
499 | libguestfs-with-appliance nerd-fonts.fira-mono | 517 | libguestfs-with-appliance nerd-fonts.fira-mono |
500 | nerd-fonts.symbols-only nerd-fonts.fira-code powerline-fonts | 518 | nerd-fonts.symbols-only nerd-fonts.fira-code powerline-fonts |
501 | swtpm (hunspellWithDicts (with hunspellDicts; [en_GB-large de_DE])) | 519 | swtpm (hunspellWithDicts (with hunspellDicts; [en_GB-large de_DE])) |
502 | libation | 520 | libation libqalculate |
503 | # synadm | ||
504 | ] ++ mapAttrsToList (_name: pkg: pkgs.callPackage pkg {}) (customUtils.nixImport { dir = ./utils; }); | 521 | ] ++ mapAttrsToList (_name: pkg: pkgs.callPackage pkg {}) (customUtils.nixImport { dir = ./utils; }); |
505 | 522 | ||
506 | file = { | 523 | file = { |
@@ -523,6 +540,7 @@ in { | |||
523 | STACK_XDG = 1; | 540 | STACK_XDG = 1; |
524 | EDITOR = lib.getExe' editor "emacsclient"; | 541 | EDITOR = lib.getExe' editor "emacsclient"; |
525 | RCLONE_PASSWORD_COMMAND = "${lib.getExe' pkgs.libsecret "secret-tool"} lookup service rclone"; | 542 | RCLONE_PASSWORD_COMMAND = "${lib.getExe' pkgs.libsecret "secret-tool"} lookup service rclone"; |
543 | SYSTEMD_TINT_BACKGROUND = "false"; | ||
526 | }; | 544 | }; |
527 | 545 | ||
528 | extraProfileCommands = '' | 546 | extraProfileCommands = '' |
@@ -559,9 +577,17 @@ in { | |||
559 | General = { | 577 | General = { |
560 | dot_as_separator = 0; | 578 | dot_as_separator = 0; |
561 | }; | 579 | }; |
580 | Mode = { | ||
581 | calculate_as_you_type = 1; | ||
582 | }; | ||
562 | }; | 583 | }; |
563 | }; | 584 | }; |
564 | "emacs/init.el".source = ./emacs.el; | 585 | "emacs/init.el".source = pkgs.substitute { |
586 | src = ./emacs.el; | ||
587 | substitutions = [ | ||
588 | "--subst-var-by" "ksshaskpass" (lib.getExe pkgs.kdePackages.ksshaskpass) | ||
589 | ]; | ||
590 | }; | ||
565 | "systemd/user/xdg-desktop-portal.service.d/after-graphical-session.conf".text = '' | 591 | "systemd/user/xdg-desktop-portal.service.d/after-graphical-session.conf".text = '' |
566 | [Unit] | 592 | [Unit] |
567 | After=graphical-session.target | 593 | After=graphical-session.target |
@@ -579,6 +605,8 @@ in { | |||
579 | xdg.dataFile = { | 605 | xdg.dataFile = { |
580 | "dbus-1/services/org.keepassxc.KeePassXC.service".source = "${wrappedKeepassxc}/share/dbus-1/services/org.keepassxc.KeePassXC.service"; | 606 | "dbus-1/services/org.keepassxc.KeePassXC.service".source = "${wrappedKeepassxc}/share/dbus-1/services/org.keepassxc.KeePassXC.service"; |
581 | "dbus-1/services/org.freedesktop.secrets.service.service".source = "${wrappedKeepassxc}/share/dbus-1/services/org.freedesktop.secrets.service.service"; | 607 | "dbus-1/services/org.freedesktop.secrets.service.service".source = "${wrappedKeepassxc}/share/dbus-1/services/org.freedesktop.secrets.service.service"; |
608 | "dbus-1/services/org.kde.kwalletd6.service".source = "${pkgs.kdePackages.kwallet}/share/dbus-1/services/org.kde.kwalletd6.service"; | ||
609 | "dbus-1/services/org.kde.kwalletd5.service".source = "${pkgs.kdePackages.kwallet}/share/dbus-1/services/org.kde.kwalletd5.service"; | ||
582 | "emoji-data/list.txt".source = pkgs.stdenv.mkDerivation { | 610 | "emoji-data/list.txt".source = pkgs.stdenv.mkDerivation { |
583 | inherit (sources.emoji-data) pname src; | 611 | inherit (sources.emoji-data) pname src; |
584 | version = lib.removePrefix "v" sources.emoji-data.version; | 612 | version = lib.removePrefix "v" sources.emoji-data.version; |
@@ -666,10 +694,10 @@ in { | |||
666 | exec -- \ | 694 | exec -- \ |
667 | ${lib.getExe' config.systemd.package "systemd-run"} --wait --user --slice-inherit \ | 695 | ${lib.getExe' config.systemd.package "systemd-run"} --wait --user --slice-inherit \ |
668 | --property 'CPUAccounting=yes' --property 'CPUQuotaPeriodSec=50ms' \ | 696 | --property 'CPUAccounting=yes' --property 'CPUQuotaPeriodSec=50ms' \ |
669 | --property 'Environment=DSCP=46' \ | 697 | -E DSCP=46 -E NIXOS_OZONE_WL \ |
670 | -- ${lib.getExe pkgs.dscp} ${lib.getExe' pkgs.google-chrome "google-chrome-stable"} \ | 698 | -- ${lib.getExe pkgs.dscp} ${lib.getExe' pkgs.google-chrome "google-chrome-stable"} \ |
671 | --class=Rainbow \ | 699 | --class=Rainbow \ |
672 | --kiosk "https://web.openrainbow.com" \ | 700 | --app="https://web.openrainbow.com" \ |
673 | --user-data-dir=''${HOME}/.config/google-chrome-rainbow | 701 | --user-data-dir=''${HOME}/.config/google-chrome-rainbow |
674 | ''); | 702 | ''); |
675 | icon = pkgs.fetchurl { | 703 | icon = pkgs.fetchurl { |
@@ -680,6 +708,42 @@ in { | |||
680 | StartupWMClass = "Rainbow"; | 708 | StartupWMClass = "Rainbow"; |
681 | }; | 709 | }; |
682 | }; | 710 | }; |
711 | kimai = { | ||
712 | name = "Kimai"; | ||
713 | exec = toString (pkgs.writeShellScript "kimai" '' | ||
714 | exec -- \ | ||
715 | ${lib.getExe' pkgs.google-chrome "google-chrome-stable"} \ | ||
716 | --class=Kimai \ | ||
717 | --app="https://kimai.yggdrasil.li" \ | ||
718 | --user-data-dir=''${HOME}/.config/google-chrome-kimai | ||
719 | ''); | ||
720 | icon = pkgs.fetchurl { | ||
721 | url = "https://www.kimai.org/images/kimai_logo.png"; | ||
722 | hash = "sha256-lnlOttzR2SwXA70R+egJUkeKr4U5V0avqTk8uX4bqfs="; | ||
723 | }; | ||
724 | settings = { | ||
725 | StartupWMClass = "Kimai"; | ||
726 | StartupNotify = "true"; | ||
727 | }; | ||
728 | }; | ||
729 | audiobookshelf = { | ||
730 | name = "Audiobookshelf"; | ||
731 | exec = toString (pkgs.writeShellScript "audiobookshelf" '' | ||
732 | exec -- \ | ||
733 | ${lib.getExe' pkgs.google-chrome "google-chrome-stable"} \ | ||
734 | --class=Audiobookshelf \ | ||
735 | --app="https://audiobookshelf.yggdrasil.li" \ | ||
736 | --user-data-dir=''${HOME}/.config/google-chrome-audiobookshelf | ||
737 | ''); | ||
738 | icon = pkgs.fetchurl { | ||
739 | url = "https://www.audiobookshelf.org/Logo.png"; | ||
740 | hash = "sha256-JGPk+WNT1C4DC4lSMb0K0YmAMT5LvmSOeO0QRzkc7Lk="; | ||
741 | }; | ||
742 | settings = { | ||
743 | StartupWMClass = "Audiobookshelf"; | ||
744 | StartupNotify = "true"; | ||
745 | }; | ||
746 | }; | ||
683 | thunderbird-lmu = { | 747 | thunderbird-lmu = { |
684 | name = "Thunderbird (LMU)"; | 748 | name = "Thunderbird (LMU)"; |
685 | exec = "thunderbird --name thunderbird -P lmu %U"; | 749 | exec = "thunderbird --name thunderbird -P lmu %U"; |
diff --git a/accounts/gkleen@sif/emacs.el b/accounts/gkleen@sif/emacs.el index 563c5d0b..3beefba6 100644 --- a/accounts/gkleen@sif/emacs.el +++ b/accounts/gkleen@sif/emacs.el | |||
@@ -254,3 +254,5 @@ necessarily running." | |||
254 | (bind-key "C-x C-m" #'move-file) | 254 | (bind-key "C-x C-m" #'move-file) |
255 | 255 | ||
256 | (let ((ssh_auth_sock (string-chop-newline (shell-command-to-string "gpgconf --list-dirs agent-ssh-socket")))) (setenv "SSH_AUTH_SOCK" ssh_auth_sock)) | 256 | (let ((ssh_auth_sock (string-chop-newline (shell-command-to-string "gpgconf --list-dirs agent-ssh-socket")))) (setenv "SSH_AUTH_SOCK" ssh_auth_sock)) |
257 | (setenv "SSH_ASKPASS_REQUIRE" "prefer") | ||
258 | (setenv "SSH_ASKPASS" "@ksshaskpass@") | ||
diff --git a/accounts/gkleen@sif/niri/default.nix b/accounts/gkleen@sif/niri/default.nix index af1af07a..8752f3e3 100644 --- a/accounts/gkleen@sif/niri/default.nix +++ b/accounts/gkleen@sif/niri/default.nix | |||
@@ -35,7 +35,11 @@ let | |||
35 | if jq -e '.is_focused' <<<"$window_json" >/dev/null; then | 35 | if jq -e '.is_focused' <<<"$window_json" >/dev/null; then |
36 | niri msg action focus-workspace-previous | 36 | niri msg action focus-workspace-previous |
37 | else | 37 | else |
38 | niri msg action focus-window --id "$(jq -r '.id' <<<"$window_json")" | 38 | if [[ $(jq -r --arg workspace_name "$workspace_name" 'map(select(.name == $workspace_name)) | .[0].is_focused' <<<"$workspaces_json") != "true" ]] && [[ $(jq -r --arg workspace_name "$workspace_name" 'map(select(.name == $workspace_name)) | .[0].id' <<<"$workspaces_json") = $(jq -r '.workspace_id' <<<"$window_json") ]]; then |
39 | niri msg action focus-workspace "$workspace_name" | ||
40 | else | ||
41 | niri msg action focus-window --id "$(jq -r '.id' <<<"$window_json")" | ||
42 | fi | ||
39 | fi | 43 | fi |
40 | exit 0 | 44 | exit 0 |
41 | fi | 45 | fi |
@@ -45,7 +49,6 @@ let | |||
45 | ''; | 49 | ''; |
46 | }; | 50 | }; |
47 | focus-or-spawn-action = config.lib.niri.actions.spawn (lib.getExe focus_or_spawn); | 51 | focus-or-spawn-action = config.lib.niri.actions.spawn (lib.getExe focus_or_spawn); |
48 | focus-or-spawn-action-app_id = app_id: focus-or-spawn-action ''select(.app_id == "${app_id}")''; | ||
49 | 52 | ||
50 | with_adjacent_workspace = pkgs.writeShellApplication { | 53 | with_adjacent_workspace = pkgs.writeShellApplication { |
51 | name = "with-adjacent-workspace"; | 54 | name = "with-adjacent-workspace"; |
@@ -84,7 +87,7 @@ let | |||
84 | }; | 87 | }; |
85 | with-adjacent-workspace-action = config.lib.niri.actions.spawn (lib.getExe with_adjacent_workspace) "^${lib.concatMapStringsSep "|" ({ name, ...}: name) cfg.scratchspaces}$"; | 88 | with-adjacent-workspace-action = config.lib.niri.actions.spawn (lib.getExe with_adjacent_workspace) "^${lib.concatMapStringsSep "|" ({ name, ...}: name) cfg.scratchspaces}$"; |
86 | focus-adjacent-workspace = direction: with-adjacent-workspace-action direction ''{"Action":{"FocusWorkspace":{"reference":{"Id": .id}}}}''; | 89 | focus-adjacent-workspace = direction: with-adjacent-workspace-action direction ''{"Action":{"FocusWorkspace":{"reference":{"Id": .id}}}}''; |
87 | move-column-to-adjacent-workspace = direction: with-adjacent-workspace-action direction ''{"Action":{"MoveColumnToWorkspace":{"reference":{"Id": .id}}}}''; | 90 | move-column-to-adjacent-workspace = direction: with-adjacent-workspace-action direction ''{"Action":{"MoveColumnToWorkspace":{"reference":{"Id": .id}, "focus": true}}}''; |
88 | 91 | ||
89 | with_unnamed_workspace = pkgs.writeShellApplication { | 92 | with_unnamed_workspace = pkgs.writeShellApplication { |
90 | name = "with-unnamed-workspace"; | 93 | name = "with-unnamed-workspace"; |
@@ -131,7 +134,7 @@ let | |||
131 | 134 | ||
132 | windows_json="$(niri msg -j windows)" | 135 | windows_json="$(niri msg -j windows)" |
133 | active_workspace="$(jq -r '.[] | select(.is_focused) | .workspace_id' <<<"$windows_json")" | 136 | active_workspace="$(jq -r '.[] | select(.is_focused) | .workspace_id' <<<"$windows_json")" |
134 | window_ix="$(gojq -r --arg active_workspace "$active_workspace" '.[] | select('"$window_select"') | "\(.title)\u0000icon\u001f\(.app_id)"' <<<"$windows_json" | fuzzel --log-level=warning --dmenu --index)" | 137 | window_ix="$(gojq -r --arg active_workspace "$active_workspace" '.[] | select('"$window_select"') | "\(.title)\u0000icon\u001f\(.app_id)"' <<<"$windows_json" | fuzzel --width=60 --log-level=warning --dmenu --index)" |
135 | # shellcheck disable=SC2016 | 138 | # shellcheck disable=SC2016 |
136 | window_json="$(gojq -rc --arg active_workspace "$active_workspace" --arg window_ix "$window_ix" 'map(select('"$window_select"')) | .[($window_ix | tonumber)]' <<<"$windows_json")" | 139 | window_json="$(gojq -rc --arg active_workspace "$active_workspace" --arg window_ix "$window_ix" 'map(select('"$window_select"')) | .[($window_ix | tonumber)]' <<<"$windows_json")" |
137 | 140 | ||
@@ -141,6 +144,25 @@ let | |||
141 | ''; | 144 | ''; |
142 | }; | 145 | }; |
143 | with-select-window-action = config.lib.niri.actions.spawn (lib.getExe with_select_window); | 146 | with-select-window-action = config.lib.niri.actions.spawn (lib.getExe with_select_window); |
147 | |||
148 | with_predicate_window = pred: pkgs.writeShellApplication { | ||
149 | name = "with-predicate-window"; | ||
150 | runtimeInputs = [ niri pkgs.gojq pkgs.socat ]; | ||
151 | text = '' | ||
152 | action="$1" | ||
153 | shift | ||
154 | |||
155 | windows_json="$(niri msg -j windows)" | ||
156 | window_json="$(gojq -rc 'map(select(${pred})) | .[0]' <<<"$windows_json")" | ||
157 | |||
158 | [[ -z "$window_json" || $window_json = "null" ]] && exit 1 | ||
159 | |||
160 | jq -c "$action" <<<"$window_json" | socat STDIO "$NIRI_SOCKET" | ||
161 | ''; | ||
162 | }; | ||
163 | |||
164 | with-urgent-window-action = config.lib.niri.actions.spawn (lib.getExe (with_predicate_window ".is_urgent")); | ||
165 | with-focused-window-action = config.lib.niri.actions.spawn (lib.getExe (with_predicate_window ".is_focused")); | ||
144 | in { | 166 | in { |
145 | imports = [ | 167 | imports = [ |
146 | ./waybar.nix | 168 | ./waybar.nix |
@@ -171,6 +193,17 @@ in { | |||
171 | type = lib.types.nullOr lib.types.str; | 193 | type = lib.types.nullOr lib.types.str; |
172 | default = null; | 194 | default = null; |
173 | }; | 195 | }; |
196 | moveKey = lib.mkOption { | ||
197 | type = lib.types.nullOr lib.types.str; | ||
198 | default = let | ||
199 | keys = lib.splitString "+" config.key; | ||
200 | defMoveKey = lib.concatStringsSep "+" (lib.flatten [ | ||
201 | (lib.take (lib.length keys - 1) keys) | ||
202 | ["Shift"] | ||
203 | (lib.takeEnd 1 keys) | ||
204 | ]); | ||
205 | in if config.key == null then null else defMoveKey; | ||
206 | }; | ||
174 | spawn = lib.mkOption { | 207 | spawn = lib.mkOption { |
175 | type = lib.types.nullOr (lib.types.listOf lib.types.str); | 208 | type = lib.types.nullOr (lib.types.listOf lib.types.str); |
176 | default = null; | 209 | default = null; |
@@ -416,7 +449,7 @@ in { | |||
416 | { title = "^Access Request.*"; } | 449 | { title = "^Access Request.*"; } |
417 | { title = ".*Passkey credentials$"; } | 450 | { title = ".*Passkey credentials$"; } |
418 | ]; | 451 | ]; |
419 | windowRuleExtra = [ | 452 | windowRuleExtra = with kdl; [ |
420 | (kdl.leaf "open-focused" false) | 453 | (kdl.leaf "open-focused" false) |
421 | ]; | 454 | ]; |
422 | key = "Mod+Control+P"; | 455 | key = "Mod+Control+P"; |
@@ -444,6 +477,20 @@ in { | |||
444 | app-id = "com.github.wwmm.easyeffects"; | 477 | app-id = "com.github.wwmm.easyeffects"; |
445 | spawn = [ "easyeffects" ]; | 478 | spawn = [ "easyeffects" ]; |
446 | } | 479 | } |
480 | { name = "time"; | ||
481 | key = "Mod+Control+K"; | ||
482 | app-id = "chrome-kimai.yggdrasil.li__-Default"; | ||
483 | spawn = [ (toString (pkgs.resholve.writeScript "kimai" { | ||
484 | interpreter = pkgs.runtimeShell; | ||
485 | inputs = [ pkgs.dex ]; | ||
486 | execer = [ "cannot:${lib.getExe pkgs.dex}" ]; | ||
487 | } '' | ||
488 | exec dex $HOME/.local/state/nix/profile/share/applications/kimai.desktop | ||
489 | '')) ]; | ||
490 | windowRuleExtra = with kdl; [ | ||
491 | (leaf "block-out-from" "screencast") | ||
492 | ]; | ||
493 | } | ||
447 | ]; | 494 | ]; |
448 | programs.niri.config = | 495 | programs.niri.config = |
449 | let | 496 | let |
@@ -500,6 +547,9 @@ in { | |||
500 | SDL_VIDEODRIVER = "wayland"; | 547 | SDL_VIDEODRIVER = "wayland"; |
501 | DISPLAY = ":0"; | 548 | DISPLAY = ":0"; |
502 | ELECTRON_OZONE_PLATFORM_HINT = "auto"; | 549 | ELECTRON_OZONE_PLATFORM_HINT = "auto"; |
550 | SSH_ASKPASS_REQUIRE = "prefer"; | ||
551 | SSH_ASKPASS = lib.getExe pkgs.kdePackages.ksshaskpass; | ||
552 | SUDO_ASKPASS = lib.getExe pkgs.kdePackages.ksshaskpass; | ||
503 | })) | 553 | })) |
504 | 554 | ||
505 | (node "output" "eDP-1" [ | 555 | (node "output" "eDP-1" [ |
@@ -614,7 +664,7 @@ in { | |||
614 | (plain "window-rule" [ | 664 | (plain "window-rule" [ |
615 | (map (title: | 665 | (map (title: |
616 | (leaf "match" { app-id = "^org\\.keepassxc\\.KeePassXC$"; inherit title; }) | 666 | (leaf "match" { app-id = "^org\\.keepassxc\\.KeePassXC$"; inherit title; }) |
617 | ) ["^Unlock Database.*" "^Access Request.*" ".*Passkey credentials$"]) | 667 | ) ["^Unlock Database.*" "^Access Request.*" ".*Passkey credentials$" "Browser Access Request$"]) |
618 | (leaf "open-focused" true) | 668 | (leaf "open-focused" true) |
619 | (leaf "open-floating" true) | 669 | (leaf "open-floating" true) |
620 | ]) | 670 | ]) |
@@ -643,7 +693,7 @@ in { | |||
643 | (plain "window-rule" [ | 693 | (plain "window-rule" [ |
644 | (leaf "match" { app-id = "^thunderbird$"; }) | 694 | (leaf "match" { app-id = "^thunderbird$"; }) |
645 | (leaf "match" { app-id = "^Element$"; }) | 695 | (leaf "match" { app-id = "^Element$"; }) |
646 | (leaf "match" { app-id = "^Rainbow$"; }) | 696 | (leaf "match" { app-id = "^chrome-web\.openrainbow\.com__-Default$"; }) |
647 | (leaf "open-on-workspace" "comm") | 697 | (leaf "open-on-workspace" "comm") |
648 | ]) | 698 | ]) |
649 | (plain "window-rule" [ | 699 | (plain "window-rule" [ |
@@ -662,6 +712,11 @@ in { | |||
662 | (leaf "open-focused" false) | 712 | (leaf "open-focused" false) |
663 | ]) | 713 | ]) |
664 | (plain "window-rule" [ | 714 | (plain "window-rule" [ |
715 | (leaf "match" { app-id = "^chrome-audiobookshelf\.yggdrasil\.li__-Default$"; }) | ||
716 | (leaf "match" { app-id = "^YouTube Music Desktop App$"; }) | ||
717 | (leaf "open-on-workspace" "vid") | ||
718 | ]) | ||
719 | (plain "window-rule" [ | ||
665 | (leaf "match" { app-id = "^pdfpc$"; }) | 720 | (leaf "match" { app-id = "^pdfpc$"; }) |
666 | (plain "default-column-width" [(leaf "proportion" 1.)]) | 721 | (plain "default-column-width" [(leaf "proportion" 1.)]) |
667 | ]) | 722 | ]) |
@@ -761,12 +816,12 @@ in { | |||
761 | done < <(export LC_ALL=C.UTF-8; echo; find "$RESULTS_DIR" -type f -printf $'%T@ %p\n' | sort -n | cut -d' ' -f2- | xargs -r cat) | 816 | done < <(export LC_ALL=C.UTF-8; echo; find "$RESULTS_DIR" -type f -printf $'%T@ %p\n' | sort -n | cut -d' ' -f2- | xargs -r cat) |
762 | $FOUND || echo | 817 | $FOUND || echo |
763 | } | 818 | } |
764 | FUZZEL_RES=$(prev | fuzzel --dmenu --prompt "qalc> ") || exit $? | 819 | FUZZEL_RES=$(prev | fuzzel --dmenu --prompt "qalc> " --width=60) || exit $? |
765 | if [[ "$FUZZEL_RES" =~ .*\ =\ .* ]]; then | 820 | if [[ "$FUZZEL_RES" =~ .*\ =\ .* ]]; then |
766 | QALC_RES="$FUZZEL_RES" | 821 | QALC_RES="$FUZZEL_RES" |
767 | QALC_RET=0 | 822 | QALC_RET=0 |
768 | else | 823 | else |
769 | QALC_RES=$(qalc "$FUZZEL_RES" 2>&1) | 824 | QALC_RES=$(qalc -set "autocalc off" "$FUZZEL_RES" 2>&1) |
770 | QALC_RET=$? | 825 | QALC_RET=$? |
771 | fi | 826 | fi |
772 | [[ -n "$QALC_RES" ]] || exit 1 | 827 | [[ -n "$QALC_RES" ]] || exit 1 |
@@ -786,11 +841,26 @@ in { | |||
786 | notify-send "$QALC_RES" | 841 | notify-send "$QALC_RES" |
787 | ''; | 842 | ''; |
788 | })); | 843 | })); |
844 | "Mod+Shift+U".action = | ||
845 | let | ||
846 | qalcKitty = pkgs.symlinkJoin { | ||
847 | name = "qalc-kitty"; | ||
848 | paths = [ config.programs.kitty.package ]; | ||
849 | buildInputs = [ pkgs.makeWrapper ]; | ||
850 | postBuild = '' | ||
851 | wrapProgram $out/bin/kitty \ | ||
852 | --add-flags "--config ${pkgs.writeText "kitty.conf" '' | ||
853 | include $HOME/${config.xdg.configFile."kitty/kitty.conf".target} | ||
854 | shell ${lib.getExe pkgs.libqalculate} | ||
855 | ''}" | ||
856 | ''; | ||
857 | }; | ||
858 | in spawn (lib.getExe' qalcKitty "kitty"); | ||
789 | "Mod+E".action = spawn (lib.getExe (pkgs.writeShellApplication { | 859 | "Mod+E".action = spawn (lib.getExe (pkgs.writeShellApplication { |
790 | name = "emoji-fuzzel"; | 860 | name = "emoji-fuzzel"; |
791 | runtimeInputs = with pkgs; [ config.programs.fuzzel.package wtype wl-clipboard-rs ]; | 861 | runtimeInputs = with pkgs; [ config.programs.fuzzel.package wtype wl-clipboard-rs ]; |
792 | text = '' | 862 | text = '' |
793 | FUZZEL_RES=$(fuzzel --dmenu --prompt "emoji> " <"$HOME"/.local/share/emoji-data/list.txt) || exit $? | 863 | FUZZEL_RES=$(fuzzel --dmenu --prompt "emoji> " --cache "$HOME"/.cache/fuzzel-emoji --width=60 <"$HOME"/.local/share/emoji-data/list.txt) || exit $? |
794 | [[ -n "$FUZZEL_RES" ]] || exit 1 | 864 | [[ -n "$FUZZEL_RES" ]] || exit 1 |
795 | wl-copy "$(cut -d ':' -f 1 <<<"$FUZZEL_RES" | tr -d '\n')" && wtype -k XF86Paste | 865 | wl-copy "$(cut -d ':' -f 1 <<<"$FUZZEL_RES" | tr -d '\n')" && wtype -k XF86Paste |
796 | ''; | 866 | ''; |
@@ -851,7 +921,7 @@ in { | |||
851 | "Mod+Shift+Asterisk".action = kdl.magic-leaf "move-column-to-workspace" "vid"; | 921 | "Mod+Shift+Asterisk".action = kdl.magic-leaf "move-column-to-workspace" "vid"; |
852 | 922 | ||
853 | "Mod+Plus".action = with-unnamed-workspace-action ''{"Action":{"FocusWorkspace":{"reference":{"Id": .id}}}}''; | 923 | "Mod+Plus".action = with-unnamed-workspace-action ''{"Action":{"FocusWorkspace":{"reference":{"Id": .id}}}}''; |
854 | "Mod+Shift+Plus".action = with-unnamed-workspace-action ''{"Action":{"MoveColumnToWorkspace":{"reference":{"Id": .id}}}}''; | 924 | "Mod+Shift+Plus".action = with-unnamed-workspace-action ''{"Action":{"MoveColumnToWorkspace":{"reference":{"Id": .id}, "focus": true}}}''; |
855 | 925 | ||
856 | "Mod+M".action = consume-or-expel-window-left; | 926 | "Mod+M".action = consume-or-expel-window-left; |
857 | "Mod+W".action = consume-or-expel-window-right; | 927 | "Mod+W".action = consume-or-expel-window-right; |
@@ -923,13 +993,20 @@ in { | |||
923 | "Mod+Comma".action = spawn makoctl "restore"; | 993 | "Mod+Comma".action = spawn makoctl "restore"; |
924 | 994 | ||
925 | "Mod+Control+W".action = with-empty-unnamed-workspace-action "{\"Action\":{\"FocusWorkspace\":{\"reference\":{\"Id\": $workspace_id}}}}"; | 995 | "Mod+Control+W".action = with-empty-unnamed-workspace-action "{\"Action\":{\"FocusWorkspace\":{\"reference\":{\"Id\": $workspace_id}}}}"; |
926 | "Mod+Control+Shift+W".action = with-empty-unnamed-workspace-action "{\"Action\":{\"MoveColumnToWorkspace\":{\"reference\":{\"Id\": $workspace_id}}}}"; | 996 | "Mod+Control+Shift+W".action = with-empty-unnamed-workspace-action "{\"Action\":{\"MoveColumnToWorkspace\":{\"reference\":{\"Id\": $workspace_id}, \"focus\": true}}}"; |
927 | 997 | ||
928 | "Mod+X".action = set-dynamic-cast-window; | 998 | "Mod+X".action = set-dynamic-cast-window; |
929 | "Mod+Shift+X".action = set-dynamic-cast-monitor; | 999 | "Mod+Shift+X".action = set-dynamic-cast-monitor; |
930 | "Mod+Control+Shift+X".action = clear-dynamic-cast-target; | 1000 | "Mod+Control+Shift+X".action = clear-dynamic-cast-target; |
1001 | |||
1002 | "Mod+D".action = with-urgent-window-action "{\"Action\":{\"FocusWindow\":{\"id\": .id}}}"; | ||
1003 | "Mod+Shift+D".action = with-focused-window-action "{\"Action\":{\"UnsetUrgent\":{\"id\": .id}}}"; | ||
1004 | |||
1005 | "Mod+K".action = spawn (lib.getExe' pkgs.worktime "worktime-ui"); | ||
1006 | "Mod+Shift+K".action = spawn (lib.getExe' pkgs.worktime "worktime-stop"); | ||
931 | })) | 1007 | })) |
932 | (map ({ name, selector, spawn, key, ...}: if key != null && selector != null && spawn != null then bind key { action = focus-or-spawn-action selector name spawn; } else null) cfg.scratchspaces) | 1008 | (map ({ name, selector, spawn, key, ...}: if key != null && selector != null && spawn != null then bind key { action = focus-or-spawn-action selector name spawn; } else null) cfg.scratchspaces) |
1009 | (map ({ name, moveKey, ...}: if moveKey != null then bind moveKey { action = kdl.magic-leaf "move-column-to-workspace" name; } else null) cfg.scratchspaces) | ||
933 | ] | 1010 | ] |
934 | )) | 1011 | )) |
935 | ]; | 1012 | ]; |
diff --git a/accounts/gkleen@sif/niri/mako.nix b/accounts/gkleen@sif/niri/mako.nix index 810bff89..eba26caa 100644 --- a/accounts/gkleen@sif/niri/mako.nix +++ b/accounts/gkleen@sif/niri/mako.nix | |||
@@ -25,6 +25,7 @@ | |||
25 | ignore-timeout = true; | 25 | ignore-timeout = true; |
26 | default-timeout = 2000; | 26 | default-timeout = 2000; |
27 | }; | 27 | }; |
28 | "app-name=worktime".history = false; | ||
28 | "mode=silent".invisible = true; | 29 | "mode=silent".invisible = true; |
29 | }; | 30 | }; |
30 | package = pkgs.symlinkJoin { | 31 | package = pkgs.symlinkJoin { |
diff --git a/accounts/gkleen@sif/niri/waybar.nix b/accounts/gkleen@sif/niri/waybar.nix index cc131c08..c02a9a76 100644 --- a/accounts/gkleen@sif/niri/waybar.nix +++ b/accounts/gkleen@sif/niri/waybar.nix | |||
@@ -27,8 +27,14 @@ in { | |||
27 | modules-right = [ "custom/worktime" "custom/worktime-today" | 27 | modules-right = [ "custom/worktime" "custom/worktime-today" |
28 | "custom/weather" | 28 | "custom/weather" |
29 | "custom/keymap" | 29 | "custom/keymap" |
30 | "privacy" "tray" "wireplumber" "backlight" "battery" "idle_inhibitor" "custom/mako" "clock" ]; | 30 | "privacy" "tray" "wireplumber" "backlight" "battery" "idle_inhibitor" "custom/mako" "custom/lid_inhibitor" "clock" ]; |
31 | 31 | ||
32 | "custom/lid_inhibitor" = { | ||
33 | format = "{}"; | ||
34 | return-type = "json"; | ||
35 | exec = lib.getExe pkgs.waybar-systemd-inhibit; | ||
36 | on-click = lib.getExe' pkgs.waybar-systemd-inhibit "waybar-systemd-inhibit-toggle"; | ||
37 | }; | ||
32 | "custom/mako" = { | 38 | "custom/mako" = { |
33 | format = "{}"; | 39 | format = "{}"; |
34 | return-type = "json"; | 40 | return-type = "json"; |
@@ -211,7 +217,7 @@ in { | |||
211 | layer = "top"; | 217 | layer = "top"; |
212 | position = "top"; | 218 | position = "top"; |
213 | height = 14; | 219 | height = 14; |
214 | output = [ "!eDP-1" "!DP-2" "!DP-3" ]; | 220 | output = [ "!eDP-1" "!DP-2" "!DP-3" "*" ]; |
215 | modules-left = [ "niri/workspaces" ]; | 221 | modules-left = [ "niri/workspaces" ]; |
216 | modules-center = [ "niri/window" ]; | 222 | modules-center = [ "niri/window" ]; |
217 | modules-right = [ "clock" ]; | 223 | modules-right = [ "clock" ]; |
@@ -293,7 +299,7 @@ in { | |||
293 | #tray { | 299 | #tray { |
294 | margin: 0; | 300 | margin: 0; |
295 | } | 301 | } |
296 | #battery, #idle_inhibitor, #backlight, #wireplumber, #custom-mako { | 302 | #battery, #idle_inhibitor, #backlight, #wireplumber, #custom-mako, #custom-lid_inhibitor { |
297 | color: @grey; | 303 | color: @grey; |
298 | margin: 0 5px 0 2px; | 304 | margin: 0 5px 0 2px; |
299 | } | 305 | } |
@@ -302,7 +308,11 @@ in { | |||
302 | margin-left: 6px; | 308 | margin-left: 6px; |
303 | } | 309 | } |
304 | #custom-mako { | 310 | #custom-mako { |
305 | margin-right: 2px; | 311 | margin-right: 4px; |
312 | margin-left: 3px; | ||
313 | } | ||
314 | #custom-lid_inhibitor { | ||
315 | margin-right: 3px; | ||
306 | margin-left: 3px; | 316 | margin-left: 3px; |
307 | } | 317 | } |
308 | #battery { | 318 | #battery { |
@@ -330,7 +340,7 @@ in { | |||
330 | color: @orange; | 340 | color: @orange; |
331 | } | 341 | } |
332 | 342 | ||
333 | #idle_inhibitor { | 343 | #idle_inhibitor, #custom-lid_inhibitor { |
334 | padding-top: 1px; | 344 | padding-top: 1px; |
335 | } | 345 | } |
336 | 346 | ||
@@ -340,6 +350,7 @@ in { | |||
340 | } | 350 | } |
341 | #clock { | 351 | #clock { |
342 | /* margin-right: 5px; */ | 352 | /* margin-right: 5px; */ |
353 | font-feature-settings: "tnum"; | ||
343 | } | 354 | } |
344 | ''; | 355 | ''; |
345 | }; | 356 | }; |
diff --git a/accounts/gkleen@sif/synadm/default.nix b/accounts/gkleen@sif/synadm/default.nix new file mode 100644 index 00000000..0a8e0d4c --- /dev/null +++ b/accounts/gkleen@sif/synadm/default.nix | |||
@@ -0,0 +1,9 @@ | |||
1 | { config, pkgs, ... }: | ||
2 | { | ||
3 | home.packages = with pkgs; [ synadm ]; | ||
4 | sops.secrets."synadm.yaml" = { | ||
5 | format = "binary"; | ||
6 | sopsFile = ./synadm_yaml; | ||
7 | path = config.xdg.configHome + "/synadm.yaml"; | ||
8 | }; | ||
9 | } | ||
diff --git a/accounts/gkleen@sif/synadm/synadm_yaml b/accounts/gkleen@sif/synadm/synadm_yaml new file mode 100644 index 00000000..8d951ccc --- /dev/null +++ b/accounts/gkleen@sif/synadm/synadm_yaml | |||
@@ -0,0 +1,15 @@ | |||
1 | { | ||
2 | "data": "ENC[AES256_GCM,data:qJy4Pmbbxja4jmW7OaHsD0mQZ7anZwLhiVmAgkavb+CqwWGDnUBXdz22/MHCbxng5NshcFSpBoCBhgY6B9V2bUiES6bH9AtMlDcs9ebKGMArBTUTnQ2MjWQGfQTqraWdNgy+n327uj9swwCH8EZXdYH/Hlv0t/re470W+VOHeXhGghQ3Y9IGz2sgfvMGr8QxaJNydZz85rgs5QUP/PglCwWIOw2mY1EX2vYwnmiAo49LmIEaxWvRi++KHaeBveDt0nlkJwzUlipL2VOKWxkgpK3yGucQn2mz+FRe1btp+4KGm8H17eUI9FO9sBwq,iv:kgM921ovwCgDYHQj3c5Rupy/8JxHehxUD2jb1k9Ik2Y=,tag:3TLQkJbv679VWy8V2TMugw==,type:str]", | ||
3 | "sops": { | ||
4 | "age": [ | ||
5 | { | ||
6 | "recipient": "age1rmmhetcmllq0ahl5qznlr0eya2zdxwl9h6y5wnl97d2wtyx5t99sm2u866", | ||
7 | "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6bzVHUGNxZTF2WC9MYmZr\neGdVVzJXN3lGdEk3cTBER3J6UTFtcUJna2d3CjdNQmRXd2haZW1MYlJzNkk1dWVD\nVTFQc2gvS0JrejJ6SFh2MXpPWDZpRE0KLS0tIE0wTC85bEpvSnlGdGFkZVFhNjFZ\nbzRiZkxMWUg2ODNVUlBmNFlPNGRrZlkK1VXLJWcssv3ETyZSSM/Hhn5VIaI9iov9\nzShZA9Zx/FX6PYTuUMC29pJ57gKourcIxa/7HwSv/xYn1A6WcYfgSg==\n-----END AGE ENCRYPTED FILE-----\n" | ||
8 | } | ||
9 | ], | ||
10 | "lastmodified": "2025-05-18T11:03:42Z", | ||
11 | "mac": "ENC[AES256_GCM,data:yonJC68PhilAgEHNNJQ8nO53Qo3rx/LnfiOWfuMm24bOUIH9QM3WZZxpigd7bHI4eC4TqRb4LvcSi0nEURTRAhwiTqGNrWbpw2Iv3n5dhLEN9aTcetG5ZuhaXqfVUoML45/ovdBZG/0l8+XIHqxN2M/g/h4JwKoR/6lqzcrVhgo=,iv:xvxBJwy+E5zUdjhGPdZPdy7tnBIEj50hfiDJFsS3wNg=,tag:L4Fas36ZOg4h0QQwC4gjNA==,type:str]", | ||
12 | "unencrypted_suffix": "_unencrypted", | ||
13 | "version": "3.10.2" | ||
14 | } | ||
15 | } | ||