dotfiles/hypr/hyprland.conf
2025-11-21 06:51:41 -06:00

440 lines
12 KiB
Plaintext
Executable File

source = ~/.config/hypr/mocha.conf # Catppuccin colorscheme
# < Start Section >
# monitors
# Main
monitorv2 {
output = DP-1
# 3440x1440@160
# mode = 3440x1440@160
# 3440x1440@155
mode = modeline 1177.50 3440 3744 4128 4816 1440 1443 1453 1578 -hsync +vsync
position = 0x1350 # alt: 0x0
vrr = true
bitdepth = 10
cm = auto
sdr_min_luminance = 0.005
sdr_max_luminance = 250 #
supports_wide_color = true
supports_hdr = true
sdrbrightness = 1.1
sdrsaturation = 1.1
}
# Side
monitorv2 {
output = HDMI-A-4
mode = 3840x2160@60 # alt: disabled
transform = 2
scale = 1.6
position = 520x0
vrr = true
bitdepth = 10
cm = auto
sdr_min_luminance = 0.005
sdr_max_luminance = 150 #
sdrbrightness = 1.0
sdrsaturation = 1.0
}
# < End Section >
# < Start Section >
# environment variables
env = XDG_CURRENT_DESKTOP,Hyprland
env = XDG_SESSION_TYPE,wayland
env = XDG_SESSION_DESKTOP,Hyprland
env = MOZ_ENABLE_WAYLAND,1
env = HYPRCURSOR_THEME, rose-pine-hyprcursor
env = HYPRCURSOR_SIZE, 24
env = QT_AUTO_SCREEN_SCALE_FACTOR,1
env = QT_QPA_PLATFORM,wayland;xcb
env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1
env = QT_QPA_PLATFORMTHEME,qt5ct
#env = HYPRLAND_TRACE,1
#env = AQ_TRACE,1
# < End Section >
# < Start Section >
# startup applications
# environment launches
exec-once = ~/.config/hypr/scripts/resetxdgportal.sh # reset XDPH for screenshare
exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP HYPRLAND_INSTANCE_SIGNATURE
exec-once = dbus-update-activation-environment --systemd --all
exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
exec-once = /usr/lib/polkit-kde-authentication-agent-1 # authentication dialogue for GUI apps
exec-once = gsettings set org.gnome.desktop.interface gtk-theme 'Catppuccin-Mocha'
exec-once = gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
#exec-once = wayvnc --output=DP-1 0.0.0.0
# xrandr settings
exec-once = ~/.config/hypr/scripts/xrandr.sh
# background applications
exec-once = waybar -c ~/.config/waybar/config
exec-once = dunst
exec-once = swww-daemon
exec-once = syncthing --no-browser
exec-once = xwaylandvideobridge
exec-once = pulsemeeter
# main applications
exec-once = thunderbird
exec-once = obs
#exec-once = discord
exec-once = vesktop --ozone-platform-hint=auto --enable-webrtc-pipewire-capturer --enable-features=WaylandWindowDecorations
exec-once = spotify
exec-once = alacritty
exec-once = firefox
exec-once = env JAVA_HOME=/usr/lib/jvm/java-17-openjdk bolt > /tmp/bolt-launcher.log 2>&1
exec-once = taskset -c 0-19 steam
# obsidian planner
exec-once = ~/sync/obsidian/Trinote/create-week.sh
# completion alert
exec-once = sleep 5 && pw-play --volume=2.0 ~/.alert/finished.mp3
# first time lock
exec-once = hyprlock
# < End Section >
# < Start Section >
# workspace rules
# gaps numbers (top, right, bottom, left)
workspace = 1, monitor:DP-1, persistent:true, default:true
workspace = 2, monitor:DP-1, persistent:true
workspace = 3, monitor:DP-1, persistent:true
workspace = 4, monitor:DP-1, persistent:true
# Workspaces swapped for ease of use
workspace = 6, monitor:DP-1, persistent:true
workspace = 5, monitor:HDMI-A-4, persistent:true, gapsout:0
# < End Section >
# < Start Section >
# variables
general {
gaps_in = 0
gaps_out = 25, 440, 25, 440
border_size = 0
col.active_border = 0x000000
col.inactive_border = 0x000000
layout = master
resize_on_border = false
}
decoration {
rounding = 4
shadow {
enabled = false
}
dim_special = 0.3
fullscreen_opacity = 1.0
blur {
enabled = true
special = true
size = 6
passes = 3
new_optimizations = true
ignore_opacity = true
xray = false
}
}
animations {
enabled = true
bezier = wind, 0.05, 0.9, 0.1, 1.05
bezier = winIn, 0.1, 1.1, 0.1, 1.1
bezier = winOut, 0.3, -0.3, 0, 1
bezier = liner, 1, 1, 1, 1
animation = windows, 1, 6, wind, slide
animation = windowsIn, 1, 6, winIn, slide
animation = windowsOut, 1, 5, winOut, slide
animation = windowsMove, 1, 5, wind, slide
animation = border, 1, 1, liner
animation = borderangle, 1, 30, liner, loop
animation = fade, 1, 10, default
animation = workspaces, 1, 5, wind
}
input {
kb_layout = us
kb_options = caps:escape
follow_mouse = 2
mouse_refocus = true
force_no_accel = 1
}
group {
col.border_active = rgba(ca9ee6ff) rgba(f2d5cfff) 45deg
col.border_inactive = rgba(b4befecc) rgba(6c7086cc) 45deg
col.border_locked_active = rgba(ca9ee6ff) rgba(f2d5cfff) 45deg
col.border_locked_inactive = rgba(b4befecc) rgba(6c7086cc) 45deg
}
misc {
disable_hyprland_logo = true
disable_splash_rendering = true
force_default_wallpaper = 0
vrr = 1
vfr = true
middle_click_paste = false
render_unfocused_fps = 15
}
xwayland {
enabled = true
use_nearest_neighbor = true
force_zero_scaling = false
}
cursor {
inactive_timeout = 5
no_warps = false
persistent_warps = true
default_monitor = DP-1
warp_on_change_workspace = false
}
debug {
disable_logs = true
#overlay
full_cm_proto = true
}
render {
new_render_scheduling = false
direct_scanout = true
cm_fs_passthrough = 1
cm_enabled = true
}
experimental {
xx_color_management_v4 = true
}
# < End Section >
# < Start Section >
# master layout
master {
new_status = master
}
# < End Section >
# < Start Section >
# window rules
# core
windowrule {
name = globals
match:class = ^(.*)$
suppress_event = maximize
render_unfocused = true
opacity = 0.80 0.80
}
windowrule = match:class ^(qt5ct)$, float true
windowrule = match:class ^(nwg-look)$, float true
windowrule = match:class ^(pavucontrol)$, float true
windowrule = match:class ^(org.kde.polkit-kde-authentication-agent-1)$, float true
windowrule = match:workspace 4, float true
# main
windowrule = match:class ^(discord)$, workspace 1 silent
windowrule = match:class ^(vesktop)$, workspace 1 silent
windowrule = match:class ^(thunderbird)$, workspace 1 silent
windowrule = match:class ^(Dopamine)$, workspace 1 silent
windowrule = match:class ^(spotify)$, workspace 1 silent
windowrule = match:class ^(Alacritty)$, workspace 2 silent
windowrule = match:class ^(Alacritty)$, tile true
windowrule = match:class ^(firefox)$, float true
windowrule = match:class ^(firefox)$, tile true
windowrule = match:class ^(steam)$, workspace 4 silent
windowrule = match:class ^(org.prismlauncher.PrismLauncher)$, workspace 4 silent
windowrule = match:class ^(Minecraft.*)$, workspace 4 silent
windowrule = match:class ^(steam_app_.*)$, workspace 4 silent
windowrule = match:class ^(steam_proton)$, workspace 4 silent
windowrule = match:class ^(cstrike_linux64)$, workspace 4 silent
windowrule = match:class ^(dota2)$, workspace 4 silent
windowrule = match:class ^(gamescope)$, workspace 4 silent
windowrule = match:class ^(steam)$, workspace 6 silent
# development
windowrule = match:class ^(VirtualBox.*)$, float true
windowrule = match:title ^(SnakePlusPlus)$, float true
windowrule = match:title ^(SnakePlusPlus)$, center true
windowrule = match:title ^(SnakePlusPlus)$, opacity 0.4
windowrule = match:title ^(TetrisPlusPlus)$, center true
windowrule = match:class ^(aquamarine)$, workspace 5 silent
windowrule = match:class ^(aquamarine)$, fullscreen true
# games
# 16:9 windowed - 1920 1080
# 21:9 windowed - 2580 1080
# 32:9 windowed - 3200 900
# theoretical mix - 3200 1100
# alternative - 2660 1140
# world of warcraft classic
windowrule = match:class ^(wowclassic.exe)$, opacity 1.00 override 1.00 override
windowrule = match:class ^(wowclassic.exe)$, workspace 4 silent
# world of warcraft
windowrule = match:title ^(World of Warcraft)$, opacity 1.00 override 1.00 override
windowrule = match:title ^(World of Warcraft)$, workspace 4 silent
# runelite
windowrule = match:class ^(net-runelite-client-RuneLite)$, opacity 1.00 override 1.00 override
windowrule = match:class ^(net-runelite-client-RuneLite)$, fullscreen true
windowrule = match:class ^(net-runelite-client-RuneLite)$, workspace 5 silent
windowrule = match:class ^(bolt.*)$, workspace 5 silent
windowrule = match:class ^(bolt.*)$, tile true
# minecraft
windowrule = match:class ^(Minecraft.*)$, opacity 1.00 override 1.00 override
windowrule = match:class ^(Minecraft.*)$, workspace 4 silent
windowrule = match:class ^(Minecraft.*)$, float true
windowrule = match:class ^(Minecraft.*)$, size 3200 1100
# native
windowrule = match:class ^(steam_app_.*)$, opacity 1.00 override 1.00 override
windowrule = match:class ^(steam_app_.*)$, float true
# proton
windowrule = match:class ^(steam_proton)$, opacity 1.00 override 1.00 override
windowrule = match:class ^(steam_proton)$, float true
# hl2 (css, etc)
windowrule = match:class ^(cstrike_linux64)$, opacity 1.00 override 1.00 override
# dota 2
windowrule = match:class ^(dota2)$, opacity 1.00 override 1.00 override
# gamescope
windowrule = match:class ^(gamescope)$, opacity 1.00 override 1.00 override
windowrule = match:class ^(gamescope)$, float true
windowrule = match:class ^(gamescope)$, size 3200 1100
# steamtinkerlaunch
windowrule = match:class ^(yad)$, float true
windowrule = match:class ^(yad)$, size 1920 1080
# layer rules
layerrule = match:namespace waybar, blur true
layerrule = match:namespace waybar, ignore_alpha 0
# xwaylandvideobridge
windowrule = match:class ^(xwaylandvideobridge)$, opacity 0.0 override
windowrule = match:class ^(xwaylandvideobridge)$, no_anim true
windowrule = match:class ^(xwaylandvideobridge)$, no_initial_focus true
windowrule = match:class ^(xwaylandvideobridge)$, max_size 1 1
windowrule = match:class ^(xwaylandvideobridge)$, no_blur true
# < End Section >
# < Start Section >
# keybinds
# main modifier
$mainMod = SUPER
# passthrough
bind = , mouse:275, pass, class:^(discord)$
#bind = , mouse:275, sendshortcut, ALT, V, class:^(vesktop)$
#bind = SHIFT, mouse:275, sendshortcut, ALT, V, class:^(vesktop)$
# core binds
bind = $mainMod SHIFT, Q, killactive
bind = $mainMod SHIFT, M, exit
bind = $mainMod, SPACE, togglefloating
bind = $mainMod, C, centerwindow
bind = $mainMod, F, fullscreen
bind = $mainMod SHIFT, L, exec, hyprlock
bind = $mainMod $CONTROL, ESCAPE, exec, killall waybar || waybar -c ~/.config/waybar/config # toggle waybar
# main application shortcuts
bind = $mainMod, RETURN, exec, alacritty
bind = $mainMod SHIFT, S, exec, grim -g "$(slurp)" - | wl-copy
bind = $mainMod SHIFT, 7, exec, taskset -c 1-7 prismlauncher
bind = $mainMod, S, exec, pkill -x rofi || rofi -show drun
bind = $mainMod, 9, exec, taskset -c 1-7 steam
bind = $mainMod, 0, exec, JAVA_HOME=/usr/lib/jvm/java-17-openjdk bolt --ozone-platform=wayland > /tmp/bolt-launcher.log 2>&1
# generic audio control
binde = , XF86AudioPlay, exec, playerctl play-pause
binde = , XF86AudioStop, exec, playerctl stop
binde = , XF86AudioPrev, exec, playerctl previous
binde = , XF86AudioNext, exec, playerctl next
binde = , XF86AudioMute, exec, pactl set-sink-mute @DEFAULT_SINK@ toggle
binde = , XF86AudioLowerVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ -5%
binde = , XF86AudioRaiseVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ +5%
# custom audio control
binde = $mainMod, F1, exec, playerctl play-pause
binde = $mainMod, F2, exec, playerctl previous
binde = $mainMod, F3, exec, playerctl next
# move focus
bind = $mainMod, h, movefocus, l
bind = $mainMod, l, movefocus, r
bind = $mainMod, k, movefocus, u
bind = $mainMod, j, movefocus, d
# workspaces
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 SHIFT, 1, movetoworkspace, 1
bind = $mainMod SHIFT, 1, centerwindow
bind = $mainMod SHIFT, 2, movetoworkspace, 2
bind = $mainMod SHIFT, 2, centerwindow
bind = $mainMod SHIFT, 3, movetoworkspace, 3
bind = $mainMod SHIFT, 3, centerwindow
bind = $mainMod SHIFT, 4, movetoworkspace, 4
bind = $mainMod SHIFT, 4, centerwindow
bind = $mainMod SHIFT, 5, movetoworkspace, 5
bind = $mainMod SHIFT, 5, centerwindow
bind = $mainMod SHIFT, 6, movetoworkspace, 6
bind = $mainMod SHIFT, 6, centerwindow
bind = $mainMod ALT, 1, movetoworkspacesilent, 1
bind = $mainMod ALT, 2, movetoworkspacesilent, 2
bind = $mainMod ALT, 3, movetoworkspacesilent, 3
bind = $mainMod ALT, 4, movetoworkspacesilent, 4
bind = $mainMod ALT, 5, movetoworkspacesilent, 5
bind = $mainMod ALT, 6, movetoworkspacesilent, 6
# resizing windows
binde = $mainMod, right, resizeactive, 5 0
binde = $mainMod, left, resizeactive, -5 0
binde = $mainMod, up, resizeactive, 0 -5
binde = $mainMod, down, resizeactive, 0 5
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow
# recordings
bind = SUPER, R, pass, class:^(com\.obsproject\.Studio)$
bind = SUPER, F9, pass, class:^(com\.obsproject\.Studio)$
bind = SUPER, F10, pass, class:^(com\.obsproject\.Studio)$
# < End Section >