Migrate hyprland config to lua

This commit is contained in:
Tobias Reisinger 2026-09-03 12:41:22 +02:00
commit bdaeb19666
Signed by: serguzim
GPG key ID: 13AD60C237A28DFE
29 changed files with 485 additions and 437 deletions

View file

@ -20,7 +20,7 @@ declare -A mapper=(
["git-credentials"]="$HOME/.config/git/credentials" ["git-credentials"]="$HOME/.config/git/credentials"
["home-manager"]="$HOME/.config/home-manager/home.nix" ["home-manager"]="$HOME/.config/home-manager/home.nix"
["host-mode"]="$HOME/.bin/host-mode" ["host-mode"]="$HOME/.bin/host-mode"
["hyprland"]="$HOME/.config/hypr/hyprland.conf" ["hyprland"]="$HOME/.config/hypr/hyprland.lua"
["nvim"]="$HOME/.config/astronvim/lua/user/" ["nvim"]="$HOME/.config/astronvim/lua/user/"
["polybar"]="$HOME/.config/polybar" ["polybar"]="$HOME/.config/polybar"
["projectsrc"]="$HOME/.config/projectsrc" ["projectsrc"]="$HOME/.config/projectsrc"

View file

@ -1,92 +0,0 @@
$main_mod = SUPER
bind = $main_mod, return, exec, $TERMINAL
bind = $main_mod SHIFT, return, exec, [float] $TERMINAL
bind = $main_mod, Q, killactive,
bind = $main_mod SHIFT, Q, forcekillactive,
bind = $main_mod, Space, togglefloating,
bind = $main_mod, F, fullscreen,
bind = $main_mod, D, exec, j4-dmenu-desktop --dmenu="$DMENU"
bind = $main_mod, Pause, exec, menu-shutdown
bind = $main_mod SHIFT, T, exec, ts-control
bind = $main_mod, T, exec, ts-control quick
bind = $main_mod SHIFT, X, exec, $HOME/projects/utils/temp-service/temp-service
bind = $main_mod, X, exec, $HOME/projects/utils/temp-service/temp-service menu
bind = $main_mod, M, exec, host-mode
bind = $main_mod, V, exec, wl-copy $(cliphist decode $(cliphist list | $DMENU))
bind = $main_mod, O, exec, xdg-open $($DMENU < ~/documents/history.txt)
bind = $main_mod, N, exec, [float] $TERMINAL -e nvim
bind = $main_mod, C, exec, [float] $TERMINAL -e python
bind = , XF86Calculator, exec, [float] $TERMINAL -e python
# Screenshot / Color picker
bind = $main_mod SHIFT, S, exec, screenshot
bind = $main_mod SHIFT CTRL, S, exec, screenshot --no-upload
bind = $main_mod SHIFT ALT, S, exec, colorpicker
bind = $main_mod SHIFT, R, exec, autostart-manage run-wayland
# Binds for Media keys
bindl = , XF86AudioPlay, exec, playerctl play-pause
bindl = , XF86AudioPause, exec, playerctl pause
bindl = , XF86AudioNext, exec, playerctl next
bindl = , XF86AudioPrev, exec, playerctl prev
### hjkl Keys
# Move focus with mainMod + hjkl keys
bind = $main_mod, h, movefocus, l
bind = $main_mod, j, movefocus, d
bind = $main_mod, k, movefocus, u
bind = $main_mod, l, movefocus, r
# Move window with mainMod + hjkl keys
bind = $main_mod SHIFT, h, movewindow, l
bind = $main_mod SHIFT, j, movewindow, d
bind = $main_mod SHIFT, k, movewindow, u
bind = $main_mod SHIFT, l, movewindow, r
# Preselect split window with mainMod + hjkl keys
bind = $main_mod CTRL, h, layoutmsg, preselect l
bind = $main_mod CTRL, j, layoutmsg, preselect d
bind = $main_mod CTRL, k, layoutmsg, preselect u
bind = $main_mod CTRL, l, layoutmsg, preselect r
# Switch workspaces with mainMod + [0-9]
bind = $main_mod, 1, workspace, $ws01
bind = $main_mod, 2, workspace, $ws02
bind = $main_mod, 3, workspace, $ws03
bind = $main_mod, 4, workspace, $ws04
bind = $main_mod, 5, workspace, $ws05
bind = $main_mod, 6, workspace, $ws06
bind = $main_mod, 7, workspace, $ws07
bind = $main_mod, 8, workspace, $ws08
bind = $main_mod, 9, workspace, $ws09
bind = $main_mod, 0, workspace, $ws10
# Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $main_mod SHIFT, 1, movetoworkspacesilent, $ws01
bind = $main_mod SHIFT, 2, movetoworkspacesilent, $ws02
bind = $main_mod SHIFT, 3, movetoworkspacesilent, $ws03
bind = $main_mod SHIFT, 4, movetoworkspacesilent, $ws04
bind = $main_mod SHIFT, 5, movetoworkspacesilent, $ws05
bind = $main_mod SHIFT, 6, movetoworkspacesilent, $ws06
bind = $main_mod SHIFT, 7, movetoworkspacesilent, $ws07
bind = $main_mod SHIFT, 8, movetoworkspacesilent, $ws08
bind = $main_mod SHIFT, 9, movetoworkspacesilent, $ws09
bind = $main_mod SHIFT, 0, movetoworkspacesilent, $ws10
bind = $main_mod, dead_circumflex, workspace, $ws_focus
bind = $main_mod SHIFT, dead_circumflex, movetoworkspacesilent, $ws_focus
# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $main_mod, mouse:272, movewindow
bindm = $main_mod, mouse:273, resizewindow
# Binds for XWayland
bind = , XF86AudioLowerVolume, pass, class:^(TeamSpeak 3)$
bind = , XF86AudioRaiseVolume, pass, class:^(TeamSpeak 3)$

111
.config/hypr/binds.lua Normal file
View file

@ -0,0 +1,111 @@
require("defaults")
hl.bind("SUPER + return", function()
hl.exec_cmd("$TERMINAL")
end)
hl.bind("SUPER + SHIFT + return", function()
hl.exec_cmd("[float] $TERMINAL")
end)
hl.bind("SUPER + Q", hl.dsp.window.close())
hl.bind("SUPER + SHIFT + Q", hl.dsp.window.kill())
hl.bind("SUPER + Space", hl.dsp.window.float())
hl.bind("SUPER + F", hl.dsp.window.fullscreen())
hl.bind("SUPER + D", function()
hl.exec_cmd('j4-dmenu-desktop --dmenu="$DMENU"')
end)
hl.bind("SUPER + Pause", function()
hl.exec_cmd("menu-shutdown")
end)
hl.bind("SUPER + SHIFT + T", function()
hl.exec_cmd("ts-control")
end)
hl.bind("SUPER + T", function()
hl.exec_cmd("ts-control quick")
end)
hl.bind("SUPER + SHIFT + X", function()
hl.exec_cmd("$HOME/projects/utils/temp-service/temp-service")
end)
hl.bind("SUPER + X", function()
hl.exec_cmd("$HOME/projects/utils/temp-service/temp-service menu")
end)
hl.bind("SUPER + M", function()
hl.exec_cmd("host-mode")
end)
hl.bind("SUPER + V", function()
hl.exec_cmd("wl-copy $(cliphist decode $(cliphist list | $DMENU))")
end)
hl.bind("SUPER + O", function()
hl.exec_cmd("xdg-open $($DMENU < ~/documents/history.txt)")
end)
hl.bind("SUPER + N", function()
hl.exec_cmd("[float] $TERMINAL -e nvim")
end)
hl.bind("SUPER + C", function()
hl.exec_cmd("[float] $TERMINAL -e python")
end)
hl.bind(" + XF86Calculator", function()
hl.exec_cmd("[float] $TERMINAL -e python")
end)
hl.bind("SUPER + SHIFT + S", function()
hl.exec_cmd("screenshot")
end)
hl.bind("SUPER + SHIFT + CTRL + S", function()
hl.exec_cmd("screenshot --no-upload")
end)
hl.bind("SUPER + SHIFT + ALT + S", function()
hl.exec_cmd("colorpicker")
end)
hl.bind("SUPER + SHIFT + R", function()
hl.exec_cmd("autostart-manage run-wayland")
end)
hl.bind(" + XF86AudioPlay", function()
hl.exec_cmd("playerctl play-pause")
end, { locked = true })
hl.bind(" + XF86AudioPause", function()
hl.exec_cmd("playerctl pause")
end, { locked = true })
hl.bind(" + XF86AudioNext", function()
hl.exec_cmd("playerctl next")
end, { locked = true })
hl.bind(" + XF86AudioPrev", function()
hl.exec_cmd("playerctl prev")
end, { locked = true })
hl.bind("SUPER + h", hl.dsp.focus({ direction = "l" }))
hl.bind("SUPER + j", hl.dsp.focus({ direction = "d" }))
hl.bind("SUPER + k", hl.dsp.focus({ direction = "u" }))
hl.bind("SUPER + l", hl.dsp.focus({ direction = "r" }))
hl.bind("SUPER + SHIFT + h", hl.dsp.window.move({ direction = "l" }))
hl.bind("SUPER + SHIFT + j", hl.dsp.window.move({ direction = "d" }))
hl.bind("SUPER + SHIFT + k", hl.dsp.window.move({ direction = "u" }))
hl.bind("SUPER + SHIFT + l", hl.dsp.window.move({ direction = "r" }))
-- hl.bind("SUPER + CTRL + h", hl.dsp.layoutmsg({ "preselect l" }))
-- hl.bind("SUPER + CTRL + j", hl.dsp.layoutmsg({ "preselect d" }))
-- hl.bind("SUPER + CTRL + k", hl.dsp.layoutmsg({ "preselect u" }))
-- hl.bind("SUPER + CTRL + l", hl.dsp.layoutmsg({ "preselect r" }))
hl.bind("SUPER + 1", hl.dsp.focus({ workspace = WS01 }))
hl.bind("SUPER + 2", hl.dsp.focus({ workspace = WS02 }))
hl.bind("SUPER + 3", hl.dsp.focus({ workspace = WS03 }))
hl.bind("SUPER + 4", hl.dsp.focus({ workspace = WS04 }))
hl.bind("SUPER + 5", hl.dsp.focus({ workspace = WS05 }))
hl.bind("SUPER + 6", hl.dsp.focus({ workspace = WS06 }))
hl.bind("SUPER + 7", hl.dsp.focus({ workspace = WS07 }))
hl.bind("SUPER + 8", hl.dsp.focus({ workspace = WS08 }))
hl.bind("SUPER + 9", hl.dsp.focus({ workspace = WS09 }))
hl.bind("SUPER + 0", hl.dsp.focus({ workspace = WS10 }))
hl.bind("SUPER + SHIFT + 1", hl.dsp.window.move({ workspace = WS01, follow = false }))
hl.bind("SUPER + SHIFT + 2", hl.dsp.window.move({ workspace = WS02, follow = false }))
hl.bind("SUPER + SHIFT + 3", hl.dsp.window.move({ workspace = WS03, follow = false }))
hl.bind("SUPER + SHIFT + 4", hl.dsp.window.move({ workspace = WS04, follow = false }))
hl.bind("SUPER + SHIFT + 5", hl.dsp.window.move({ workspace = WS05, follow = false }))
hl.bind("SUPER + SHIFT + 6", hl.dsp.window.move({ workspace = WS06, follow = false }))
hl.bind("SUPER + SHIFT + 7", hl.dsp.window.move({ workspace = WS07, follow = false }))
hl.bind("SUPER + SHIFT + 8", hl.dsp.window.move({ workspace = WS08, follow = false }))
hl.bind("SUPER + SHIFT + 9", hl.dsp.window.move({ workspace = WS09, follow = false }))
hl.bind("SUPER + SHIFT + 0", hl.dsp.window.move({ workspace = WS10, follow = false }))
hl.bind("SUPER + dead_circumflex", hl.dsp.focus({ workspace = WS_FOCUS }))
hl.bind("SUPER + SHIFT + dead_circumflex", hl.dsp.window.move({ workspace = WS_FOCUS, follow = false }))
hl.bind("SUPER + mouse:272", hl.dsp.window.drag())
hl.bind("SUPER + mouse:273", hl.dsp.window.resize())
hl.bind("XF86AudioLowerVolume", hl.dsp.pass({ window = "class:TeamSpeak 3" }))
hl.bind("XF86AudioRaiseVolume", hl.dsp.pass({ window = "class:TeamSpeak 3" }))

View file

@ -1,18 +0,0 @@
$ws01 = name:[01]
$ws02 = name:[02]
$ws03 = name:[03]
$ws04 = name:[04]
$ws05 = name:[05]
$ws06 = name:[06]
$ws07 = name:[07]
$ws08 = name:[08]
$ws09 = name:[09]
$ws10 = name:[10]
$ws_web = $ws01
$ws_focus = $ws07
$ws_media = $ws08
$ws_chat = $ws09
$ws_msg = $ws10
$ws_steam = $ws_media

16
.config/hypr/defaults.lua Normal file
View file

@ -0,0 +1,16 @@
WS01 = "name:[01]"
WS02 = "name:[02]"
WS03 = "name:[03]"
WS04 = "name:[04]"
WS05 = "name:[05]"
WS06 = "name:[06]"
WS07 = "name:[07]"
WS08 = "name:[08]"
WS09 = "name:[09]"
WS10 = "name:[10]"
WS_WEB = "name:[01]"
WS_FOCUS = "name:[07]"
WS_MEDIA = "name:[08]"
WS_CHAT = "name:[09]"
WS_MSG = "name:[10]"
WS_STEAM = "name:[08]"

View file

@ -1,39 +0,0 @@
# dracula/hyprland
general {
#col.active_border = rgb(44475a) rgb(bd93f9) 90deg
#col.inactive_border = rgba(44475aaa)
col.nogroup_border = rgba(282a36dd)
col.nogroup_border_active = rgb(bd93f9) rgb(44475a) 90deg
border_size = 2
# non-gradient alternative
col.active_border = rgb(bd93f9)
col.inactive_border = rgba(44475aaa)
#col.group_border = rgba(282a36dd)
#col.group_border_active = rgb(bd93f9)
# darker alternative
#col.active_border = rgb(44475a) # or rgb(6272a4)
#col.inactive_border = rgb(282a36)
#col.group_border = rgb(282a36)
#col.group_border_active = rgb(44475a) # or rgb(6272a4)
}
decoration:shadow {
color = rgba(1E202966)
# suggested shadow setting
#drop_shadow = yes
#shadow_range = 60
#shadow_offset = 1 2
#shadow_render_power = 3
#shadow_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

24
.config/hypr/dracula.lua Normal file
View file

@ -0,0 +1,24 @@
hl.config({
general = {
border_size = 2,
col = {
active_border = "rgba(bd93f9ff)",
inactive_border = "rgba(44475aaa)",
nogroup_border = "rgba(282a36dd)",
nogroup_border_active = "rgba(bd93f9ff)",
},
},
group = {
groupbar = {
col = {
active = "rgba(bd93f9ff)",
inactive = "rgba(282a36dd)",
},
},
},
decoration = {
shadow = {
color = "rgba(1E202966)",
},
},
})

View file

@ -1,11 +0,0 @@
# Some default env vars.
env = XCURSOR_SIZE,24
env = XCURSOR_THEME,Dracula-cursors
env = HYPRCURSOR_THEME,hyprcursor_Dracula
env = HYPRCURSOR_SIZE,24
env = GDK_BACKEND,wayland,x11
env = QT_QPA_PLATFORM,wayland;xcb
env = SDL_VIDEODRIVER,wayland
env = CLUTTER_BACKEND,wayland

8
.config/hypr/env.lua Normal file
View file

@ -0,0 +1,8 @@
hl.env("XCURSOR_SIZE", "24")
hl.env("XCURSOR_THEME", "Dracula-cursors")
hl.env("HYPRCURSOR_THEME", "hyprcursor_Dracula")
hl.env("HYPRCURSOR_SIZE", "24")
hl.env("GDK_BACKEND", "wayland,x11")
hl.env("QT_QPA_PLATFORM", "wayland;xcb")
hl.env("SDL_VIDEODRIVER", "wayland")
hl.env("CLUTTER_BACKEND", "wayland")

View file

@ -1,8 +0,0 @@
$mon1 = DP-1
$mon2 = HDMI-A-1
monitor = $mon1,2560x1440@180,auto-right,1.25
monitor = $mon2,2560x1440@60,0x0,1.25
monitor = $mon2, addreserved, 0, 0, 0, 1530
source = ~/.config/hypr/lib/7_3_ws_layout.conf

View file

@ -1,8 +0,0 @@
$mon1 = DP-1
$mon2 = HDMI-A-1
$mon = $mon1
monitor = $mon1,2560x1440@144,0x0,auto
monitor = $mon2,disable
source = ~/.config/hypr/lib/single_mon.conf

View file

@ -1,8 +0,0 @@
$mon1 = DP-1
$mon2 = HDMI-A-1
$mon = $mon2
monitor = $mon1,disable
monitor = $mon2,2560x1440@60,0x0,1.25
source = ~/.config/hypr/lib/single_mon.conf

View file

@ -1,7 +0,0 @@
$mon1 = DP-1
$mon2 = HDMI-A-1
monitor = $mon1,2560x1440@180,auto-right,1.25
monitor = $mon2,2560x1440@60,0x0,1.25
source = ~/.config/hypr/lib/7_3_ws_layout.conf

View file

@ -1,7 +0,0 @@
$mon1 = eDP-1
$mon2 = HDMI-A-2
monitor = $mon1,1600x900@60,0x0,auto
monitor = $mon2,preferred,1600x0,auto
source = ~/.config/hypr/lib/7_3_ws_layout.conf

View file

@ -1,8 +0,0 @@
$mon1 = eDP-1
$mon2 = HDMI-A-2
$mon = $mon1
monitor = $mon1,1600x900@60,0x0,auto
monitor = $mon2,disable
source = ~/.config/hypr/lib/single_mon.conf

View file

@ -0,0 +1,23 @@
MON1 = "DP-1"
MON2 = "HDMI-A-1"
hl.monitor({
output = "DP-1",
mode = "2560x1440@180",
position = "auto-right",
scale = 1.25,
})
hl.monitor({
output = "HDMI-A-1",
mode = "2560x1440@60",
position = "0x0",
scale = 1.25,
reserved_area = {
top = 0,
bottom = 0,
left = 0,
right = 1530
}
})
require("lib.7_3_ws_layout")

View file

@ -0,0 +1,16 @@
MON1 = "DP-1"
MON2 = "HDMI-A-1"
MON = MON1
hl.monitor({
output = MON1,
mode = "2560x1440@180",
position = "0x0",
scale = 1.25,
})
hl.monitor({
output = MON2,
disabled = true,
})
require("lib.single_mon")

View file

@ -0,0 +1,16 @@
MON1 = "DP-1"
MON2 = "HDMI-A-1"
MON = MON2
hl.monitor({
output = MON1,
disabled = true,
})
hl.monitor({
output = MON2,
mode = "2560x1440@60",
position = "0x0",
scale = 1.25,
})
require("lib.single_mon")

View file

@ -0,0 +1,17 @@
MON1 = "DP-1"
MON2 = "HDMI-A-1"
hl.monitor({
output = "DP-1",
mode = "2560x1440@180",
position = "auto-right",
scale = 1.25,
})
hl.monitor({
output = "HDMI-A-1",
mode = "2560x1440@60",
position = "0x0",
scale = 1.25,
})
require("lib.7_3_ws_layout")

View file

@ -1,14 +0,0 @@
source = ~/.config/hypr/dracula.conf
source = ~/.config/hypr/defaults.conf
source = ~/.config/hypr/host.conf
source = ~/.config/hypr/env.conf
source = ~/.config/hypr/vars.conf
source = ~/.config/hypr/binds.conf
source = ~/.config/hypr/rules.conf
exec-once = autostart-manage sync wayland,hyprland
exec-once = autostart-manage run-wayland
exec = xsetroot -cursor_name left_ptr

18
.config/hypr/hyprland.lua Normal file
View file

@ -0,0 +1,18 @@
require("dracula")
require("defaults")
require("host")
require("env")
require("vars")
require("binds")
require("rules")
hl.on("hyprland.start", function()
hl.exec_cmd("autostart-manage sync wayland,hyprland")
hl.exec_cmd("autostart-manage run-wayland")
end)
-- MIGRATION_NOTE: 'exec' (non-once) commands — these run on every reload.
-- Consider if they should be in hyprland.start or another event.
hl.on("monitor.layout_changed", function()
hl.exec_cmd("xsetroot -cursor_name left_ptr")
end)

View file

@ -1,22 +0,0 @@
workspace=$ws01, monitor:$mon1, default:true
workspace=$ws02, monitor:$mon1
workspace=$ws03, monitor:$mon1
workspace=$ws04, monitor:$mon1
workspace=$ws05, monitor:$mon1
workspace=$ws06, monitor:$mon1
workspace=$ws07, monitor:$mon1
workspace=$ws08, monitor:$mon2
workspace=$ws09, monitor:$mon2, default:true
workspace=$ws10, monitor:$mon2
exec = hyprctl dispatch moveworkspacetomonitor $ws01 $mon1
exec = hyprctl dispatch moveworkspacetomonitor $ws02 $mon1
exec = hyprctl dispatch moveworkspacetomonitor $ws03 $mon1
exec = hyprctl dispatch moveworkspacetomonitor $ws04 $mon1
exec = hyprctl dispatch moveworkspacetomonitor $ws05 $mon1
exec = hyprctl dispatch moveworkspacetomonitor $ws06 $mon1
exec = hyprctl dispatch moveworkspacetomonitor $ws07 $mon1
exec = hyprctl dispatch moveworkspacetomonitor $ws08 $mon2
exec = hyprctl dispatch moveworkspacetomonitor $ws09 $mon2
exec = hyprctl dispatch moveworkspacetomonitor $ws10 $mon2

View file

@ -0,0 +1,48 @@
-- hyprland.lua
-- Generated by hypr-migrate from: 7_3_ws_layout.conf
-- Hyprland >= 0.55 required — https://wiki.hypr.land/
--
-- MIGRATION SUMMARY:
-- Variables: 0 resolved
-- Config keys: 0 emitted
-- Monitors: 0
-- Keybinds: 0 total, 0 collapsed into loops
-- Window rules: 0 total, 0 merged
-- Workspace rules: 10
-- Exec commands: 10
-- Gestures: 0
-- Warnings: 0 ← search MIGRATION_WARNING
-- Review needed: 0 ← search MIGRATION_NOTE
--
-- IMPORTANT: Verify output against https://wiki.hypr.land/ before use
-- The wiki is the only authoritative reference for Lua syntax.
require("defaults")
hl.workspace_rule({ workspace = WS01, monitor = MON1 })
hl.workspace_rule({ workspace = WS02, monitor = MON1 })
hl.workspace_rule({ workspace = WS03, monitor = MON1 })
hl.workspace_rule({ workspace = WS04, monitor = MON1 })
hl.workspace_rule({ workspace = WS05, monitor = MON1 })
hl.workspace_rule({ workspace = WS06, monitor = MON1 })
hl.workspace_rule({ workspace = WS07, monitor = MON1 })
hl.workspace_rule({ workspace = WS08, monitor = MON2 })
hl.workspace_rule({ workspace = WS09, monitor = MON2 })
hl.workspace_rule({ workspace = WS10, monitor = MON2 })
-- MIGRATION_NOTE: 'exec' (non-once) commands — these run on every reload.
-- Consider if they should be in hyprland.start or another event.
hl.on("monitor.layout_changed", function()
hl.dsp.workspace.move({ workspace = WS01, monitor = MON1 })
hl.dsp.workspace.move({ workspace = WS02, monitor = MON1 })
hl.dsp.workspace.move({ workspace = WS03, monitor = MON1 })
hl.dsp.workspace.move({ workspace = WS04, monitor = MON1 })
hl.dsp.workspace.move({ workspace = WS05, monitor = MON1 })
hl.dsp.workspace.move({ workspace = WS06, monitor = MON1 })
hl.dsp.workspace.move({ workspace = WS07, monitor = MON1 })
hl.dsp.workspace.move({ workspace = WS08, monitor = MON2 })
hl.dsp.workspace.move({ workspace = WS09, monitor = MON2 })
hl.dsp.workspace.move({ workspace = WS10, monitor = MON2 })
hl.dsp.focus({ workspace = WS01 })
hl.dsp.focus({ workspace = WS09 })
end)

View file

@ -1,21 +0,0 @@
workspace=$ws01, monitor:$mon, default:true
workspace=$ws02, monitor:$mon
workspace=$ws03, monitor:$mon
workspace=$ws04, monitor:$mon
workspace=$ws05, monitor:$mon
workspace=$ws06, monitor:$mon
workspace=$ws07, monitor:$mon
workspace=$ws08, monitor:$mon
workspace=$ws09, monitor:$mon
workspace=$ws10, monitor:$mon
exec = hyprctl dispatch moveworkspacetomonitor $ws01 $mon
exec = hyprctl dispatch moveworkspacetomonitor $ws02 $mon
exec = hyprctl dispatch moveworkspacetomonitor $ws03 $mon
exec = hyprctl dispatch moveworkspacetomonitor $ws04 $mon
exec = hyprctl dispatch moveworkspacetomonitor $ws05 $mon
exec = hyprctl dispatch moveworkspacetomonitor $ws06 $mon
exec = hyprctl dispatch moveworkspacetomonitor $ws07 $mon
exec = hyprctl dispatch moveworkspacetomonitor $ws08 $mon
exec = hyprctl dispatch moveworkspacetomonitor $ws09 $mon
exec = hyprctl dispatch moveworkspacetomonitor $ws10 $mon

View file

@ -0,0 +1,47 @@
-- hyprland.lua
-- Generated by hypr-migrate from: single_mon.conf
-- Hyprland >= 0.55 required — https://wiki.hypr.land/
--
-- MIGRATION SUMMARY:
-- Variables: 0 resolved
-- Config keys: 0 emitted
-- Monitors: 0
-- Keybinds: 0 total, 0 collapsed into loops
-- Window rules: 0 total, 0 merged
-- Workspace rules: 10
-- Exec commands: 10
-- Gestures: 0
-- Warnings: 0 ← search MIGRATION_WARNING
-- Review needed: 0 ← search MIGRATION_NOTE
--
-- IMPORTANT: Verify output against https://wiki.hypr.land/ before use
-- The wiki is the only authoritative reference for Lua syntax.
require("defaults")
hl.workspace_rule({ workspace = WS01, monitor = MON })
hl.workspace_rule({ workspace = WS02, monitor = MON })
hl.workspace_rule({ workspace = WS03, monitor = MON })
hl.workspace_rule({ workspace = WS04, monitor = MON })
hl.workspace_rule({ workspace = WS05, monitor = MON })
hl.workspace_rule({ workspace = WS06, monitor = MON })
hl.workspace_rule({ workspace = WS07, monitor = MON })
hl.workspace_rule({ workspace = WS08, monitor = MON })
hl.workspace_rule({ workspace = WS09, monitor = MON })
hl.workspace_rule({ workspace = WS10, monitor = MON })
-- MIGRATION_NOTE: 'exec' (non-once) commands — these run on every reload.
-- Consider if they should be in hyprland.start or another event.
hl.on("monitor.layout_changed", function()
hl.dsp.workspace.move({ workspace = WS01, monitor = MON1 })
hl.dsp.workspace.move({ workspace = WS02, monitor = MON1 })
hl.dsp.workspace.move({ workspace = WS03, monitor = MON1 })
hl.dsp.workspace.move({ workspace = WS04, monitor = MON1 })
hl.dsp.workspace.move({ workspace = WS05, monitor = MON1 })
hl.dsp.workspace.move({ workspace = WS06, monitor = MON1 })
hl.dsp.workspace.move({ workspace = WS07, monitor = MON1 })
hl.dsp.workspace.move({ workspace = WS08, monitor = MON1 })
hl.dsp.workspace.move({ workspace = WS09, monitor = MON1 })
hl.dsp.workspace.move({ workspace = WS10, monitor = MON1 })
hl.dsp.focus({ workspace = WS01 })
end)

View file

@ -1,86 +0,0 @@
# Layer rules
layerrule = no_anim on, match:namespace menu
layerrule = no_anim on, match:namespace notifications
# Workspace rules
workspace = w[t1], gapsin:0, gapsout:0, border:0
windowrule = workspace $ws_web silent, match:class (org.qutebrowser.qutebrowser)
windowrule = workspace $ws_web silent, match:class ([bB]rave-browser)
windowrule = workspace $ws_web, match:class (firefox)
windowrule = workspace $ws_focus, match:class ^(jetbrains-)
windowrule = workspace $ws_media, match:class ([cC]hromium)
windowrule = workspace $ws_media, match:class (io.freetubeapp.FreeTube)
windowrule = workspace $ws_media, match:class (org.qutebrowser.qutebrowser-kiosk)
windowrule = workspace $ws_media, match:class ([bB]rave-.*-Default)
windowrule = workspace $ws_chat silent, match:class (discord)
windowrule = workspace $ws_chat silent, match:class (Element)
windowrule = workspace $ws_chat silent, match:class (cinny)
windowrule = workspace $ws_chat silent, match:class (im.riot.Riot)
windowrule = workspace $ws_chat silent, match:class (TeamSpeak 3)
windowrule = workspace $ws_chat silent, match:class (TeamSpeak)
windowrule = workspace $ws_msg silent, match:class (thunderbird|net.thunderbird.Thunderbird)
windowrule = workspace $ws_msg silent, match:class ^(Signal|org.signal.Signal)
windowrule = workspace $ws02, match:class (OMNeT\+\+ IDE)
windowrule = workspace $ws03, match:class (Qtenv)
# General rules
windowrule = no_blur on, match:class ^$ # intended for menus. not sure about side-effects
# Specific rules
windowrule = float on, match:class (xdg-desktop-portal-gtk)
windowrule = float on, match:class ([bB]rave-browser), match:initial_title ^about:blank - Brave$
windowrule = no_initial_focus on, match:class (thunderbird|net.thunderbird.Thunderbird), match:title ^$
windowrule = float on, match:class (thunderbird|net.thunderbird.Thunderbird), match:title ^$
windowrule = float on, match:class (thunderbird|net.thunderbird.Thunderbird), match:title (Reminder)
windowrule = float on, match:class (org.keepassxc.KeePassXC), match:title (KeePassXC - Browser Access Request)
windowrule = stay_focused on, match:class (Pinentry-gtk)
windowrule = pin on, match:class (Pinentry-gtk)
windowrule = fullscreen on, match:class (FreeTube)
windowrule = float on, match:class (com/.https://ultimaker.UltiMaker-Cura), match:title (UltiMaker-Cura)
windowrule = tile on, match:class (cinny)
windowrule = fullscreen_state 0 0, match:class (cinny)
# https://github.com/hyprwm/Hyprland/issues/4257#issuecomment-1879781806
# fix tooltips (always have a title of `win.<id>`)
windowrule = no_initial_focus on, match:class ^(.*jetbrains.*)$, match:title ^(win.*)$
windowrule = no_focus on, match:class ^(.*jetbrains.*)$, match:title ^(win.*)$
# fix tab dragging (always have a single space character as their title)
windowrule = no_initial_focus on, match:class ^(.*jetbrains.*)$, match:title ^\\s$
windowrule = no_focus on, match:class ^(.*jetbrains.*)$, match:title ^\\s$
# Gaming Rules (steam and games)
windowrule = move 100%-300 100%-30, match:class (steam), match:title ^(notificationtoasts)
windowrule = no_focus on, match:class (steam), match:title ^(notificationtoasts)
windowrule = float on, match:class (zenity), match:title ^(Progress)
windowrule = no_initial_focus on, match:class (steam), match:title ^(Friends List)
windowrule = workspace $ws_chat silent, match:class (steam), match:title ^(Friends List)
windowrule = fullscreen on, match:class ^Minecraft
windowrule = fullscreen on, match:class ^cs2$
windowrule = workspace $ws_focus, match:class ^cs2$
windowrule = fullscreen on, match:class ^factorio$
windowrule = workspace $ws_focus, match:class ^factorio$
windowrule = fullscreen on, match:class ^(steam_app_)
windowrule = workspace $ws_focus, match:class ^(steam_app_)

83
.config/hypr/rules.lua Normal file
View file

@ -0,0 +1,83 @@
require("defaults")
--hl.layer_rule({ match = { namespace = "match:namespace menu" }, no_anim on = true })
--hl.layer_rule({ match = { namespace = "match:namespace notifications" }, no_anim on = true })
-- Workspace rules
hl.workspace_rule({ workspace = "w[t1]", gaps_in = 0, gaps_out = 0, border_size = 0 })
hl.window_rule({ match = { class = "org.qutebrowser.qutebrowser" }, workspace = WS_WEB .. " silent" })
hl.window_rule({ match = { class = "[bB]rave-browser" }, workspace = WS_WEB })
hl.window_rule({ match = { class = "firefox" }, workspace = WS_WEB })
hl.window_rule({ match = { class = "^jetbrains-" }, workspace = WS_FOCUS })
hl.window_rule({ match = { class = "[cC]hromium" }, workspace = WS_MEDIA })
hl.window_rule({ match = { class = "io.freetubeapp.FreeTube" }, workspace = WS_MEDIA, fullscreen = true })
hl.window_rule({ match = { class = "org.qutebrowser.qutebrowser-kiosk" }, workspace = WS_MEDIA })
hl.window_rule({ match = { class = "[bB]rave-.*-Default" }, workspace = WS_MEDIA })
--
hl.window_rule({ match = { class = "discord" }, workspace = WS_CHAT .. " silent" })
hl.window_rule({ match = { class = "Element" }, workspace = WS_CHAT .. " silent" })
hl.window_rule({ match = { class = "[cC]inny" }, workspace = WS_CHAT .. " silent" })
hl.window_rule({ match = { class = "im.riot.Riot" }, workspace = WS_CHAT .. " silent" })
hl.window_rule({ match = { class = "TeamSpeak 3" }, workspace = WS_CHAT })
hl.window_rule({ match = { class = "(thunderbird|net.thunderbird.Thunderbird)" }, workspace = WS_MSG .. " silent" })
hl.window_rule({ match = { class = "^(Signal|org.signal.Signal)" }, workspace = WS_MSG .. " silent" })
-- General rules
hl.window_rule({ match = { class = "^$" }, no_blur = true }) -- intended for menus. not sure about side-effects
-- Specific rules
hl.window_rule({ match = { class = "xdg-desktop-portal-gtk" }, float = true })
hl.window_rule({ match = { class = "([bB]rave-browser)", initial_title = "^about:blank - Brave$" }, float = true })
hl.window_rule({
match = { class = "(thunderbird|net.thunderbird.Thunderbird)", title = "^$" },
no_initial_focus = true,
float = true,
})
hl.window_rule({
match = { class = "(thunderbird|net.thunderbird.Thunderbird)", title = "Reminder" },
float = true,
})
hl.window_rule({
match = { class = "org.keepassxc.KeePassXC", title = "KeePassXC - Browser Access Request" },
float = true,
})
hl.window_rule({ match = { class = "Pinentry-gtk" }, stay_focused = true, pin = true })
-- https://github.com/hyprwm/Hyprland/issues/4257#issuecomment-1879781806
-- fix tooltips (always have a title of `win.<id>`)
hl.window_rule({ match = { class = "^.*jetbrains.*$", title = "^win.*$" }, no_initial_focus = true, no_focus = true })
-- fix tab dragging (always have a single space character as their title)
hl.window_rule({ match = { class = "^.*jetbrains.*$", title = "^\\s$" }, no_initial_focus = true, no_focus = true })
-- Gaming Rules (steam and games)
--
-- hl.window_rule({ match = { class = "" }, workspace = WS_ })
-- -- = move 100%-300 100%-30, match:class (steam), match:title ^(notificationtoasts)
-- hl.window_rule({ match = { class = "" }, workspace = WS_ })
-- -- = no_focus on, match:class (steam), match:title ^(notificationtoasts)
-- hl.window_rule({ match = { class = "" }, workspace = WS_ })
-- -- = float on, match:class (zenity), match:title ^(Progress)
-- hl.window_rule({ match = { class = "" }, workspace = WS_ })
-- -- = no_initial_focus on, match:class (steam), match:title ^(Friends List)
-- hl.window_rule({ match = { class = "" }, workspace = WS_ })
-- -- = workspace $ws_chat silent, match:class (steam), match:title ^(Friends List)
-- --
-- hl.window_rule({ match = { class = "" }, workspace = WS_ })
-- -- = fullscreen on, match:class ^Minecraft
-- hl.window_rule({ match = { class = "" }, workspace = WS_ })
-- -- = fullscreen on, match:class ^cs2$
-- hl.window_rule({ match = { class = "" }, workspace = WS_ })
-- -- = workspace $ws_focus, match:class ^cs2$
-- hl.window_rule({ match = { class = "" }, workspace = WS_ })
-- -- = fullscreen on, match:class ^factorio$
-- hl.window_rule({ match = { class = "" }, workspace = WS_ })
-- -- = workspace $ws_focus, match:class ^factorio$
-- hl.window_rule({ match = { class = "" }, workspace = WS_ })
-- -- = fullscreen on, match:class ^(steam_app_)
-- hl.window_rule({ match = { class = "" }, workspace = WS_ })
-- -- = workspace $ws_focus, match:class ^(steam_app_)

View file

@ -1,87 +0,0 @@
# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
input {
kb_layout = de
kb_variant =
kb_model =
kb_options = compose:menu, caps:none
kb_rules =
numlock_by_default = true
follow_mouse = 1
mouse_refocus = true
accel_profile = flat
touchpad {
natural_scroll = no
}
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
}
general {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
gaps_in = 3
gaps_out = 6
border_size = 1
layout = dwindle
}
cursor {
inactive_timeout = 0
no_warps = true
}
misc {
disable_hyprland_logo = true
background_color = 0x1E1F29
disable_autoreload = true
anr_missed_pings = 10
enable_anr_dialog = false
}
decoration {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
rounding = 3
blur {
enabled = true
size = 3
passes = 1
new_optimizations = true
}
}
animations {
enabled = false
# Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
bezier = overshot, 0.05, 0.9, 0.1, 1.1
animation = windows, 1, 3, overshot, slide
animation = windowsMove, 1, 3, default
animation = fade, 0, 6, default
animation = border, 1, 6, default
animation = workspaces, 1, 6, overshot, slide
}
dwindle {
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
preserve_split = yes # you probably want this
force_split = 2 # always split to right/bottom
}
master {
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
new_status = master
mfact = 0.5
}
xwayland {
force_zero_scaling = true
}

57
.config/hypr/vars.lua Normal file
View file

@ -0,0 +1,57 @@
hl.config({
general = {
border_size = 1,
gaps_in = 3,
gaps_out = 6,
layout = "dwindle",
},
decoration = {
blur = {
enabled = true,
new_optimizations = true,
passes = 1,
size = 3,
},
rounding = 3,
},
input = {
accel_profile = "flat",
follow_mouse = 1,
kb_layout = "de",
kb_model = "",
kb_options = "compose:menu, caps:none",
kb_rules = "",
kb_variant = "",
mouse_refocus = true,
numlock_by_default = true,
sensitivity = 0,
touchpad = {
natural_scroll = false,
},
},
misc = {
anr_missed_pings = 10,
background_color = "rgba(1E1F29ff)",
disable_autoreload = true,
disable_hyprland_logo = true,
enable_anr_dialog = false,
},
xwayland = {
force_zero_scaling = true,
},
cursor = {
inactive_timeout = 0,
no_warps = true,
},
dwindle = {
force_split = 2,
preserve_split = true,
},
master = {
mfact = 0.5,
new_status = "master",
},
animations = {
enabled = false,
},
})