diff --git a/home-manager/linux/programs/hyprland.nix b/home-manager/linux/programs/hyprland.nix index d3de4d5..b7b92f5 100644 --- a/home-manager/linux/programs/hyprland.nix +++ b/home-manager/linux/programs/hyprland.nix @@ -34,245 +34,248 @@ in with lib; { recommendedEnvironment = true; systemdIntegration = false; extraConfig = '' - # Set environment variables to force wayland - env = XCURSOR_SIZE,24 - # env = GDK_BACKEND,wayland,x11 - env = QT_QPA_PLATFORM,wayland;xcb - env = SDL_VIDEODRIVER,wayland - # env = CLUTTER_BACKEND,wayland - input { - kb_layout = us - kb_variant = - kb_model = - kb_options = - kb_rules = - follow_mouse = 1 - } + # Set environment variables to force wayland + env = XCURSOR_SIZE,24 + # env = GDK_BACKEND,wayland,x11 + # env = QT_QPA_PLATFORM,wayland;xcb + # env = SDL_VIDEODRIVER,wayland + # env = CLUTTER_BACKEND,wayland + input { + kb_layout = us + kb_variant = + kb_model = + kb_options = + kb_rules = + follow_mouse = 1 + } - general { - # See https://wiki.hyprland.org/Configuring/Variables/ for more - gaps_in = 5 - gaps_out = 10 - border_size = 3 - col.active_border = rgba(3fc5b7ee) rgba(70b433ee) 45deg - col.inactive_border = rgba(252525aa) - layout = dwindle - } - decoration { - rounding = 10 - blur = true - blur_size = 3 - blur_passes = 1 - blur_new_optimizations = true - drop_shadow = true - shadow_range = 4 - shadow_render_power = 3 - col.shadow = rgba(181818ee) - } + general { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + gaps_in = 5 + gaps_out = 10 + border_size = 3 + col.active_border = rgba(3fc5b7ee) rgba(70b433ee) 45deg + col.inactive_border = rgba(252525aa) + layout = dwindle + } + decoration { + rounding = 10 + blur = true + blur_size = 3 + blur_passes = 1 + blur_new_optimizations = true + drop_shadow = true + shadow_range = 4 + shadow_render_power = 3 + col.shadow = rgba(181818ee) + } - animations { - enabled = true; - bezier = myBezier, 0.05, 0.9, 0.1, 1.05 - animation = windows, 1, 7, myBezier - animation = windowsOut, 1, 7, default, popin 80% - animation = border, 1, 10, default - animation = borderangle, 1, 8, default - animation = fade, 1, 7, default - animation = workspaces, 1, 6, default - } + animations { + enabled = true; + bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + animation = windows, 1, 7, myBezier + animation = windowsOut, 1, 7, default, popin 80% + animation = border, 1, 10, default + animation = borderangle, 1, 8, default + animation = fade, 1, 7, default + animation = workspaces, 1, 6, default + } - dwindle { - # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more - pseudotile = true # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below - preserve_split = true # you probably want this - } + dwindle { + # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more + pseudotile = true # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = true # you probably want this + } - master { - new_is_master = false - } + master { + new_is_master = false + } - gestures { - workspace_swipe = false - } + gestures { + workspace_swipe = false + } - bind = SUPER, Q, exec, alacritty - bind = SUPER, C, killactive, - # bind = SUPER, M, exit, - bind = SUPER, E, exec, dolphin - bind = SUPER, V, togglefloating, - bind = SUPER, P, pseudo, # dwindle - bind = SUPER, B, togglesplit, # dwindle + bind = SUPER, Q, exec, alacritty + bind = SUPER, C, killactive, + # bind = SUPER, M, exit, + bind = SUPER, E, exec, dolphin + bind = SUPER, V, togglefloating, + bind = SUPER, P, pseudo, # dwindle + bind = SUPER, B, togglesplit, # dwindle - # Maximize - bind = SUPER, A, fullscreen, 1 - bind = SUPER SHIFT, A, fullscreen, 0 + # Maximize + bind = SUPER, A, fullscreen, 1 + bind = SUPER SHIFT, A, fullscreen, 0 - # Move focus with mainMod + arrow keys - bind = SUPER, H, movefocus, l - bind = SUPER, L, movefocus, r - bind = SUPER, K, movefocus, u - bind = SUPER, K, layoutmsg, focusnext - bind = SUPER, J, movefocus, d - bind = SUPER, J, layoutmsg, focusprev + # Move focus with mainMod + arrow keys + bind = SUPER, H, movefocus, l + bind = SUPER, L, movefocus, r + bind = SUPER, K, movefocus, u + bind = SUPER, K, layoutmsg, focusnext + bind = SUPER, J, movefocus, d + bind = SUPER, J, layoutmsg, focusprev - # Move windows with mainMod + arrow keys - bind = SUPER SHIFT, H, movewindow, l - bind = SUPER SHIFT, L, movewindow, r - bind = SUPER SHIFT, K, movewindow, u - bind = SUPER SHIFT, K, layoutmsg, swapnext - bind = SUPER SHIFT, J, movewindow, d - bind = SUPER SHIFT, J, layoutmsg, swapprev + # Move windows with mainMod + arrow keys + bind = SUPER SHIFT, H, movewindow, l + bind = SUPER SHIFT, L, movewindow, r + bind = SUPER SHIFT, K, movewindow, u + bind = SUPER SHIFT, K, layoutmsg, swapnext + bind = SUPER SHIFT, J, movewindow, d + bind = SUPER SHIFT, J, layoutmsg, swapprev - # Switch layouts with a mode - bind = SUPER, S, submap, layout - submap=layout - # dwindle - bind = , A, exec, hyprctl keyword general:layout dwindle - bind = , A, submap, reset - # master - bind = , S, exec, hyprctl keyword general:layout master - bind = , S, submap, reset - submap = reset + # Switch layouts with a mode + bind = SUPER, S, submap, layout + submap=layout + # dwindle + bind = , A, exec, hyprctl keyword general:layout dwindle + bind = , A, submap, reset + # master + bind = , S, exec, hyprctl keyword general:layout master + bind = , S, submap, reset + submap = reset - # Switch workspaces with mainMod + [0-9] - bind = SUPER, 1, workspace, 1 - bind = SUPER, 2, workspace, 2 - bind = SUPER, 3, workspace, 3 - bind = SUPER, 4, workspace, 4 - bind = SUPER, 5, workspace, 5 - bind = SUPER, 6, workspace, 6 - bind = SUPER, 7, workspace, 7 - bind = SUPER, 8, workspace, 8 - bind = SUPER, 9, workspace, 9 - bind = SUPER, 0, workspace, 10 + # Switch workspaces with mainMod + [0-9] + bind = SUPER, 1, workspace, 1 + bind = SUPER, 2, workspace, 2 + bind = SUPER, 3, workspace, 3 + bind = SUPER, 4, workspace, 4 + bind = SUPER, 5, workspace, 5 + bind = SUPER, 6, workspace, 6 + bind = SUPER, 7, workspace, 7 + bind = SUPER, 8, workspace, 8 + bind = SUPER, 9, workspace, 9 + bind = SUPER, 0, workspace, 10 - # Move active window to a workspace with mainMod + SHIFT + [0-9] - bind = SUPER SHIFT, 1, movetoworkspace, 1 - bind = SUPER SHIFT, 2, movetoworkspace, 2 - bind = SUPER SHIFT, 3, movetoworkspace, 3 - bind = SUPER SHIFT, 4, movetoworkspace, 4 - bind = SUPER SHIFT, 5, movetoworkspace, 5 - bind = SUPER SHIFT, 6, movetoworkspace, 6 - bind = SUPER SHIFT, 7, movetoworkspace, 7 - bind = SUPER SHIFT, 8, movetoworkspace, 8 - bind = SUPER SHIFT, 9, movetoworkspace, 9 - bind = SUPER SHIFT, 0, movetoworkspace, 10 + # Move active window to a workspace with mainMod + SHIFT + [0-9] + bind = SUPER SHIFT, 1, movetoworkspace, 1 + bind = SUPER SHIFT, 2, movetoworkspace, 2 + bind = SUPER SHIFT, 3, movetoworkspace, 3 + bind = SUPER SHIFT, 4, movetoworkspace, 4 + bind = SUPER SHIFT, 5, movetoworkspace, 5 + bind = SUPER SHIFT, 6, movetoworkspace, 6 + bind = SUPER SHIFT, 7, movetoworkspace, 7 + bind = SUPER SHIFT, 8, movetoworkspace, 8 + bind = SUPER SHIFT, 9, movetoworkspace, 9 + bind = SUPER SHIFT, 0, movetoworkspace, 10 - # Scroll through existing workspaces with mainMod + scroll - bind = SUPER, mouse_down, workspace, e+1 - bind = SUPER, mouse_up, workspace, e-1 + # Scroll through existing workspaces with mainMod + scroll + bind = SUPER, mouse_down, workspace, e+1 + bind = SUPER, mouse_up, workspace, e-1 - # Move/resize windows with mainMod + LMB/RMB and dragging - bindm = SUPER, mouse:272, movewindow - bindm = SUPER, mouse:273, resizewindow + # Move/resize windows with mainMod + LMB/RMB and dragging + bindm = SUPER, mouse:272, movewindow + bindm = SUPER, mouse:273, resizewindow - # Media key binds - bind = , xf86audioraisevolume, exec, swayosd --output-volume=raise - bind = SHIFT, xf86audioraisevolume, exec, swayosd --output-volume=+2 - bind = , xf86audiolowervolume, exec, swayosd --output-volume=lower - bind = SHIFT, xf86audiolowervolume, exec, swayosd --output-volume=-2 - bind = , xf86audiomute, exec, swayosd --output-volume mute-toggle - bind = , xf86audioplay, exec, playerctl play-pause - bind = , xf86audionext, exec, playerctl next + # Media key binds + bind = , xf86audioraisevolume, exec, swayosd --output-volume=raise + bind = SHIFT, xf86audioraisevolume, exec, swayosd --output-volume=+2 + bind = , xf86audiolowervolume, exec, swayosd --output-volume=lower + bind = SHIFT, xf86audiolowervolume, exec, swayosd --output-volume=-2 + bind = , xf86audiomute, exec, swayosd --output-volume mute-toggle + bind = , xf86audioplay, exec, playerctl play-pause + bind = , xf86audionext, exec, playerctl next - # Screenshots - bind = , print, exec, grimblast --scale 1 copysave area ~/Pictures/Screenshots/$(date -Iseconds).png - bind = SHIFT, print, exec, grimblast --scale 1 copysave output ~/Pictures/Screenshots/$(date -Iseconds).png + # Screenshots + bind = , print, exec, grimblast --scale 1 copysave area ~/Pictures/Screenshots/$(date -Iseconds).png + bind = SHIFT, print, exec, grimblast --scale 1 copysave output ~/Pictures/Screenshots/$(date -Iseconds).png - # Caps lock indicator - bindr = CAPS, caps_lock, exec, swayosd --caps-lock + # Caps lock indicator + bindr = CAPS, caps_lock, exec, swayosd --caps-lock - # systemd integration - exec-once=dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY HYPRLAND_INSTANCE_SIGNATURE XDG_CURRENT_DESKTOP && sleep 2 && systemctl --user start hyprland-session.target + # systemd integration + exec-once=dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY HYPRLAND_INSTANCE_SIGNATURE XDG_CURRENT_DESKTOP && sleep 2 && systemctl --user start hyprland-session.target - ## Window rules + ## Window rules - # Gamescope - vmware - windowrulev2 = float,class:^(.gamescope-wrapped)$,title:VMware Workstation - windowrulev2 = noborder,class:^(.gamescope-wrapped)$,title:VMware Workstation - windowrulev2 = rounding 0,class:^(.gamescope-wrapped)$,title:VMware Workstation + # Gamescope - vmware + windowrulev2 = float,class:^(.gamescope-wrapped)$,title:VMware Workstation + windowrulev2 = noborder,class:^(.gamescope-wrapped)$,title:VMware Workstation + windowrulev2 = rounding 0,class:^(.gamescope-wrapped)$,title:VMware Workstation - # Bluetooth manager - windowrulev2 = float,class:^(.blueman-manager-wrapped)$ - windowrulev2 = center,class:^(.blueman-manager-wrapped)$ + # Bluetooth manager + windowrulev2 = float,class:^(.blueman-manager-wrapped)$ + windowrulev2 = center,class:^(.blueman-manager-wrapped)$ - # firefox Picture-in-Picture - windowrulev2 = nofullscreenrequest,class^(firefox-beta)$,title:^(Picture-in-Picture)$ - windowrulev2 = float,class^(firefox-beta)$,title:^(Picture-in-Picture)$ - windowrulev2 = pin,class^(firefox-beta)$,title:^(Picture-in-Picture)$ + # firefox Picture-in-Picture + windowrulev2 = nofullscreenrequest,class^(firefox-beta)$,title:^(Picture-in-Picture)$ + windowrulev2 = float,class^(firefox-beta)$,title:^(Picture-in-Picture)$ + windowrulev2 = pin,class^(firefox-beta)$,title:^(Picture-in-Picture)$ - # firefox bitwarden - windowrulev2 = nofullscreenrequest,class^(firefox-beta)$,title:^(Extension: Bitwarden) - windowrulev2 = float,class^(firefox-beta)$,title:^(Extension: Bitwarden) - windowrulev2 = pin,class^(firefox-beta)$,title:^(Extension: Bitwarden) + # firefox bitwarden + windowrulev2 = nofullscreenrequest,class^(firefox-beta)$,title:^(Extension: Bitwarden) + windowrulev2 = float,class^(firefox-beta)$,title:^(Extension: Bitwarden) + windowrulev2 = pin,class^(firefox-beta)$,title:^(Extension: Bitwarden) - # firefox figma micro indicator - windowrulev2 = nofullscreenrequest,class^(firefox-beta)$,title:^(Firefox — Sharing Indicator)$ - windowrulev2 = float,class^(firefox-beta)$,title:^(Firefox — Sharing Indicator)$ + # firefox figma micro indicator + windowrulev2 = nofullscreenrequest,class^(firefox-beta)$,title:^(Firefox — Sharing Indicator)$ + windowrulev2 = float,class^(firefox-beta)$,title:^(Firefox — Sharing Indicator)$ - # Common modals - windowrule = float,title:^(Open)$ - windowrule = center,title:^(Open)$ - windowrule = float,title:^(Choose Files)$ - windowrule = center,title:^(Choose Files)$ - windowrule = float,title:^(Save As)$ - windowrule = center,title:^(Save As)$ - windowrule = float,title:^(Confirm to replace files)$ - windowrule = center,title:^(Confirm to replace files)$ - windowrule = float,title:^(File Operation Progress)$ - windowrule = center,title:^(File Operation Progress)$ - windowrulev2 = float,class:^(google-chrome)$,title:^(Open Files)$ - windowrulev2 = center,class:^(google-chrome)$,title:^(Open Files)$ - windowrulev2 = float,class:^(google-chrome)$,title:^(Open File)$ - windowrulev2 = center,class:^(google-chrome)$,title:^(Open File)$ + # Common modals + windowrule = float,title:^(Open)$ + windowrule = center,title:^(Open)$ + windowrule = float,title:^(Choose Files)$ + windowrule = center,title:^(Choose Files)$ + windowrule = float,title:^(Save As)$ + windowrule = center,title:^(Save As)$ + windowrule = float,title:^(Confirm to replace files)$ + windowrule = center,title:^(Confirm to replace files)$ + windowrule = float,title:^(File Operation Progress)$ + windowrule = center,title:^(File Operation Progress)$ + windowrulev2 = float,class:^(google-chrome)$,title:^(Open Files)$ + windowrulev2 = center,class:^(google-chrome)$,title:^(Open Files)$ + windowrulev2 = float,class:^(google-chrome)$,title:^(Open File)$ + windowrulev2 = center,class:^(google-chrome)$,title:^(Open File)$ - # Pavucontrol - windowrule = center,pavucontrol - windowrule = float,pavucontrol + # Pavucontrol + windowrule = center,pavucontrol + windowrule = float,pavucontrol - # Emacs streaming - windowrulev2 = float,title:^(emacs-streaming)$ + # Emacs streaming + windowrulev2 = float,title:^(emacs-streaming)$ - ## Scratchpads + ## Scratchpads - # Alacritty - bind = SUPER ALT, Q, exec, pypr toggle term - $dropterm = ^(alacritty-dropterm)$ - windowrule = float,$dropterm - windowrule = size 40% 50%,$dropterm - windowrule = workspace special silent,$dropterm - windowrule = center,$dropterm + # Alacritty + bind = SUPER ALT, Q, exec, pypr toggle term + $dropterm = ^(alacritty-dropterm)$ + windowrule = float,$dropterm + windowrule = size 40% 50%,$dropterm + windowrule = workspace special silent,$dropterm + windowrule = center,$dropterm - # Emacs - bind = SUPER ALT, W, exec, pypr toggle emacs - $scratchmacs = title:^(scratchmacs)$ - windowrulev2 = float,$scratchmacs - windowrulev2 = size 40% 50%,$scratchmacs - windowrulev2 = workspace special silent,$scratchmacs - windowrulev2 = center,$scratchmacs + # Emacs + bind = SUPER ALT, W, exec, pypr toggle emacs + $scratchmacs = title:^(scratchmacs)$ + windowrulev2 = float,$scratchmacs + windowrulev2 = size 40% 50%,$scratchmacs + windowrulev2 = workspace special silent,$scratchmacs + windowrulev2 = center,$scratchmacs - # Ario - bind = SUPER ALT, E, exec, pypr toggle ario - $dropario = class:^(ario)$ - windowrulev2 = float,$dropario - windowrulev2 = size 50% 70%,$dropario - windowrulev2 = workspace special silent,$dropario - windowrulev2 = center,$dropario + # Ario + bind = SUPER ALT, E, exec, pypr toggle ario + $dropario = class:^(ario)$ + windowrulev2 = float,$dropario + windowrulev2 = size 50% 70%,$dropario + windowrulev2 = workspace special silent,$dropario + windowrulev2 = center,$dropario - # Spotify - bind = SUPER ALT, R, exec, pypr toggle spotify - $dropspotify = title:^(Spotify)$ - windowrulev2 = float,$dropspotify - windowrulev2 = size 50% 70%,$dropspotify - windowrulev2 = workspace special silent,$dropspotify - windowrulev2 = center,$dropspotify + # Spotify + bind = SUPER ALT, R, exec, pypr toggle spotify + $dropspotify = title:^(Spotify)$ + windowrulev2 = float,$dropspotify + windowrulev2 = size 50% 70%,$dropspotify + windowrulev2 = workspace special silent,$dropspotify + windowrulev2 = center,$dropspotify - ## Global keybinds + ## Global keybinds - # OBS - bind = SHIFT, F10, pass,^(com\.obsproject\.Studio)$ - bind = SHIFT, F11, pass,^(com\.obsproject\.Studio)$ + # OBS + bind = SHIFT, F10, pass,^(com\.obsproject\.Studio)$ + bind = SHIFT, F11, pass,^(com\.obsproject\.Studio)$ + + # Start polkit agent + exec-once = systemctl --user start plasma-polkit-agent.service ''; };