feat: hyprland binds, some window rules, other small feats

This commit is contained in:
2026-06-13 18:08:00 +02:00
parent a253ce56b7
commit 6e35326906
18 changed files with 414 additions and 57 deletions
+33
View File
@@ -0,0 +1,33 @@
#░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
#░ ░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░ ░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░
#▒ ▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒
#▒ ▒▒▒▒ ▒ ▒▒▒ ▒ ▒ ▒▒▒ ▒ ▒▒▒▒▒▒▒▒▒▒ ▒▒ ▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒ ▒ ▒▒▒ ▒ ▒▒▒▒▒▒▒ ▒▒
#▓ ▓▓ ▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓▓ ▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓
#▓ ▓▓▓▓ ▓▓▓▓ ▓▓▓ ▓▓▓ ▓▓ ▓▓▓▓ ▓ ▓▓▓ ▓▓ ▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓
#▓ ▓▓▓▓ ▓▓▓▓▓ ▓▓▓ ▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓ ▓▓ ▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓
#█ ████ ████ ████ ██████ ████ ██ █ ██ ███ █████████████ ██████ █████ ██ ███ ████ █████ █
#██████████████ █████ ████████████████████████████████████████████████████████████████████████████████████████████████ ██
general {
lock_cmd = hyprlock
unlock_cmd = loginctl unlock-session
before_sleep_cmd = hyprlock
inhibit_sleep = 3
}
listener {
timeout = 300
on-timeout = hyprlock --grace 15
}
listener {
timeout = 360
on-timeout = hyprctl dispatch dpms off
on-resume = hyprctl dispatch dpms on
}
listener {
timeout = 600
on-timeout = systemctl suspend
on-resume = hyprctl dispatch dpms on
}
+28 -3
View File
@@ -1,10 +1,35 @@
return function(is_laptop)
local function exit_submap() local function exit_submap()
hl.dispatch(hl.dsp.submap("reset")) hl.dispatch(hl.dsp.submap("reset"))
end end
hl.define_submap("launch", function() hl.define_submap("device", function()
hl.bind("l", function() hl.bind("m", function()
hl.dispatch(hl.dsp.exec_cmd("librewolf")) hl.dispatch(hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"))
exit_submap()
end)
if is_laptop then
hl.bind("d", function()
hl.dispatch(hl.dsp.exec_cmd("notify-send 'Set to mirror internal display' --app-name'Hyprctl'"))
hl.monitor({
output = "HDMI-A-1",
mirror = "eDP-1",
})
exit_submap()
end)
hl.bind("e", function()
hl.dispatch(hl.dsp.exec_cmd("notify-send 'Set to expand internal display' --app-name'Hyprctl'"))
hl.monitor({
output = "HDMI-A-1",
mirror = "",
})
exit_submap()
end)
end
hl.bind("Escape", function()
exit_submap() exit_submap()
end) end)
end) end)
end
+42
View File
@@ -0,0 +1,42 @@
local function exit_submap()
hl.dispatch(hl.dsp.submap("reset"))
end
hl.bind("Super + Q", hl.dsp.exit())
hl.define_submap("groups", function()
hl.bind("c", function()
hl.dispatch(hl.dsp.group.toggle())
exit_submap()
end)
hl.bind("l", function()
hl.dispatch(hl.dsp.group.next())
exit_submap()
end)
hl.bind("h", function()
hl.dispatch(hl.dsp.group.prev())
exit_submap()
end)
hl.bind("Ctrl + L", function()
hl.dispatch(hl.dsp.exec_cmd("notify-send 'Group locking toggled' --app-name='Hyprtclt'"))
hl.dispatch(hl.dsp.group.lock_active())
exit_submap()
end)
hl.bind("Shift + L", function()
hl.dispatch(hl.dsp.window.move({ into_or_create_group = "r" }))
exit_submap()
end)
hl.bind("Shift + H", function()
hl.dispatch(hl.dsp.window.move({ into_or_create_group = "l" }))
exit_submap()
end)
hl.bind("Escape", function()
exit_submap()
end)
end)
+19 -48
View File
@@ -2,76 +2,47 @@ local function exit_submap()
hl.dispatch(hl.dsp.submap("reset")) hl.dispatch(hl.dsp.submap("reset"))
end end
local function launcher(program)
return function ()
hl.dispatch(hl.dsp.exec_cmd(program))
exit_submap()
end
end
hl.define_submap("launch", function() hl.define_submap("launch", function()
-- Librewolf -- Librewolf
hl.bind("l", function() hl.bind("l", launcher("librewolf"))
hl.dispatch(hl.dsp.exec_cmd("librewolf"))
exit_submap()
end)
-- Steam -- Steam
hl.bind("s", function() hl.bind("s", launcher("steam"))
hl.dispatch(hl.dsp.exec_cmd("steam"))
exit_submap()
end)
-- Discord -- Discord
hl.bind("d", function() hl.bind("d", launcher("vesktop"))
hl.dispatch(hl.dsp.exec_cmd("vesktop"))
exit_submap()
end)
-- Kitty -- Kitty
hl.bind("k", function() hl.bind("k", launcher("kitty"))
hl.dispatch(hl.dsp.exec_cmd("kitty")) hl.bind("Return", launcher("kitty"))
exit_submap()
end)
hl.bind("Return", function()
hl.dispatch(hl.dsp.exec_cmd("kitty"))
exit_submap()
end)
-- Filezilla -- Filezilla
hl.bind("f", function() hl.bind("f", launcher("filezilla"))
hl.dispatch(hl.dsp.exec_cmd("filezilla"))
exit_submap()
end)
-- Thunderbird -- Thunderbird
hl.bind("t", function() hl.bind("t", launcher("thunderbird"))
hl.dispatch(hl.dsp.exec_cmd("thunderbird"))
exit_submap()
end)
-- Zathura -- Zathura
hl.bind("z", function() hl.bind("z", launcher("zathura"))
hl.dispatch(hl.dsp.exec_cmd("zathura"))
exit_submap()
end)
-- Brave -- Brave
hl.bind("Shift + B", function() hl.bind("Shift + B", launcher("brave"))
hl.dispatch(hl.dsp.exec_cmd("brave"))
exit_submap()
end)
-- bsmanager -- bsmanager
hl.bind("b", function() hl.bind("b", launcher("/opt/bs-manager/bs-manager"))
hl.dispatch(hl.dsp.exec_cmd("/opt/bs-manager/bs-manager"))
exit_submap()
end)
-- ALVR -- ALVR
hl.bind("p", function() hl.bind("p", launcher("alvr_dashboard"))
hl.dispatch(hl.dsp.exec_cmd("alvr_dashboard"))
exit_submap()
end)
-- Qalculate -- Qalculate
hl.bind("c", function() hl.bind("c", launcher("qalculate-qt"))
hl.dispatch(hl.dsp.exec_cmd("qalculate-qt"))
exit_submap()
end)
-- AirPlay -- AirPlay
hl.bind("a", function() hl.bind("a", function()
@@ -0,0 +1,34 @@
local function exit_submap()
hl.dispatch(hl.dsp.submap("reset"))
end
hl.define_submap("notifications", function()
hl.bind("c", function()
hl.dispatch(hl.dsp.exec_cmd("swaync-client --hide-all"))
exit_submap()
end)
hl.bind("d", function()
hl.dispatch(hl.dsp.exec_cmd("swaync-client --clear-all"))
exit_submap()
end)
hl.bind("h", function()
hl.dispatch(hl.dsp.exec_cmd("swaync-client -cp"))
exit_submap()
end)
hl.bind("s", function()
hl.dispatch(hl.dsp.exec_cmd("swaync-client -op"))
exit_submap()
end)
hl.bind("t", function()
hl.dispatch(hl.dsp.exec_cmd("swaync-client -t"))
exit_submap()
end)
hl.bind("Escape", function()
exit_submap()
end)
end)
+39
View File
@@ -0,0 +1,39 @@
local function exit_submap()
hl.dispatch(hl.dsp.submap("reset"))
end
hl.define_submap("screenshot", function()
hl.bind("y", function()
hl.dispatch(hl.dsp.exec_cmd("grimblast --notify copy area"))
exit_submap()
end)
hl.bind("c", function()
hl.dispatch(hl.dsp.exec_cmd("grimblast --notify copysave area"))
exit_submap()
end)
hl.bind("s", function()
hl.dispatch(hl.dsp.exec_cmd("grimblast --notify save area"))
exit_submap()
end)
hl.bind("Shift + y", function()
hl.dispatch(hl.dsp.exec_cmd("grimblast --notify copy screen"))
exit_submap()
end)
hl.bind("Shift + c", function()
hl.dispatch(hl.dsp.exec_cmd("grimblast --notify copysave screen"))
exit_submap()
end)
hl.bind("Shift + s", function()
hl.dispatch(hl.dsp.exec_cmd("grimblast --notify save screen"))
exit_submap()
end)
hl.bind("Escape", function()
exit_submap()
end)
end)
+42
View File
@@ -0,0 +1,42 @@
local function exit_submap()
hl.dispatch(hl.dsp.submap("reset"))
end
hl.bind("Super + Q", hl.dsp.exit())
hl.define_submap("window", function()
hl.bind("x", function()
hl.dispatch(hl.dsp.exit())
exit_submap()
end)
hl.bind("q", function()
hl.dispatch(hl.dsp.exit())
exit_submap()
end)
hl.bind("f", function()
hl.dispatch(hl.dsp.window.fullscreen({ mode = "fullscreen" }))
exit_submap()
end)
hl.bind("v", function()
hl.dispatch(hl.dsp.window.float())
exit_submap()
end)
hl.bind("c", function()
hl.dispatch(hl.dsp.window.center())
exit_submap()
end)
hl.bind("Shift + K", function()
hl.dispatch(hl.dsp.exec_cmd("notify-send 'Insta-Kill activated' --app-name='Hyprtclt'"))
hl.dispatch(hl.dsp.exec_cmd("hyprctl kill"))
exit_submap()
end)
hl.bind("Escape", function()
exit_submap()
end)
end)
+38
View File
@@ -0,0 +1,38 @@
local function exit_submap()
hl.dispatch(hl.dsp.submap("reset"))
end
for i = 1, 10, 1 do
hl.bind("Super + " .. tostring(i % 10), hl.dsp.focus({ workspace = tostring(i) }))
hl.bind("Super + Shift + " .. tostring(i % 10), hl.dsp.window.move({ workspace = tostring(i), follow = 1 }))
end
hl.bind("Super + h", hl.dsp.focus({ direction = "l" }))
hl.bind("Super + l", hl.dsp.focus({ direction = "r" }))
hl.bind("Super + j", hl.dsp.focus({ direction = "d" }))
hl.bind("Super + k", hl.dsp.focus({ direction = "u" }))
hl.bind("Super + M", hl.dsp.workspace.toggle_special("main"))
hl.bind("Super + Shift + M", hl.dsp.window.move({ workspace = "special:main" }))
hl.define_submap("notifications", function()
for i = 1, 10, 1 do
hl.bind(tostring(i % 10), hl.dsp.focus({ workspace = tostring(i) }))
hl.bind("Shift + " .. tostring(i % 10), hl.dsp.window.move({ workspace = tostring(i), follow = 1 }))
end
hl.bind("h", hl.dsp.focus({ direction = "l" }))
hl.bind("l", hl.dsp.focus({ direction = "r" }))
hl.bind("j", hl.dsp.focus({ direction = "d" }))
hl.bind("k", hl.dsp.focus({ direction = "u" }))
hl.bind("Shift + l", hl.dsp.window.move({ workspace = "+1", follow = 1 }))
hl.bind("Shift + h", hl.dsp.window.move({ workspace = "-1", follow = 1 }))
hl.bind("M", hl.dsp.workspace.toggle_special("main"))
hl.bind("Shift + M", hl.dsp.window.move({ workspace = "special:main" }))
hl.bind("Escape", function()
exit_submap()
end)
end)
+10 -1
View File
@@ -1 +1,10 @@
-- TODO: Check out what this does (pretty sure as in i3) -- TODO: colours
hl.config({
group = {
auto_group = false,
groupbar = {
gradients = true,
}
}
})
@@ -0,0 +1 @@
-- Floating windows & their positioning
@@ -0,0 +1 @@
-- Idleinhibits
@@ -0,0 +1 @@
-- set the layer
@@ -0,0 +1,3 @@
hl.window_rule({
name = ""
})
@@ -0,0 +1,15 @@
-- Set the workspace for certain apps
hl.window_rule({
match = { class = ".*steam_app.*", title = "ALVR.*|^hidden-terminator" },
workspace = 1,
})
hl.window_rule({
match = { class = "evince|okular|org\\.pwmt\\.zathura|librewolf", title = "BSManager|Beat Saber.*" },
workspace = 2,
})
hl.window_rule({
match = { class = "minecraft-launcher", title = ".*Minecraft.*|.*[Ss]team.*" },
workspace = 3,
})
+95
View File
@@ -0,0 +1,95 @@
#░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
#░ ░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░
#▒ ▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒
#▒ ▒▒▒▒ ▒ ▒▒▒ ▒ ▒ ▒▒▒ ▒ ▒ ▒▒▒▒ ▒▒▒▒▒▒▒▒ ▒ ▒▒ ▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒ ▒ ▒▒▒ ▒ ▒▒▒▒▒▒▒ ▒▒
#▓ ▓▓ ▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓
#▓ ▓▓▓▓ ▓▓▓▓ ▓▓▓ ▓▓▓ ▓▓ ▓▓▓▓ ▓ ▓▓▓▓ ▓ ▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓
#▓ ▓▓▓▓ ▓▓▓▓▓ ▓▓▓ ▓ ▓▓▓ ▓▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓▓▓▓▓▓▓ ▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓
#█ ████ ████ ████ ██████ ████ ████ ████████ █ ██ ██████████ ██████ █████ ██ ███ ████ █████ █
#██████████████ █████ ███████████████████████████████████████████████████████████████████████████████████████████████████ ██
# ┌ ┐
# │ BACKGROUND │
# └ ┘
background {
monitor =
path = /home/janis/NextCloud/Wallpapers/nvim/nvim-simple.png # Or screenshot
blur_passes = 1
}
# ┌ ┐
# │ PASSWORD INPUT │
# └ ┘
input-field {
monitor =
size = 300, 40
outline_thickness = 3
dots_size = 0.33 # Scale of input-field height, 0.2 - 0.8
dots_spacing = 0.15 # Scale of dots' absolute size, 0.0 - 1.0
dots_center = false
outer_color = rgb(92, 155, 63)
inner_color = rgb(200, 200, 200)
font_color = rgb(10, 10, 10)
fade_on_empty = true
placeholder_text = <i>Input Password...</i> # Text rendered in the input box when it's empty.
hide_input = false
position = 0, -80
halign = center
valign = center
}
label {
monitor =
text = <b>$TIME</b>
color =
font_size = 150
font_family = Comfortaa
position = 0, 80
halign = center
valign = center
}
label {
monitor =
text = $LAYOUT
color = rgba(200, 200, 200, 1.0)
font_size = 12
font_family = Comfortaa
position = 0, 0
halign = right
valign = bottom
}
label {
monitor =
text = $USER
color = rgba(200, 200, 200, 1.0)
font_size = 12
font_family = Comfortaa
position = 0, 0
halign = left
valign = bottom
shadow_passes = 3
}
label {
monitor =
text = <i>Failed attempts: $ATTEMPTS</i>
color = rgba(200, 0, 0, 1.0)
font_size = 12
font_family = Adwaita Sans
position = 0, 20
halign = center
valign = bottom
shadow_passes = 3
shadow_size = 5
shadow_boost = 3
shadow_color = rgb(255,255,255)
}
+8
View File
@@ -0,0 +1,8 @@
#!/bin/bash
sleep 1
killall xdg-desktop-portal-hyprland
killall xdg-desktop-portal-wlr
killall xdg-desktop-portal
/usr/libexec/xdg-desktop-portal-hyprland &
sleep 2
/usr/lib/xdg-desktop-portal &