dotfiles/config/hypr/hyprland.conf (view raw)
| 1 | # vim: foldmethod=marker ts=2 sw=2 |
| 2 | monitor=,highres,auto,1 |
| 3 | # env {{{ |
| 4 | env = XDG_CURRENT_DESKTOP,Hyprland |
| 5 | env = QT_QPA_PLATFORM,wayland;xcb |
| 6 | env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1 |
| 7 | # }}} |
| 8 | # variables {{{ |
| 9 | $mod = SUPER |
| 10 | $browser = brave |
| 11 | $terminal = kitty |
| 12 | $notaker = obsidian |
| 13 | # }}} |
| 14 | # auto start {{{ |
| 15 | exec-once = waybar |
| 16 | exec-once = hyprpaper |
| 17 | exec-once = dunst |
| 18 | exec-once = blueman-applet |
| 19 | exec-once = wlsunset -S 9:00 -s 21:00 |
| 20 | |
| 21 | exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 |
| 22 | exec-once = ~/.config/hypr/xdg-portal.sh |
| 23 | exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP |
| 24 | exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP |
| 25 | |
| 26 | exec-once = gsettings set org.gnome.desktop.interface font-name "JetBrainsMono Nerd Font" |
| 27 | exec-once = gsettings set org.gnome.desktop.interface gtk-theme "Adwaita-dark" # GTK3 |
| 28 | exec-once = gsettings set org.gnome.desktop.interface color-scheme "prefer-dark" # GTK4 |
| 29 | |
| 30 | # exec-once = ~/code/aw-server-rust/target/release/aw-server |
| 31 | # exec-once = ~/code/awatcher/target/release/awatcher |
| 32 | # }}} |
| 33 | # inputs {{{ |
| 34 | input { |
| 35 | kb_layout = us,ua |
| 36 | kb_variant = |
| 37 | kb_model = |
| 38 | kb_options = grp:win_space_toggle,ctrl:nocaps |
| 39 | kb_rules = |
| 40 | |
| 41 | follow_mouse = 1 |
| 42 | sensitivity = 0.0 # -1.0 - 1.0, 0 means no modification |
| 43 | |
| 44 | touchpad { |
| 45 | middle_button_emulation = true |
| 46 | disable_while_typing = true |
| 47 | natural_scroll = false |
| 48 | scroll_factor = 0.4 |
| 49 | clickfinger_behavior = 1 |
| 50 | } |
| 51 | } |
| 52 | # }}} |
| 53 | # general {{{ |
| 54 | general { |
| 55 | gaps_in = 2 |
| 56 | gaps_out = 4 |
| 57 | border_size = 2 |
| 58 | col.active_border = rgba(7aa2f7aa) |
| 59 | col.inactive_border = rgba(292e42aa) |
| 60 | |
| 61 | layout = dwindle # master |
| 62 | } |
| 63 | # }}} |
| 64 | # decorations {{{ |
| 65 | decoration { |
| 66 | rounding = 3 |
| 67 | |
| 68 | blur { |
| 69 | enabled = true |
| 70 | size = 3 |
| 71 | passes = 1 |
| 72 | } |
| 73 | |
| 74 | shadow { |
| 75 | enabled = true |
| 76 | range = 10 |
| 77 | render_power = 3 |
| 78 | } |
| 79 | } |
| 80 | # }}} |
| 81 | # animations {{{ |
| 82 | animations { |
| 83 | enabled = false |
| 84 | } |
| 85 | # }}} |
| 86 | # dwindle layout {{{ |
| 87 | # https://wiki.hyprland.org/Configuring/Dwindle-Layout |
| 88 | dwindle { |
| 89 | pseudotile = false |
| 90 | preserve_split = false |
| 91 | force_split = 2 |
| 92 | default_split_ratio = 1 |
| 93 | } |
| 94 | # }}} |
| 95 | # master layout {{{ |
| 96 | # https://wiki.hyprland.org/Configuring/Master-Layout |
| 97 | master { |
| 98 | orientation = right |
| 99 | new_on_top = true |
| 100 | } |
| 101 | # }}} |
| 102 | # misc {{{ |
| 103 | misc { |
| 104 | disable_hyprland_logo = false |
| 105 | disable_splash_rendering = true |
| 106 | mouse_move_enables_dpms = true |
| 107 | key_press_enables_dpms = true |
| 108 | } |
| 109 | # }}} |
| 110 | # gestures {{{ |
| 111 | gestures { |
| 112 | workspace_swipe = true |
| 113 | workspace_swipe_invert = false |
| 114 | workspace_swipe_create_new = false |
| 115 | } |
| 116 | # }}} |
| 117 | # window rules {{{ |
| 118 | windowrulev2 = workspace 1, class:(Logseq|obsidian) |
| 119 | windowrulev2 = workspace 2, class:(firefox|Google-chrome|Brave-browser|brave-browser) |
| 120 | windowrulev2 = workspace 3, class:(jetbrains-rider|org.octave.Octave) |
| 121 | windowrulev2 = workspace 4, class:(KeePassXC|Insomnium|io.gitlab.news_flash.NewsFlash) |
| 122 | windowrulev2 = workspace 5, class:(discord|org.telegram.desktop|fractal|thunderbird) |
| 123 | windowrulev2 = workspace 7, class:(Spotify) |
| 124 | windowrulev2 = workspace 9, class:(zoom) |
| 125 | |
| 126 | windowrulev2 = float, class:(pavucontrol|blueman-manager) |
| 127 | |
| 128 | # just fixes some annoyance |
| 129 | windowrule = size 700 400, title:(Open File)(.*)$ |
| 130 | windowrule = float, title:(Open File)(.*)$ |
| 131 | windowrule = move center, title:(Open File)(.*)$ |
| 132 | |
| 133 | # screen sharing |
| 134 | windowrulev2 = opacity 0.0 override 0.0 override,class:^(xwaylandvideobridge)$ |
| 135 | windowrulev2 = noanim,class:^(xwaylandvideobridge)$ |
| 136 | windowrulev2 = nofocus,class:^(xwaylandvideobridge)$ |
| 137 | windowrulev2 = noinitialfocus,class:^(xwaylandvideobridge)$ |
| 138 | |
| 139 | # smart gaps |
| 140 | workspace = w[tv1], gapsout:0, gapsin:0 |
| 141 | workspace = f[1], gapsout:0, gapsin:0 |
| 142 | windowrulev2 = bordersize 0, floating:0, onworkspace:w[tv1] |
| 143 | windowrulev2 = rounding 0, floating:0, onworkspace:w[tv1] |
| 144 | windowrulev2 = bordersize 0, floating:0, onworkspace:f[1] |
| 145 | windowrulev2 = rounding 0, floating:0, onworkspace:f[1] |
| 146 | # }}} |
| 147 | # keymaps {{{ |
| 148 | bind = $mod, q, killactive |
| 149 | bind = $mod SHIFT, q, exec, hyprctl kill |
| 150 | bind = $mod, Return, exec, $terminal |
| 151 | |
| 152 | bind = $mod SHIFT, Return, exec, wofi --show drun --allow-images |
| 153 | bind = $mod SHIFT, Escape, exec, ~/bin/wofi-power-menu,hypr |
| 154 | |
| 155 | bind = $mod, f, fullscreen |
| 156 | bind = $mod Ctrl, f, togglefloating |
| 157 | bind = , Print, exec, hyprshot -m region |
| 158 | bind = , SHIFT Print, exec, hyprshot -m output |
| 159 | |
| 160 | # programs {{{ |
| 161 | bind = $mod, comma, exec, wofi-emoji |
| 162 | |
| 163 | bind = $mod SHIFT, a, exec, anki |
| 164 | bind = $mod SHIFT, d, exec, $notaker |
| 165 | bind = $mod SHIFT, f, exec, newsflash |
| 166 | bind = $mod SHIFT, s, exec, spotify |
| 167 | bind = $mod SHIFT, t, exec, telegram-desktop |
| 168 | bind = $mod SHIFT, w, exec, $browser |
| 169 | # }}} |
| 170 | # function keys {{{ |
| 171 | bindl = , XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK@ 5%+ |
| 172 | bindl = , XF86AudioLowerVolume, exec, wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK@ 5%- |
| 173 | bindl = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle |
| 174 | bindl = , XF86AudioPlay, exec, playerctl play-pause |
| 175 | bindl = , XF86AudioNext, exec, playerctl next |
| 176 | bindl = , XF86AudioPrev, exec, playerctl previous |
| 177 | |
| 178 | # brightness |
| 179 | bindl = , XF86MonBrightnessUp, exec, brightnessctl set +5% |
| 180 | bindl = , XF86MonBrightnessDown, exec, brightnessctl set 5%- |
| 181 | # }}} |
| 182 | # layout specific {{{ |
| 183 | bind = $mod, P, pseudo, # dwindle |
| 184 | bind = $mod ALT, J, togglesplit, # dwindle |
| 185 | # }}} |
| 186 | # wm {{{ |
| 187 | bind = $mod, h, movefocus, l |
| 188 | bind = $mod, j, movefocus, d |
| 189 | bind = $mod, k, movefocus, u |
| 190 | bind = $mod, l, movefocus, r |
| 191 | |
| 192 | # Scroll through existing workspaces with $mod + scroll |
| 193 | bind = $mod, mouse_down, workspace, e-1 |
| 194 | bind = $mod, mouse_up, workspace, e+1 |
| 195 | |
| 196 | # Move/resize windows with $mod + LMB/RMB and dragging |
| 197 | bindm = $mod, mouse:272, movewindow |
| 198 | bindm = $mod, mouse:273, resizewindow |
| 199 | |
| 200 | bind = $mod Alt, h, resizeactive, -20 0 |
| 201 | bind = $mod Alt, l, resizeactive, 20 0 |
| 202 | bind = $mod Alt, j, resizeactive, 0 20 |
| 203 | bind = $mod Alt, k, resizeactive, 0 -20 |
| 204 | |
| 205 | bind = $mod SHIFT, h, movewindow, l |
| 206 | bind = $mod SHIFT, l, movewindow, r |
| 207 | bind = $mod SHIFT, k, movewindow, u |
| 208 | bind = $mod SHIFT, j, movewindow, d |
| 209 | |
| 210 | # workspaces |
| 211 | bind = $mod, 1, workspace, 1 |
| 212 | bind = $mod, 2, workspace, 2 |
| 213 | bind = $mod, 3, workspace, 3 |
| 214 | bind = $mod, 4, workspace, 4 |
| 215 | bind = $mod, 5, workspace, 5 |
| 216 | bind = $mod, 6, workspace, 6 |
| 217 | bind = $mod, 7, workspace, 7 |
| 218 | bind = $mod, 8, workspace, 8 |
| 219 | bind = $mod, 9, workspace, 9 |
| 220 | |
| 221 | bind = $mod SHIFT, 1, movetoworkspacesilent, 1 |
| 222 | bind = $mod SHIFT, 2, movetoworkspacesilent, 2 |
| 223 | bind = $mod SHIFT, 3, movetoworkspacesilent, 3 |
| 224 | bind = $mod SHIFT, 4, movetoworkspacesilent, 4 |
| 225 | bind = $mod SHIFT, 5, movetoworkspacesilent, 5 |
| 226 | bind = $mod SHIFT, 6, movetoworkspacesilent, 6 |
| 227 | bind = $mod SHIFT, 7, movetoworkspacesilent, 7 |
| 228 | bind = $mod SHIFT, 8, movetoworkspacesilent, 8 |
| 229 | bind = $mod SHIFT, 9, movetoworkspacesilent, 9 |
| 230 | # }}} |
| 231 | # }}} |