]> Freerunner's - dotfiles.git/commitdiff
hypr: 0.55.x now lua
authorAndre Ramnitz <andre.ramnitz@mail.de>
Sun, 17 May 2026 10:48:03 +0000 (12:48 +0200)
committerAndre Ramnitz <andre.ramnitz@mail.de>
Sun, 17 May 2026 23:14:02 +0000 (01:14 +0200)
hypr: update scripts/gamemode to lua

13 files changed:
dot-config/hypr/fragments/animations.conf
dot-config/hypr/fragments/animations.lua [new file with mode: 0644]
dot-config/hypr/fragments/keybinds.lua [new file with mode: 0644]
dot-config/hypr/fragments/layerrules.lua [new file with mode: 0644]
dot-config/hypr/fragments/windowrules.conf
dot-config/hypr/fragments/windowrules.lua [new file with mode: 0644]
dot-config/hypr/fragments/workspacerules.conf
dot-config/hypr/fragments/workspacerules.lua [new file with mode: 0644]
dot-config/hypr/hyprland.conf
dot-config/hypr/hyprland.lua [new file with mode: 0644]
dot-config/hypr/hyprtoolkit.conf
dot-config/hypr/scripts/custom-accel-windows.py
dot-config/hypr/scripts/gamemode.sh

index f3577c37beda61f3e93c6be36005afbb8bde6193..b53b7c8630fc7cfa3f9cfabff78e3bfa847b8824 100644 (file)
@@ -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 (file)
index 0000000..958b19f
--- /dev/null
@@ -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 (file)
index 0000000..4268312
--- /dev/null
@@ -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 (file)
index 0000000..cf35a4e
--- /dev/null
@@ -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-.*$",
+    },
+})
index 8245a1dd52b7351fbda148bff226f8e15d5dbf4e..4a7388307acb8b0c1041a083d612f66f12abcc9a 100644 (file)
@@ -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 (file)
index 0000000..5ac87f6
--- /dev/null
@@ -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",
+--     },
+})
+
index f51a5a89b13cc1b857e3c86997f2943ce235702e..db5a3a5dcddb88ccd2614bac66ab24d11a05e5b0 100644 (file)
@@ -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 (file)
index 0000000..a65299a
--- /dev/null
@@ -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 })
+
index 9a943071309ac1bae50f3d952111a6707df6d922..6a381b9e94de62e08046f550469d07c1d07c28a8 100644 (file)
@@ -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 (file)
index 0000000..c59a38b
--- /dev/null
@@ -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")
index 739a0d2e26d7285dfe0e4a7302c2caec8718c0fb..a7b4cdec0c70e20f33b6ce7208ae36d899464b34 100644 (file)
@@ -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
index 6041a3822358f2f67a82b7527f05fe54b1519e4e..2f181c519e4eee0c71bbc69cda4c0dc683f7c181 100755 (executable)
@@ -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=<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
@@ -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}\'')
index 19272bd85b86aa9c98016ef166191eade47071a6..c520d1f41e6de9bd2c12f6579bfd5abd20f5106a 100755 (executable)
@@ -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