-# 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%" },
+ },
+ },
+})
--- /dev/null
+-- 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%" })
+
--- /dev/null
+-- 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)
+
--- /dev/null
+-- 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-.*$",
+ },
+})
# ░▀░▀░░▀░░▀░░░▀░▀░▀▀▀░▀░▀░▀░▀░▀▀░░░░▀▀▀░▀▀▀░▀░▀░▀░░░▀▀▀░▀▀▀
# 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
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)$
}
--- /dev/null
+-- 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",
+-- },
+})
+
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,
+-- })
+
--- /dev/null
+-- 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 })
+
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
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
--- /dev/null
+-- 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")
-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
# 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
# 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
return False
-if findArg("help") or findArg("-h") or findArg("--help"):
- print(f'{sys.argv[0]} [[accel_device] [scroll_points] device=<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=<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
# 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):
]
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')
# plt.show()
# exit()
-def getDevice():
+def get_device():
for i in sys.argv:
if str(i).startswith('device='):
print(str(i)[7::])
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}\'')
#!/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