From: Andre Ramnitz Date: Sun, 17 May 2026 10:48:03 +0000 (+0200) Subject: hypr: 0.55.x now lua X-Git-Url: https://git.ramnitz.eu/?a=commitdiff_plain;h=48dee7da1305ac1ceb4b8d09912af8dfbf37115d;p=dotfiles.git hypr: 0.55.x now lua hypr: update scripts/gamemode to lua --- diff --git a/dot-config/hypr/fragments/animations.conf b/dot-config/hypr/fragments/animations.conf index f3577c37..b53b7c86 100644 --- a/dot-config/hypr/fragments/animations.conf +++ b/dot-config/hypr/fragments/animations.conf @@ -1,65 +1,78 @@ -# kak: filetype=conf:tabstop=4:indentwidth=4 -# ░█░█░█░█░█▀█░█▀▄░█░░░█▀█░█▀█░█▀▄░░░█▀▀░█▀█░█▀█░█▀▀░▀█▀░█▀▀ -# ░█▀█░░█░░█▀▀░█▀▄░█░░░█▀█░█░█░█░█░░░█░░░█░█░█░█░█▀▀░░█░░█░█ -# ░▀░▀░░▀░░▀░░░▀░▀░▀▀▀░▀░▀░▀░▀░▀▀░░░░▀▀▀░▀▀▀░▀░▀░▀░░░▀▀▀░▀▀▀ - -animations { - enabled = yes - # Default curves - bezier = easeOutQuint,0.23,1,0.32,1 - bezier = easeInOutCubic,0.65,0.05,0.36,1 - bezier = linear,0,0,1,1 - bezier = almostLinear,0.5,0.5,0.75,1.0 - bezier = quick,0.15,0,0.1,1 - - # Custom curves - bezier = border, 1, 1, 1, 1 - bezier = overshoot, 0.05, 0.9, 0.2, 1.00 - - bezier = easeIn, 0.42, 0, 1, 1 - bezier = easeInBack, 0.36, 0, 0.66, -0.56 - bezier = easeInSine, 0.12, 0, 0.39, 0 - bezier = easeInQuart, 0.895, 0.03, 0.685, 0.22 - bezier = easeInQuint, 0.755, 0.05, 0.855, 0.06 - bezier = turboIn, 0.97,0.22,0.9,0.48 - - bezier = easeInOut, 0.42, 0, 0.58, 1 - bezier = easeInOutBack, 0.68, -0.55, 0.265, 1.55 - bezier = easeInOutCirc, 0.785, 0.135, 0.15, 0.86 - bezier = easeInOutExpo, 1, 0, 0, 1 - bezier = easeInOutQuart, 0.77, 0, 0.175, 1 - bezier = easeInOutSine, 0.445, 0.05, 0.55, 0.95 - - bezier = easeOut, 0, 0, 0.58, 1 - bezier = easeOutQuad, 0.5, 1, 0.89, 1 - bezier = easeOutQuart, 0.165, 0.84, 0.44, 1 - bezier = easeOutBounce, 0.5, 1, 0.89, 1 - bezier = turboOut, 0.3, -0.3, 0, 1 - - # Default Animations - animation = global, 1, 10, default - animation = border, 1, 5.39, easeOutQuint - animation = windows, 1, 4.79, easeOutQuint - animation = windowsIn, 1, 4.1, easeOutQuint, popin 87% - animation = windowsOut, 1, 1.49, linear, popin 87% - animation = fade, 1, 3.03, quick - animation = fadeIn, 1, 1.73, almostLinear - animation = fadeOut, 1, 1.46, almostLinear - animation = layers, 1, 3.81, easeOutQuint - animation = layersIn, 1, 4, easeOutQuint, fade - animation = layersOut, 1, 1.5, linear, fade - animation = fadeLayersIn, 1, 1.79, almostLinear - animation = fadeLayersOut, 1, 1.39, almostLinear - animation = workspaces, 1, 1.94, almostLinear, fade - animation = workspacesIn, 1, 1.21, almostLinear, fade - animation = workspacesOut, 1, 1.94, almostLinear, fade - animation = zoomFactor, 1, 7, quick - - # Custom Animations / Overrides - animation = windowsMove, 1, 3, easeOutQuad - # animation = borderangle, 1, 5, border, loop - animation = workspacesIn, 1, 2.91, easeInOutExpo, slidefade 57% - animation = workspacesOut, 1, 2.21, easeInOutExpo, slidefade 57% - -} +-- kak: filetype=lua:tabstop=4:indentwidth=4 +-- ░█░█░█░█░█▀█░█▀▄░█░░░█▀█░█▀█░█▀▄░░░█▀▀░█▀█░█▀█░█▀▀░▀█▀░█▀▀ +-- ░█▀█░░█░░█▀▀░█▀▄░█░░░█▀█░█░█░█░█░░░█░░░█░█░█░█░█▀▀░░█░░█░█ +-- ░▀░▀░░▀░░▀░░░▀░▀░▀▀▀░▀░▀░▀░▀░▀▀░░░░▀▀▀░▀▀▀░▀░▀░▀░░░▀▀▀░▀▀▀ +-- fragments/animations.lua + +hl.config({ + animations = { + enabled = true, + + bezier = { + { "easeOutQuint", 0.23, 1, 0.32, 1 }, + { "easeInOutCubic", 0.65, 0.05, 0.36, 1 }, + { "linear", 0, 0, 1, 1 }, + { "almostLinear", 0.5, 0.5, 0.75, 1.0 }, + { "quick", 0.15, 0, 0.1, 1 }, + + -- custom curves + { "border", 1, 1, 1, 1 }, + { "overshoot", 0.05, 0.9, 0.2, 1.00 }, + + { "easeIn", 0.42, 0, 1, 1 }, + { "easeInBack", 0.36, 0, 0.66, -0.56 }, + { "easeInSine", 0.12, 0, 0.39, 0 }, + { "easeInQuart", 0.895,0.03, 0.685,0.22 }, + { "easeInQuint", 0.755,0.05, 0.855,0.06 }, + { "turboIn", 0.97, 0.22, 0.9, 0.48 }, + + { "easeInOut", 0.42, 0, 0.58, 1 }, + { "easeInOutBack", 0.68,-0.55, 0.265,1.55 }, + { "easeInOutCirc", 0.785,0.135,0.15, 0.86 }, + { "easeInOutExpo", 1, 0, 0, 1 }, + { "easeInOutQuart", 0.77, 0, 0.175,1 }, + { "easeInOutSine", 0.445,0.05, 0.55, 0.95 }, + + { "easeOut", 0, 0, 0.58, 1 }, + { "easeOutQuad", 0.5, 1, 0.89, 1 }, + { "easeOutQuart", 0.165,0.84, 0.44, 1 }, + { "easeOutBounce", 0.5, 1, 0.89, 1 }, + { "turboOut", 0.3, -0.3, 0, 1 }, + }, + + animation = { + -- defaults + { "global", 1, 10, "default" }, + { "border", 1, 5.39, "easeOutQuint" }, + { "windows", 1, 4.79, "easeOutQuint" }, + { "windowsIn", 1, 4.1, "easeOutQuint", "popin 87%" }, + { "windowsOut", 1, 1.49, "linear", "popin 87%" }, + + { "fade", 1, 3.03, "quick" }, + { "fadeIn", 1, 1.73, "almostLinear" }, + { "fadeOut", 1, 1.46, "almostLinear" }, + + { "layers", 1, 3.81, "easeOutQuint" }, + { "layersIn", 1, 4, "easeOutQuint", "fade" }, + { "layersOut", 1, 1.5, "linear", "fade" }, + + { "fadeLayersIn", 1, 1.79, "almostLinear" }, + { "fadeLayersOut", 1, 1.39, "almostLinear" }, + + { "workspaces", 1, 1.94, "almostLinear", "fade" }, + { "workspacesIn", 1, 1.21, "almostLinear", "fade" }, + { "workspacesOut", 1, 1.94, "almostLinear", "fade" }, + + { "zoomFactor", 1, 7, "quick" }, + + -- overrides + { "windowsMove", 1, 3, "easeOutQuad" }, + + -- { "borderangle", 1, 5, "border", "loop" }, + + { "workspacesIn", 1, 2.91, "easeInOutExpo", "slidefade 57%" }, + { "workspacesOut", 1, 2.21, "easeInOutExpo", "slidefade 57%" }, + }, + }, +}) diff --git a/dot-config/hypr/fragments/animations.lua b/dot-config/hypr/fragments/animations.lua new file mode 100644 index 00000000..958b19fa --- /dev/null +++ b/dot-config/hypr/fragments/animations.lua @@ -0,0 +1,53 @@ +-- kak: filetype=lua:tabstop=4:indentwidth=4 +-- ░█░█░█░█░█▀█░█▀▄░█░░░█▀█░█▀█░█▀▄░░░█▀▀░█▀█░█▀█░█▀▀░▀█▀░█▀▀ +-- ░█▀█░░█░░█▀▀░█▀▄░█░░░█▀█░█░█░█░█░░░█░░░█░█░█░█░█▀▀░░█░░█░█ +-- ░▀░▀░░▀░░▀░░░▀░▀░▀▀▀░▀░▀░▀░▀░▀▀░░░░▀▀▀░▀▀▀░▀░▀░▀░░░▀▀▀░▀▀▀ + +-- fragments/animations.lua + +hl.config({ + animations = { + enabled = true, + }, +}) + +-- Default curves and animations, see https://wiki.hypr.land/Configuring/Advanced-and-Cool/Animations/ +hl.curve("easeOutQuint", { type = "bezier", points = { {0.23, 1}, {0.32, 1} } }) +hl.curve("easeInOutCubic", { type = "bezier", points = { {0.65, 0.05}, {0.36, 1} } }) +hl.curve("linear", { type = "bezier", points = { {0, 0}, {1, 1} } }) +hl.curve("almostLinear", { type = "bezier", points = { {0.5, 0.5}, {0.75, 1} } }) +hl.curve("quick", { type = "bezier", points = { {0.15, 0}, {0.1, 1} } }) + +-- Default springs +hl.curve("easy", { type = "spring", mass = 1, stiffness = 71.2633, dampening = 15.8273644 }) + +-- curve overrides +hl.curve("border", { type = "bezier", points = { {1, 1} , {1 , 1} } }) +hl.curve("easeOutQuad", { type = "bezier", points = { {0.5, 1} , {0.89, 1} } }) +hl.curve("easeInOutExpo", { type = "bezier", points = { {1, 0} , {1 , 0} } }) +hl.curve("turboOut", { type = "bezier", points = { {0.3, -0.3}, {0 , 1} } }) + +hl.animation({ leaf = "global", enabled = true, speed = 10, bezier = "default" }) +hl.animation({ leaf = "border", enabled = true, speed = 5.39, bezier = "easeOutQuint" }) +hl.animation({ leaf = "windows", enabled = true, speed = 4.79, spring = "easy" }) +hl.animation({ leaf = "windowsIn", enabled = true, speed = 4.1, spring = "easy", style = "popin 87%" }) +hl.animation({ leaf = "windowsOut", enabled = true, speed = 1.49, bezier = "linear", style = "popin 87%" }) +hl.animation({ leaf = "fadeIn", enabled = true, speed = 1.73, bezier = "almostLinear" }) +hl.animation({ leaf = "fadeOut", enabled = true, speed = 1.46, bezier = "almostLinear" }) +hl.animation({ leaf = "fade", enabled = true, speed = 3.03, bezier = "quick" }) +hl.animation({ leaf = "layers", enabled = true, speed = 3.81, bezier = "easeOutQuint" }) +hl.animation({ leaf = "layersIn", enabled = true, speed = 4, bezier = "easeOutQuint", style = "fade" }) +hl.animation({ leaf = "layersOut", enabled = true, speed = 1.5, bezier = "linear", style = "fade" }) +hl.animation({ leaf = "fadeLayersIn", enabled = true, speed = 1.79, bezier = "almostLinear" }) +hl.animation({ leaf = "fadeLayersOut", enabled = true, speed = 1.39, bezier = "almostLinear" }) +hl.animation({ leaf = "workspaces", enabled = true, speed = 1.94, bezier = "almostLinear", style = "fade" }) +hl.animation({ leaf = "workspacesIn", enabled = true, speed = 1.21, bezier = "almostLinear", style = "fade" }) +hl.animation({ leaf = "workspacesOut", enabled = true, speed = 1.94, bezier = "almostLinear", style = "fade" }) +hl.animation({ leaf = "zoomFactor", enabled = true, speed = 7, bezier = "quick" }) + +-- animation overrides +hl.animation({ leaf = "windowsMove" , enabled = true, speed = 3 , bezier = "easeOutQuad" }) +hl.animation({ leaf = "borderangle" , enabled = true, speed = 1 , bezier = "border", style = "loop" }) +hl.animation({ leaf = "workspacesIn" , enabled = true, speed = 2.91, bezier = "easeInOutExpo", style = "slidefade 57%" }) +hl.animation({ leaf = "workspacesOut", enabled = true, speed = 2.21, bezier = "easeInOutExpo", style = "slidefade 57%" }) + diff --git a/dot-config/hypr/fragments/keybinds.lua b/dot-config/hypr/fragments/keybinds.lua new file mode 100644 index 00000000..42683129 --- /dev/null +++ b/dot-config/hypr/fragments/keybinds.lua @@ -0,0 +1,173 @@ +-- kak: filetype=lua:tabstop=4:indentwidth=4 +-- ░█░█░█░█░█▀█░█▀▄░█░░░█▀█░█▀█░█▀▄░░░█▀▀░█▀█░█▀█░█▀▀░▀█▀░█▀▀ +-- ░█▀█░░█░░█▀▀░█▀▄░█░░░█▀█░█░█░█░█░░░█░░░█░█░█░█░█▀▀░░█░░█░█ +-- ░▀░▀░░▀░░▀░░░▀░▀░▀▀▀░▀░▀░▀░▀░▀▀░░░░▀▀▀░▀▀▀░▀░▀░▀░░░▀▀▀░▀▀▀ + +-- ~/.config/hypr/fragments/keybinds.lua + +-- Mod1 = Alt_L +-- Mod5 = Alt_R +-- Mod4 = Super_L + +local sureMod = "SHIFT + ALT + CTRL" +local mainMod = "SUPER" + +local fallbackterm = "konsole" +local term = "foot" +local floatterm = "foot -a popup -o colors-dark.alpha=0.85 -o colors-bright.alpha=0.85" + +local moveAmount = 120 + +local function exec(cmd) + return hl.dsp.exec_cmd(cmd) +end + +-- mainMod shortcuts +hl.bind(mainMod .. " + Return", exec(term)) +hl.bind(mainMod .. " + CTRL + Return", exec(fallbackterm)) +hl.bind(mainMod .. " + SHIFT + Return", exec(floatterm)) +hl.bind(mainMod .. " + CTRL + SHIFT + Return", exec("alacritty")) + +hl.bind(mainMod .. " + SHIFT + Q", hl.dsp.window.close()) +hl.bind(mainMod .. " + A", hl.dsp.window.pseudo()) +hl.bind(mainMod .. " + B", exec("$HOME/.config/hypr/scripts/browser_focus_or_run.sh")) +hl.bind(mainMod .. " + C", exec("qs -c noctalia-shell ipc call launcher clipboard")) +hl.bind(mainMod .. " + D", exec("qs -c noctalia-shell ipc call launcher toggle")) +hl.bind(mainMod .. " + SHIFT + D", exec("killall fuzzel || fuzzel --config=$HOME/.config/fuzzel/fuzzel-centered.ini")) +hl.bind(mainMod .. " + E", exec("foot -a lf lf")) +hl.bind(mainMod .. " + SHIFT + E", exec("dolphin")) + +hl.bind(mainMod .. " + F", hl.dsp.window.fullscreen({ mode = "maximized" })) +hl.bind(mainMod .. " + SHIFT + F", hl.dsp.window.fullscreen({ mode = "fullscreen" })) + +hl.bind(mainMod .. " + G", hl.dsp.group.toggle()) +hl.bind(mainMod .. " + SHIFT + G", hl.dsp.group.lock_active({ action = "toggle" })) +hl.bind(mainMod .. " + CTRL + G", hl.dsp.window.deny_from_group({ action = "toggle" })) +hl.bind(mainMod .. " + ALT + G", hl.dsp.window.move({ out_of_group = true })) + +hl.bind(mainMod .. " + I", hl.dsp.workspace.toggle_special("overlay")) +hl.bind(mainMod .. " + SHIFT + I", hl.dsp.window.move({ workspace = "special:overlay" })) + +hl.bind(mainMod .. " + P", exec("foot -w 640x400 -a popup -H hyprpicker")) +hl.bind(mainMod .. " + SHIFT + P", hl.dsp.window.pin()) + +hl.bind(mainMod .. " + S", hl.dsp.layout("togglesplit")) +hl.bind(mainMod .. " + SHIFT + S", hl.dsp.layout("swapsplit")) +-- hl.bind(mainMod .. " + S", hl.dsp.layout("colresize +conf")) +-- hl.bind(mainMod .. " + SHIFT + S", hl.dsp.layout("colresize -conf")) + +hl.bind(mainMod .. " + V", hl.dsp.window.float()) +hl.bind(mainMod .. " + W", exec("qs -c noctalia-shell ipc call toast dismiss")) +hl.bind(mainMod .. " + SHIFT + W", exec("qs -c noctalia-shell ipc call bar toggle")) +hl.bind(mainMod .. " + Z", hl.dsp.window.center()) +hl.bind(mainMod .. " + grave", exec("qs -c noctalia-shell ipc call launcher emoji")) + +-- sureMod keys +hl.bind(sureMod .. " + M", hl.dsp.exit()) +hl.bind(sureMod .. " + Return", exec("konsole")) +hl.bind(sureMod .. " + G", exec("~/.config/hypr/scripts/gamemode.sh")) +hl.bind(sureMod .. " + L", exec("~/.config/hypr/scripts/powermenu.sh")) + +-- misc keys +hl.bind(mainMod .. " + Print", exec("flatpak run be.alexandervanhee.gradia --screenshot=INTERACTIVE")) +hl.bind("SHIFT + Print", exec("flatpak run be.alexandervanhee.gradia --screenshot=FULL")) +hl.bind("Alt_L + Alt_R + L", exec("qs -c noctalia-shell ipc call lockScreen lock")) + +-- media keys +hl.bind("XF86AudioRaiseVolume", exec("/home/andy/.local/bin/wp+"), { locked = true }) +hl.bind("XF86AudioLowerVolume", exec("/home/andy/.local/bin/wp-"), { locked = true }) +hl.bind("XF86AudioMute", exec("~/.config/hypr/scripts/muteorunmute.sh"), { locked = true }) +hl.bind("XF86AudioPlay", exec("playerctl play-pause"), { locked = true }) +hl.bind("XF86AudioNext", exec("playerctl next"), { locked = true }) +hl.bind("XF86AudioPrev", exec("playerctl previous"), { locked = true }) +hl.bind("XF86audiostop", exec("playerctl stop"), { locked = true }) + +-- client switcher +hl.bind(mainMod .. " + TAB", exec("~/.config/hypr/scripts/windowswitch-rg.sh")) +hl.bind("ALT + TAB", hl.dsp.focus({ last = true })) + +-- movement +hl.bind(mainMod .. " + left" , hl.dsp.focus({ direction = "l" })) +hl.bind(mainMod .. " + right", hl.dsp.focus({ direction = "r" })) +hl.bind(mainMod .. " + up" , hl.dsp.focus({ direction = "u" })) +hl.bind(mainMod .. " + down" , hl.dsp.focus({ direction = "d" })) +hl.bind(mainMod .. " + H" , hl.dsp.focus({ direction = "l" })) +hl.bind(mainMod .. " + L" , hl.dsp.focus({ direction = "r" })) +hl.bind(mainMod .. " + K" , hl.dsp.focus({ direction = "u" })) +hl.bind(mainMod .. " + J" , hl.dsp.focus({ direction = "d" })) + +-- move windows +hl.bind(mainMod .. " + SHIFT + left" , hl.dsp.window.move({ direction = "l", group_aware = false })) +hl.bind(mainMod .. " + SHIFT + right" , hl.dsp.window.move({ direction = "r", group_aware = false })) +hl.bind(mainMod .. " + SHIFT + up" , hl.dsp.window.move({ direction = "u", group_aware = false })) +hl.bind(mainMod .. " + SHIFT + down" , hl.dsp.window.move({ direction = "d", group_aware = false })) +hl.bind(mainMod .. " + SHIFT + H" , hl.dsp.window.move({ direction = "l", group_aware = false })) +hl.bind(mainMod .. " + SHIFT + L" , hl.dsp.window.move({ direction = "r", group_aware = false })) +hl.bind(mainMod .. " + SHIFT + K" , hl.dsp.window.move({ direction = "u", group_aware = false })) +hl.bind(mainMod .. " + SHIFT + J" , hl.dsp.window.move({ direction = "d", group_aware = false })) + +-- move windows into/out of groups +hl.bind(mainMod .. " + SHIFT + CTRL + left" , hl.dsp.window.move({ direction = "l", group_aware = true })) +hl.bind(mainMod .. " + SHIFT + CTRL + right" , hl.dsp.window.move({ direction = "r", group_aware = true })) +hl.bind(mainMod .. " + SHIFT + CTRL + up" , hl.dsp.window.move({ direction = "u", group_aware = true })) +hl.bind(mainMod .. " + SHIFT + CTRL + down" , hl.dsp.window.move({ direction = "d", group_aware = true })) +hl.bind(mainMod .. " + SHIFT + CTRL + H" , hl.dsp.window.move({ direction = "l", group_aware = true })) +hl.bind(mainMod .. " + SHIFT + CTRL + L" , hl.dsp.window.move({ direction = "r", group_aware = true })) +hl.bind(mainMod .. " + SHIFT + CTRL + K" , hl.dsp.window.move({ direction = "u", group_aware = true })) +hl.bind(mainMod .. " + SHIFT + CTRL + J" , hl.dsp.window.move({ direction = "d", group_aware = true })) + +-- preselect direction +hl.bind("ALT + CTRL + left" , hl.dsp.layout("preselect l")) +hl.bind("ALT + CTRL + right" , hl.dsp.layout("preselect r")) +hl.bind("ALT + CTRL + up" , hl.dsp.layout("preselect u")) +hl.bind("ALT + CTRL + down" , hl.dsp.layout("preselect d")) + +-- group windows +hl.bind(mainMod .. " + O", hl.dsp.group.next()) +hl.bind(mainMod .. " + U", hl.dsp.group.prev()) +hl.bind(mainMod .. " + SHIFT + O", hl.dsp.group.move_window({ forward = true })) +hl.bind(mainMod .. " + SHIFT + U", hl.dsp.group.move_window({ forward = false })) + +-- workspaces +-- Switch workspaces with mainMod + [0-9] +-- Move active window to a workspace with mainMod + SHIFT + [0-9] +for i = 1, 10 do + local key = i % 10 -- 10 maps to key 0 + hl.bind(mainMod .. " + " .. key, hl.dsp.focus({ workspace = i})) + hl.bind(mainMod .. " + SHIFT + " .. key, hl.dsp.window.move({ workspace = i })) + hl.bind(mainMod .. " + CTRL + " .. key, hl.dsp.window.move({ workspace = i })) +end + +-- mouse binds +hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true }) +hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true }) + +-- mouse zoom +hl.bind(mainMod .. " + mouse_down", exec([[hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor | awk '/^float.*/ {print $2 * 1.25}')]])) +hl.bind(mainMod .. " + mouse_up", exec([[hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor | awk '/^float.*/ {print $2 * 0.75}')]])) + +-- workspace mouse wheel tilt +hl.bind(mainMod .. " + mouse_left", exec("~/.config/hypr/scripts/workspace.sh -")) +hl.bind(mainMod .. " + mouse_right", exec("~/.config/hypr/scripts/workspace.sh +")) +hl.bind(mainMod .. " + SHIFT + mouse_left", exec("~/.config/hypr/scripts/workspace.sh - mv")) +hl.bind(mainMod .. " + SHIFT + mouse_right", exec("~/.config/hypr/scripts/workspace.sh + mv")) +hl.bind(mainMod .. " + CTRL + mouse_left", exec("~/.config/hypr/scripts/workspace.sh - mv s")) +hl.bind(mainMod .. " + CTRL + mouse_right", exec("~/.config/hypr/scripts/workspace.sh + mv s")) + +-- submap: resize +hl.bind(mainMod .. " + R", hl.dsp.submap("resize")) + +hl.define_submap("resize", function() + hl.bind("right", hl.dsp.window.resize({ x = 10, y = 0, relative = true }), { repeating = true }) + hl.bind("left", hl.dsp.window.resize({ x = -10, y = 0, relative = true }), { repeating = true }) + hl.bind("up", hl.dsp.window.resize({ x = 0, y = -10, relative = true }), { repeating = true }) + hl.bind("down", hl.dsp.window.resize({ x = 0, y = 10, relative = true }), { repeating = true }) + + hl.bind("l", hl.dsp.window.resize({ x = 10, y = 0, relative = true }), { repeating = true }) + hl.bind("h", hl.dsp.window.resize({ x = -10, y = 0, relative = true }), { repeating = true }) + hl.bind("k", hl.dsp.window.resize({ x = 0, y = -10, relative = true }), { repeating = true }) + hl.bind("j", hl.dsp.window.resize({ x = 0, y = 10, relative = true }), { repeating = true }) + + hl.bind("catchall", hl.dsp.submap("reset")) +end) + diff --git a/dot-config/hypr/fragments/layerrules.lua b/dot-config/hypr/fragments/layerrules.lua new file mode 100644 index 00000000..cf35a4eb --- /dev/null +++ b/dot-config/hypr/fragments/layerrules.lua @@ -0,0 +1,65 @@ +-- kak: filetype=lua:tabstop=4:indentwidth=4 +-- ░█░█░█░█░█▀█░█▀▄░█░░░█▀█░█▀█░█▀▄░░░█▀▀░█▀█░█▀█░█▀▀░▀█▀░█▀▀ +-- ░█▀█░░█░░█▀▀░█▀▄░█░░░█▀█░█░█░█░█░░░█░░░█░█░█░█░█▀▀░░█░░█░█ +-- ░▀░▀░░▀░░▀░░░▀░▀░▀▀▀░▀░▀░▀░▀░▀▀░░░░▀▀▀░▀▀▀░▀░▀░▀░░░▀▀▀░▀▀▀ + +-- kak: filetype=lua + +hl.layer_rule({ + name = "general", + blur_popups = true, + match = { + namespace = "top", + }, +}) + +hl.layer_rule({ + name = "waybar", + blur = true, + ignore_alpha = 0.5, + xray = true, + no_anim = true, + match = { + namespace = "waybar", + }, +}) + +hl.layer_rule({ + name = "mako", + blur = true, + ignore_alpha = 0, + match = { + namespace = "notifications", + }, +}) + +hl.layer_rule({ + name = "gtkdock", + blur = true, + ignore_alpha = 0.5, + xray = true, + match = { + namespace = "GTKDock", + }, +}) + +hl.layer_rule({ + name = "fuzzel", + blur = true, + blur_popups = true, + ignore_alpha = 0.5, + animation = "layers", + match = { + namespace = "launcher", + }, +}) + +hl.layer_rule({ + name = "noctalia", + blur = true, + blur_popups = true, + ignore_alpha = 0.5, + match = { + namespace = "noctalia-background-.*$", + }, +}) diff --git a/dot-config/hypr/fragments/windowrules.conf b/dot-config/hypr/fragments/windowrules.conf index 8245a1dd..4a738830 100644 --- a/dot-config/hypr/fragments/windowrules.conf +++ b/dot-config/hypr/fragments/windowrules.conf @@ -4,18 +4,18 @@ # ░▀░▀░░▀░░▀░░░▀░▀░▀▀▀░▀░▀░▀░▀░▀▀░░░░▀▀▀░▀▀▀░▀░▀░▀░░░▀▀▀░▀▀▀ # hide hyprbars on non-floating windows -windowrule { - name = nobar1 - match:float = 0 - hyprbars:no_bar = 1 -} +# windowrule { +# name = nobar1 +# match:float = 0 +# hyprbars:no_bar = 1 +# } # hide hyprbars on specific windows -windowrule { - name = nobar2 - match:class = ^((steam|io.github.ilya_zlobintsev.LACT).*)$ - hyprbars:no_bar = 1 -} +# windowrule { +# name = nobar2 +# match:class = ^((steam|io.github.ilya_zlobintsev.LACT).*)$ +# hyprbars:no_bar = 1 +# } windowrule { name = floating_enable @@ -139,7 +139,7 @@ windowrule { border_size = 0 content = video tag = +neverdim - hyprbars:no_bar = 1 + # hyprbars:no_bar = 1 match:class = ^(firefox.*)$ match:initial_title = ^(Bild-im-Bild|Picture-in-Picture)$ } diff --git a/dot-config/hypr/fragments/windowrules.lua b/dot-config/hypr/fragments/windowrules.lua new file mode 100644 index 00000000..5ac87f6e --- /dev/null +++ b/dot-config/hypr/fragments/windowrules.lua @@ -0,0 +1,313 @@ +-- kak: filetype=lua:tabstop=4:indentwidth=4 +-- ░█░█░█░█░█▀█░█▀▄░█░░░█▀█░█▀█░█▀▄░░░█▀▀░█▀█░█▀█░█▀▀░▀█▀░█▀▀ +-- ░█▀█░░█░░█▀▀░█▀▄░█░░░█▀█░█░█░█░█░░░█░░░█░█░█░█░█▀▀░░█░░█░█ +-- ░▀░▀░░▀░░▀░░░▀░▀░▀▀▀░▀░▀░▀░▀░▀▀░░░░▀▀▀░▀▀▀░▀░▀░▀░░░▀▀▀░▀▀▀ + +-- ~/.config/hypr/fragments/windowrules.lua + +-- hide hyprbars on non-floating windows +-- hl.window_rule({ +-- name = "nobar1", +-- match = { +-- float = false, +-- }, +-- hyprbars = { +-- no_bar = true, +-- }, +-- }) + +-- hide hyprbars on specific windows +-- hl.window_rule({ +-- name = "nobar2", +-- match = { +-- class = "^((steam|io.github.ilya_zlobintsev.LACT).*)$", +-- }, +-- hyprbars = { +-- no_bar = true, +-- }, +-- }) + +hl.window_rule({ + name = "floating_enable", + float = true, + size = "1280 800", + match = { + class = "^((qtpass|org.ijhack.qtpass|org.kde|smplayer|mpv|ark|lxqt|vlc|pcmanfm|qalculate|kdesystemsettings|org.keepassxc|KeePassXC|gimp|clipse|openrgb|nwg-look|alsa-scarlett-gui|lstopo|org.corectrl.CoreCtrl|LACT|lutris|blueman-manager|org.freedesktop.impl.portal|be.alexandervanhee.gradia|io.missioncenter.MissionCenter|io.github.ilya_zlobintsev.LACT|ncmpcpp).*)$", + }, +}) + +hl.window_rule({ + name = "gimp_mainwindow", + tile = true, + float = false, + match = { + class = "^(gimp)$", + title = "^(.*GIMP)$", + }, +}) + +hl.window_rule({ + name = "nextcloud", + min_size = "1 1", + stay_focused = true, + float = true, + match = { + class = "^(com.nextcloud.desktopclient.nextcloud)$", + }, +}) + +hl.window_rule({ + name = "dialogs_floating_bytitle", + float = true, + match = { + title = "^((Über|About|Öffnen|org.freedesktop.impl.portal.desktop.kde).*)$", + }, +}) + +hl.window_rule({ + name = "dialogs_focused_bytitle", + stay_focused = true, + match = { + title = "^((Über|About|Öffnen|Neuen Ordner erstellen|Datei überschreiben|Create New Folder|org.freedesktop.impl.portal).*)$", + }, +}) + +hl.window_rule({ + name = "dialogs_focused_byclass", + float = true, + stay_focused = true, + match = { + class = "^((org.gnupg.pinentry-qt|org.kde.kwalletd6|org.kde.ksecretd|org.kde.polkit-kde-authentication-agent-1).*)$", + }, +}) + +hl.window_rule({ + name = "game_launchers", + float = true, + match = { + title = "^(.*)auncher$", + }, +}) + +hl.window_rule({ + name = "heroic", + stay_focused = true, + match = { + class = "negative:heroic", + title = "^(.*)Launcher$", + }, +}) + +-- indicate windows with special attention +hl.window_rule({ + name = "upgrayyedd", + border_color = surface, + match = { + initial_title = "^(upgrayyedd)$", + }, +}) + +-- handle windows tray items (xembedsniproxy) +-- dirty: can't match it since class+title are empty +-- maybe more elegant: +-- hyprctl -j clients | jq '.[] | {pid, address} | select(.pid == 6597) | .address' +-- windowrule = opacity 0, title:^()$, class:^()$ +-- windowrule = noblur, title:^()$, class:^()$ + +hl.window_rule({ + name = "browsers", + tag = "+neverdim", + workspace = 1, + group = "deny", + match = { + class = "^(firefox|firefox-bin|org.qutebrowser.qutebrowser|Microsoft-edge.*|qutebrowser)$", + }, +}) + +hl.window_rule({ + name = "workspace3", + pseudo = true, + no_initial_focus = true, + workspace = 3, + match = { + class = "^(Threema.*|discord.*)$", + }, +}) + +hl.window_rule({ + name = "workspace4", + workspace = 4, + match = { + class = "^((deezer|ncmpcpp|spotify|ardour).*)$", + }, +}) + +hl.window_rule({ + name = "workspace5", + workspace = 5, + match = { + class = "^(gimp|krita)$", + }, +}) + +hl.window_rule({ + name = "workspace6", + workspace = 6, + match = { + initial_class = "^(steam|heroic)$", + }, +}) + +hl.window_rule({ + name = "workspace7", + workspace = 7, + match = { + class = "^(pm|tm|pr|thunderbird|thunderbird-bin)$", + }, +}) + +-- handle video PiPs +hl.window_rule({ + name = "windowrule-26", + float = true, + move = "((monitor_w)-813) (55)", + size = "800 450", + no_initial_focus = true, + group = "deny", + pin = true, + border_size = 0, + content = "video", + tag = "+neverdim", + -- hyprbars:no_bar = true, + match = { + class = "^(firefox.*)$", + initial_title = "^(Bild-im-Bild|Picture-in-Picture)$", + }, +}) + +-- handle terminal(s/-apps) +-- windowrule { +-- name = wsize_limit +-- match:class = ^(foot|footclient)$ +-- } + +hl.window_rule({ + name = "popup_class", + float = true, + group = "deny", + size = "1280 800", + match = { + class = "^(popup)$", + }, +}) + +hl.window_rule({ + name = "kakpopupmove", + float = true, + stay_focused = true, + group = "deny", + opacity = "1.0 override", + size = "1200 600", + move = "((monitor_w-1.7*window_w)-20) ((monitor_h-1.2*window_h)-10)", + match = { + class = "^(kakpopup)$", + }, +}) + +-- handle ueberzugpp +hl.window_rule({ + name = "windowrule-49", + no_anim = true, + no_initial_focus = true, + decorate = false, + no_shadow = true, + group = "deny", + match = { + class = "^(ueberzugpp.*)$", + }, +}) + +hl.window_rule({ + name = "steam_general", + float = true, + match = { + initial_class = "^(steam)$", + title = "negative:^()$", + }, + rounding = 3, +}) + +hl.window_rule({ + name = "steam_artifacts", + min_size = "1 1", + match = { + initial_class = "^(steam)$", + title = "^()$", + }, +}) + +hl.window_rule({ + name = "steam_friendlist", + match = { + initial_class = "^(steam)$", + title = "^(Freundesliste|Friendlist)$", + }, + float = true, + size = "300 800", + move = "((monitor_w*1)-window_w-10) ((monitor_h*0.25))", +}) + +-- handle wine/proton games +local GAMES = "^(steam_app_.*|steam_proton|streaming_client|gamescope)$" + +hl.window_rule({ + name = "windowrule-56", + tag = "+game", + match = { + initial_class = GAMES, + }, +}) + +hl.window_rule({ + name = "windowrule-57", + content = "game", + float = true, + no_dim = true, + no_blur = true, + rounding = 0, + no_shadow = true, + no_anim = true, + opaque = true, + min_size = "1280 800", + move = "((monitor_w*0.5)) ((monitor_h*0.5))", + idle_inhibit = "always", + fullscreen = true, + match = { + tag = "game", + }, +}) + +-- handle TAGS (always handle tags last) +hl.window_rule({ + name = "neverdim", + no_dim = true, + match = { + tag = "neverdim", + }, +}) + +hl.window_rule({ + name = "windowrule-60", + fullscreen = true, + match = { + initial_title = "^(vkcube)$", + }, + +-- hl.window_rule({ +-- name = "immediate_exp", +-- immediate = true, +-- match = { +-- initial_title = "tag:game", +-- }, +}) + diff --git a/dot-config/hypr/fragments/workspacerules.conf b/dot-config/hypr/fragments/workspacerules.conf index f51a5a89..db5a3a5d 100644 --- a/dot-config/hypr/fragments/workspacerules.conf +++ b/dot-config/hypr/fragments/workspacerules.conf @@ -17,3 +17,23 @@ workspace = 8, layout:scrolling workspace = 9, layout:scrolling workspace = 0, layout:dwindle workspace = special:magic + + +-- Ref https://wiki.hypr.land/Configuring/Basics/Workspace-Rules/ +-- "Smart gaps" / "No gaps when only" +-- uncomment all if you wish to use that. +-- hl.workspace_rule({ workspace = "1", layout = dwindle }) +-- hl.workspace_rule({ workspace = "f[1]", gaps_out = 0, gaps_in = 0 }) +-- hl.window_rule({ +-- name = "no-gaps-wtv1", +-- match = { float = false, workspace = "w[tv1]" }, +-- border_size = 0, +-- rounding = 0, +-- }) +-- hl.window_rule({ +-- name = "no-gaps-f1", +-- match = { float = false, workspace = "f[1]" }, +-- border_size = 0, +-- rounding = 0, +-- }) + diff --git a/dot-config/hypr/fragments/workspacerules.lua b/dot-config/hypr/fragments/workspacerules.lua new file mode 100644 index 00000000..a65299ac --- /dev/null +++ b/dot-config/hypr/fragments/workspacerules.lua @@ -0,0 +1,18 @@ +-- kak: filetype=lua:tabstop=4:indentwidth=4 +-- ░█░█░█░█░█▀█░█▀▄░█░░░█▀█░█▀█░█▀▄░░░█▀▀░█▀█░█▀█░█▀▀░▀█▀░█▀▀ +-- ░█▀█░░█░░█▀▀░█▀▄░█░░░█▀█░█░█░█░█░░░█░░░█░█░█░█░█▀▀░░█░░█░█ +-- ░▀░▀░░▀░░▀░░░▀░▀░▀▀▀░▀░▀░▀░▀░▀▀░░░░▀▀▀░▀▀▀░▀░▀░▀░░░▀▀▀░▀▀▀ + + +-- Ref https://wiki.hypr.land/Configuring/Basics/Workspace-Rules/ +hl.workspace_rule({ workspace = "1", layout = dwindle }) +hl.workspace_rule({ workspace = "2", layout = dwindle }) +hl.workspace_rule({ workspace = "3", layout = float }) +hl.workspace_rule({ workspace = "4", layout = float }) +hl.workspace_rule({ workspace = "5", layout = dwindle }) +hl.workspace_rule({ workspace = "6", layout = float }) +hl.workspace_rule({ workspace = "7", layout = scrolling }) +hl.workspace_rule({ workspace = "8", layout = scrolling }) +hl.workspace_rule({ workspace = "9", layout = scrolling }) +hl.workspace_rule({ workspace = "10", layout = dwindle }) + diff --git a/dot-config/hypr/hyprland.conf b/dot-config/hypr/hyprland.conf index 9a943071..6a381b9e 100644 --- a/dot-config/hypr/hyprland.conf +++ b/dot-config/hypr/hyprland.conf @@ -31,7 +31,7 @@ exec-once = env XDG_MENU_PREFIX=plasma- kbuildsycoca6 --noincremental exec-once = openrc -U hyprland exec-once = ~/.local/bin/run_after_noctalia.sh exec-once = hyprctl plugin load /usr/lib/hyprland-plugins/dynamic-cursors.so -exec-once = hyprctl plugin load /usr/lib/hyprland-plugins/hyprbars.so +# exec-once = hyprctl plugin load /usr/lib/hyprland-plugins/hyprbars.so exec-shutdown = openrc -U default @@ -235,21 +235,21 @@ debug { disable_logs = 0 # file logging. defaults to 1 for production } -plugin { - hyprbars { - bar_text_font = ZedMono NFP - bar_text_size = 11 - bar_height = 21 - bar_color = rgb(101010) - col.text = rgb(efefef) - bar_part_of_window = 1 - bar_precedence_over_border = 1 - #NOTE: hyprbars-button = color, size, icon, on-click - hyprbars-button = $error, 18, 󰖭, hyprctl dispatch killactive - hyprbars-button = $tertiary, 18, 󰁌, hyprctl dispatch fullscreen 1 - hyprbars-button = $secondary, 18, , hyprctl dispatch movetoworkspacesilent special:min - } -} +# plugin { +# hyprbars { +# bar_text_font = ZedMono NFP +# bar_text_size = 11 +# bar_height = 21 +# bar_color = rgb(101010) +# col.text = rgb(efefef) +# bar_part_of_window = 1 +# bar_precedence_over_border = 1 +# #NOTE: hyprbars-button = color, size, icon, on-click +# hyprbars-button = $error, 18, 󰖭, hyprctl dispatch killactive +# hyprbars-button = $tertiary, 18, 󰁌, hyprctl dispatch fullscreen 1 +# hyprbars-button = $secondary, 18, , hyprctl dispatch movetoworkspacesilent special:min +# } +# } source=./fragments/animations.conf source=./fragments/env.conf diff --git a/dot-config/hypr/hyprland.lua b/dot-config/hypr/hyprland.lua new file mode 100644 index 00000000..c59a38bc --- /dev/null +++ b/dot-config/hypr/hyprland.lua @@ -0,0 +1,314 @@ +-- kak: filetype=lua:tabstop=4:indentwidth=4 +-- ░█░█░█░█░█▀█░█▀▄░█░░░█▀█░█▀█░█▀▄░░░█▀▀░█▀█░█▀█░█▀▀░▀█▀░█▀▀ +-- ░█▀█░░█░░█▀▀░█▀▄░█░░░█▀█░█░█░█░█░░░█░░░█░█░█░█░█▀▀░░█░░█░█ +-- ░▀░▀░░▀░░▀░░░▀░▀░▀▀▀░▀░▀░▀░▀░▀▀░░░░▀▀▀░▀▀▀░▀░▀░▀░░░▀▀▀░▀▀▀ + +------------------ +---- MONITORS ---- +------------------ + +-- See https://wiki.hypr.land/Configuring/Basics/Monitors/ +hl.monitor({ + output = "", + mode = "preferred", + position = "auto", + scale = "auto", +}) + + +--------------------- +---- MY PROGRAMS ---- +--------------------- + +-- Set programs that you use +local terminal = "foot" +local fileManager = "dolphin" +local menu = "qs -c noctalia-shell ipc call launcher toggle" + + +------------------- +---- AUTOSTART ---- +------------------- + +-- See https://wiki.hypr.land/Configuring/Basics/Autostart/ + +-- Autostart necessary processes (like notifications daemons, status bars, etc.) +-- Or execute your favorite apps at launch like this: + +hl.on("hyprland.start", function () + hl.exec_cmd("/usr/libexec/pam_kwallet_init") + hl.exec_cmd("gmenudbusmenuproxy") + hl.exec_cmd("env XDG_MENU_PREFIX=plasma- kbuildsycoca6 --noincremental") + hl.exec_cmd("openrc -U hyprland") + hl.exec_cmd("~/.local/bin/run_after_noctalia.sh") + -- hl.exec_cmd("hyprctl plugin load /usr/lib/hyprland-plugins/dynamic-cursors.so") + -- hl.exec_cmd("hyprctl plugin load /usr/lib/hyprland-plugins/hyprbars.so") +end) + +hl.on("hyprland.shutdown", function() + hl.exec_cmd("openrc -U default") +end) + +------------------------------- +---- ENVIRONMENT VARIABLES ---- +------------------------------- + +-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Environment-variables/ + +hl.env("XCURSOR_SIZE", "32") +hl.env("HYPRCURSOR_SIZE", "32") + + +----------------------- +----- PERMISSIONS ----- +----------------------- + +-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Permissions/ +-- Please note permission changes here require a Hyprland restart and are not applied on-the-fly +-- for security reasons + +-- hl.config({ +-- ecosystem = { +-- enforce_permissions = true, +-- }, +-- }) + +-- hl.permission("/usr/(bin|local/bin)/grim", "screencopy", "allow") +-- hl.permission("/usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland", "screencopy", "allow") +-- hl.permission("/usr/(bin|local/bin)/hyprpm", "plugin", "allow") + + +----------------------- +---- LOOK AND FEEL ---- +----------------------- + +-- Refer to https://wiki.hypr.land/Configuring/Basics/Variables/ +hl.config({ + general = { + gaps_in = 5, + gaps_out = 20, + + border_size = 2, + + col = { + active_border = { colors = {"rgba(33ccffee)", "rgba(00ff99ee)"}, angle = 45 }, + inactive_border = "rgba(595959aa)", + }, + + -- Set to true to enable resizing windows by clicking and dragging on borders and gaps + resize_on_border = false, + + -- Please see https://wiki.hypr.land/Configuring/Advanced-and-Cool/Tearing/ before you turn this on + allow_tearing = false, + + layout = "dwindle", + }, + + decoration = { + rounding = 20, + rounding_power = 2, + + -- Change transparency of focused and unfocused windows + active_opacity = 1.0, + inactive_opacity = 1.0, + + shadow = { + enabled = true, + range = 4, + render_power = 3, + color = 0xee1a1a1a, + }, + + blur = { + enabled = true, + size = 3, + passes = 1, + vibrancy = 0.1696, + }, + }, +}) + +-- Ref https://wiki.hypr.land/Configuring/Basics/Workspace-Rules/ +-- "Smart gaps" / "No gaps when only" +-- uncomment all if you wish to use that. +-- hl.workspace_rule({ workspace = "w[tv1]", gaps_out = 0, gaps_in = 0 }) +-- hl.workspace_rule({ workspace = "f[1]", gaps_out = 0, gaps_in = 0 }) +-- hl.window_rule({ +-- name = "no-gaps-wtv1", +-- match = { float = false, workspace = "w[tv1]" }, +-- border_size = 0, +-- rounding = 0, +-- }) +-- hl.window_rule({ +-- name = "no-gaps-f1", +-- match = { float = false, workspace = "f[1]" }, +-- border_size = 0, +-- rounding = 0, +-- }) + +-- See https://wiki.hypr.land/Configuring/Layouts/Dwindle-Layout/ for more +hl.config({ + dwindle = { + preserve_split = true, -- You probably want this + }, +}) + +-- See https://wiki.hypr.land/Configuring/Layouts/Master-Layout/ for more +hl.config({ + master = { + new_status = "master", + }, +}) + +-- See https://wiki.hypr.land/Configuring/Layouts/Scrolling-Layout/ for more +hl.config({ + scrolling = { + fullscreen_on_one_column = true, + }, +}) + +---------------- +---- MISC ---- +---------------- + +hl.config({ + misc = { + force_default_wallpaper = -1, -- Set to 0 or 1 to disable the anime mascot wallpapers + disable_hyprland_logo = false, -- If true disables the random hyprland logo / anime girl background. :( + }, +}) + +----------------- +---- GROUP ---- +----------------- + +hl.config({ + group = { + merge_groups_on_drag = false, + insert_after_current = true, + + groupbar = { + enabled = true, + font_family = "IBM Plex Sans", + font_size = 14, + font_weight_active = "medium", + font_weight_inactive = "medium", + -- text_color = "0xffefefef", + -- text_color_inactive = "0xff6f6f6f", + height = 12, + scrolling = true, + indicator_gap = 2, + indicator_height = 0, + render_titles = false, + priority = 3, + round_only_edges = true, + gradients = true, + gradient_rounding = 6, + gradient_rounding_power = 2, + gradient_round_only_edges = true, + stacked = false, + gaps_in = 2, + gaps_out = 2, + keep_upper_gap = false, + blur = false, + }, + }, +}) + +--------------- +---- INPUT ---- +--------------- + +hl.config({ + input = { + kb_layout = "us", + kb_variant = "de_se_fi", + kb_model = "", + kb_options = "", + kb_rules = "", + + follow_mouse = 1, + + sensitivity = 0, -- -1.0 - 1.0, 0 means no modification. + + touchpad = { + natural_scroll = false, + }, + }, +}) + +hl.gesture({ + fingers = 3, + direction = "horizontal", + action = "workspace" +}) + +-- Example per-device config +-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Devices/ for more +hl.device({ + name = "razer-razer-basilisk-v3", + sensitivity = -0.0, + accel_profile = "custom 0.2031610269 0.000 0.220 0.441 0.760 1.091 1.423 1.755 2.232 2.736 3.240 3.743 4.247 4.751 5.255 5.758 6.262 6.766 7.270 7.774 8.277 9.318" +}) +hl.device({ + name = "zsa-technology-labs-moonlander-mark-i-1", + sensitivity = -0.2, + accel_profile = "flat" +}) + +-------------------------------- +---- WINDOWS AND WORKSPACES ---- +-------------------------------- + +-- See https://wiki.hypr.land/Configuring/Basics/Window-Rules/ +-- and https://wiki.hypr.land/Configuring/Basics/Workspace-Rules/ + +-- Example window rules that are useful + +local suppressMaximizeRule = hl.window_rule({ + -- Ignore maximize requests from all apps. You'll probably like this. + name = "suppress-maximize-events", + match = { class = ".*" }, + + suppress_event = "maximize", +}) +-- suppressMaximizeRule:set_enabled(false) + +hl.window_rule({ + -- Fix some dragging issues with XWayland + name = "fix-xwayland-drags", + match = { + class = "^$", + title = "^$", + xwayland = true, + float = true, + fullscreen = false, + pin = false, + }, + + no_focus = true, +}) + +-- Layer rules also return a handle. +-- local overlayLayerRule = hl.layer_rule({ +-- name = "no-anim-overlay", +-- match = { namespace = "^my-overlay$" }, +-- no_anim = true, +-- }) +-- overlayLayerRule:set_enabled(false) + +-- Hyprland-run windowrule +hl.window_rule({ + name = "move-hyprland-run", + match = { class = "hyprland-run" }, + + move = "20 monitor_h-120", + float = true, +}) + +require("noctalia.noctalia-colors") +require("fragments.keybinds") +require("fragments.workspacerules") +require("fragments.layerrules") +require("fragments.animations") +require("fragments.windowrules") diff --git a/dot-config/hypr/hyprtoolkit.conf b/dot-config/hypr/hyprtoolkit.conf index 739a0d2e..a7b4cdec 100644 --- a/dot-config/hypr/hyprtoolkit.conf +++ b/dot-config/hypr/hyprtoolkit.conf @@ -1,7 +1,7 @@ -background = rgba(2e3440ff) -base = rgba(2e3440ff) -text = rgba(eceff4ff) -alternate_base = rgba(3b4252ff) -bright_text = rgba(2e3440ff) -accent = rgba(8fbcbbff) -accent_secondary = rgba(88c0d0ff) \ No newline at end of file +background = rgba(1e1e2eff) +base = rgba(1e1e2eff) +text = rgba(cdd6f4ff) +alternate_base = rgba(313244ff) +bright_text = rgba(11111bff) +accent = rgba(cba6f7ff) +accent_secondary = rgba(fab387ff) \ No newline at end of file diff --git a/dot-config/hypr/scripts/custom-accel-windows.py b/dot-config/hypr/scripts/custom-accel-windows.py index 6041a382..2f181c51 100755 --- a/dot-config/hypr/scripts/custom-accel-windows.py +++ b/dot-config/hypr/scripts/custom-accel-windows.py @@ -7,17 +7,19 @@ # assuming windows 10 uses the same calculation as windows 7. # guesses have been made calculation is not accurate # touchpad users make sure your touchpad is calibrated with `sudo libinput measure touchpad-size` + # import matplotlib.pyplot as plt import struct import os import sys +# ===== PARAMETERS ===== # set according to your device: -device_dpi = 2400 # mouse dpi +device_dpi = 1000 # mouse dpi screen_dpi = 109 screen_scaling_factor = 1 -sample_point_count = 30 # should be enough but you can try to increase for accuracy of windows function -sensitivity_factor = 6 +sample_point_count = 21 # should be enough but you can try to increase for accuracy of windows function +sensitivity_factor = 4 # sensitivity factor translation table: (windows slider notches) # 1 = 0.1 # 2 = 0.2 @@ -30,8 +32,9 @@ sensitivity_factor = 6 # 9 = 1.6 # 10 = 1.8 # 11 = 2.0 +# ===== END PARAMETERS ===== -def findArg(arg): +def find_arg(arg): for i in sys.argv: if i == arg: return True @@ -39,9 +42,9 @@ def findArg(arg): return False -if findArg("help") or findArg("-h") or findArg("--help"): - print(f'{sys.argv[0]} [[accel_device] [scroll_points] device=]') - print('To get the device, run `hyprctl devices`') +if find_arg("help") or find_arg("-h") or find_arg("--help") or find_arg("h"): + print(f'{sys.argv[0]} [[accel_profile] [scroll_points] device=]') + print('To get the device, run `hyprctl devices` and get its name') exit(0) # TODO: find accurate formulas for scale x and scale y @@ -50,7 +53,7 @@ scale_x = device_dpi / 1e3 # pointer speed: inch/s to screen pixels/millisecond scale_y = screen_dpi / 1e3 / screen_scaling_factor * sensitivity_factor -print(f'scale_x={scale_x}, scale_y={scale_y}') +# print(f'scale_x={scale_x}, scale_y={scale_y}') def float16x16(num): @@ -75,17 +78,16 @@ b'\x00\xc0\xbb\x01\x00\x00\x00\x00', ] windows_points = [[float16x16(x), float16x16(y)] for x,y in zip(X,Y)] - -print('Windows original points:') -for point in windows_points: - print(point) - # scale windows points according to device config points = [[x * scale_x, y * scale_y] for x, y in windows_points] -print('Windows scaled points') -for point in points: - print(point) +# print('Windows original points:') +# for point in windows_points: +# print(point) + +# print('Windows scaled points') +# for point in points: +# print(point) # plt.plot(*list(zip(*windows_points)), label=f'windows points') @@ -96,7 +98,7 @@ for point in points: # plt.show() # exit() -def getDevice(): +def get_device(): for i in sys.argv: if str(i).startswith('device='): print(str(i)[7::]) @@ -142,12 +144,17 @@ sample_points_str = " ".join(["%.3f" % number for number in sample_points_y]) print(f'\tPoints: {sample_points_str}') print(f'\tStep size: {step:0.10f}') -if (findArg("accel_profile")): - device = getDevice() +def hyprctl(device, option, arg): + os.system(f"hyprctl keyword 'device[{device}]:{option}' '{arg}'") + +if find_arg("accel_profile"): + device = get_device() print(f'Setting device:\'{device}\':accel_profile using hyprctl') - os.system(f'hyprctl keyword device:\'{device}\':accel_profile \'custom {step} {sample_points_str}\'') + hyprctl(device, 'accel_profile', f'custom {step} {sample_points_str}') + # os.system(f'hyprctl keyword device:\'{device}\':accel_profile \'custom {step} {sample_points_str}\'') -if (findArg("scroll_points")): - device = getDevice() +if find_arg("scroll_points"): + device = get_device() print(f'Setting device:\'{device}\':scroll_points using hyprctl') - os.system(f'hyprctl keyword device:\'{device}\':scroll_points \'{step} {sample_points_str}\'') + hyprctl(device, 'scroll_points', f'{step} {sample_points_str}') + # os.system(f'hyprctl keyword device:\'{device}\':scroll_points \'{step} {sample_points_str}\'') diff --git a/dot-config/hypr/scripts/gamemode.sh b/dot-config/hypr/scripts/gamemode.sh index 19272bd8..c520d1f4 100755 --- a/dot-config/hypr/scripts/gamemode.sh +++ b/dot-config/hypr/scripts/gamemode.sh @@ -1,18 +1,40 @@ #!/usr/bin/env sh -HYPRGAMEMODE=$(hyprctl getoption animations:enabled | awk 'NR==1{print $2}') -if [ "$HYPRGAMEMODE" = 1 ] ; then - hyprctl --batch "\ - keyword general:gaps_out 0;\ - keyword animations:enabled 0;\ - keyword animations:enabled 0;\ - keyword decoration:shadow:enabled 0;\ - keyword decoration:blur:enabled 0;\ - keyword general:border_size 1;\ - keyword decoration:rounding 0;\ - keyword group:groupbar:gradient_rounding 0;\ - keyword group:groupbar:rounding 0;\ - keyword input:follow_mouse 0;;\ - keyword input:float_switch_override_focus 2;" +COMFY=$(hyprctl getoption animations:enabled | awk 'NR==1{print $2}') +if [ "$COMFY" = true ] ; then + hyprctl eval 'hl.config({ + general = { + gaps_out = 0, + border_size = 1, + }, + + animations = { + enabled = false, + }, + + decoration = { + rounding = 0, + + shadow = { + enabled = false, + }, + + blur = { + enabled = false, + }, + }, + + group = { + groupbar = { + gradient_rounding = 0, + rounding = 0, + }, + }, + + input = { + follow_mouse = 0, + float_switch_override_focus = 2, + }, + })' qs -c noctalia-shell ipc call powerProfile set Performance qs -c noctalia-shell ipc call powerProfile enableNoctaliaPerformance qs -c noctalia-shell ipc call nightLight disable