Files
dotfiles/config/hypr/hyprland.conf
T

491 lines
18 KiB
Plaintext

monitor = desc:Lenovo Group Limited 0x41A0, preferred, 0x0, 1.0
monitor = desc:LG Electronics LG HDR 4K 406NTZN74597, preferred, auto-left, 1.333333
monitor = desc:GWD ARZOPA 000000000000, preferred, auto-left, 1.0
monitor = desc:Proteon TYPE-C 8R33926O00QS, preferred, auto-right, 1.0
#monitor = desc:LG Electronics LG HDR WQHD 0x0006530C, 3440x1440@75.05, auto-up, 1.0
monitor = desc:LG Electronics LG HDR WQHD 0x0006530C, preferred, auto-up, 1.0
#monitor = desc:LG Electronics LG HDR WQHD 0x0006530C, preferred, 0x0, 1.0
#monitor = desc:Ancor Communications Inc ASUS MG28U 0x00009B77, 3840x2160@60.00, auto-left, 1.333333
monitor = desc:Ancor Communications Inc ASUS MG28U 0x00009B77, preferred, auto-left, 1.333333
monitor = desc:Stargate Technology TYPE-C, preferred, auto-right, 1.0
monitor = desc:BNQ BenQ EX3501R N4M05650019, preferred, auto-right, 1.0
monitor = desc:Dell Inc. DELL U3818DW 97F8P8AD0HEL, preferred, auto-left, 1.0
monitor = desc:Microstep MSI MAG342CQR DB6H252300057, preferred, auto-right, 1.0
monitor = desc:Ancor Communications Inc ASUS PB238 DCLMTF074371, preferred, auto, 1.0
monitor = eDP-1, highrr, 0x0, 1.0
monitor = desc:BNQ BenQ EX3203R 7CL00509019, preferred, auto, 1.0
monitor = desc:Lenovo Group Limited L15 U133R0A2, preferred, auto-left, 1.0
monitor = desc:Lenovo Group Limited M15 V30F2A15, preferred, auto-left, 1.0
$notifycmd = notify-send
$terminal = uwsm app -- ghostty
$browser = uwsm app -- firefox.desktop
$webapp = uwsm app -- chromium --new-window --ozone-platform=wayland --app
$music = uwsm app -- spotify.desktop
input {
kb_layout = us
kb_variant =
kb_model =
# kb_options = ctrl:nocaps
kb_options = caps:ctrl_modifier,compose:ralt
# kb_options = compose:ralt
follow_mouse = 1
repeat_rate = 40
repeat_delay = 600
touchpad {
natural_scroll = yes
disable_while_typing = true
clickfinger_behavior = true
scroll_factor = 0.7
}
scroll_method = 2
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
}
ecosystem {
no_update_news = true
}
general {
gaps_in = 0
gaps_out = 0
border_size = 2
allow_tearing = true
snap {
enabled = true
}
col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
col.inactive_border = rgba(595959aa)
layout = master
}
master {
allow_small_split = true
mfact = 0.50
new_status = master
}
dwindle {
pseudotile = yes
preserve_split = yes
smart_split = no
force_split = 2
# single_window_aspect_ratio = 1 1
}
decoration {
rounding = 3
active_opacity = 1.0
inactive_opacity = 1.0
dim_inactive = false
dim_special = 0.0
dim_strength = 0.2
shadow {
enabled = false
range = 2
render_power = 3
color = rgba(1a1a1aee)
}
blur {
enabled = false
size = 3
passes = 1
vibrancy = 0.1696
}
}
group {
groupbar {
enabled = false
}
}
misc {
disable_hyprland_logo = true
disable_splash_rendering = true
focus_on_activate = true
mouse_move_enables_dpms = true
animate_manual_resizes = true
mouse_move_focuses_monitor = true
enable_swallow = true
enable_anr_dialog = false
force_default_wallpaper = true
vfr = true
}
xwayland {
force_zero_scaling = true
}
animations {
enabled = yes
#animation = borderangle, 1, 50, linear, loop
bezier = generic, 0.05, 0.9, 0.1, 1.08
bezier = almostLinear,0.5,0.5,0.75,1.0
bezier = quick,0.15,0,0.1,1
animation = windows, 1, 3, almostLinear
animation = windowsOut, 1, 3, quick
animation = windowsIn, 1, 3, quick
animation = border, 1, 10, generic
animation = fade, 1, 3, almostLinear
animation = workspaces, 1, 1, quick
animation = layers, 1, 3, quick
}
bindd = SUPER, return, Tmux Terminal, exec, $terminal -e tmux new -A -s main
bindd = SUPER, B, Browser, exec, $browser
bindd = SUPER, T, Activity, exec, $terminal -e btop
bindd = SUPER, S, Finder, exec, uwsm app -- rofi -show recursivebrowser
bindd = SUPER, I, System Status, exec, $notifycmd "$(~/.local/bin/sysinfo)"
bindd = SUPER, slash, Password, exec, ROFI_PASS_BACKEND=wtype ROFI_PASS_CLIPBOARD_BACKEND=wl-clipboard ~/.local/bin/rofi-pass
bindd = SUPER, SPACE, App Launcher, exec, uwsm app -- rofi -show drun
#bindd = SUPER ALT, SPACE, Search Launcher, exec, uwsm app -- rofi -show combi
bind = SUPER SHIFT, SPACE, exec, uwsm app -- ~/.local/bin/hyprland-fetch-client
bind = SUPER CONTROL, SPACE, exec, uwsm app -- ~/.local/bin/hyprland-focus-client
bind = SUPER CONTROL, return, exec, uwsm app -- ~/.local/bin/hyprland-tmux-session
bindd = SUPER CONTROL SHIFT ALT, V, Volume, exec, pavucontrol
bindd = SUPER CONTROL SHIFT ALT, B, Bluetooth, exec, uwsm app blueberry
bindd = SUPER CONTROL SHIFT ALT, semicolon, Update wallpaper, exec, ~/.local/bin/bing-wallpaper
bindd = SUPER CONTROL SHIFT ALT, A, ChatGPT, exec, $webapp="https://chatgpt.com"
bindd = SUPER CONTROL SHIFT ALT, C, Calendar, exec, $webapp="https://outlook.office.com/calendar/view/month"
bindd = SUPER CONTROL SHIFT ALT, E, Email, exec, $webapp="https://outlook.office.com/mail"
bindd = SUPER CONTROL SHIFT ALT, U, UWO Team, exec, $webapp="https://teams.microsoft.com/v2/"
bindd = SUPER CONTROL SHIFT ALT, Y, YouTube, exec, $webapp="https://youtube.com/"
bindd = SUPER CONTROL SHIFT ALT, W, WhatsApp, exec, $webapp="https://web.whatsapp.com/"
bindd = SUPER CONTROL SHIFT ALT, G, Google, exec, $webapp="https://www.gmail.com/"
bindd = SUPER CONTROL SHIFT ALT, M, Music, exec, $music
bindd = SUPER CONTROL SHIFT ALT, F, File manager, exec, uwsm app -- pcmanfm
bindd = SUPER, F, Force full screen, fullscreen, 0
bindd = SUPER CTRL, F, Tiled full screen, fullscreenstate, 0 2
bindd = SUPER ALT, F, Full width, fullscreen, 1
bindd = SUPER, W, Close active window, killactive,
bindd = SUPER, P, Pseudo window, pseudo, # dwindle
bindd = SUPER, V, Toggle floating, togglefloating,
bindd = SUPER, X, Toggle split, togglesplit, # dwindle
bindd = SUPER, A, Bring active to top, alterzorder, top
bindd = SUPER, left, Move focus left, movefocus, l
bindd = SUPER, right, Move focus right, movefocus, r
bindd = SUPER, up, Move focus up, movefocus, u
bindd = SUPER, down, Move focus down, movefocus, d
# Move focus with mainMod + arrow keys
bind = SUPER, H, movefocus, l
bind = SUPER, L, movefocus, r
bind = SUPER, K, movefocus, u
bind = SUPER, J, movefocus, d
# Swap active window with the one next to it with SUPER + SHIFT + arrow keys
bindd = SUPER SHIFT, left, Swap window to the left, swapwindow, l
bindd = SUPER SHIFT, right, Swap window to the right, swapwindow, r
bindd = SUPER SHIFT, up, Swap window up, swapwindow, u
bindd = SUPER SHIFT, down, Swap window down, swapwindow, d
# Move focus with mainMod + arrow keys
bind = SUPER SHIFT, H, swapwindow, l
bind = SUPER SHIFT, L, swapwindow, r
bind = SUPER SHIFT, K, swapwindow, u
bind = SUPER SHIFT, J, swapwindow, d
# Monitor and windows
bind = SUPER SHIFT, period, movewindow, mon:+1
bind = SUPER SHIFT, comma, movewindow, mon:-1
bind = SUPER CONTROL, period, movecurrentworkspacetomonitor, +1
bind = SUPER CONTROL, comma, movecurrentworkspacetomonitor, -1
bindd = SUPER, z, Focus on last, focuscurrentorlast
# Move focus with SUPER + arrow keys
bind = SUPER ALT, period, swapnext
bind = SUPER ALT, comma, swapnext, prev
# Cycle through applications on active workspace
bindd = ALT, Tab, Cycle to next window, cyclenext
bindd = ALT, Tab, Reveal active window on top, alterzorder, top
bind = SUPER ALT, Tab, focusworkspaceoncurrentmonitor, previous
# cycle monitors
bind = SUPER, Tab, focusmonitor, +1
bind = SUPER, Tab, exec, $notifycmd "$(~/.local/bin/active-workspace)"
# arrange split ratio
bind = SUPER, minus, layoutmsg, mfact exact 0.3
bind = SUPER SHIFT, equal, layoutmsg, mfact exact 0.7
bind = SUPER, equal, layoutmsg, mfact exact 0.5
bind = SUPER, period, layoutmsg, cyclenext
bind = SUPER, period, layoutmsg, move +col
bind = SUPER, comma, layoutmsg, cycleprev
bind = SUPER, comma, layoutmsg, move -col
bind = SUPER, M, layoutmsg, swapwithmaster
#bind = SUPER, M, layoutmsg, rollnext
# Change Workspace Mode
bind = SUPER SHIFT, X, workspaceopt, allfloat
bind = SUPER SHIFT, X, exec, $notifycmd "Toggled All Float Mode"
bind = SUPER SHIFT, Z, workspaceopt, allpseudo
bind = SUPER SHIFT, Z, exec, $notifycmd "Toggled All Pseudo Mode"
bind = SUPER, semicolon, togglespecialworkspace
bind = SUPER, semicolon, exec, $notifycmd "Toggled Special Workspace"
bind = SUPER SHIFT, semicolon, movetoworkspacesilent, special
bind = SUPER, C, centerwindow
bind = SUPER SHIFT CONTROL ALT, Z, submap,passthru
submap = passthru
bind = SUPER, Escape,submap,reset
submap = reset
bind = SUPER, Escape, exec, loginctl lock-session
bind = SUPER SHIFT, Escape, exec, systemctl suspend
bind = SUPER ALT, Escape, exec, uwsm stop,
bind = SUPER CTRL, Escape, exec, reboot
bind = SUPER SHIFT CTRL, Escape, exec, systemctl poweroff
bind = SUPER, Y, exec, makoctl dismiss
bind = SUPER, F10, exec, $notifycmd "System Menu"
bind = SUPER, F10, submap, wmmenu
submap = wmmenu
bind = , Q, exit,
bind = , S, exec, makoctl -a do-not-disturb
bind = , N, exec, makoctl -r do-not-disturb
bind = , M, exec, hyprland-toggle-monitor eDP-1
bind = , escape, exec, $notifycmd "Leaving System Menu"
bind = , escape, submap, reset
submap = reset
# window resize
bind = SUPER, F9, exec, $notifycmd "Window Menu"
bind = SUPER, F9, submap, resize
submap = resize
binde = , period, resizeactive, 10 10
binde = , comma, resizeactive, -10 -10
bind = , r, resizeactive, exact 50% 50%
bind = , s, resizeactive, exact 25% 25%
bind = , c, centerwindow, 0 10
bind = , p, pin
bind = , up, movewindow, u
bind = , down, movewindow, d
bind = , left, movewindow, l
bind = , right, movewindow, r
bind = , escape, exec, $notifycmd "Leaving Window Menu"
bind = , escape, submap, reset
submap = reset
# Switch workspaces with SUPER + [0-9]
bindd = SUPER CONTROL, code:10, Switch to workspace 1, workspace, 1
bindd = SUPER CONTROL, code:11, Switch to workspace 2, workspace, 2
bindd = SUPER CONTROL, code:12, Switch to workspace 3, workspace, 3
bindd = SUPER CONTROL, code:13, Switch to workspace 4, workspace, 4
bindd = SUPER CONTROL, code:14, Switch to workspace 5, workspace, 5
bindd = SUPER CONTROL, code:15, Switch to workspace 6, workspace, 6
bindd = SUPER CONTROL, code:16, Switch to workspace 7, workspace, 7
bindd = SUPER CONTROL, code:17, Switch to workspace 8, workspace, 8
bindd = SUPER CONTROL, code:18, Switch to workspace 9, workspace, 9
bindd = SUPER CONTROL, code:19, Switch to workspace 10, workspace, 10
# Switch workspaces with SUPER + [0-9]
bindd = SUPER, code:10, Switch to workspace 1, focusworkspaceoncurrentmonitor, 1
bindd = SUPER, code:11, Switch to workspace 2, focusworkspaceoncurrentmonitor, 2
bindd = SUPER, code:12, Switch to workspace 3, focusworkspaceoncurrentmonitor, 3
bindd = SUPER, code:13, Switch to workspace 4, focusworkspaceoncurrentmonitor, 4
bindd = SUPER, code:14, Switch to workspace 5, focusworkspaceoncurrentmonitor, 5
bindd = SUPER, code:15, Switch to workspace 6, focusworkspaceoncurrentmonitor, 6
bindd = SUPER, code:16, Switch to workspace 7, focusworkspaceoncurrentmonitor, 7
bindd = SUPER, code:17, Switch to workspace 8, focusworkspaceoncurrentmonitor, 8
bindd = SUPER, code:18, Switch to workspace 9, focusworkspaceoncurrentmonitor, 9
bindd = SUPER, code:19, Switch to workspace 10, focusworkspaceoncurrentmonitor, 10
# Move active window to a workspace with SUPER + SHIFT + [0-9]
bindd = SUPER SHIFT, code:10, Move window to workspace 1, movetoworkspace, 1
bindd = SUPER SHIFT, code:11, Move window to workspace 2, movetoworkspace, 2
bindd = SUPER SHIFT, code:12, Move window to workspace 3, movetoworkspace, 3
bindd = SUPER SHIFT, code:13, Move window to workspace 4, movetoworkspace, 4
bindd = SUPER SHIFT, code:14, Move window to workspace 5, movetoworkspace, 5
bindd = SUPER SHIFT, code:15, Move window to workspace 6, movetoworkspace, 6
bindd = SUPER SHIFT, code:16, Move window to workspace 7, movetoworkspace, 7
bindd = SUPER SHIFT, code:17, Move window to workspace 8, movetoworkspace, 8
bindd = SUPER SHIFT, code:18, Move window to workspace 9, movetoworkspace, 9
bindd = SUPER SHIFT, code:19, Move window to workspace 10, movetoworkspace, 10
# Screenshots
bind = , PRINT, exec, hyprshot -m region
bind = SHIFT, PRINT, exec, hyprshot -m window
bind = CTRL, PRINT, exec, hyprshot -m output
# Color picker
bind = SUPER, PRINT, exec, pkill hyprpicker || hyprpicker -a
# media controls
bindl = , XF86AudioMedia, exec, playerctl play-pause
bindl = , XF86AudioPlay, exec, playerctl play-pause
bindl = , XF86AudioPrev, exec, playerctl previous
bindl = , XF86AudioNext, exec, playerctl next
bindle = ,XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
bindle = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
bindl = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bindle = ,XF86MonBrightnessUp, exec, brightnessctl s 10%+
bindle = ,XF86MonBrightnessDown, exec,brightnessctl s 10%-
# Scroll through existing workspaces with SUPER + scroll
bindd = SUPER, mouse_down, Scroll active workspace forward, workspace, e+1
bindd = SUPER, mouse_up, Scroll active workspace backward, workspace, e-1
# Move/resize windows with SUPER + LMB/RMB and dragging
bindmd = SUPER, mouse:272, Move window, movewindow
bindmd = SUPER, mouse:273, Resize window, resizewindow
# Workspace rules
workspace = w[tv1], gapsout:0, gapsin:0
workspace = f[1], gapsout:0, gapsin:0
workspace = special:special, bordersize:3
windowrule = border_size 2, rounding 0, match:float 0, match:workspace w[tv1]
windowrule = border_size 2, rounding 0, match:float 0, match:workspace f[1]
# Define terminal tag to style them uniformly
windowrule = tag +terminal, match:class (Alacritty|kitty|com.mitchellh.ghostty)
windowrule = scroll_touchpad 1.5, match:class (Alacritty|kitty)
windowrule = scroll_touchpad 0.2, match:class com.mitchellh.ghostty
# Picture-in-picture overlays
windowrule = tag +pip, match:title (Picture.?in.?[Pp]icture)
windowrule = float on, pin on, size 600 338, keep_aspect_ratio on, border_size 0, opacity 1 1, move ((monitor_w*1)-window_w-40) ((monitor_h*0.04)), match:tag pip
windowrule = no_shadow on, match:float 0
# Floating windows
windowrule = float on, center on, size 800 600, match:tag floating-window
windowrule = tag +floating-window, match:class (blueberry.py|Impala|Wiremix|org.gnome.NautilusPreviewer|com.gabm.satty|Omarchy|About|TUI.float)
windowrule = tag +floating-window, match:class (xdg-desktop-portal-gtk|sublime_text|DesktopEditors), match:title ^(Open.*Files?|Save.*Files?|Save.*As|All Files|Save)
# Browser types
windowrule = tag +chromium-based-browser, match:class ([cC]hrom(e|ium)|[bB]rave-browser|Microsoft-edge|Vivaldi-stable)
windowrule = tag +firefox-based-browser, match:class (Firefox|zen|librewolf)
# Force chromium-based browsers into a tile to deal with --app bug
windowrule = tile on, match:tag chromium-based-browser
# Some video sites should never have opacity applied to them
# windowrule = opacity 1.0 1.0, match:initial_title (youtube\.com_/|app\.zoom\.us_/wc/home)
# No transparency on media windows
# windowrule = opacity 1 1, match:class ^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject.Studio|com.github.PintaProject.Pinta|imv|org.gnome.NautilusPreviewer)$
# Only a subtle opacity change, but not for video sites
# windowrule = opacity 1 0.97, match:tag chromium-based-browser
# windowrule = opacity 1 0.97, match:tag firefox-based-browser
windowrule = float on, size 1024 480, match:class (org.pulseaudio.pavucontrol)
# telegram media viewer
windowrule = float on, match:title ^(Media viewer)$
layerrule = no_anim on, match:namespace rofi
layerrule = no_anim on, match:namespace walker
windowrule = stay_focused on, match:class (rofi)
windowrule = stay_focused on, match:class (walker)
windowrule = stay_focused on, match:class ^(pinentry-) # fix pinentry losing focus
windowrule = dim_around on, stay_focused on, match:class ^(gcr-prompter)$
# Remove 1px border around hyprshot screenshots
layerrule = no_anim on, match:namespace selection
# idle inhibit while watching videos
windowrule = idle_inhibit focus, match:class ^(mpv|.+exe)$
windowrule = idle_inhibit focus, match:class ^(firefox)$, match:title ^(.*YouTube.*)$
windowrule = idle_inhibit fullscreen, match:class ^(firefox)$
windowrule = pseudo on, match:workspace w[-99]
layerrule = blur on, ignore_alpha 0, match:namespace ^(gtk-layer-shell|anyrun)$
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
windowrule = suppress_event maximize, match:class .*
# Fix some dragging issues with XWayland
windowrule = no_focus on, match:class ^$, match:title ^$, match:xwayland 1, match:float 1, match:fullscreen 0, match:pin 0
windowrule {
name = windowrule-28
no_focus = on
match:class = ^$
match:title = ^$
match:xwayland = 1
match:float = 1
match:fullscreen = 0
match:pin = 0
}
# Some default env vars.
# Cursor size
env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24
# Force all apps to use Wayland
env = GDK_BACKEND,wayland,x11,*
env = QT_QPA_PLATFORM,wayland;xcb
env = QT_STYLE_OVERRIDE,kvantum
env = SDL_VIDEODRIVER,wayland
env = MOZ_ENABLE_WAYLAND,1
env = ELECTRON_OZONE_PLATFORM_HINT,wayland
env = OZONE_PLATFORM,wayland
env = XDG_SESSION_TYPE,wayland
# Allow better support for screen sharing (Google Meet, Discord, etc)
env = XDG_CURRENT_DESKTOP,Hyprland
env = XDG_SESSION_DESKTOP,Hyprland
# Use XCompose file
env = XCOMPOSEFILE,~/.XCompose
# Make Chromium use XCompose and all Wayland
env = CHROMIUM_FLAGS,"--enable-features=UseOzonePlatform --ozone-platform=wayland --gtk-version=4"
# Make .desktop files available for wofi
env = XDG_DATA_DIRS,/usr/share:/usr/local/share:~/.local/share
# Source a file (multi-file configs)
source = $HOME/.local/share/themes/current/theme/hyprland.conf
exec-once = dbus-update-activation-environment --systemd --all
exec-once = systemctl --user start hyprpolkitagent
exec-once = hyprctl setcursor Pop 24
exec-once = uwsm app -- hypridle
exec-once = uwsm app -- mako
exec-once = uwsm app -- fcitx5
exec-once = uwsm app -- udiskie -a -n -T &
exec-once = uwsm app -- swww-daemon
exec-once = gnome-keyring-daemon --replace --daemonize --components=pkcs11,secrets,gpg
# exec-once = systemctl --user import-environment $(env | cut -d'=' -f 1)
exec-once = systemctl --user import-environment DISPLAY WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_TYPE XDG_RUNTIME_DIR DBUS_SESSION_BUS_ADDRESS LANG PATH