################ ### MONITORS ### ################ # Should be configured per-profile # monitor = HDMI-A-2, 1920x1080@60, 0x0, 1 # monitor = eDP-1, 1920x1080@60, 1920x0, 1 monitor = , preferred, auto, 1 ################# ### AUTOSTART ### ################# exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_TYPE exec-once = sleep 1 && systemctl --user start wayland-session.target # Hyprland socket sometimes isn't yet loaded, sleep for sec # exec-once = aa-notify -p # exec-once = udiskie -A -T # exec-once = nm-applet --indicator exec-once = discord # exec-once = webcord --start-minimized ######################### ### CATEGORY SETTINGS ### ######################### general { gaps_in = 5 gaps_out = 8 border_size = 2 #col.active_border = 0xFF327BD1 # blue col.active_border = 0xFFFFA500 # orange # col.inactive_border = 0xFF000000 # black col.inactive_border = 0xAA444444 # gray col.group_border=0xAA5AA500 col.group_border_active=0xFF00A500 # cursor_inactive_timeout = 10 # no_cursor_warps = true layout = dwindle } decoration { rounding = 8 blur = true blur_size = 3 blur_passes = 2 blur_new_optimizations = true drop_shadow = true shadow_range = 20 shadow_render_power = 2 shadow_ignore_window = true shadow_offset = [0 0] col.shadow = 0xE60F0F0F # col.shadow = 0xFFFFA500 col.shadow_inactive = 0x990F0F0F dim_inactive = false dim_strength = 0.05 } animations { enabled = true animation = windows, 1, 3, default, popin 50% animation = border, 1, 4, default animation = fade, 1, 4, default animation = workspaces, 1, 3, default } input { kb_layout = us, sk kb_variant = ,qwerty kb_options = grp:alt_shift_toggle numlock_by_default=true follow_mouse = 1 } gestures { workspace_swipe = true workspace_swipe_fingers = 3 workspace_swipe_distance = 300 workspace_swipe_invert = false workspace_swipe_min_speed_to_force = 20 workspace_swipe_cancel_ratio = 0.650000 } misc { disable_hyprland_logo = true disable_splash_rendering = true } dwindle { pseudotile = false preserve_split = true no_gaps_when_only = false #smart_split = true } #################### ### WINDOW RULES ### #################### # Automatically move windows to their workspace windowrulev2 = workspace 2, class:^(firefox)$ windowrulev2 = workspace 4, class:^(discord)$ windowrulev2 = workspace 4, class:^(WebCord)$ windowrulev2 = workspace 5, class:^(Spotify)$ windowrulev2 = workspace 6, class:^(Stremio)$ # General float rules windowrulev2 = float, class:^(file_progress)$ windowrulev2 = float, class:^(confirm)$ windowrulev2 = float, class:^(dialog)$ windowrulev2 = float, class:^(download)$ windowrulev2 = float, class:^(notification)$ windowrulev2 = float, class:^(error)$ windowrulev2 = float, class:^(splash)$ windowrulev2 = float, class:^(confirmreset)$ # Float simple apps windowrulev2 = float, class:^(Lxappearance)$ windowrulev2 = float, class:^(Rofi)$ windowrulev2 = float, class:^(feh)$ windowrulev2 = float, class:^(pavucontrol-qt)$ windowrulev2 = float, class:^(pavucontrol)$ windowrulev2 = float, class:^(file-roller)$ windowrulev2 = float, class:^(qalculate-gtk)$ windowrulev2 = float, class:^(com.github.wwmm.easyeffects) # Give apps proper size windowrulev2 = size 800 550, class:^(qalculate-gtk)$ windowrulev2 = tile, class:^(Spotify)$ # Float some firefox windows (like bookmark menus, or some extension windows) windowrulev2 = float, class:^(firefox)$,title:^(Revert Bookmarks)$ windowrulev2 = float, class:^(firefox)$,title:^(Library)$ windowrulev2 = float, class:^(firefox)$,title:^(Extension: \(uBlock Origin\)) windowrulev2 = float, class:^(firefox)$,title:^(Firefox — Sharing Indicator)$ # Float some pcmanfm windows windowrulev2 = float, class:^(pcmanfm-qt)$,title:^(Mount)$ windowrulev2 = float, class:^(pcmanfm-qt)$,title:^(Preferences)$ windowrulev2 = float, class:^(pcmanfm-qt)$,title:^(Move files)$ windowrulev2 = float, class:^(pcmanfm-qt)$,title:^(Search Files)$ windowrulev2 = float, class:^(pcmanfm-qt)$,title:^(Copy Files)$ windowrulev2 = float, class:^(pcmanfm-qt)$,title:^(Confirm to replace files)$ # Float some windows from other apps windowrulev2 = float, class:^(Spotify)$,title:^(Ozone X11)$ windowrulev2 = float, class:^(opensnitch_ui)$ # Idle inhibit rules windowrulev2 = idleinhibit focus, class:^(com.stremio.stremio)$ windowrulev2 = idleinhibit focus, class:^(mpv)$ windowrulev2 = idleinhibit focus, class:^(firefox)$,title:^(.+ - YouTube — Mozilla Firefox)$ #################### ### KEY BINDINGS ### #################### $SCREENSHOT_FORMAT = "${XDG_SCREENSHOTS_DIR:-$HOME/Pictures/Screenshots}/Screenshot_$(date +%Y-%m-%d_%H-%M-%S).png" $SCREENSHOT_DELAY = 2000 $MOUSE_LMB = mouse:272 $MOUSE_RMB = mouse:273 $MOUSE_MMB = mouse:274 $MOUSE_EX1 = mouse:275 $MOUSE_EX2 = mouse:276 # DE/WM control bind = SUPER_SHIFT, Q, exec, menuquit bind = SUPER_CTRL, L, exec, loginctl lock-session bind = SUPER_SHIFT, L, exec, wlogout -p layer-shell bind = SUPER_SHIFT, T, exec, toggle-idle bind = SUPER_SHIFT, D, exec, toggle-notifications # Programs bind = SUPER, R, exec, wofi --show drun bind = SUPER_SHIFT, Return, exec, wofi --show run bind = SUPER_SHIFT, C, exec, clipman pick -t wofi bind = SUPER, Return, exec, alacritty bind = SUPER, X, exec, pcmanfm-qt bind = SUPER, B, exec, firefox bind = SUPER, S, exec, spotify bind = SUPER, D, exec, discord bind = SUPER, C, exec, qalculate-gtk bind = , XF86Calculator, exec, qalculate-gtk bind = SUPER, N, exec, [float] alacritty -e mknote # Notifications bind = CTRL, grave, exec, dunstctl close bind = CTRL_SHIFT, grave, exec, dunstctl close-all bind = CTRL, period, exec, dunstctl history-pop bind = CTRL_SHIFT, period, exec, dunstctl context # Volume comtrol binde = SUPER, Down, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05- binde = SUPER, Up, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05+ binde = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05- binde = , XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05+ bind = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle bind = , XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle # Brightness control binde = SUPER, Right, exec, brightness -i 5% -n binde = SUPER, Left, exec, brightness -d 5% -n binde = , XF86MonBrightnessUp, exec, brightness -i 5% -n binde = , XF86MonBrightnessDown, exec, brightness -d 5% -n # Screenshots (with custom screenshot script) bind = , 248, exec, quick-record --notify toggle bind = SUPER, 248, exec, quick-record toggle bind = ALT, Print, exec, wl-copy --type image/png "$(hyprpicker)" && notify-send 'Picked color' "$(wl-paste) (saved to clipboard)" bind = , Print, exec, screenshot --notify --copy --target area bind = SUPER, Print, exec, screenshot --notify --copy --target area --edit bind = SHIFT, Print, exec, screenshot --notify --save $SCREENSHOT_FORMAT --target area bind = CTRL, Print, exec, screenshot --notify --copy --target area --delay $SCREENSHOT_DELAY bind = SUPER_SHIFT, Print, exec, screenshot --notify --save $SCREENSHOT_FORMAT --target area --edit bind = SUPER_CTRL, Print, exec, screenshot --notify --copy --target area --delay $SCREENSHOT_DELAY --edit bind = SUPER_SHIFT_CTRL, Print, exec, screenshot --notify --save $SCREENSHOT_FORMAT --target area --delay $SCREENSHOT_DELAY --edit # Active window bind = SUPER, W, killactive, bind = SUPER, F, togglefloating, bind = SUPER, Space, fullscreen, 0 bind = SUPER_SHIFT, Space, fullscreen, 1 bind = CTRL_SHIFT, Space, exec, toggle-fakefullscreen bind = SUPER, P, exec, bash -c "if hyprctl activewindow | grep 'floating: 0'; then hyprctl dispatch togglefloating active; fi; hyprctl dispatch pin active" bind = SUPER_SHIFT, P, pseudo, bind = SUPER_SHIFT, S, togglesplit, # Window groups bind = SUPER, G, togglegroup, bind = ALT, tab, changegroupactive, f bind = ALT, grave, changegroupactive, b # Special workspace (scratchpad) bind = ALT, grave, movetoworkspace, special bind = SUPER, grave, togglespecialworkspace, # Move window focus bind = SUPER, h, movefocus, l bind = SUPER, l, movefocus, r bind = SUPER, k, movefocus, u bind = SUPER, j, movefocus, d # Move active window in direction bind = SUPER_ALT, h, movewindow, l bind = SUPER_ALT, l, movewindow, r bind = SUPER_ALT, k, movewindow, u bind = SUPER_ALT, j, movewindow, d # Move between workspaces, swapping to current monitor (like xmonad) bind = SUPER, 1, exec, swap-workspace 1 bind = SUPER, 2, exec, swap-workspace 2 bind = SUPER, 3, exec, swap-workspace 3 bind = SUPER, 4, exec, swap-workspace 4 bind = SUPER, 5, exec, swap-workspace 5 bind = SUPER, 6, exec, swap-workspace 6 bind = SUPER, 7, exec, swap-workspace 7 bind = SUPER, 8, exec, swap-workspace 8 bind = SUPER, 9, exec, swap-workspace 9 # Move windows to workspaces bind = SUPER_SHIFT, 1, movetoworkspacesilent, 1 bind = SUPER_SHIFT, 2, movetoworkspacesilent, 2 bind = SUPER_SHIFT, 3, movetoworkspacesilent, 3 bind = SUPER_SHIFT, 4, movetoworkspacesilent, 4 bind = SUPER_SHIFT, 5, movetoworkspacesilent, 5 bind = SUPER_SHIFT, 6, movetoworkspacesilent, 6 bind = SUPER_SHIFT, 7, movetoworkspacesilent, 7 bind = SUPER_SHIFT, 8, movetoworkspacesilent, 8 bind = SUPER_SHIFT, 9, movetoworkspacesilent, 9 # Move windows to workspaces and focus it there bind = ALT, 1, movetoworkspace, 1 bind = ALT, 2, movetoworkspace, 2 bind = ALT, 3, movetoworkspace, 3 bind = ALT, 4, movetoworkspace, 4 bind = ALT, 5, movetoworkspace, 5 bind = ALT, 6, movetoworkspace, 6 bind = ALT, 7, movetoworkspace, 7 bind = ALT, 8, movetoworkspace, 8 bind = ALT, 9, movetoworkspace, 9 # Cycle workspaces (relative movement) bind = SUPER, mouse_down, workspace, +1 bind = SUPER, mouse_up, workspace, -1 bind = SUPER, bracketleft, workspace, -1 bind = SUPER, bracketright, workspace, +1 # Cycle monitors bind = SUPER_SHIFT, bracketleft, focusmonitor, -1 bind = SUPER_SHIFT, bracketright, focusmonitor, +1 # Mouse window resizing bindm = SUPER, $MOUSE_LMB, movewindow bindm = SUPER, $MOUSE_RMB, resizewindow # Quick keyboard window resizing binde = ALT, right, resizeactive, 10 0 binde = ALT, left, resizeactive, -10 0 binde = ALT, up, resizeactive, 0 -10 binde = ALT, down, resizeactive, 0 10 binde = ALT, H, resizeactive, -10 0 binde = ALT, K, resizeactive, 0 -10 binde = ALT, J, resizeactive, 0 10 binde = ALT, L, resizeactive, 10 0 # Precise keyboard window resizing (group) bind = SUPER, slash, submap, resize submap = resize binde = , right, resizeactive, 10 0 binde = , left, resizeactive, -10 0 binde = , up, resizeactive, 0 -10 binde = , down, resizeactive, 0 10 binde = SUPER, right, resizeactive, 30 0 binde = SUPER, left, resizeactive, -30 0 binde = SUPER, up, resizeactive, 0 -30 binde = SUPER, down, resizeactive, 0 30 binde = SHIFT, right, resizeactive, 1 0 binde = SHIFT, left, resizeactive, -1 0 binde = SHIFT, up, resizeactive, 0 -1 binde = SHIFT, down, resizeactive, 0 1 binde = , H, resizeactive, -10 0 binde = , K, resizeactive, 0 -10 binde = , J, resizeactive, 0 10 binde = , L, resizeactive, 10 0 binde = , right, resizeactive, 10 0 binde = , left, resizeactive, -10 0 binde = , up, resizeactive, 0 -10 binde = , down, resizeactive, 0 10 binde = SUPER, H, resizeactive, -30 0 binde = SUPER, K, resizeactive, 0 -30 binde = SUPER, J, resizeactive, 0 30 binde = SUPER, L, resizeactive, 30 0 binde = SHIFT, H, resizeactive, -1 0 binde = SHIFT, K, resizeactive, 0 -1 binde = SHIFT, J, resizeactive, 0 1 binde = SHIFT, L, resizeactive, 1 0 bind = , escape, submap, reset bind = , return, submap, reset bind = SUPER, slash, submap, reset submap = reset # Global keybinds (passing keys to other programs) bind = SUPER, F10, pass, ^(com\.obsproject\.Studio)$ bind = SUPER, F10, pass, ^(com\.obsproject\.Studio)$