Hyprland and Hyprland-related configuration files
Table of Contents
This is my hyprland configuration alongside with other configuration for various applications I use.
Hyprland
~/.config/hypr/hypland.conf
Modular Configuration
source = ./hypr.d/variables.conf source = ./hypr.d/general.conf source = ./hypr.d/workspaces.conf source = ./hypr.d/keybindings.conf source = ./hypr.d/decorations.conf source = ./hypr.d/animation.conf source = ./hypr.d/autostart.conf source = ./hypr.d/input.conf source = ./hypr.d/devices.conf source = ./hypr.d/groups.conf source = ./hypr.d/misc.conf source = ./hypr.d/binds.conf source = ./hypr.d/xwayland.conf source = ./hypr.d/ecosystem.conf source = ./hypr.d/cursor.conf source = ./hypr.d/dwindle.conf source = ./hypr.d/master.conf source = ./hypr.d/gestures.conf source = ./hypr.d/windowrule.conf source = ./hypr.d/layerrule.conf
variables
$terminal = kitty $fileManager = thunar $menu = wofi --show drun $editor = emacsclient -c -a emacs $editor_term = emacsclient -t -a "" $mail = thunderbird $browser = firefox $mainMod = SUPER # Sets "Windows" key as main modifier env = QT_QPA_PLATFORM,wayland;xcb env = QT_QPA_PLATFORMTHEME,qt5ct # change to qt6ct if you have that env = QT_AUTO_SCREEN_SCALE_FACTOR,1 env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1 env = SDL_VIDEODRIVER,wayland env = CLUTTER_BACKEND,wayland env = GTK_THEME,Breeze-Dark env = GTK2_RC_FILES,/usr/share/themes/Breeze-Dark/gtk-2.0 env = XCURSOR_THEME,Bibata-Modern-Classic env = XCURSOR_SIZE,24 env = HYPRCURSOR_THEME,Bibata-Modern-Classic env = HYPRCURSOR_SIZE,24 env = XDG_SESSION_DESKTOP,Hyprland env = GDK_BACKEND,wayland,x11,*
- wallpapers
$w1 = hyprctl hyprpaper wallpaper ",~/.local/share/wallpapers/nord/Minimal-Nord.png" $w2 = hyprctl hyprpaper wallpaper ",~/.local/share/wallpapers/nord/linux-friends-4k.png" $w3 = hyprctl hyprpaper wallpaper ",~/.local/share/wallpapers/nord/nord_buildings.png" $w4 = hyprctl hyprpaper wallpaper ",~/.local/share/wallpapers/nord/keyboard.png" $w5 = hyprctl hyprpaper wallpaper ",~/.local/share/wallpapers/nord/nord_lake.png" $w6 = hyprctl hyprpaper wallpaper ",~/.local/share/wallpapers/nord/nord_alone_tree.png" $w7 = hyprctl hyprpaper wallpaper ",~/.local/share/wallpapers/nord/nord_mountains.png" $w8 = hyprctl hyprpaper wallpaper ",~/.local/share/wallpapers/nord/wild.png" $w9 = hyprctl hyprpaper wallpaper ",~/.local/share/wallpapers/nord/nord_space.png" $w10 = hyprctl hyprpaper wallpaper ",~/.local/share/wallpapers/nord/nord_valley.png"
- colors
$color00 = rgba(46,52,64,1) $color01 = rgba(59,66,82,1) $color02 = rgba(67,76,94,1) $color03 = rgba(76,86,106,1) $color04 = rgba(216,222,233,1) $color05 = rgba(229,233,240,1) $color06 = rgba(236,239,244,1) $color07 = rgba(143,188,187,1) $color08 = rgba(136,192,208,1) $color09 = rgba(129,161,193,1) $color10 = rgba(94,129,172,1) $color11 = rgba(191,97,106,1) $color12 = rgba(208,135,112,1) $color13 = rgba(235,203,139,1) $color14 = rgba(163,190,140,1) $color15 = rgba(180,142,173,1)
general
general { gaps_in = 5 gaps_out = 10,20,10,20 float_gaps = 0 gaps_workspaces = 0 no_focus_fallback = false resize_on_border = false border_size = 2 allow_tearing = false layout = dwindle col.active_border = $color08 $color13 45deg col.inactive_border = $color04 $color00 45deg col.nogroup_border = $color09 $color08 45deg col.nogroup_border_active = $color14 $color15 45deg snap { enabled = true window_gap = 10 monitor_gap = 10 border_overlap = false respect_gaps = true } }
workspaces
- normal workspaces
These workspaces are just standard workspaces, the way I set them is to have dedicated workspaces for each applications, such as web browsers, terminal emulators, etc.
workspace = 1, name:terminal workspace = 2, name:code workspace = 3, name:web workspace = 4, name:mail workspace = 5, name:file workspace = 6, name:office workspace = 7, name:messaging workspace = 8, name:media workspace = 9, name:remote workspace = 10, name:games
- special workspaces
In other window managers, a special workspace is often called scratchpad. The difference is in Hyprland we can have up to 97 of them, each with different names. The way I use it is to have one special workspace for an application, usually one that needs to always run in the background, like a music player, calculator and other. What I like from Hyprland (though I'm sure other WM also have), is the ability to only start the application when the workspace is opened. See the keybindings section for the detail.
workspace = special:music, on-created-empty:[tiled] $terminal --class ncmpcpp -e ncmpcpp workspace = special:khal, on-created-empty:[tiled] $terminal --class khal -e khal interactive workspace = special:proc, on-created-empty:[tiled] $terminal --class htop -e htop workspace = special:emacs, on-created-empty:[tiled] $terminal --class emacsclient -e $editor_term workspace = special:dired, on-created-empty:[tiled] $terminal --class emacsclient -e $editor_term -e '(dired (getenv "HOME"))' workspace = special:keys, on-created-empty:[float] showmethekey-gtk workspace = special:nvim, on-created-empty:$terminal --class vim -e nvim
keybindings
- Application
- lock
bind = $mainMod Alt, Q, exec, hyprlock
- clipboard
bind = $mainMod, C, exec, cliphist list | wofi -dmenu -p "Clipboard:" -theme "hyprland-clipboard" | cliphist decode | wl-copy
- emoji
bind = $mainMod, Comma, exec, wofi-emoji
- symbol
bind = $mainMod, Period, exec, wofi-symbol
- pwvucontrol
bind = $mainMod, V, exec, pwvucontrol
- easyeffects
bind = $mainMod Alt, V, exec, easyeffects
- editor
bind = $mainMod Alt, N, exec, $editor
- pass
bind = $mainMod Alt, P, exec, wofi-pass
- calculator
bind = $mainMod Alt, C, exec, wofi-calc
- browser
bind = $mainMod Alt, f, exec, $browser
- tesseract
bind = SuperShift,T,exec,grim -g "$(slurp -d -c D1E5F4BB -b 1B232866 -s 00000000)" "tmp.png" && tesseract -l eng "tmp.png" - | wl-copy && rm "tmp.png"
- file manager
bind = $mainMod, E, exec, $fileManager
- terminal
bind = $mainMod, Return, exec, $terminal bind = $mainMod Shift, Return, exec, $terminal -e tmux new -A -s main
- wofi-power-menu
bind = $mainMod, Q, exec, wofi-power-menu
- menu
bind = $mainMod, D, exec, $menu
- window
# Move focus with mainMod + arrow keys bind = $mainMod, left, movefocus, l bind = $mainMod, right, movefocus, r bind = $mainMod, up, movefocus, u bind = $mainMod, down, movefocus, d bind = $mainMod, h, movefocus, l bind = $mainMod, l, movefocus, r bind = $mainMod, k, movefocus, u bind = $mainMod, j, movefocus, d bind = $mainMod, F, fullscreen, 0 bind = $mainMod Shift, F, fullscreen, 1 bind = $mainMod Control, F, fullscreenstate, -1 -1 bind = $mainMod, Space, togglefloating, # resize binde = $mainMod Control, H, resizeactive, -10 0 binde = $mainMod Control, J, resizeactive, 0 10 binde = $mainMod Control, K, resizeactive, 0 -10 binde = $mainMod Control, L, resizeactive, 10 0 binde = $mainMod Control, left, resizeactive, -10 0 binde = $mainMod Control, down, resizeactive, 0 10 binde = $mainMod Control, up, resizeactive, 0 -10 binde = $mainMod Control, right, resizeactive, 10 0 # move window bind = $mainMod Shift, H, movewindow, l bind = $mainMod Shift, J, movewindow, d bind = $mainMod Shift, K, movewindow, u bind = $mainMod Shift, L, movewindow, r # Window split ratio binde = Super, Minus, splitratio, -0.1 binde = Super, Equal, splitratio, 0.1 binde = Super, Semicolon, splitratio, -0.1 binde = Super, Apostrophe, splitratio, 0.1
- workspaces
# Switch workspaces with mainMod + [0-9] bind = $mainMod, 1, workspace, 1 bind = $mainMod, 1, exec, $w1 bind = $mainMod, 2, workspace, 2 bind = $mainMod, 2, exec, $w2 bind = $mainMod, 3, workspace, 3 bind = $mainMod, 3, exec, $w3 bind = $mainMod, 4, workspace, 4 bind = $mainMod, 4, exec, $w4 bind = $mainMod, 5, workspace, 5 bind = $mainMod, 5, exec, $w5 bind = $mainMod, 6, workspace, 6 bind = $mainMod, 6, exec, $w6 bind = $mainMod, 7, workspace, 7 bind = $mainMod, 7, exec, $w7 bind = $mainMod, 8, workspace, 8 bind = $mainMod, 8, exec, $w8 bind = $mainMod, 9, workspace, 9 bind = $mainMod, 9, exec, $w9 bind = $mainMod, 0, workspace, 10 bind = $mainMod, 0, exec, $w10 bind = $mainMod, TAB, workspace, previous # Move active window to a workspace with mainMod + SHIFT + [0-9] bind = $mainMod SHIFT, 1, movetoworkspace, 1 bind = $mainMod SHIFT, 2, movetoworkspace, 2 bind = $mainMod SHIFT, 3, movetoworkspace, 3 bind = $mainMod SHIFT, 4, movetoworkspace, 4 bind = $mainMod SHIFT, 5, movetoworkspace, 5 bind = $mainMod SHIFT, 6, movetoworkspace, 6 bind = $mainMod SHIFT, 7, movetoworkspace, 7 bind = $mainMod SHIFT, 8, movetoworkspace, 8 bind = $mainMod SHIFT, 9, movetoworkspace, 9 bind = $mainMod SHIFT, 0, movetoworkspace, 10 bind = $mainMod SHIFT, TAB, movetoworkspace, previous
- workspaces with mouse
# Scroll through existing workspaces with mainMod + scroll bind = $mainMod, mouse_down, workspace, e+1 bind = $mainMod, mouse_up, workspace, e-1 # Move/resize windows with mainMod + LMB/RMB and dragging bindm = $mainMod, mouse:272, movewindow bindm = $mainMod, mouse:273, resizewindow
- workspaces with mouse
- monitor
bind = $mainMod Alt, H, focusmonitor, l bind = $mainMod Alt, J, focusmonitor, d bind = $mainMod Alt, K, focusmonitor, u bind = $mainMod Alt, L, focusmonitor, r
bind = $mainMod Control, H, movecurrentworkspacetomonitor, l bind = $mainMod Control, J, movecurrentworkspacetomonitor, d bind = $mainMod Control, K, movecurrentworkspacetomonitor, u bind = $mainMod Control, L, movecurrentworkspacetomonitor, r
- laptops
# lid switch # trigger when the switch is toggled bindl=,switch:Lid Switch,exec,hyprlock # trigger when the switch is turning on #bindl=,switch:on:[switch name],exec,hyprctl keyword monitor ", 2560x1600, 0x0, 1" # trigger when the switch is turning off #bindl=,switch:off:[switch name],exec,hyprctl keyword monitor ", disable"
- special workspaces
- groups
bind = $mainMod, bracketleft, changegroupactive, b bind = $mainMod, bracketright, changegroupactive, f bind = $mainMod, T, togglegroup bind = $mainMod, G, submap, group submap = group bind = , T, togglegroup bind = $mainMod Control, F, changegroupactive, f bind = $mainMod Control, B, changegroupactive, b bind = $mainMod, bracketleft, changegroupactive, b bind = $mainMod, bracketright, changegroupactive, f # bind = $mainMod Alt, L, lockactivegroup bind = $mainMod, G, lockgroups, toggle bind = $mainMod Alt, G, lockactivegroup, toggle bind = $mainMod Shift, left, moveintogroup, l bind = $mainMod Shift, right, moveintogroup, r bind = $mainMod Shift, up, moveintogroup, u bind = $mainMod Shift, down, moveintogroup, d bind = $mainMod Shift, H, moveintogroup, l bind = $mainMod Shift, L, moveintogroup, r bind = $mainMod Shift, K, moveintogroup, u bind = $mainMod Shift, J, moveintogroup, d bind = $mainMod Control, left, moveoutofgroup, l bind = $mainMod Control, right, moveoutofgroup, r bind = $mainMod Control, up, moveoutofgroup, u bind = $mainMod Control, down, moveoutofgroup, d bind = $mainMod Control, H, moveoutofgroup, l bind = $mainMod Control, L, moveoutofgroup, r bind = $mainMod Control, K, moveoutofgroup, u bind = $mainMod Control, J, moveoutofgroup, d bind = $mainMod, left, movefocus, l bind = $mainMod, right, movefocus, r bind = $mainMod, up, movefocus, u bind = $mainMod, down, movefocus, d bind = $mainMod, H, movefocus, l bind = $mainMod, L, movefocus, r bind = $mainMod, K, movefocus, u bind = $mainMod, J, movefocus, d bind = , escape, submap, reset bind = Control, G, submap, reset submap = reset bind = $mainMod Control, F, changegroupactive, f bind = $mainMod Control, B, changegroupactive, b
- multimedia keys
# Laptop multimedia keys for volume and LCD brightness bindel = , XF86AudioRaiseVolume, exec, ~/.local/bin/dunst-volume -i 1 bindel = , XF86AudioLowerVolume, exec, ~/.local/bin/dunst-volume -d 1 bindel = , XF86AudioMute, exec, ~/.local/bin/dunst-volume -t bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle binde = , XF86MonBrightnessUp, exec, ~/.local/bin/dunst-backlight +1% binde = , XF86MonBrightnessDown, exec, ~/.local/bin/dunst-backlight 1%- # Requires playerctl bindl = , XF86AudioNext, exec, playerctl next bindl = , XF86AudioPause, exec, playerctl play-pause bindl = , XF86AudioPlay, exec, playerctl play-pause bindl = , XF86AudioPrev, exec, playerctl previous
- For keyboard with no multimedia keys
bindel = $mainMod, F9, exec, ~/.local/bin/dunst-volume -i 1 # volume up bindel = $mainMod, F8, exec, ~/.local/bin/dunst-volume -d 1 # volume down bindel = $mainMod, F7, exec, ~/.local/bin/dunst-volume -t # volume toggle binde = $mainMod Shift, F3, exec, ~/.local/bin/dunst-backlight +1% # brightness increase binde = $mainMod Shift, F2, exec, ~/.local/bin/dunst-backlight 1%- # brightness decrease binde = $mainMod Control, Up, exec, playerctl play-pause bindel = $mainMod, F11, exec, playerctl play-pause bind = $mainMod Control, Down, exec, playerctl stop bindel = $mainMod Control, Right, exec, playerctl next bindel = $mainMod, F12, exec, playerctl next bindel = $mainMod Control, Left, exec, playerctl previous bindel = $mainMod, F10, exec, playerctl previous
- Screenshot
All the screenshot functionalities provided by
grimshot
and will save the output to a file but also save it into the copy ring.bind = , Print, exec, grimshot --notify savecopy area "$(echo ~/Pictures/Screenshots/Screenshot1-$(date +'%Y%m%d_%H%M%S').png)" bind = Control, Print, exec, grimshot --notify savecopy area "$(echo ~/Pictures/Screenshots/Screenshot1-$(date +'%Y%m%d_%H%M%S').png)" bind = Alt, Print, exec, grimshot --notify savecopy window "$(echo ~/Pictures/Screenshots/Screenshot1-$(date +'%Y%m%d_%H%M%S').png)" bind = $mainMod Shift, S, exec, grimshot --notify savecopy area "$(echo ~/Pictures/Screenshots/Screenshot1-$(date +'%Y%m%d_%H%M%S').png)"
- dunst
bind = $mainMod Alt, grave, exec, dunstctl history-pop bind = $mainMod SHIFT, grave, exec, dunstctl context bind = $mainMod, grave, exec, dunstctl action bind = $mainMod Control, grave, exec, dunstctl close
- builtin zoom
With mouse
bind = $mainMod Control, mouse_down, exec, hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor -j | jq '.float * 1.1') bind = $mainMod Control, mouse_up, exec, hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor -j | jq '(.float * 0.9) | if . < 1 then 1 else . end')
With keyboard
binde = $mainMod Control, equal, exec, hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor -j | jq '.float * 1.1') binde = $mainMod Control, minus, exec, hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor -j | jq '(.float * 0.9) | if . < 1 then 1 else . end') binde = $mainMod Control, KP_ADD, exec, hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor -j | jq '.float * 1.1') binde = $mainMod Control, KP_SUBTRACT, exec, hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor -j | jq '(.float * 0.9) | if . < 1 then 1 else . end')
- set opacity
binde = $mainMod, F2, exec, ~/.local/bin/hypr-set-opacicty --decrease binde = $mainMod, F3, exec, ~/.local/bin/hypr-set-opacicty --increase
decorations
decoration { rounding = 5 rounding_power = 2.0 active_opacity = 0.95 inactive_opacity = 0.85 fullscreen_opacity = 1.0 dim_modal = true dim_inactive = true dim_strength = 0.4 dim_special = 0.3 dim_around = 0.4 border_part_of_window = true blur { enabled = true size = 8 passes = 1 ignore_opacity = true new_optimizations = true xray = false noise = 0.0117 contrast = 0.8916 brightness = 0.8172 vibrancy = 0.1696 vibrancy_darkness = 0.0 special = false popups = false popups_ignorealpha = 0.2 input_methods = false input_methods_ignorealpha = 0.2 } shadow { enabled = true range = 4 render_power = 3 sharp = false ignore_window = true color = 0xee1a1a1a offset = 0.0 0.0 scale = 1.0 } }
animation
animations { enabled = true workspace_wraparound = false bezier = linear, 0, 0, 1, 1 bezier = md3_standard, 0.2, 0, 0, 1 bezier = md3_decel, 0.05, 0.7, 0.1, 1 bezier = md3_accel, 0.3, 0, 0.8, 0.15 bezier = overshot, 0.05, 0.9, 0.1, 1.1 bezier = crazyshot, 0.1, 1.5, 0.76, 0.92 bezier = hyprnostretch, 0.05, 0.9, 0.1, 1.0 bezier = menu_decel, 0.1, 1, 0, 1 bezier = menu_accel, 0.38, 0.04, 1, 0.07 bezier = easeInOutCirc, 0.85, 0, 0.15, 1 bezier = easeOutCirc, 0, 0.55, 0.45, 1 bezier = easeOutExpo, 0.16, 1, 0.3, 1 bezier = softAcDecel, 0.26, 0.26, 0.15, 1 bezier = md2, 0.4, 0, 0.2, 1 # use with .2s duration bezier = easeInCirc, 0.55, 0, 1, 0.45 animation = windows, 1, 3, md3_decel, popin 60% animation = windowsIn, 1, 3, md3_decel, popin 60% animation = windowsOut, 1, 3, md3_accel, popin 60% animation = border, 1, 10, default animation = fade, 1, 3, md3_decel animation = layersIn, 1, 3, menu_decel, slide animation = layersOut, 1, 1.6, menu_accel animation = fadeLayersIn, 1, 2, menu_decel animation = fadeLayersOut, 1, 4.5, menu_accel animation = workspaces, 1, 8, menu_decel, slidefade animation = specialWorkspace, 1, 5, md3_decel, slidefadevert }
autostart
exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP QT_QPA_PLATFORMTHEME SSH_AUTH_SOCK exec-once = dbus-update-activation-environment --systemd --all & exec-once = /usr/lib/polkit-kde-authentication-agent-1 & #exec-once = gnome-keyring-daemon --components=pkcs11,secrets,ssh -r -d & exec-once = dunst -conf ~/.config/dunst/dunstrc & exec-once = pgrep hypridle || hypridle exec-once = waybar & exec-once = hyprpaper & exec-once = wl-paste --type text --watch cliphist store & exec-once = wl-paste --type image --watch cliphist store & exec-once = hyprctl setcursor Bibata-Modern-Classic 24 exec-once = hyprpm reload exec-once = hyprshade auto & exec-once = hypridle exec-once = nm-applet --indicator exec-once = /usr/bin/kdeconnectd exec-once = kdeconnect-indicator exec-once = ~/.local/bin/toggleLeds exec-once = hyprctl dispatch togglespecialworkspace music exec-once = sleep 1 && hyprctl dispatch togglespecialworkspace music #exec-once = $terminal --class ncmpcpp -e ncmpcpp; hyprctl dispatch togglespecialworkspace, music
input
input { kb_layout = us numlock_by_default = true }
devices
This fixes my USB keyboard back light button which by default mapped to Scroll Lock
. I don't find other uses for the key so it's only mapped when the specific device connected.
On X11 this can simply achieved using xset leds named "Scroll Lock"
for turning on and xset -leds named "Scroll Lock"
for turning off.
The device name can be found using hyprctl devices
under the Keyboards:
. Or using lsusb
.
device { name = casue-usb-kb kb_options = scrolllock:mod3 numlock_by_default = true }
groups
group { insert_after_current = true focus_removed_window = true col.border_active = $color10 $color09 45deg col.border_inactive = $color03 $color02 45deg col.border_locked_active = $color11 $color12 45deg col.border_locked_inactive = $color12 $color11 45deg drag_into_group = 2 groupbar { enabled = true font_family = "JetBrainsMonoNL Nerd Font Mono 8" font_size = 8 gradients = true height = 12 priority = 3 render_titles = true scrolling = true rounding = 1 rounding_power = 2.0 gradient_rounding = 2 text_color = $color06 col.active = $color10 col.inactive = $color02 $color03 45deg col.locked_active = $color14 $color11 45deg col.locked_inactive = $color14 $color12 45deg } }
misc
misc { # See https://wiki.hyprland.org/Configuring/Variables/ for more vfr = 1 vrr = 3 focus_on_activate = false animate_manual_resizes = true animate_mouse_windowdragging = false enable_swallow = false swallow_regex = (foot|kitty|allacritty|Alacritty) force_default_wallpaper = 0 # Set to 0 or 1 to disable the anime mascot wallpapers disable_hyprland_logo = true disable_splash_rendering = false mouse_move_enables_dpms = true key_press_enables_dpms = true mouse_move_focuses_monitor = true new_window_takes_over_fullscreen = 2 allow_session_lock_restore = true initial_workspace_tracking = false }
binds
binds { workspace_back_and_forth = false allow_workspace_cycles = true scroll_event_delay = 0 }
xwayland
xwayland { enabled = true }
ecosystem
ecosystem { no_update_news = true no_donation_nag = true }
cursor
cursor { inactive_timeout = 2 hide_on_key_press = true }
dwindle
dwindle { # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below preserve_split = true # you probably want this smart_split = false smart_resizing = false }
master
master { # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more }
gestures
gestures { # See https://wiki.hyprland.org/Configuring/Variables/ for more #workspace_swipe = true workspace_swipe_distance = 700 #workspace_swipe_fingers = 3 workspace_swipe_cancel_ratio = 0.2 workspace_swipe_min_speed_to_force = 5 workspace_swipe_direction_lock = true workspace_swipe_direction_lock_threshold = 10 workspace_swipe_create_new = true }
windowrule
- For all windows
windowrule = noblur,class:.* windowrulev2 = suppressevent maximize, class:.* # You'll probably like this. windowrulev2 = opacity 0.99, class:.*
pavucontrol
windowrulev2 = float,class:^(pavucontrol)$ windowrulev2 = size 50%,class:^(pavucontrol)$
pwvucontrol
windowrulev2 = float,class:^(com.saivert.pwvucontrol)$ windowrulev2 = size 50%,class:^(com.saivert.pwvucontrol)$
polkit-kde-agent
windowrulev2 = float,class:(org.kde.polkit-kde-authentication-agent-1) windowrulev2 = center,class:(org.kde.polkit-kde-authentication-agent-1)
blueman
windowrulev2 = float,class:(blueman) windowrulev2 = center,class:(blueman) windowrulev2 = size 50%,class:(blueman)
thunderbird
windowrulev2 = float,class:(thunderbird),title:(status) windowrulev2 = float,class:(thunderbird),title:(.*)(Reminders) windowrulev2 = float,class:(thunderbird),title:(Write:.*) windowrulev2 = float,class:(thunderbird),title:(Send.*) windowrulev2 = float,class:(thunderbird),title:(Inbox.*) windowrulev2 = float,class:(Msgcompose.*) windowrulev2 = float, class:(thunderbird),title(.*)(Reminders)$ windowrulev2 = workspace 4, class:(thunderbird)
firefox
windowrulev2 = idleinhibit always, class:firefox title:(.*)(- YouTube) windowrulev2 = opacity 1, class:firefox title:(.*)(- YouTube)
Qtpass
windowrulev2 = float,class:(QtPass)
zoom
windowrulev2 = float,class:(zoom) windowrulev2 = opacity 1, class:(zoom) windowrulev2 = workspace 10, class:(zoom) windowrulev2 = opacity 1, class:(zoom), title:(Settings) windowrulev2 = opacity 1, class:(zoom), title:(Zoom Meeting)
file-roller
windowrulev2 = float, class:(file-roller) windowrulev2 = float, class:(org.gnome.FileRoller) windowrulev2 = float, title:(Compress)
ncmpcpp
windowrulev2 = float,class:(ncmpcpp) windowrulev2 = center,class:(ncmpcpp) windowrulev2 = size 50%,class:(ncmpcpp) windowrulev2 = workspace special:music,class:(ncmpcpp)
khal
windowrulev2 = float, class:(khal) windowrulev2 = size 40%, class:(khal) windowrulev2 = move onscreen cursor 50% 5%, class:(khal)
astroid
windowrulev2 = workspace 4, class:(astroid) windowrulev2 = maximize, class:(astroid)
vlc
windowrulev2 = workspace 7,class:(vlc) windowrulev2 = opacity 1,class:(vlc) windowrulev2 = idleinhibit always,class:(vlc)
remmina
windowrulev2 = float, workspace 8, class:(org.remmina.Remmina)
libvirt
/virt-manager
windowrulev2 = float, workspace 9, class:(virt-manager), initialTitle:(QEMU/KVM - Connection Details) windowrulev2 = float, workspace 9, class:(virt-manager), initialTitle:(.*on QEMU/KVM)
transmission
windowrulev2 = workspace 8,class:^(com.transmissionbt.transmission).* windowrulev2 = float,title:(Torrent.*)
- dialogs
windowrule=float,title:^(Open File)(.*)$ windowrule=float,title:^(Select a File)(.*)$ windowrule=float,title:^(Choose wallpaper)(.*)$ windowrule=float,title:^(Open Folder)(.*)$ windowrule=float,title:^(Save As)(.*)$ windowrule=float,title:^(Library)(.*)$ windowrule=float,title:^(File Upload)(.*)$
thunar
windowrule = center, title:^(Open File)(.*)$ windowrule = center, title:^(Rename.*)(.*)$ windowrule = center, title:^(Select a File)(.*)$ windowrule = center, title:^(Choose wallpaper)(.*)$ windowrule = center, title:^(Open Folder)(.*)$ windowrule = center, title:^(Save As)(.*)$ windowrule = center, title:^(Library)(.*)$ windowrule = center, title:^(File Upload)(.*)$ windowrulev2 = float, title:(Rename.*) windowrulev2 = float, title:(File Operation Progress) windowrulev2 = float, class:(thunar),title:(Confirm to replace files)
- no tearing
windowrulev2 = noshadow,floating:0
htop
windowrulev2 = float, class:(htop) windowrulev2 = size 100% 40%, class:(htop) windowrulev2 = move 0 40, class:(htop)
nmtui
windowrulev2 = float, class:(nmtui)
vim
windowrulev2 = float, class:(vim) windowrulev2 = maximize, class:(vim)
Emacs
(in terminal mode)
windowrulev2 = maximize, class:(nw-emacs)
showmethekey
windowrulev2 = float, class:(one.alynx.showmethekey), title:(Show Me The Key) windowrulev2 = nofocus, class:(showmethekey-gtk), title:(Floating Window - Show Me The Key) windowrulev2 = opacity 0.4, class:(showmethekey-gtk), title:(Floating Window - Show Me The Key) windowrulev2 = center, class:(showmethekey-gtk), title:(Floating Window - Show Me The Key) windowrulev2 = float, class:(showmethekey-gtk), title:(Floating Window - Show Me The Key) windowrulev2 = pin, class:(showmethekey-gtk), title:(Floating Window - Show Me The Key) windowrulev2 = size 100% 10%, class:(showmethekey-gtk), title:(Floating Window - Show Me The Key) windowrulev2 = move 0 90%, class:(showmethekey-gtk), title:(Floating Window - Show Me The Key)
screenkey
windowrulev2 = float, class:(screenkey)
steam
windowrulev2 = opacity 1, class:(steam) initialTitle:(.*) windowrulev2 = float, class:(steam) initialTitle:(.*) windowrule=immediate,class:.*\.exe windowrulev2=immediate,class:(steam_app)
easyeffect
windowrulev2 = float, title:(Easy Effects) windowrulev2 = size 100% 60%, title:(Easy Effects)
Layer
layerrule = xray 1, .* # layerrule = noanim, .* layerrule = noanim, walker layerrule = noanim, selection layerrule = noanim, overview layerrule = noanim, anyrun layerrule = noanim, indicator.* layerrule = noanim, osk layerrule = noanim, hyprpicker layerrule = blur, shell:* layerrule = ignorealpha 0.6, shell:* layerrule = noanim, noanim layerrule = blur, gtk-layer-shell layerrule = ignorezero, gtk-layer-shell layerrule = blur, launcher layerrule = ignorealpha 0.5, launcher layerrule = blur, notifications layerrule = ignorealpha 0.69, notifications layerrule = animation slide top, sideleft.* layerrule = animation slide top, sideright.* layerrule = blur, session layerrule = blur, bar layerrule = ignorealpha 0.6, bar layerrule = blur, corner.* layerrule = ignorealpha 0.6, corner.* layerrule = blur, dock layerrule = ignorealpha 0.6, dock layerrule = blur, indicator.* layerrule = ignorealpha 0.6, indicator.* layerrule = blur, overview layerrule = ignorealpha 0.6, overview layerrule = blur, cheatsheet layerrule = ignorealpha 0.6, cheatsheet layerrule = blur, sideright layerrule = ignorealpha 0.6, sideright layerrule = blur, sideleft layerrule = ignorealpha 0.6, sideleft layerrule = blur, indicator* layerrule = ignorealpha 0.6, indicator* layerrule = blur, osk layerrule = ignorealpha 0.6, osk
hyprpaper
preload = ~/.local/share/wallpapers/nord/Minimal-Nord.png preload = ~/.local/share/wallpapers/nord/linux-friends-4k.png preload = ~/.local/share/wallpapers/nord/nord_buildings.png preload = ~/.local/share/wallpapers/nord/keyboard.png preload = ~/.local/share/wallpapers/nord/nord_mountains.png preload = ~/.local/share/wallpapers/nord/wild.png preload = ~/.local/share/wallpapers/nord/nord_lake.png preload = ~/.local/share/wallpapers/nord/nord_space.png preload = ~/.local/share/wallpapers/nord/nord_alone_tree.png preload = ~/.local/share/wallpapers/nord/nord_valley.png splash = false # wallpaper = eDP1,~/.local/share/wallpapers/nord/ign-hevlettpackard.png #wallpaper = DP-1,~/.local/share/wallpapers/nord/ign-hevlettpackard.png #wallpaper = DP-2,~/.local/share/wallpapers/nord/ign-hevlettpackard.png #wallpaper = DP-3,~/.local/share/wallpapers/nord/ign-hevlettpackard.png #wallpaper = DP-4,~/.local/share/wallpapers/nord/ign-hevlettpackard.png #wallpaper = DP-5,~/.local/share/wallpapers/nord/ign-hevlettpackard.png #wallpaper = HDMI-A-1,~/.local/share/wallpapers/nord/ign_duaAnime.png wallpaper = ,~/.local/share/wallpapers/nord/Minimal-Nord.png
hyprshade
[[shades]] name = "vibrance" default = true # shader to use during times when there is no other shader scheduled [[shades]] name = "blue-light-filter" start_time = 19:00:00 end_time = 06:00:00 # optional if you have more than one shade with start_time
hyprlock
# -*- eval: (rainbow-mode 1) -*- $text_color = rgba(D8DEE9FF) $entry_background_color = rgba(2E344011) $entry_border_color = rgba(3B3B3B55) $entry_color = rgba(FFFFFFFF) $font_family = Rubik Light $font_family_clock = Rubik Light $font_material_symbols = Material Symbols Rounded background { monitor = #path = /home/mkncorp.com/kristian.alexander/.local/share/wallpapers/nord/linux-friends-4k.png # only png supported for now path = screenshot color = rgba(000000FF) # all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations blur_passes = 1 # 0 disables blurring blur_size = 3 noise = 0.0117 contrast = 0.8916 brightness = 0.8172 vibrancy = 0.1696 vibrancy_darkness = 0.0 } label { # Greeting monitor = text = <span foreground='##D8DEE9'>Hi there,</span><span foreground='##8FBCBB'> <i>$DESC</i></span> color = rgba(BF616AFF) check_color = rgba(EBCB8BFF) fail_color = rgba(BF616AFF) # if authentication failed, changes outer_color and fail message color fail_text = <span foreground='##D8DEE9'><i>$FAIL <b>($ATTEMPTS)</b></i></span> # can be set to empty fail_timeout = 2000 # milliseconds before fail_text and fail_color disappears fail_transition = 300 # transition time in ms between normal outer_color and fail_color shadow_passes = 1 shadow_boost = 0.5 color = $text_color font_size = 20 font_family = $font_family position = 0, 240 halign = center valign = center } label { # lock icon monitor = text = lock shadow_passes = 1 shadow_boost = 0.5 color = $text_color font_size = 21 font_family = $font_material_symbols position = 0, 65 halign = center valign = bottom } label { # Clock monitor = text = $TIME shadow_passes = 1 shadow_boost = 0.5 color = $text_color font_size = 65 font_family = $font_family_clock position = 0, 300 halign = center valign = center } input-field { monitor = size = 250, 50 outline_thickness = 2 dots_size = 0.1 dots_spacing = 0.3 outer_color = $entry_border_color inner_color = $entry_background_color font_color = $entry_color # fade_on_empty = true position = 0, 20 halign = center valign = center }
hypridle
general { lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances. before_sleep_cmd = loginctl lock-session # lock before suspend. # after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display. } listener { timeout = 180 on-timeout = loginctl lock-session # lock screen when timeout has passed } listener { timeout = 240 on-timeout = hyprctl dispatch dpms off on-resume = hyprctl dispatch dpms on } listener { timeout = 540 on-timeout = pidof steam || systemctl suspend || loginctl suspend }
screen-record
A simple shell script wrapping wf-recorder.
pgrep -x "wf-recorder" && pkill -INT -x wf-recorder && notify-send -h string:wf-recorder:record -t 1000 "Finished Recording" && exit 0 notify-send -h string:wf-recorder:record -t 1000 "Recording in:" "<span color='#90a4f4' font='26px'><i><b>3</b></i></span>" sleep 1 notify-send -h string:wf-recorder:record -t 1000 "Recording in:" "<span color='#90a4f4' font='26px'><i><b>2</b></i></span>" sleep 1 notify-send -h string:wf-recorder:record -t 950 "Recording in:" "<span color='#90a4f4' font='26px'><i><b>1</b></i></span>" sleep 1 dateTime=$(date +%m-%d-%Y-%H:%M:%S) wf-recorder -F fps=30 -c gif -f $HOME/Videos/screen-record-$dateTime.gif
set-opacity
#!/use/bin/env bash set -x MEMORY_FILE="/tmp/hypr_alpha_memory.json" OPACITY_STEP=0.05 MIN_OPACITY=0.1 MAX_OPACITY=1.0 DEFAULT_ALPHA=1.0 touch $MEMORY_FILE [[ ! -s $MEMORY_FILE ]] && echo "{}" > "$MEMORY_FILE" ADDR=$(hyprctl activewindow -j | jq -r '.address') DIRECTION="$1" [[ -z "$ADDR" || "$ADDR" == "null" ]] && exit 1 [[ -z "$ADDR" || "$ADDR" == "null" ]] && exit 1 CURRENT_ALPHA=$(cat "$MEMORY_FILE" | jq -r --arg addr "$ADDR" '.[$addr] // 1.0') case "$DIRECTION" in --increase) NEW_ALPHA=$(echo "$CURRENT_ALPHA + $OPACITY_STEP" | bc) (( $(echo "$NEW_ALPHA > $MAX_OPACITY" | bc -l) )) && NEW_ALPHA=$MAX_OPACITY ;; --decrease) NEW_ALPHA=$(echo "$CURRENT_ALPHA - $OPACITY_STEP" | bc) (( $(echo "$NEW_ALPHA < $MIN_OPACITY" | bc -l) )) && NEW_ALPHA=$MIN_OPACITY ;; --reset) NEW_ALPHA=$DEFAULT_ALPHA ;; *) exit 1 ;; esac for PROP in alpha alphainactive alphafullscreen alphaoverride; do hyprctl dispatch setprop "address:$ADDR" "$PROP" "$NEW_ALPHA" done TMP=$(mktemp) cat "$MEMORY_FILE" | jq --arg addr "$ADDR" --argjson val "$NEW_ALPHA" '. + {($addr): $val}' > "$TMP" && mv "$TMP" "$MEMORY_FILE"