From 37d064197f2d24a310e31b96214cf6bc599cebca Mon Sep 17 00:00:00 2001 From: Miran Bastaja Date: Fri, 29 Dec 2023 13:47:11 +0100 Subject: hyprdesktop: abstract away commands Abstract away commands used in hyprdesktop config in order to make swapping tools and utilites easier, and to make the code fit in 80 columns. --- share/home/hyprdesktop.nix | 168 +++++++++++++++++++++++++-------------------- 1 file changed, 93 insertions(+), 75 deletions(-) (limited to 'share/home/hyprdesktop.nix') diff --git a/share/home/hyprdesktop.nix b/share/home/hyprdesktop.nix index 0cd8083..13701d6 100644 --- a/share/home/hyprdesktop.nix +++ b/share/home/hyprdesktop.nix @@ -19,82 +19,100 @@ ./emacs ]; - wayland.windowManager.hyprland = { - enable = true; - extraConfig = '' - $mod = SUPER - - bind = $mod SHIFT, Return, exec, kitty - - general { - layout = master - } - - misc { - force_hypr_chan = true - } - - master { - mfact = 0.5 - new_is_master = false - } - - # workspaces - # binds $mod + [shift +] {1..10} to [move to] workspace {1..10} - ${builtins.concatStringsSep "\n" (builtins.genList (x: - let ws = let c = (x + 1) / 10; in builtins.toString (x + 1 - (c * 10)); - in '' - bind = $mod, ${ws}, workspace, ${toString (x + 1)} - bind = $mod SHIFT, ${ws}, movetoworkspacesilent, ${toString (x + 1)} - '') 10)} - - bind = $mod SHIFT, C, killactive - bind = $mod SHIFT, F, togglefloating - bind = $mod SHIFT, Q, exit - bind = $mod, P, exec, rofi -show drun - bind = $mod SHIFT, P, exec, rofi -show run - - bind = $mod, H, cyclenext, prev - bind = $mod, L, cyclenext - bind = $mod SHIFT, H, swapnext, prev - bind = $mod SHIFT, L, swapnext - - # audio control - binde =, XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ --limit 1.0 5%+ - binde =, XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ --limit 1.0 5%- - bind =, XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle - - # monitor brightness control - binde =, XF86MonBrightnessUp, exec, brightnessctl set +5% - binde =, XF86MonBrightnessDown, exec, brightnessctl set 5%- - - # Screenshotting - # My stupid laptop outputs these three key codes when the PrtSc key is - # pressed instead of using just one code like any sane device would - bind = SUPER SHIFT, S, exec, grim -g "$(slurp)" -t png - | wl-copy --type image/png - - input { - # focus change on cursor move - follow_mouse = 1 - accel_profile = flat + wayland.windowManager.hyprland = + let + commands = { + audio = { + increase = "wpctl set-volume @DEFAULT_AUDIO_SINK@ --limit 1.0 5%+"; + decrease = "wpctl set-volume @DEFAULT_AUDIO_SINK@ --limit 1.0 5%-"; + toggle-mute = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; + }; + screenshot = ''grim -g "$(slurp)" -t png - | wl-copy --type image/png''; + cmd = { + run = "rofi -show run"; + drun = "rofi -show drun"; + }; + brightness = { + increase = "brightnessctl set +5%"; + decrease = "brightnessctl set 5%-"; + }; + terminal = "kitty"; + }; + in + { + enable = true; + extraConfig = '' + $mod = SUPER + + bind = $mod SHIFT, Return, exec, ${commands.terminal} + + general { + layout = master } - monitor=,preferred,auto,1 - - # set opacity to 0.9 active and 0.5 inactive for kitty - windowrule = opacity 0.9 override 0.5 override,^(kitty)$ - - # Move windows to their designated workspaces - # TODO: make popup windows stay on the workspace where they were created - # windowrulev2 = workspace 6,class:(org.qbittorrent.qBittorrent),floating:0 - windowrulev2 = workspace 3,class:(firefox) - windowrulev2 = workspace 4,class:(fluffychat) - windowrulev2 = workspace 4,class:(org.telegram.desktop) - windowrulev2 = workspace 4,class:(Signal) - windowrulev2 = workspace 5,class:(Bitwarden) - - exec-once = eww --config ${config.programs.eww.configDir} open bar - ''; - }; + + misc { + force_hypr_chan = true + } + + master { + mfact = 0.5 + new_is_master = false + } + + # workspaces + # binds $mod + [shift +] {1..10} to [move to] workspace {1..10} + ${builtins.concatStringsSep "\n" (builtins.genList (x: + let ws = let c = (x + 1) / 10; in builtins.toString (x + 1 - (c * 10)); + in '' + bind = $mod, ${ws}, workspace, ${toString (x + 1)} + bind = $mod SHIFT, ${ws}, movetoworkspacesilent, ${toString (x + 1)} + '') 10)} + + bind = $mod SHIFT, C, killactive + bind = $mod SHIFT, F, togglefloating + bind = $mod SHIFT, Q, exit + bind = $mod, P, exec, ${commands.cmd.run} + bind = $mod SHIFT, P, exec, ${commands.cmd.drun} + + bind = $mod, H, cyclenext, prev + bind = $mod, L, cyclenext + bind = $mod SHIFT, H, swapnext, prev + bind = $mod SHIFT, L, swapnext + + # audio control + binde =, XF86AudioRaiseVolume, exec, ${commands.audio.increase} + binde =, XF86AudioLowerVolume, exec, ${commands.audio.decrease} + bind =, XF86AudioMute, exec, ${commands.audio.toggle-mute} + + # monitor brightness control + binde =, XF86MonBrightnessUp, exec, ${commands.brightness.increase} + binde =, XF86MonBrightnessDown, exec, ${commands.brightness.decrease} + + # Screenshotting + # My stupid laptop outputs these three key codes when the PrtSc key is + # pressed instead of using just one code like any sane device would + bind = SUPER SHIFT, S, exec, ${commands.screenshot} + + input { + # focus change on cursor move + follow_mouse = 1 + accel_profile = flat + } + monitor=,preferred,auto,1 + + # set opacity to 0.9 active and 0.5 inactive for kitty + windowrule = opacity 0.9 override 0.5 override,^(kitty)$ + + # Move windows to their designated workspaces + windowrulev2 = workspace 3,class:(firefox) + windowrulev2 = workspace 4,class:(fluffychat) + windowrulev2 = workspace 4,class:(org.telegram.desktop) + windowrulev2 = workspace 4,class:(Signal) + windowrulev2 = workspace 5,class:(Bitwarden) + + exec-once = eww --config ${config.programs.eww.configDir} open bar + ''; + }; home.packages = with pkgs; [ xh # Nice to use HTTP client -- cgit v1.3.1