.dotfiles/.config/hypr/hyprland.conf
2025-03-24 13:07:10 -04:00

409 lines
13 KiB
Text

# ┌───────────────────────────────────────────────────┐
# │ ██████╗ ███████╗████████╗███████╗██████╗ ███████╗ │
# │ ██╔══██╗██╔════╝╚══██╔══╝██╔════╝██╔══██╗██╔════╝ │
# │ ██████╔╝█████╗ ██║ █████╗ ██████╔╝███████╗ │
# │ ██╔═══╝ ██╔══╝ ██║ ██╔══╝ ██╔══██╗╚════██║ │
# │ ██║ ███████╗ ██║ ███████╗██║ ██║███████║ │
# │ ╚═╝ ╚══════╝ ╚═╝ ╚══════╝╚═╝ ╚═╝╚══════╝ │
# ├───────────────────────────────────────────────────┤
# │ depressing and totally messy hyprland config or │
# ├───────────────────────────────────────────────────┤
# │ How windows are the only well │
# │ managed aspect of my life. │
# │---------------------------------------------------│
# │ https://git.peterdominguez.art/peter/.dotfiles │
# └───────────────────────────────────────────────────┘
#
#
# Programs
$terminal = kitty
$menu = rofi -show drun
# Some default env vars
env = XCURSOR_SIZE,24
env = QT_QPA_PLATFORMTHEME,qt5ct # change to qt6ct if you have that
# Outputs
monitor=DP-1,1920x1080@239.760,0x0,1
monitor=DP-2,1920x1080@239.760,1920x0,1
# Input devices
input {
kb_layout = us(altgr-intl)
kb_variant = ,nodeadkeys
kb_options = caps:escape
follow_mouse = 1
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
}
device {
name = usb-hid-keyboard-mouse
sensitivity = -0.3 # -1.0 - 1.0, 0 means no modification.
}
# Executables
exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
exec-once = udiskie -t &
exec-once = /usr/lib/polkit-kde-authentication-agent-1
exec-once = sleep 1; blueman-applet
exec-once = hyprpaper
exec-once = swaync
exec-once = [workspace special:music silent] sleep 1; feishin --enable-features=UseOzonePlatform --ozone-platform=wayland
exec-once = waybar
exec-once = hypridle
exec-once = hyprctl setcursor Dracula-cursors 24
exec-once = [workspace 1 silent] firefox
exec-once = libreoffice --writer --norestore
exec-once = gimp
exec-once = kdenlive
exec-once = virt-manager
exec-once = [workspace 2 silent] kitty --session ~/.config/kitty/session --listen-on=unix:@mykitty
exec-once = [workspace 2 silent] sleep 1; kitty ttyper
exec-once = [workspace 2 silent] sleep 2; kitty newsboat
exec-once = [workspace 7 silent] kitty btop
exec-once = [workspace 7 silent] sleep 1; kitty
exec-once = [workspace 7 silent] sleep 2;kitty zsh -c "source ~/.zshrc;nnn -deUxH"
exec-once = steam -silent
exec-once = sleep 1; heroic --ozone-platform=wayland
exec-once = [workspace special:password silent] keepassxc
exec-once = [workspace special:scratchpad silent] signal-desktop --ozone-platform-hint=auto --enable-features=UseOzonePlatform,WaylandWindowDecorations
exec-once = nextcloud
exec-once = killall nextcloud
exec-once = gammastep -m wayland -O 6500K -g 1.1.0
exec-once = [workspace special:email silent] sleep 1; tutanota-desktop --ozone-platform-hint=auto
exec-once = discord --enable-features=UseOzonePlatform --ozone-platform=wayland --start-minimized
exec-once = jellyfin-mpv-shim
# Variables
general {
gaps_in = 5
gaps_out = 10
border_size = 2
layout = master
allow_tearing = false
}
decoration {
rounding = 8
blur {
enabled = true
size = 3
passes = 1
new_optimizations = true
noise = 0.06
special = true
contrast = 0.8
popups = true
}
}
# Animations
animations {
enabled = yes
bezier = myBezier, 0, 0.55, 0.45, 1
animation = windows, 1, 4, myBezier
animation = windowsIn, 1, 7, default, popin 80%
animation = windowsOut, 1, 7, default, popin 80%
animation = border, 1, 20, default
animation = borderangle, 1, 20, default
animation = fade, 1, 7, default
animation = workspaces, 1, 6, default, slide
}
# Layout
master {
new_status = slave
}
# Cursor
cursor {
hide_on_key_press = true
}
# Miscellaneous
misc {
force_default_wallpaper = 0 # Set to 0 to disable the anime mascot wallpapers
vrr = 2
}
# Window rules
windowrulev2 = workspace 3 silent,class:libreoffice-writer
windowrulev2 = workspace 4 silent,class:gimp
windowrulev2 = workspace 5 silent,class:virt-manager
windowrulev2 = workspace special:email silent,class:tutanota-desktop
windowrulev2 = size 300 500,title:Friends List
windowrulev2 = center,title:Steam
windowrulev2 = float,class:steam
windowrulev2 = size 1600 900, title:Steam
windowrulev2 = center,class:heroic
windowrulev2 = float,class:heroic
windowrulev2 = size 1600 900, class:heroic
windowrulev2 = center,class:discord
windowrulev2 = float,class:discord
windowrulev2 = size 1600 900, class:discord
windowrulev2 = float,class:nmnet
windowrulev2 = size 856 656, class:nmnet
windowrulev2 = float,class:com.nextcloud.desktopclient.nextcloud
windowrulev2 = move 1450 34,class:com.nextcloud.desktopclient.nextcloud
windowrulev2 = float,class:openrgb
windowrulev2 = size 1600 900,class:openrgb
windowrulev2 = center,class:openrgb
windowrulev2 = float,class:org.pulseaudio.pavucontrol
windowrulev2 = move 1070 38,class:org.pulseaudio.pavucontrol
windowrulev2 = float,title:Save File*
windowrulev2 = size 1000 600,title:Save File*
windowrulev2 = float,title:Open Files
windowrulev2 = size 1000 600,title:Open Files
windowrulev2 = float,title:Signal
windowrulev2 = center,title:Signal
windowrulev2 = size 1280 720,title:Signal
windowrulev2 = float,class:feishin
windowrulev2 = center,class:feishin
windowrulev2 = size 1600 900, class:feishin
windowrulev2 = float,class:org.keepassxc.KeePassXC
windowrulev2 = size 800 600,class:org.keepassxc.KeePassXC
windowrulev2 = center,class:org.keepassxc.KeePassXC
windowrulev2 = float,class:mpv
windowrulev2 = monitor DP-1,class:mpv
windowrulev2 = size 600 400,class:mpv
windowrulev2 = move 1310 670,class:mpv
windowrulev2 = float,class:org.kde.polkit-kde-authentication-agent-1
windowrulev2 = float,class:alacarte
windowrulev2 = float,class:piper
windowrulev2 = float,class:nwg-look
windowrulev2 = float,class:zenity
windowrulev2 = float,class:galculator
windowrulev2 = move 1592 740,class:galculator
windowrulev2 = float,class:org.rncbc.qsynth
windowrulev2 = float,class:qt5ct
windowrulev2 = float,class:kvantummanager
windowrulev2 = float,class:nm-connection-editor
windowrulev2 = float,class:udiskie
windowrulev2 = float,class:gsimplecal
windowrulev2 = move 834 43,class:gsimplecal
windowrulev2 = float,class:imv
windowrulev2 = center,class:imv
windowrulev2 = float,class:org.pwmt.zathura
windowrulev2 = center,class:org.pwmt.zathura
windowrulev2 = idleinhibit fullscreen, fullscreen:1
windowrulev2 = float,class:tutanota-desktop
windowrulev2 = center,class:tutanota-desktop
windowrulev2 = size 1705 909,class:tutanota-desktop
windowrulev2 = float,class:xdg-desktop-portal-gtk
windowrulev2 = float,class:blueman-manager
windowrulev2 = center,class:blueman-manager
windowrulev2 = move 1310 40,class:blueman-manager
windowrulev2 = size 600 900,class:blueman-manager
# Keywords
$mainMod = SUPER
# Bindings
bind = $mainMod, Return, exec, $terminal
bind = $mainMod, Q, killactive,
bind = $mainMod, E, exit,
bind = $mainMod, V, togglefloating,
bind = $mainMod, P, exec, $menu
bind = $mainMod, F, fullscreen
bind = $mainMod, C, exec, galculator
bind = $mainMod CTRL, T, exec, steam
bind = $mainMod CTRL, Y, exec, heroic
bind = $mainMod, N, exec, exec swaync-client -t -sw
bind = $mainMod CTRL, U, exec, [workspace special:scratchpad silent] signal-desktop --ozone-platform-hint=auto --enable-features=UseOzonePlatform,WaylandWindowDecorations
bind = $mainMod CTRL, P, exec, [workspace special:password silent] keepassxc
bind = $mainMod CTRL, M, exec, [workspace special:music silent] sleep 1; feishin --enable-features=UseOzonePlatform --ozone-platform=wayland
# Resize windows main keybind
bind=ALT,R,submap,resize
# Start a submap resize
submap=resize
# Set repeatable binds for resizing the active window
binde=,right,resizeactive,10 0
binde=,left,resizeactive,-10 0
binde=,up,resizeactive,0 -10
binde=,down,resizeactive,0 10
binde=,l,resizeactive,10 0
binde=,h,resizeactive,-10 0
binde=,k,resizeactive,0 -10
binde=,j,resizeactive,0 10
# Use reset to go back to the global submap
bind=,escape,submap,reset
# Reset the submap
submap=reset
# Switch between floating and tiled windows
bind = ALT, TAB, cyclenext, floating
bind = ALT, SPACE, focuscurrentorlast
# Media keys
bind = ,XF86AudioPlay,exec,playerctl play-pause
bind = ,XF86AudioPause,exec,playerctl pause
bind = ,XF86AudioStop,exec,playerctl stop
bind = ,XF86AudioNext,exec,playerctl next
bind = ,XF86AudioPrev,exec,playerctl previous
bind = ,XF86AudioRaiseVolume,exec,wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%+
bind = ,XF86AudioLowerVolume,exec,wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%-
bind = ,XF86AudioMute,exec,pactl set-sink-mute @DEFAULT_SINK@ toggle
# Move focus with Mod + arrow keys
bind = $mainMod, left, movefocus, l
bind = $mainMod, right, movefocus, r
bind = $mainMod, up, movefocus, u
bind = $mainMod, down, movefocus, d
# Move windows with Mod + arrow keys
bind = $mainMod CTRL, left, movewindow, l
bind = $mainMod CTRL, right, movewindow, r
bind = $mainMod CTRL, up, movewindow, u
bind = $mainMod CTRL, down, movewindow, d
# VI keybindings like God intended
bind = $mainMod, h, movefocus, l
bind = $mainMod, l, movefocus, r
bind = $mainMod, k, movefocus, u
bind = $mainMod, j, movefocus, d
# Move windows with Mod + vi keys
bind = $mainMod CTRL, h, movewindow, l
bind = $mainMod CTRL, l, movewindow, r
bind = $mainMod CTRL, k, movewindow, u
bind = $mainMod CTRL, j, movewindow, d
# Switch workspaces with Mod + [0-9,-,=]
bind = $mainMod, 1, workspace, 1
bind = $mainMod, 2, workspace, 2
bind = $mainMod, 3, workspace, 3
bind = $mainMod, 4, workspace, 4
bind = $mainMod, 5, workspace, 5
bind = $mainMod, 6, workspace, 6
bind = $mainMod, 7, workspace, 7
bind = $mainMod, 8, workspace, 8
bind = $mainMod, 9, workspace, 9
bind = $mainMod, 0, workspace, 10
bind = $mainMod, minus, workspace, 11
bind = $mainMod, equal, workspace, 12
# Move active window to a workspace with Mod + CTRL + [0-9,-,=]
bind = $mainMod CTRL, 1, movetoworkspace, 1
bind = $mainMod CTRL, 2, movetoworkspace, 2
bind = $mainMod CTRL, 3, movetoworkspace, 3
bind = $mainMod CTRL, 4, movetoworkspace, 4
bind = $mainMod CTRL, 5, movetoworkspace, 5
bind = $mainMod CTRL, 6, movetoworkspace, 6
bind = $mainMod CTRL, 7, movetoworkspace, 7
bind = $mainMod CTRL, 8, movetoworkspace, 8
bind = $mainMod CTRL, 9, movetoworkspace, 9
bind = $mainMod CTRL, 0, movetoworkspace, 10
bind = $mainMod CTRL, minus, movetoworkspace, 11
bind = $mainMod CTRL, equal, movetoworkspace, 12
# Workspace monitor assignment
workspace = 1, monitor:DP-1, default:true
workspace = 2, monitor:DP-1
workspace = 3, monitor:DP-1
workspace = 4, monitor:DP-1
workspace = 5, monitor:DP-1
workspace = 6, monitor:DP-1
workspace = 7, monitor:DP-2, default:true
workspace = 8, monitor:DP-2
workspace = 9, monitor:DP-2
workspace = 10, monitor:DP-2
workspace = 11, monitor:DP-2
workspace = 12, monitor:DP-2
# Special workspaces
bind = $mainMod, U, togglespecialworkspace, scratchpad
bind = $mainMod SHIFT, S, movetoworkspace, special:scratchpad
bind = $mainMod, M, togglespecialworkspace, music
bind = $mainMod, O, togglespecialworkspace, password
bind = $mainMod, I, togglespecialworkspace, email
# Scroll through existing workspaces with Mod + scroll
bind = $mainMod, mouse_down, workspace, e+1
bind = $mainMod, mouse_up, workspace, e-1
# Scroll through existing workspaces with Mod + vi keys
bind = $mainMod ALT, l, workspace, e+1
bind = $mainMod ALT, h, workspace, e-1
# Scroll through existing workspaces with Mod + arrow keys
bind = $mainMod ALT, right, workspace, e+1
bind = $mainMod ALT, left, workspace, e-1
# Move/resize windows with Mod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow
# Screenshot
bind = ,Print,exec,grim -g "$(slurp)" - | swappy -f -
# Dracula theme
general {
col.active_border = rgb(6272A4) rgb(bd93f9) 90deg
col.inactive_border = rgba(44475aaa)
col.nogroup_border = rgba(282a36dd)
col.nogroup_border_active = rgb(bd93f9) rgb(44475a) 90deg
no_border_on_floating = false
border_size = 2
}
decoration:shadow {
color = rgba(1E202966)
enabled = true
range = 60
offset = 1 2
render_power = 3
scale = 0.97
}
group {
groupbar {
col.active = rgb(bd93f9) rgb(44475a) 90deg
col.inactive = rgba(282a36dd)
}
}
windowrulev2 = bordercolor rgb(ff5555),xwayland:1 # check if window is xwayland