Remove backup files from dotfiles
This commit is contained in:
1 parent
c5611d9129
commit
2fe8c8859c
66 files changed
+8
-132969
No files matched your search
@@ -1,14 +0,0 @@
|
||||
# This file was created by fish when upgrading to version 4.3, to migrate
|
||||
# the 'fish_key_bindings' variable from its old default scope (universal)
|
||||
# to its new default scope (global). We recommend you delete this file
|
||||
# and configure key bindings in ~/.config/fish/config.fish if needed.
|
||||
|
||||
# set --global fish_key_bindings fish_default_key_bindings
|
||||
|
||||
# Prior to version 4.3, fish shipped an event handler that runs
|
||||
# `set --universal fish_key_bindings fish_default_key_bindings`
|
||||
# whenever the fish_key_bindings variable is erased.
|
||||
# This means that as long as any fish < 4.3 is still running on this system,
|
||||
# we cannot complete the migration.
|
||||
# As a workaround, erase the universal variable at every shell startup.
|
||||
set --erase --universal fish_key_bindings
|
||||
@@ -1,51 +0,0 @@
|
||||
[main]
|
||||
term=xterm-256color
|
||||
font=Maple Mono Normal:size=9
|
||||
pad=14x14
|
||||
initial-window-mode=windowed
|
||||
workers=0
|
||||
|
||||
[scrollback]
|
||||
multiplier=7.0
|
||||
lines=10000
|
||||
|
||||
[cursor]
|
||||
style=block
|
||||
blink=no
|
||||
|
||||
[colors]
|
||||
foreground=D0D0D0
|
||||
background=151515
|
||||
selection-foreground=F5F5F5
|
||||
selection-background=6C99BB
|
||||
|
||||
cursor=151515 F5F5F5
|
||||
|
||||
regular0=151515
|
||||
regular1=A53C23
|
||||
regular2=7B9246
|
||||
regular3=D3A04D
|
||||
regular4=6C99BB
|
||||
regular5=9F4E85
|
||||
regular6=5EA8A2
|
||||
regular7=D0D0D0
|
||||
|
||||
bright0=505050
|
||||
bright1=A53C23
|
||||
bright2=7B9246
|
||||
bright3=D3A04D
|
||||
bright4=547C99
|
||||
bright5=9F4E85
|
||||
bright6=5EA8A2
|
||||
bright7=F5F5F5
|
||||
|
||||
[key-bindings]
|
||||
clipboard-copy=Control+Insert
|
||||
primary-paste=none
|
||||
clipboard-paste=Shift+Insert
|
||||
|
||||
[text-bindings]
|
||||
# Send Shift+Return as CSI-u so TUIs can distinguish it from Return.
|
||||
\x1b[13;2u=Shift+Return
|
||||
# Send Alt+Shift+Return as CSI-u so tmux can match M-S-Enter.
|
||||
\x1b[13;4u=Mod1+Shift+Return
|
||||
@@ -1,52 +0,0 @@
|
||||
[main]
|
||||
term=xterm-256color
|
||||
font=Maple Mono Normal:size=9
|
||||
pad=14x14
|
||||
initial-window-mode=windowed
|
||||
workers=0
|
||||
|
||||
[scrollback]
|
||||
multiplier=7.0
|
||||
lines=10000
|
||||
|
||||
[cursor]
|
||||
style=block
|
||||
blink=no
|
||||
|
||||
[colors]
|
||||
foreground=D0D0D0
|
||||
background=151515
|
||||
alpha=0.88
|
||||
selection-foreground=F5F5F5
|
||||
selection-background=6C99BB
|
||||
|
||||
cursor=151515 F5F5F5
|
||||
|
||||
regular0=151515
|
||||
regular1=A53C23
|
||||
regular2=7B9246
|
||||
regular3=D3A04D
|
||||
regular4=6C99BB
|
||||
regular5=9F4E85
|
||||
regular6=5EA8A2
|
||||
regular7=D0D0D0
|
||||
|
||||
bright0=505050
|
||||
bright1=A53C23
|
||||
bright2=7B9246
|
||||
bright3=D3A04D
|
||||
bright4=547C99
|
||||
bright5=9F4E85
|
||||
bright6=5EA8A2
|
||||
bright7=F5F5F5
|
||||
|
||||
[key-bindings]
|
||||
clipboard-copy=Control+Shift+c
|
||||
primary-paste=none
|
||||
clipboard-paste=Control+Shift+v
|
||||
|
||||
[text-bindings]
|
||||
# Send Shift+Return as CSI-u so TUIs can distinguish it from Return.
|
||||
\x1b[13;2u=Shift+Return
|
||||
# Send Alt+Shift+Return as CSI-u so tmux can match M-S-Enter.
|
||||
\x1b[13;4u=Mod1+Shift+Return
|
||||
@@ -1,51 +0,0 @@
|
||||
[main]
|
||||
term=xterm-256color
|
||||
font=Maple Mono Normal:size=9
|
||||
pad=14x14
|
||||
initial-window-mode=windowed
|
||||
workers=0
|
||||
|
||||
[scrollback]
|
||||
multiplier=7.0
|
||||
lines=10000
|
||||
|
||||
[cursor]
|
||||
style=block
|
||||
blink=no
|
||||
|
||||
[colors]
|
||||
foreground=D0D0D0
|
||||
background=151515
|
||||
selection-foreground=F5F5F5
|
||||
selection-background=6C99BB
|
||||
|
||||
cursor=151515 F5F5F5
|
||||
|
||||
regular0=151515
|
||||
regular1=A53C23
|
||||
regular2=7B9246
|
||||
regular3=D3A04D
|
||||
regular4=6C99BB
|
||||
regular5=9F4E85
|
||||
regular6=5EA8A2
|
||||
regular7=D0D0D0
|
||||
|
||||
bright0=505050
|
||||
bright1=A53C23
|
||||
bright2=7B9246
|
||||
bright3=D3A04D
|
||||
bright4=547C99
|
||||
bright5=9F4E85
|
||||
bright6=5EA8A2
|
||||
bright7=F5F5F5
|
||||
|
||||
[key-bindings]
|
||||
clipboard-copy=Control+Shift+c
|
||||
primary-paste=none
|
||||
clipboard-paste=Control+Shift+v
|
||||
|
||||
[text-bindings]
|
||||
# Send Shift+Return as CSI-u so TUIs can distinguish it from Return.
|
||||
\x1b[13;2u=Shift+Return
|
||||
# Send Alt+Shift+Return as CSI-u so tmux can match M-S-Enter.
|
||||
\x1b[13;4u=Mod1+Shift+Return
|
||||
@@ -1,264 +0,0 @@
|
||||
-- Hyprland Lua config: dark, minimal, small gaps, Quickshell bar on the left
|
||||
-- https://wiki.hypr.land/Configuring/Start/
|
||||
|
||||
------------------
|
||||
---- MONITORS ----
|
||||
------------------
|
||||
|
||||
hl.monitor({
|
||||
output = "",
|
||||
mode = "preferred",
|
||||
position = "auto",
|
||||
scale = "auto",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- MY PROGRAMS ----
|
||||
---------------------
|
||||
|
||||
local terminal = "foot"
|
||||
local menu = "qs ipc call launcher toggle"
|
||||
|
||||
|
||||
-------------------
|
||||
---- AUTOSTART ----
|
||||
-------------------
|
||||
|
||||
hl.on("hyprland.start", function()
|
||||
hl.exec_cmd("qs") -- Quickshell: bar + launcher
|
||||
hl.exec_cmd("hyprpaper") -- wallpaper, if you use it
|
||||
hl.exec_cmd("wl-clip-persist --clipboard regular") -- Keep copied data available after its source app exits
|
||||
end)
|
||||
|
||||
|
||||
-------------------------------
|
||||
---- ENVIRONMENT VARIABLES ----
|
||||
-------------------------------
|
||||
|
||||
hl.env("XCURSOR_SIZE", "24")
|
||||
hl.env("HYPRCURSOR_SIZE", "24")
|
||||
|
||||
|
||||
hl.env("HYPRCURSOR_THEME", "Bibata-Modern-Ice")
|
||||
hl.env("HYPRCURSOR_SIZE", "18")
|
||||
|
||||
-----------------------
|
||||
---- LOOK AND FEEL ----
|
||||
-----------------------
|
||||
|
||||
hl.config({
|
||||
general = {
|
||||
gaps_in = 5, -- 5 + 5 = 10px between windows
|
||||
gaps_out = 10, -- 10px to screen edges and to the bar
|
||||
|
||||
border_size = 1,
|
||||
|
||||
col = {
|
||||
active_border = "rgba(6b6b6bcc)";
|
||||
inactive_border = "rgba(3a3a3aff)",
|
||||
},
|
||||
|
||||
resize_on_border = false,
|
||||
allow_tearing = false,
|
||||
|
||||
layout = "dwindle",
|
||||
},
|
||||
|
||||
decoration = {
|
||||
rounding = 1,
|
||||
rounding_power = 2,
|
||||
|
||||
active_opacity = 1.0,
|
||||
inactive_opacity = 1.0,
|
||||
|
||||
shadow = {
|
||||
enabled = false,
|
||||
},
|
||||
|
||||
blur = {
|
||||
enabled = true,
|
||||
size = 3,
|
||||
passes = 1,
|
||||
vibrancy = 0.1696,
|
||||
},
|
||||
},
|
||||
|
||||
animations = {
|
||||
enabled = true,
|
||||
},
|
||||
})
|
||||
|
||||
-- Default curves and 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} } })
|
||||
|
||||
hl.curve("easy", { type = "spring", mass = 1, stiffness = 238.1191, dampening = 24.21279333 })
|
||||
|
||||
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" })
|
||||
|
||||
hl.config({
|
||||
dwindle = {
|
||||
preserve_split = true,
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
master = {
|
||||
new_status = "master",
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
scrolling = {
|
||||
fullscreen_on_one_column = true,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
----------------
|
||||
---- MISC ----
|
||||
----------------
|
||||
|
||||
hl.config({
|
||||
misc = {
|
||||
force_default_wallpaper = 0, -- no anime mascot
|
||||
disable_hyprland_logo = true, -- plain dark background
|
||||
background_color = 0xff0b0b0b,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
---------------
|
||||
---- INPUT ----
|
||||
---------------
|
||||
|
||||
hl.config({
|
||||
input = {
|
||||
kb_layout = "us",
|
||||
kb_variant = "",
|
||||
kb_model = "",
|
||||
kb_options = "",
|
||||
kb_rules = "",
|
||||
|
||||
follow_mouse = 1,
|
||||
|
||||
sensitivity = 0,
|
||||
|
||||
touchpad = {
|
||||
natural_scroll = false,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
hl.gesture({
|
||||
fingers = 3,
|
||||
direction = "horizontal",
|
||||
action = "workspace",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- KEYBINDINGS ----
|
||||
---------------------
|
||||
|
||||
local mainMod = "SUPER"
|
||||
|
||||
hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(terminal))
|
||||
local closeWindowBind = hl.bind(mainMod .. " + W", hl.dsp.window.close())
|
||||
hl.bind(mainMod .. " + M", hl.dsp.exec_cmd("command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch 'hl.dsp.exit()'"))
|
||||
hl.bind(mainMod .. " + S", hl.dsp.window.float({ action = "toggle" }))
|
||||
hl.bind(mainMod .. " + F", hl.dsp.window.fullscreen({ mode = "fullscreen", action = "toggle" }))
|
||||
hl.bind(mainMod .. " + D", hl.dsp.exec_cmd(menu))
|
||||
hl.bind(mainMod .. " + P", hl.dsp.window.pseudo())
|
||||
hl.bind(mainMod .. " + J", hl.dsp.layout("togglesplit")) -- dwindle only
|
||||
|
||||
-- Move focus with mainMod + arrow keys
|
||||
hl.bind(mainMod .. " + left", hl.dsp.focus({ direction = "left" }))
|
||||
hl.bind(mainMod .. " + right", hl.dsp.focus({ direction = "right" }))
|
||||
hl.bind(mainMod .. " + up", hl.dsp.focus({ direction = "up" }))
|
||||
hl.bind(mainMod .. " + down", hl.dsp.focus({ direction = "down" }))
|
||||
|
||||
-- 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 }))
|
||||
end
|
||||
|
||||
-- Scroll through existing workspaces with mainMod + scroll
|
||||
hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
|
||||
hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
|
||||
|
||||
-- Move/resize windows with mainMod + LMB/RMB and dragging
|
||||
hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
|
||||
hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true })
|
||||
|
||||
-- Volume / brightness
|
||||
hl.bind("XF86PowerOff", hl.dsp.exec_cmd("qs ipc call power open"), { locked = true, description = "Open the power menu" })
|
||||
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("qs ipc call volume up"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("qs ipc call volume down"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("qs ipc call volume mute"), { locked = true })
|
||||
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%+"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessDown",hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%-"), { locked = true, repeating = true })
|
||||
|
||||
-- Requires playerctl
|
||||
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true })
|
||||
hl.bind("XF86AudioPause", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
|
||||
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
|
||||
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true })
|
||||
|
||||
|
||||
--------------------------------
|
||||
---- WINDOWS AND WORKSPACES ----
|
||||
--------------------------------
|
||||
|
||||
local suppressMaximizeRule = hl.window_rule({
|
||||
name = "suppress-maximize-events",
|
||||
match = { class = ".*" },
|
||||
|
||||
suppress_event = "maximize",
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "fix-xwayland-drags",
|
||||
match = {
|
||||
class = "^$",
|
||||
title = "^$",
|
||||
xwayland = true,
|
||||
float = true,
|
||||
fullscreen = false,
|
||||
pin = false,
|
||||
},
|
||||
|
||||
no_focus = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "move-hyprland-run",
|
||||
match = { class = "hyprland-run" },
|
||||
|
||||
move = "20 monitor_h-120",
|
||||
float = true,
|
||||
})
|
||||
@@ -1,264 +0,0 @@
|
||||
-- Hyprland Lua config: dark, minimal, small gaps, Quickshell bar on the left
|
||||
-- https://wiki.hypr.land/Configuring/Start/
|
||||
|
||||
------------------
|
||||
---- MONITORS ----
|
||||
------------------
|
||||
|
||||
hl.monitor({
|
||||
output = "",
|
||||
mode = "preferred",
|
||||
position = "auto",
|
||||
scale = "auto",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- MY PROGRAMS ----
|
||||
---------------------
|
||||
|
||||
local terminal = "foot"
|
||||
local menu = "qs ipc call launcher toggle"
|
||||
|
||||
|
||||
-------------------
|
||||
---- AUTOSTART ----
|
||||
-------------------
|
||||
|
||||
hl.on("hyprland.start", function()
|
||||
hl.exec_cmd("qs") -- Quickshell: bar + launcher
|
||||
hl.exec_cmd("hyprpaper") -- wallpaper, if you use it
|
||||
hl.exec_cmd("wl-clip-persist --clipboard regular") -- Keep copied data available after its source app exits
|
||||
end)
|
||||
|
||||
|
||||
-------------------------------
|
||||
---- ENVIRONMENT VARIABLES ----
|
||||
-------------------------------
|
||||
|
||||
hl.env("XCURSOR_SIZE", "24")
|
||||
hl.env("HYPRCURSOR_SIZE", "24")
|
||||
|
||||
|
||||
hl.env("HYPRCURSOR_THEME", "Bibata-Modern-Classic")
|
||||
hl.env("HYPRCURSOR_SIZE", "18")
|
||||
|
||||
-----------------------
|
||||
---- LOOK AND FEEL ----
|
||||
-----------------------
|
||||
|
||||
hl.config({
|
||||
general = {
|
||||
gaps_in = 5, -- 5 + 5 = 10px between windows
|
||||
gaps_out = 10, -- 10px to screen edges and to the bar
|
||||
|
||||
border_size = 1,
|
||||
|
||||
col = {
|
||||
active_border = "rgba(6b6b6bcc)";
|
||||
inactive_border = "rgba(3a3a3aff)",
|
||||
},
|
||||
|
||||
resize_on_border = false,
|
||||
allow_tearing = false,
|
||||
|
||||
layout = "dwindle",
|
||||
},
|
||||
|
||||
decoration = {
|
||||
rounding = 1,
|
||||
rounding_power = 2,
|
||||
|
||||
active_opacity = 1.0,
|
||||
inactive_opacity = 1.0,
|
||||
|
||||
shadow = {
|
||||
enabled = false,
|
||||
},
|
||||
|
||||
blur = {
|
||||
enabled = true,
|
||||
size = 3,
|
||||
passes = 1,
|
||||
vibrancy = 0.1696,
|
||||
},
|
||||
},
|
||||
|
||||
animations = {
|
||||
enabled = true,
|
||||
},
|
||||
})
|
||||
|
||||
-- Default curves and 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} } })
|
||||
|
||||
hl.curve("easy", { type = "spring", mass = 1, stiffness = 238.1191, dampening = 24.21279333 })
|
||||
|
||||
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" })
|
||||
|
||||
hl.config({
|
||||
dwindle = {
|
||||
preserve_split = true,
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
master = {
|
||||
new_status = "master",
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
scrolling = {
|
||||
fullscreen_on_one_column = true,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
----------------
|
||||
---- MISC ----
|
||||
----------------
|
||||
|
||||
hl.config({
|
||||
misc = {
|
||||
force_default_wallpaper = 0, -- no anime mascot
|
||||
disable_hyprland_logo = true, -- plain dark background
|
||||
background_color = 0xff0b0b0b,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
---------------
|
||||
---- INPUT ----
|
||||
---------------
|
||||
|
||||
hl.config({
|
||||
input = {
|
||||
kb_layout = "us",
|
||||
kb_variant = "",
|
||||
kb_model = "",
|
||||
kb_options = "",
|
||||
kb_rules = "",
|
||||
|
||||
follow_mouse = 1,
|
||||
|
||||
sensitivity = 0,
|
||||
|
||||
touchpad = {
|
||||
natural_scroll = false,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
hl.gesture({
|
||||
fingers = 3,
|
||||
direction = "horizontal",
|
||||
action = "workspace",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- KEYBINDINGS ----
|
||||
---------------------
|
||||
|
||||
local mainMod = "SUPER"
|
||||
|
||||
hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(terminal))
|
||||
local closeWindowBind = hl.bind(mainMod .. " + W", hl.dsp.window.close())
|
||||
hl.bind(mainMod .. " + M", hl.dsp.exec_cmd("command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch 'hl.dsp.exit()'"))
|
||||
hl.bind(mainMod .. " + S", hl.dsp.window.float({ action = "toggle" }))
|
||||
hl.bind(mainMod .. " + F", hl.dsp.window.fullscreen({ mode = "fullscreen", action = "toggle" }))
|
||||
hl.bind(mainMod .. " + D", hl.dsp.exec_cmd(menu))
|
||||
hl.bind(mainMod .. " + P", hl.dsp.window.pseudo())
|
||||
hl.bind(mainMod .. " + J", hl.dsp.layout("togglesplit")) -- dwindle only
|
||||
|
||||
-- Move focus with mainMod + arrow keys
|
||||
hl.bind(mainMod .. " + left", hl.dsp.focus({ direction = "left" }))
|
||||
hl.bind(mainMod .. " + right", hl.dsp.focus({ direction = "right" }))
|
||||
hl.bind(mainMod .. " + up", hl.dsp.focus({ direction = "up" }))
|
||||
hl.bind(mainMod .. " + down", hl.dsp.focus({ direction = "down" }))
|
||||
|
||||
-- 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 }))
|
||||
end
|
||||
|
||||
-- Scroll through existing workspaces with mainMod + scroll
|
||||
hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
|
||||
hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
|
||||
|
||||
-- Move/resize windows with mainMod + LMB/RMB and dragging
|
||||
hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
|
||||
hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true })
|
||||
|
||||
-- Volume / brightness
|
||||
hl.bind("XF86PowerOff", hl.dsp.exec_cmd("qs ipc call power open"), { locked = true, description = "Open the power menu" })
|
||||
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("qs ipc call volume up"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("qs ipc call volume down"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("qs ipc call volume mute"), { locked = true })
|
||||
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("qs ipc call brightness up"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessDown",hl.dsp.exec_cmd("qs ipc call brightness down"), { locked = true, repeating = true })
|
||||
|
||||
-- Requires playerctl
|
||||
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true })
|
||||
hl.bind("XF86AudioPause", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
|
||||
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
|
||||
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true })
|
||||
|
||||
|
||||
--------------------------------
|
||||
---- WINDOWS AND WORKSPACES ----
|
||||
--------------------------------
|
||||
|
||||
local suppressMaximizeRule = hl.window_rule({
|
||||
name = "suppress-maximize-events",
|
||||
match = { class = ".*" },
|
||||
|
||||
suppress_event = "maximize",
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "fix-xwayland-drags",
|
||||
match = {
|
||||
class = "^$",
|
||||
title = "^$",
|
||||
xwayland = true,
|
||||
float = true,
|
||||
fullscreen = false,
|
||||
pin = false,
|
||||
},
|
||||
|
||||
no_focus = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "move-hyprland-run",
|
||||
match = { class = "hyprland-run" },
|
||||
|
||||
move = "20 monitor_h-120",
|
||||
float = true,
|
||||
})
|
||||
@@ -1,277 +0,0 @@
|
||||
-- Hyprland Lua config: dark, minimal, small gaps, Quickshell bar on the left
|
||||
-- https://wiki.hypr.land/Configuring/Start/
|
||||
|
||||
------------------
|
||||
---- MONITORS ----
|
||||
------------------
|
||||
|
||||
hl.monitor({
|
||||
output = "",
|
||||
mode = "preferred",
|
||||
position = "auto",
|
||||
scale = "auto",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- MY PROGRAMS ----
|
||||
---------------------
|
||||
|
||||
local terminal = "foot"
|
||||
local menu = "qs ipc call launcher toggle"
|
||||
|
||||
|
||||
-------------------
|
||||
---- AUTOSTART ----
|
||||
-------------------
|
||||
|
||||
hl.on("hyprland.start", function()
|
||||
hl.exec_cmd("qs") -- Quickshell: bar + launcher
|
||||
hl.exec_cmd("hyprpaper") -- wallpaper, if you use it
|
||||
hl.exec_cmd("wl-clip-persist --clipboard regular") -- Keep copied data available after its source app exits
|
||||
end)
|
||||
|
||||
|
||||
-------------------------------
|
||||
---- ENVIRONMENT VARIABLES ----
|
||||
-------------------------------
|
||||
|
||||
hl.env("XCURSOR_SIZE", "24")
|
||||
hl.env("HYPRCURSOR_SIZE", "24")
|
||||
|
||||
|
||||
hl.env("HYPRCURSOR_THEME", "Bibata-Modern-Classic")
|
||||
hl.env("HYPRCURSOR_SIZE", "18")
|
||||
|
||||
-----------------------
|
||||
---- LOOK AND FEEL ----
|
||||
-----------------------
|
||||
|
||||
hl.config({
|
||||
general = {
|
||||
gaps_in = 5, -- 5 + 5 = 10px between windows
|
||||
gaps_out = 10, -- 10px to screen edges and to the bar
|
||||
|
||||
border_size = 1,
|
||||
|
||||
col = {
|
||||
active_border = "rgba(6b6b6bcc)";
|
||||
inactive_border = "rgba(3a3a3aff)",
|
||||
},
|
||||
|
||||
resize_on_border = false,
|
||||
allow_tearing = false,
|
||||
|
||||
layout = "dwindle",
|
||||
},
|
||||
|
||||
decoration = {
|
||||
rounding = 1,
|
||||
rounding_power = 2,
|
||||
|
||||
active_opacity = 1.0,
|
||||
inactive_opacity = 1.0,
|
||||
|
||||
shadow = {
|
||||
enabled = false,
|
||||
},
|
||||
|
||||
blur = {
|
||||
enabled = true,
|
||||
size = 3,
|
||||
passes = 1,
|
||||
vibrancy = 0.1696,
|
||||
},
|
||||
},
|
||||
|
||||
animations = {
|
||||
enabled = true,
|
||||
},
|
||||
})
|
||||
|
||||
-- Default curves and 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} } })
|
||||
|
||||
hl.curve("easy", { type = "spring", mass = 1, stiffness = 238.1191, dampening = 24.21279333 })
|
||||
|
||||
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" })
|
||||
|
||||
hl.config({
|
||||
dwindle = {
|
||||
preserve_split = true,
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
master = {
|
||||
new_status = "master",
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
scrolling = {
|
||||
fullscreen_on_one_column = true,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
----------------
|
||||
---- MISC ----
|
||||
----------------
|
||||
|
||||
hl.config({
|
||||
misc = {
|
||||
force_default_wallpaper = 0, -- no anime mascot
|
||||
disable_hyprland_logo = true, -- plain dark background
|
||||
background_color = 0xff0b0b0b,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
---------------
|
||||
---- INPUT ----
|
||||
---------------
|
||||
|
||||
hl.config({
|
||||
input = {
|
||||
kb_layout = "us",
|
||||
kb_variant = "",
|
||||
kb_model = "",
|
||||
kb_options = "",
|
||||
kb_rules = "",
|
||||
|
||||
follow_mouse = 1,
|
||||
|
||||
sensitivity = 0,
|
||||
|
||||
touchpad = {
|
||||
natural_scroll = false,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
hl.gesture({
|
||||
fingers = 3,
|
||||
direction = "horizontal",
|
||||
action = "workspace",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- KEYBINDINGS ----
|
||||
---------------------
|
||||
|
||||
local mainMod = "SUPER"
|
||||
|
||||
hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(terminal))
|
||||
local closeWindowBind = hl.bind(mainMod .. " + W", hl.dsp.window.close())
|
||||
hl.bind(mainMod .. " + M", hl.dsp.exec_cmd("command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch 'hl.dsp.exit()'"))
|
||||
hl.bind(mainMod .. " + S", function()
|
||||
local window = hl.get_active_window()
|
||||
if not window then return end
|
||||
|
||||
if window.class == "foot" and not window.floating and window.fullscreen == 0 then
|
||||
local width = math.floor(window.size.x * 0.75)
|
||||
local height = math.floor(window.size.y * 0.75)
|
||||
hl.dispatch(hl.dsp.window.float({ action = "enable", window = window }))
|
||||
hl.dispatch(hl.dsp.window.resize({ x = width, y = height, relative = false, window = window }))
|
||||
hl.dispatch(hl.dsp.window.center({ window = window }))
|
||||
else
|
||||
hl.dispatch(hl.dsp.window.float({ action = "toggle", window = window }))
|
||||
end
|
||||
end)
|
||||
hl.bind(mainMod .. " + F", hl.dsp.window.fullscreen({ mode = "fullscreen", action = "toggle" }))
|
||||
hl.bind(mainMod .. " + D", hl.dsp.exec_cmd(menu))
|
||||
hl.bind(mainMod .. " + P", hl.dsp.window.pseudo())
|
||||
hl.bind(mainMod .. " + J", hl.dsp.layout("togglesplit")) -- dwindle only
|
||||
|
||||
-- Move focus with mainMod + arrow keys
|
||||
hl.bind(mainMod .. " + left", hl.dsp.focus({ direction = "left" }))
|
||||
hl.bind(mainMod .. " + right", hl.dsp.focus({ direction = "right" }))
|
||||
hl.bind(mainMod .. " + up", hl.dsp.focus({ direction = "up" }))
|
||||
hl.bind(mainMod .. " + down", hl.dsp.focus({ direction = "down" }))
|
||||
|
||||
-- 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 }))
|
||||
end
|
||||
|
||||
-- Scroll through existing workspaces with mainMod + scroll
|
||||
hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
|
||||
hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
|
||||
|
||||
-- Move/resize windows with mainMod + LMB/RMB and dragging
|
||||
hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
|
||||
hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true })
|
||||
|
||||
-- Volume / brightness
|
||||
hl.bind("XF86PowerOff", hl.dsp.exec_cmd("qs ipc call power open"), { locked = true, description = "Open the power menu" })
|
||||
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("qs ipc call volume up"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("qs ipc call volume down"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("qs ipc call volume mute"), { locked = true })
|
||||
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("qs ipc call brightness up"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessDown",hl.dsp.exec_cmd("qs ipc call brightness down"), { locked = true, repeating = true })
|
||||
|
||||
-- Requires playerctl
|
||||
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true })
|
||||
hl.bind("XF86AudioPause", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
|
||||
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
|
||||
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true })
|
||||
|
||||
|
||||
--------------------------------
|
||||
---- WINDOWS AND WORKSPACES ----
|
||||
--------------------------------
|
||||
|
||||
local suppressMaximizeRule = hl.window_rule({
|
||||
name = "suppress-maximize-events",
|
||||
match = { class = ".*" },
|
||||
|
||||
suppress_event = "maximize",
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "fix-xwayland-drags",
|
||||
match = {
|
||||
class = "^$",
|
||||
title = "^$",
|
||||
xwayland = true,
|
||||
float = true,
|
||||
fullscreen = false,
|
||||
pin = false,
|
||||
},
|
||||
|
||||
no_focus = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "move-hyprland-run",
|
||||
match = { class = "hyprland-run" },
|
||||
|
||||
move = "20 monitor_h-120",
|
||||
float = true,
|
||||
})
|
||||
@@ -1,306 +0,0 @@
|
||||
-- Hyprland Lua config: dark, minimal, small gaps, Quickshell bar on the left
|
||||
-- https://wiki.hypr.land/Configuring/Start/
|
||||
|
||||
------------------
|
||||
---- MONITORS ----
|
||||
------------------
|
||||
|
||||
hl.monitor({
|
||||
output = "",
|
||||
mode = "preferred",
|
||||
position = "auto",
|
||||
scale = "auto",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- MY PROGRAMS ----
|
||||
---------------------
|
||||
|
||||
local terminal = "foot"
|
||||
local menu = "qs ipc call launcher toggle"
|
||||
|
||||
|
||||
-------------------
|
||||
---- AUTOSTART ----
|
||||
-------------------
|
||||
|
||||
hl.on("hyprland.start", function()
|
||||
hl.exec_cmd("qs") -- Quickshell: bar + launcher
|
||||
hl.exec_cmd("hyprpaper") -- wallpaper, if you use it
|
||||
hl.exec_cmd("wl-clip-persist --clipboard regular") -- Keep copied data available after its source app exits
|
||||
hl.exec_cmd("hyprpm reload")
|
||||
end)
|
||||
|
||||
|
||||
-------------------------------
|
||||
---- ENVIRONMENT VARIABLES ----
|
||||
-------------------------------
|
||||
|
||||
hl.env("XCURSOR_SIZE", "18")
|
||||
hl.env("XCURSOR_THEME", "Bibata-Modern-Classic")
|
||||
hl.env("HYPRCURSOR_THEME", "Bibata-Modern-Classic")
|
||||
hl.env("HYPRCURSOR_SIZE", "18")
|
||||
hl.env("GTK_THEME", "KVJ")
|
||||
|
||||
-----------------------
|
||||
---- LOOK AND FEEL ----
|
||||
-----------------------
|
||||
|
||||
hl.config({
|
||||
general = {
|
||||
gaps_in = 5, -- 5 + 5 = 10px between windows
|
||||
gaps_out = 10, -- 10px to screen edges and to the bar
|
||||
|
||||
border_size = 1,
|
||||
|
||||
col = {
|
||||
active_border = "rgba(6b6b6bcc)";
|
||||
inactive_border = "rgba(3a3a3aff)",
|
||||
},
|
||||
|
||||
resize_on_border = true,
|
||||
allow_tearing = false,
|
||||
|
||||
layout = "dwindle",
|
||||
},
|
||||
|
||||
decoration = {
|
||||
rounding = 1,
|
||||
rounding_power = 2,
|
||||
|
||||
active_opacity = 1.0,
|
||||
inactive_opacity = 1.0,
|
||||
|
||||
shadow = {
|
||||
enabled = false,
|
||||
},
|
||||
|
||||
blur = {
|
||||
enabled = true,
|
||||
size = 3,
|
||||
passes = 1,
|
||||
vibrancy = 0.1696,
|
||||
},
|
||||
},
|
||||
|
||||
animations = {
|
||||
enabled = true,
|
||||
},
|
||||
})
|
||||
|
||||
-- Default curves and 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} } })
|
||||
|
||||
hl.curve("easy", { type = "spring", mass = 1, stiffness = 238.1191, dampening = 24.21279333 })
|
||||
|
||||
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" })
|
||||
|
||||
hl.config({
|
||||
dwindle = {
|
||||
preserve_split = true,
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
master = {
|
||||
new_status = "master",
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
scrolling = {
|
||||
fullscreen_on_one_column = true,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
----------------
|
||||
---- MISC ----
|
||||
----------------
|
||||
|
||||
hl.config({
|
||||
misc = {
|
||||
force_default_wallpaper = 0, -- no anime mascot
|
||||
disable_hyprland_logo = true, -- plain dark background
|
||||
background_color = 0xff0b0b0b,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
hl.config({
|
||||
plugin = {
|
||||
hyprbars = {
|
||||
bar_color = "#151515",
|
||||
bar_height = 25,
|
||||
on_double_click = "hyprctl dispatch fullscreen 1",
|
||||
bar_precedence_over_border = true,
|
||||
bar_part_of_window = true,
|
||||
bar_text_font = "Maple Mono Normal",
|
||||
bar_text_size = 10,
|
||||
bar_blur = true,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
---------------
|
||||
---- INPUT ----
|
||||
---------------
|
||||
|
||||
hl.config({
|
||||
input = {
|
||||
kb_layout = "us",
|
||||
kb_variant = "",
|
||||
kb_model = "",
|
||||
kb_options = "",
|
||||
kb_rules = "",
|
||||
|
||||
follow_mouse = 1,
|
||||
|
||||
sensitivity = 0,
|
||||
|
||||
touchpad = {
|
||||
natural_scroll = false,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
hl.gesture({
|
||||
fingers = 3,
|
||||
direction = "horizontal",
|
||||
action = "workspace",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- KEYBINDINGS ----
|
||||
---------------------
|
||||
|
||||
local mainMod = "SUPER"
|
||||
|
||||
hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(terminal))
|
||||
local closeWindowBind = hl.bind(mainMod .. " + W", hl.dsp.window.close())
|
||||
hl.bind(mainMod .. " + M", hl.dsp.exec_cmd("command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch 'hl.dsp.exit()'"))
|
||||
hl.bind(mainMod .. " + S", function()
|
||||
local window = hl.get_active_window()
|
||||
if not window then return end
|
||||
|
||||
if window.class == "foot" and not window.floating and window.fullscreen == 0 then
|
||||
local width = math.floor(window.size.x * 0.75)
|
||||
local height = math.floor(window.size.y * 0.75)
|
||||
hl.dispatch(hl.dsp.window.float({ action = "enable", window = window }))
|
||||
hl.dispatch(hl.dsp.window.resize({ x = width, y = height, relative = false, window = window }))
|
||||
hl.dispatch(hl.dsp.window.center({ window = window }))
|
||||
else
|
||||
hl.dispatch(hl.dsp.window.float({ action = "toggle", window = window }))
|
||||
end
|
||||
end)
|
||||
hl.bind(mainMod .. " + F", hl.dsp.window.fullscreen({ mode = "fullscreen", action = "toggle" }))
|
||||
hl.bind(mainMod .. " + D", hl.dsp.exec_cmd(menu))
|
||||
hl.bind(mainMod .. " + P", hl.dsp.window.pseudo())
|
||||
hl.bind(mainMod .. " + J", hl.dsp.layout("togglesplit")) -- dwindle only
|
||||
|
||||
-- Screenshots: full output, selected region, or selected region to clipboard.
|
||||
hl.bind("Print", hl.dsp.exec_cmd([[mkdir -p "$HOME/Pictures/Screenshots" && grim "$HOME/Pictures/Screenshots/$(date +%Y-%m-%d_%H-%M-%S).png"]]))
|
||||
hl.bind("SHIFT + Print", hl.dsp.exec_cmd([[mkdir -p "$HOME/Pictures/Screenshots" && region=$(slurp) && [ -n "$region" ] && grim -g "$region" "$HOME/Pictures/Screenshots/$(date +%Y-%m-%d_%H-%M-%S).png"]]))
|
||||
hl.bind("SUPER + SHIFT + Print", hl.dsp.exec_cmd([[region=$(slurp) && [ -n "$region" ] && grim -g "$region" - | wl-copy -t image/png]]))
|
||||
|
||||
-- Move focus with mainMod + arrow keys
|
||||
hl.bind(mainMod .. " + left", hl.dsp.focus({ direction = "left" }))
|
||||
hl.bind(mainMod .. " + right", hl.dsp.focus({ direction = "right" }))
|
||||
hl.bind(mainMod .. " + up", hl.dsp.focus({ direction = "up" }))
|
||||
hl.bind(mainMod .. " + down", hl.dsp.focus({ direction = "down" }))
|
||||
|
||||
-- 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 }))
|
||||
end
|
||||
|
||||
-- Scroll through existing workspaces with mainMod + scroll
|
||||
hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
|
||||
hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
|
||||
|
||||
-- Move/resize windows with mainMod + LMB/RMB and dragging
|
||||
hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
|
||||
hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true })
|
||||
|
||||
-- Volume / brightness
|
||||
hl.bind("XF86PowerOff", hl.dsp.exec_cmd("qs ipc call power open"), { locked = true, description = "Open the power menu" })
|
||||
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("qs ipc call volume up"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("qs ipc call volume down"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("qs ipc call volume mute"), { locked = true })
|
||||
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("qs ipc call brightness up"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessDown",hl.dsp.exec_cmd("qs ipc call brightness down"), { locked = true, repeating = true })
|
||||
|
||||
-- Requires playerctl
|
||||
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true })
|
||||
hl.bind("XF86AudioPause", hl.dsp.exec_cmd("playerctl pause"), { locked = true })
|
||||
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play"), { locked = true })
|
||||
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true })
|
||||
|
||||
|
||||
--------------------------------
|
||||
---- WINDOWS AND WORKSPACES ----
|
||||
--------------------------------
|
||||
|
||||
local suppressMaximizeRule = hl.window_rule({
|
||||
name = "suppress-maximize-events",
|
||||
match = { class = ".*" },
|
||||
|
||||
suppress_event = "maximize",
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "fix-xwayland-drags",
|
||||
match = {
|
||||
class = "^$",
|
||||
title = "^$",
|
||||
xwayland = true,
|
||||
float = true,
|
||||
fullscreen = false,
|
||||
pin = false,
|
||||
},
|
||||
|
||||
no_focus = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "move-hyprland-run",
|
||||
match = { class = "hyprland-run" },
|
||||
|
||||
move = "20 monitor_h-120",
|
||||
float = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "disable-hyprbars-for-firefox",
|
||||
match = { class = "^(org%.mozilla%.firefox)$" },
|
||||
["hyprbars:no_bar"] = true,
|
||||
})
|
||||
|
||||
|
||||
@@ -1,322 +0,0 @@
|
||||
-- Hyprland Lua config: dark, minimal, small gaps, Quickshell bar on the left
|
||||
-- https://wiki.hypr.land/Configuring/Start/
|
||||
|
||||
------------------
|
||||
---- MONITORS ----
|
||||
------------------
|
||||
|
||||
hl.monitor({
|
||||
output = "",
|
||||
mode = "preferred",
|
||||
position = "auto",
|
||||
scale = "auto",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- MY PROGRAMS ----
|
||||
---------------------
|
||||
|
||||
local terminal = "foot"
|
||||
local menu = "qs ipc call launcher toggle"
|
||||
|
||||
|
||||
-------------------
|
||||
---- AUTOSTART ----
|
||||
-------------------
|
||||
|
||||
hl.on("hyprland.start", function()
|
||||
hl.exec_cmd("qs") -- Quickshell: bar + launcher
|
||||
hl.exec_cmd("hyprpaper") -- wallpaper, if you use it
|
||||
hl.exec_cmd("wl-clip-persist --clipboard regular") -- Keep copied data available after its source app exits
|
||||
hl.exec_cmd("hyprpm reload")
|
||||
end)
|
||||
|
||||
|
||||
-------------------------------
|
||||
---- ENVIRONMENT VARIABLES ----
|
||||
-------------------------------
|
||||
|
||||
hl.env("XCURSOR_SIZE", "18")
|
||||
hl.env("XCURSOR_THEME", "Bibata-Modern-Classic")
|
||||
hl.env("HYPRCURSOR_THEME", "Bibata-Modern-Classic")
|
||||
hl.env("HYPRCURSOR_SIZE", "18")
|
||||
hl.env("GTK_THEME", "KVJ")
|
||||
|
||||
-----------------------
|
||||
---- LOOK AND FEEL ----
|
||||
-----------------------
|
||||
|
||||
hl.config({
|
||||
general = {
|
||||
gaps_in = 5, -- 5 + 5 = 10px between windows
|
||||
gaps_out = 10, -- 10px to screen edges and to the bar
|
||||
|
||||
border_size = 1,
|
||||
|
||||
col = {
|
||||
active_border = "rgba(6b6b6bcc)";
|
||||
inactive_border = "rgba(3a3a3aff)",
|
||||
},
|
||||
|
||||
resize_on_border = true,
|
||||
allow_tearing = false,
|
||||
|
||||
layout = "dwindle",
|
||||
},
|
||||
|
||||
decoration = {
|
||||
rounding = 1,
|
||||
rounding_power = 2,
|
||||
|
||||
active_opacity = 1.0,
|
||||
inactive_opacity = 1.0,
|
||||
|
||||
shadow = {
|
||||
enabled = false,
|
||||
},
|
||||
|
||||
blur = {
|
||||
enabled = true,
|
||||
size = 3,
|
||||
passes = 1,
|
||||
vibrancy = 0.1696,
|
||||
},
|
||||
},
|
||||
|
||||
animations = {
|
||||
enabled = true,
|
||||
},
|
||||
})
|
||||
|
||||
-- Default curves and 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} } })
|
||||
|
||||
hl.curve("easy", { type = "spring", mass = 1, stiffness = 238.1191, dampening = 24.21279333 })
|
||||
|
||||
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 = false, speed = 3, bezier = "linear", style = "popin 87%" })
|
||||
hl.animation({ leaf = "fadeIn", enabled = true, speed = 1.73, bezier = "almostLinear" })
|
||||
hl.animation({ leaf = "fadeOut", enabled = false, speed = 3, 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" })
|
||||
|
||||
hl.config({
|
||||
dwindle = {
|
||||
preserve_split = true,
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
master = {
|
||||
new_status = "master",
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
scrolling = {
|
||||
fullscreen_on_one_column = true,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
----------------
|
||||
---- MISC ----
|
||||
----------------
|
||||
|
||||
hl.config({
|
||||
misc = {
|
||||
force_default_wallpaper = 0, -- no anime mascot
|
||||
disable_hyprland_logo = true, -- plain dark background
|
||||
background_color = 0xff0b0b0b,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
hl.config({
|
||||
plugin = {
|
||||
hyprbars = {
|
||||
bar_color = "#151515",
|
||||
bar_height = 25,
|
||||
on_double_click = "hyprctl dispatch fullscreen 1",
|
||||
bar_precedence_over_border = true,
|
||||
bar_part_of_window = true,
|
||||
bar_text_font = "Maple Mono Normal",
|
||||
bar_text_size = 10,
|
||||
bar_blur = true,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
---------------
|
||||
---- INPUT ----
|
||||
---------------
|
||||
|
||||
hl.config({
|
||||
input = {
|
||||
kb_layout = "us",
|
||||
kb_variant = "",
|
||||
kb_model = "",
|
||||
kb_options = "",
|
||||
kb_rules = "",
|
||||
|
||||
follow_mouse = 1,
|
||||
|
||||
sensitivity = 0,
|
||||
|
||||
touchpad = {
|
||||
natural_scroll = false,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
hl.gesture({
|
||||
fingers = 3,
|
||||
direction = "horizontal",
|
||||
action = "workspace",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- KEYBINDINGS ----
|
||||
---------------------
|
||||
|
||||
local mainMod = "SUPER"
|
||||
|
||||
hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(terminal))
|
||||
local closeWindowBind = hl.bind(mainMod .. " + W", hl.dsp.window.close())
|
||||
hl.bind(mainMod .. " + M", hl.dsp.exec_cmd("command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch 'hl.dsp.exit()'"))
|
||||
hl.bind(mainMod .. " + S", function()
|
||||
local window = hl.get_active_window()
|
||||
if not window then return end
|
||||
|
||||
if window.class == "foot" and not window.floating and window.fullscreen == 0 then
|
||||
local width = math.floor(window.size.x * 0.75)
|
||||
local height = math.floor(window.size.y * 0.75)
|
||||
hl.dispatch(hl.dsp.window.float({ action = "enable", window = window }))
|
||||
hl.dispatch(hl.dsp.window.resize({ x = width, y = height, relative = false, window = window }))
|
||||
hl.dispatch(hl.dsp.window.center({ window = window }))
|
||||
else
|
||||
hl.dispatch(hl.dsp.window.float({ action = "toggle", window = window }))
|
||||
end
|
||||
end)
|
||||
hl.bind(mainMod .. " + F", hl.dsp.window.fullscreen({ mode = "fullscreen", action = "toggle" }))
|
||||
hl.bind(mainMod .. " + D", hl.dsp.exec_cmd(menu))
|
||||
hl.bind(mainMod .. " + P", hl.dsp.exec_cmd("qs ipc call wallpapers toggle"))
|
||||
hl.bind(mainMod .. " + J", hl.dsp.layout("togglesplit")) -- dwindle only
|
||||
|
||||
-- Minimize windows into a hidden special workspace, then restore them to the
|
||||
-- currently active workspace with SUPER + SHIFT + X.
|
||||
hl.bind(mainMod .. " + X", function()
|
||||
local window = hl.get_active_window()
|
||||
if not window then return end
|
||||
|
||||
hl.dispatch(hl.dsp.window.tag({ tag = "minimized", window = window }))
|
||||
hl.dispatch(hl.dsp.window.move({ workspace = "special:minimized", follow = false, window = window }))
|
||||
end)
|
||||
|
||||
hl.bind(mainMod .. " + SHIFT + X", function()
|
||||
local workspace = hl.get_active_workspace()
|
||||
if not workspace or not hl.get_workspace("special:minimized") then return end
|
||||
|
||||
hl.dispatch(hl.dsp.window.move({ workspace = workspace, window = "tag:minimized" }))
|
||||
hl.dispatch(hl.dsp.window.clear_tags({ window = "tag:minimized" }))
|
||||
end)
|
||||
|
||||
-- Screenshots: full output, selected region, or selected region to clipboard.
|
||||
hl.bind("Print", hl.dsp.exec_cmd([[mkdir -p "$HOME/Pictures/Screenshots" && grim "$HOME/Pictures/Screenshots/$(date +%Y-%m-%d_%H-%M-%S).png"]]))
|
||||
hl.bind("SHIFT + Print", hl.dsp.exec_cmd([[mkdir -p "$HOME/Pictures/Screenshots" && region=$(slurp) && [ -n "$region" ] && grim -g "$region" "$HOME/Pictures/Screenshots/$(date +%Y-%m-%d_%H-%M-%S).png"]]))
|
||||
hl.bind("SUPER + SHIFT + Print", hl.dsp.exec_cmd([[region=$(slurp) && [ -n "$region" ] && grim -g "$region" - | wl-copy -t image/png]]))
|
||||
|
||||
-- Move focus with mainMod + arrow keys
|
||||
hl.bind(mainMod .. " + left", hl.dsp.focus({ direction = "left" }))
|
||||
hl.bind(mainMod .. " + right", hl.dsp.focus({ direction = "right" }))
|
||||
hl.bind(mainMod .. " + up", hl.dsp.focus({ direction = "up" }))
|
||||
hl.bind(mainMod .. " + down", hl.dsp.focus({ direction = "down" }))
|
||||
|
||||
-- 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 }))
|
||||
end
|
||||
|
||||
-- Scroll through existing workspaces with mainMod + scroll
|
||||
hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
|
||||
hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
|
||||
|
||||
-- Move/resize windows with mainMod + LMB/RMB and dragging
|
||||
hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
|
||||
hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true })
|
||||
|
||||
-- Volume / brightness
|
||||
hl.bind("XF86PowerOff", hl.dsp.exec_cmd("qs ipc call power open"), { locked = true, description = "Open the power menu" })
|
||||
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("qs ipc call volume up"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("qs ipc call volume down"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("qs ipc call volume mute"), { locked = true })
|
||||
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("qs ipc call brightness up"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessDown",hl.dsp.exec_cmd("qs ipc call brightness down"), { locked = true, repeating = true })
|
||||
|
||||
-- Requires playerctl
|
||||
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true })
|
||||
hl.bind("XF86AudioPause", hl.dsp.exec_cmd("playerctl pause"), { locked = true })
|
||||
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play"), { locked = true })
|
||||
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true })
|
||||
|
||||
|
||||
--------------------------------
|
||||
---- WINDOWS AND WORKSPACES ----
|
||||
--------------------------------
|
||||
|
||||
local suppressMaximizeRule = hl.window_rule({
|
||||
name = "suppress-maximize-events",
|
||||
match = { class = ".*" },
|
||||
|
||||
suppress_event = "maximize",
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "fix-xwayland-drags",
|
||||
match = {
|
||||
class = "^$",
|
||||
title = "^$",
|
||||
xwayland = true,
|
||||
float = true,
|
||||
fullscreen = false,
|
||||
pin = false,
|
||||
},
|
||||
|
||||
no_focus = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "move-hyprland-run",
|
||||
match = { class = "hyprland-run" },
|
||||
|
||||
move = "20 monitor_h-120",
|
||||
float = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "disable-hyprbars-for-firefox",
|
||||
match = { class = "^(org%.mozilla%.firefox)$" },
|
||||
["hyprbars:no_bar"] = true,
|
||||
})
|
||||
@@ -1,264 +0,0 @@
|
||||
-- Hyprland Lua config: dark, minimal, small gaps, Quickshell bar on the left
|
||||
-- https://wiki.hypr.land/Configuring/Start/
|
||||
|
||||
------------------
|
||||
---- MONITORS ----
|
||||
------------------
|
||||
|
||||
hl.monitor({
|
||||
output = "",
|
||||
mode = "preferred",
|
||||
position = "auto",
|
||||
scale = "auto",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- MY PROGRAMS ----
|
||||
---------------------
|
||||
|
||||
local terminal = "foot"
|
||||
local menu = "qs ipc call launcher toggle"
|
||||
|
||||
|
||||
-------------------
|
||||
---- AUTOSTART ----
|
||||
-------------------
|
||||
|
||||
hl.on("hyprland.start", function()
|
||||
hl.exec_cmd("qs") -- Quickshell: bar + launcher
|
||||
hl.exec_cmd("hyprpaper") -- wallpaper, if you use it
|
||||
hl.exec_cmd("wl-clip-persist --clipboard regular") -- Keep copied data available after its source app exits
|
||||
end)
|
||||
|
||||
|
||||
-------------------------------
|
||||
---- ENVIRONMENT VARIABLES ----
|
||||
-------------------------------
|
||||
|
||||
hl.env("XCURSOR_SIZE", "24")
|
||||
hl.env("HYPRCURSOR_SIZE", "24")
|
||||
|
||||
|
||||
hl.env("HYPRCURSOR_THEME", "Bibata-Modern-Ice")
|
||||
hl.env("HYPRCURSOR_SIZE", "18")
|
||||
|
||||
-----------------------
|
||||
---- LOOK AND FEEL ----
|
||||
-----------------------
|
||||
|
||||
hl.config({
|
||||
general = {
|
||||
gaps_in = 5, -- 5 + 5 = 10px between windows
|
||||
gaps_out = 10, -- 10px to screen edges and to the bar
|
||||
|
||||
border_size = 1,
|
||||
|
||||
col = {
|
||||
active_border = "rgba(6b6b6bcc)";
|
||||
inactive_border = "rgba(3a3a3aff)",
|
||||
},
|
||||
|
||||
resize_on_border = false,
|
||||
allow_tearing = false,
|
||||
|
||||
layout = "dwindle",
|
||||
},
|
||||
|
||||
decoration = {
|
||||
rounding = 1,
|
||||
rounding_power = 2,
|
||||
|
||||
active_opacity = 1.0,
|
||||
inactive_opacity = 1.0,
|
||||
|
||||
shadow = {
|
||||
enabled = false,
|
||||
},
|
||||
|
||||
blur = {
|
||||
enabled = true,
|
||||
size = 3,
|
||||
passes = 1,
|
||||
vibrancy = 0.1696,
|
||||
},
|
||||
},
|
||||
|
||||
animations = {
|
||||
enabled = true,
|
||||
},
|
||||
})
|
||||
|
||||
-- Default curves and 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} } })
|
||||
|
||||
hl.curve("easy", { type = "spring", mass = 1, stiffness = 238.1191, dampening = 24.21279333 })
|
||||
|
||||
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" })
|
||||
|
||||
hl.config({
|
||||
dwindle = {
|
||||
preserve_split = true,
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
master = {
|
||||
new_status = "master",
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
scrolling = {
|
||||
fullscreen_on_one_column = true,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
----------------
|
||||
---- MISC ----
|
||||
----------------
|
||||
|
||||
hl.config({
|
||||
misc = {
|
||||
force_default_wallpaper = 0, -- no anime mascot
|
||||
disable_hyprland_logo = true, -- plain dark background
|
||||
background_color = 0xff0b0b0b,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
---------------
|
||||
---- INPUT ----
|
||||
---------------
|
||||
|
||||
hl.config({
|
||||
input = {
|
||||
kb_layout = "us",
|
||||
kb_variant = "",
|
||||
kb_model = "",
|
||||
kb_options = "",
|
||||
kb_rules = "",
|
||||
|
||||
follow_mouse = 1,
|
||||
|
||||
sensitivity = 0,
|
||||
|
||||
touchpad = {
|
||||
natural_scroll = false,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
hl.gesture({
|
||||
fingers = 3,
|
||||
direction = "horizontal",
|
||||
action = "workspace",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- KEYBINDINGS ----
|
||||
---------------------
|
||||
|
||||
local mainMod = "SUPER"
|
||||
|
||||
hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(terminal))
|
||||
local closeWindowBind = hl.bind(mainMod .. " + W", hl.dsp.window.close())
|
||||
hl.bind(mainMod .. " + M", hl.dsp.exec_cmd("command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch 'hl.dsp.exit()'"))
|
||||
hl.bind(mainMod .. " + S", hl.dsp.window.float({ action = "toggle" }))
|
||||
hl.bind(mainMod .. " + F", hl.dsp.window.fullscreen({ mode = "fullscreen", action = "toggle" }))
|
||||
hl.bind(mainMod .. " + D", hl.dsp.exec_cmd(menu))
|
||||
hl.bind(mainMod .. " + P", hl.dsp.window.pseudo())
|
||||
hl.bind(mainMod .. " + J", hl.dsp.layout("togglesplit")) -- dwindle only
|
||||
|
||||
-- Move focus with mainMod + arrow keys
|
||||
hl.bind(mainMod .. " + left", hl.dsp.focus({ direction = "left" }))
|
||||
hl.bind(mainMod .. " + right", hl.dsp.focus({ direction = "right" }))
|
||||
hl.bind(mainMod .. " + up", hl.dsp.focus({ direction = "up" }))
|
||||
hl.bind(mainMod .. " + down", hl.dsp.focus({ direction = "down" }))
|
||||
|
||||
-- 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 }))
|
||||
end
|
||||
|
||||
-- Scroll through existing workspaces with mainMod + scroll
|
||||
hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
|
||||
hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
|
||||
|
||||
-- Move/resize windows with mainMod + LMB/RMB and dragging
|
||||
hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
|
||||
hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true })
|
||||
|
||||
-- Volume / brightness
|
||||
hl.bind("XF86PowerOff", hl.dsp.exec_cmd("qs ipc call power open"), { locked = true, description = "Open the power menu" })
|
||||
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%+"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessDown",hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%-"), { locked = true, repeating = true })
|
||||
|
||||
-- Requires playerctl
|
||||
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true })
|
||||
hl.bind("XF86AudioPause", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
|
||||
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
|
||||
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true })
|
||||
|
||||
|
||||
--------------------------------
|
||||
---- WINDOWS AND WORKSPACES ----
|
||||
--------------------------------
|
||||
|
||||
local suppressMaximizeRule = hl.window_rule({
|
||||
name = "suppress-maximize-events",
|
||||
match = { class = ".*" },
|
||||
|
||||
suppress_event = "maximize",
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "fix-xwayland-drags",
|
||||
match = {
|
||||
class = "^$",
|
||||
title = "^$",
|
||||
xwayland = true,
|
||||
float = true,
|
||||
fullscreen = false,
|
||||
pin = false,
|
||||
},
|
||||
|
||||
no_focus = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "move-hyprland-run",
|
||||
match = { class = "hyprland-run" },
|
||||
|
||||
move = "20 monitor_h-120",
|
||||
float = true,
|
||||
})
|
||||
@@ -1,263 +0,0 @@
|
||||
-- Hyprland Lua config: dark, minimal, small gaps, Quickshell bar on the left
|
||||
-- https://wiki.hypr.land/Configuring/Start/
|
||||
|
||||
------------------
|
||||
---- MONITORS ----
|
||||
------------------
|
||||
|
||||
hl.monitor({
|
||||
output = "",
|
||||
mode = "preferred",
|
||||
position = "auto",
|
||||
scale = "auto",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- MY PROGRAMS ----
|
||||
---------------------
|
||||
|
||||
local terminal = "foot"
|
||||
local menu = "qs ipc call launcher toggle"
|
||||
|
||||
|
||||
-------------------
|
||||
---- AUTOSTART ----
|
||||
-------------------
|
||||
|
||||
hl.on("hyprland.start", function()
|
||||
hl.exec_cmd("qs") -- Quickshell: bar + launcher
|
||||
hl.exec_cmd("hyprpaper") -- wallpaper, if you use it
|
||||
end)
|
||||
|
||||
|
||||
-------------------------------
|
||||
---- ENVIRONMENT VARIABLES ----
|
||||
-------------------------------
|
||||
|
||||
hl.env("XCURSOR_SIZE", "24")
|
||||
hl.env("HYPRCURSOR_SIZE", "24")
|
||||
|
||||
|
||||
hl.env("HYPRCURSOR_THEME", "Bibata-Modern-Ice")
|
||||
hl.env("HYPRCURSOR_SIZE", "18")
|
||||
|
||||
-----------------------
|
||||
---- LOOK AND FEEL ----
|
||||
-----------------------
|
||||
|
||||
hl.config({
|
||||
general = {
|
||||
gaps_in = 5, -- 5 + 5 = 10px between windows
|
||||
gaps_out = 10, -- 10px to screen edges and to the bar
|
||||
|
||||
border_size = 1,
|
||||
|
||||
col = {
|
||||
active_border = "rgba(6b6b6bcc)";
|
||||
inactive_border = "rgba(3a3a3aff)",
|
||||
},
|
||||
|
||||
resize_on_border = false,
|
||||
allow_tearing = false,
|
||||
|
||||
layout = "dwindle",
|
||||
},
|
||||
|
||||
decoration = {
|
||||
rounding = 1,
|
||||
rounding_power = 2,
|
||||
|
||||
active_opacity = 1.0,
|
||||
inactive_opacity = 1.0,
|
||||
|
||||
shadow = {
|
||||
enabled = false,
|
||||
},
|
||||
|
||||
blur = {
|
||||
enabled = true,
|
||||
size = 3,
|
||||
passes = 1,
|
||||
vibrancy = 0.1696,
|
||||
},
|
||||
},
|
||||
|
||||
animations = {
|
||||
enabled = true,
|
||||
},
|
||||
})
|
||||
|
||||
-- Default curves and 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} } })
|
||||
|
||||
hl.curve("easy", { type = "spring", mass = 1, stiffness = 238.1191, dampening = 24.21279333 })
|
||||
|
||||
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" })
|
||||
|
||||
hl.config({
|
||||
dwindle = {
|
||||
preserve_split = true,
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
master = {
|
||||
new_status = "master",
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
scrolling = {
|
||||
fullscreen_on_one_column = true,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
----------------
|
||||
---- MISC ----
|
||||
----------------
|
||||
|
||||
hl.config({
|
||||
misc = {
|
||||
force_default_wallpaper = 0, -- no anime mascot
|
||||
disable_hyprland_logo = true, -- plain dark background
|
||||
background_color = 0xff0b0b0b,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
---------------
|
||||
---- INPUT ----
|
||||
---------------
|
||||
|
||||
hl.config({
|
||||
input = {
|
||||
kb_layout = "us",
|
||||
kb_variant = "",
|
||||
kb_model = "",
|
||||
kb_options = "",
|
||||
kb_rules = "",
|
||||
|
||||
follow_mouse = 1,
|
||||
|
||||
sensitivity = 0,
|
||||
|
||||
touchpad = {
|
||||
natural_scroll = false,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
hl.gesture({
|
||||
fingers = 3,
|
||||
direction = "horizontal",
|
||||
action = "workspace",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- KEYBINDINGS ----
|
||||
---------------------
|
||||
|
||||
local mainMod = "SUPER"
|
||||
|
||||
hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(terminal))
|
||||
local closeWindowBind = hl.bind(mainMod .. " + W", hl.dsp.window.close())
|
||||
hl.bind(mainMod .. " + M", hl.dsp.exec_cmd("command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch 'hl.dsp.exit()'"))
|
||||
hl.bind(mainMod .. " + S", hl.dsp.window.float({ action = "toggle" }))
|
||||
hl.bind(mainMod .. " + F", hl.dsp.window.fullscreen({ mode = "fullscreen", action = "toggle" }))
|
||||
hl.bind(mainMod .. " + D", hl.dsp.exec_cmd(menu))
|
||||
hl.bind(mainMod .. " + P", hl.dsp.window.pseudo())
|
||||
hl.bind(mainMod .. " + J", hl.dsp.layout("togglesplit")) -- dwindle only
|
||||
|
||||
-- Move focus with mainMod + arrow keys
|
||||
hl.bind(mainMod .. " + left", hl.dsp.focus({ direction = "left" }))
|
||||
hl.bind(mainMod .. " + right", hl.dsp.focus({ direction = "right" }))
|
||||
hl.bind(mainMod .. " + up", hl.dsp.focus({ direction = "up" }))
|
||||
hl.bind(mainMod .. " + down", hl.dsp.focus({ direction = "down" }))
|
||||
|
||||
-- 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 }))
|
||||
end
|
||||
|
||||
-- Scroll through existing workspaces with mainMod + scroll
|
||||
hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
|
||||
hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
|
||||
|
||||
-- Move/resize windows with mainMod + LMB/RMB and dragging
|
||||
hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
|
||||
hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true })
|
||||
|
||||
-- Volume / brightness
|
||||
hl.bind("XF86PowerOff", hl.dsp.exec_cmd("qs ipc call power open"), { locked = true, description = "Open the power menu" })
|
||||
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%+"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessDown",hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%-"), { locked = true, repeating = true })
|
||||
|
||||
-- Requires playerctl
|
||||
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true })
|
||||
hl.bind("XF86AudioPause", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
|
||||
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
|
||||
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true })
|
||||
|
||||
|
||||
--------------------------------
|
||||
---- WINDOWS AND WORKSPACES ----
|
||||
--------------------------------
|
||||
|
||||
local suppressMaximizeRule = hl.window_rule({
|
||||
name = "suppress-maximize-events",
|
||||
match = { class = ".*" },
|
||||
|
||||
suppress_event = "maximize",
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "fix-xwayland-drags",
|
||||
match = {
|
||||
class = "^$",
|
||||
title = "^$",
|
||||
xwayland = true,
|
||||
float = true,
|
||||
fullscreen = false,
|
||||
pin = false,
|
||||
},
|
||||
|
||||
no_focus = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "move-hyprland-run",
|
||||
match = { class = "hyprland-run" },
|
||||
|
||||
move = "20 monitor_h-120",
|
||||
float = true,
|
||||
})
|
||||
@@ -1,331 +0,0 @@
|
||||
-- Hyprland Lua config: dark, minimal, small gaps, Quickshell bar on the left
|
||||
-- https://wiki.hypr.land/Configuring/Start/
|
||||
|
||||
------------------
|
||||
---- MONITORS ----
|
||||
------------------
|
||||
|
||||
hl.monitor({
|
||||
output = "",
|
||||
mode = "preferred",
|
||||
position = "auto",
|
||||
scale = "auto",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- MY PROGRAMS ----
|
||||
---------------------
|
||||
|
||||
local terminal = "foot"
|
||||
local menu = "qs ipc call launcher toggle"
|
||||
|
||||
|
||||
-------------------
|
||||
---- AUTOSTART ----
|
||||
-------------------
|
||||
|
||||
hl.on("hyprland.start", function()
|
||||
hl.exec_cmd("qs") -- Quickshell: bar + launcher
|
||||
hl.exec_cmd("hyprpaper") -- wallpaper, if you use it
|
||||
hl.exec_cmd("wl-clip-persist --clipboard regular") -- Keep copied data available after its source app exits
|
||||
hl.exec_cmd("hyprpm reload")
|
||||
end)
|
||||
|
||||
|
||||
-------------------------------
|
||||
---- ENVIRONMENT VARIABLES ----
|
||||
-------------------------------
|
||||
|
||||
hl.env("XCURSOR_SIZE", "18")
|
||||
hl.env("XCURSOR_THEME", "Bibata-Modern-Classic")
|
||||
hl.env("HYPRCURSOR_THEME", "Bibata-Modern-Classic")
|
||||
hl.env("HYPRCURSOR_SIZE", "18")
|
||||
hl.env("GTK_THEME", "KVJ")
|
||||
|
||||
-----------------------
|
||||
---- LOOK AND FEEL ----
|
||||
-----------------------
|
||||
|
||||
hl.config({
|
||||
general = {
|
||||
gaps_in = 5, -- 5 + 5 = 10px between windows
|
||||
gaps_out = 10, -- 10px to screen edges and to the bar
|
||||
|
||||
border_size = 1,
|
||||
|
||||
col = {
|
||||
active_border = "rgba(6b6b6bcc)";
|
||||
inactive_border = "rgba(3a3a3aff)",
|
||||
},
|
||||
|
||||
resize_on_border = true,
|
||||
allow_tearing = false,
|
||||
|
||||
layout = "dwindle",
|
||||
},
|
||||
|
||||
decoration = {
|
||||
rounding = 1,
|
||||
rounding_power = 2,
|
||||
|
||||
active_opacity = 1.0,
|
||||
inactive_opacity = 1.0,
|
||||
|
||||
shadow = {
|
||||
enabled = false,
|
||||
},
|
||||
|
||||
blur = {
|
||||
enabled = true,
|
||||
size = 7,
|
||||
passes = 2,
|
||||
vibrancy = 0.24,
|
||||
},
|
||||
},
|
||||
|
||||
animations = {
|
||||
enabled = true,
|
||||
},
|
||||
})
|
||||
|
||||
-- Default curves and 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} } })
|
||||
|
||||
hl.curve("easy", { type = "spring", mass = 1, stiffness = 238.1191, dampening = 24.21279333 })
|
||||
|
||||
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 = false, speed = 3, bezier = "linear", style = "popin 87%" })
|
||||
hl.animation({ leaf = "fadeIn", enabled = true, speed = 1.73, bezier = "almostLinear" })
|
||||
hl.animation({ leaf = "fadeOut", enabled = false, speed = 3, 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" })
|
||||
|
||||
hl.config({
|
||||
dwindle = {
|
||||
preserve_split = true,
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
master = {
|
||||
new_status = "master",
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
scrolling = {
|
||||
fullscreen_on_one_column = true,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
----------------
|
||||
---- MISC ----
|
||||
----------------
|
||||
|
||||
hl.config({
|
||||
misc = {
|
||||
force_default_wallpaper = 0, -- no anime mascot
|
||||
disable_hyprland_logo = true, -- plain dark background
|
||||
background_color = 0xff0b0b0b,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
hl.config({
|
||||
plugin = {
|
||||
hyprbars = {
|
||||
bar_color = "#151515",
|
||||
bar_height = 25,
|
||||
on_double_click = "hyprctl dispatch fullscreen 1",
|
||||
bar_precedence_over_border = true,
|
||||
bar_part_of_window = true,
|
||||
bar_text_font = "Maple Mono Normal",
|
||||
bar_text_size = 10,
|
||||
bar_blur = true,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
---------------
|
||||
---- INPUT ----
|
||||
---------------
|
||||
|
||||
hl.config({
|
||||
input = {
|
||||
kb_layout = "us",
|
||||
kb_variant = "",
|
||||
kb_model = "",
|
||||
kb_options = "",
|
||||
kb_rules = "",
|
||||
|
||||
follow_mouse = 1,
|
||||
|
||||
sensitivity = 0,
|
||||
|
||||
touchpad = {
|
||||
natural_scroll = false,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
hl.gesture({
|
||||
fingers = 3,
|
||||
direction = "horizontal",
|
||||
action = "workspace",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- KEYBINDINGS ----
|
||||
---------------------
|
||||
|
||||
local mainMod = "SUPER"
|
||||
|
||||
hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(terminal))
|
||||
local closeWindowBind = hl.bind(mainMod .. " + W", hl.dsp.window.close())
|
||||
hl.bind(mainMod .. " + M", hl.dsp.exec_cmd("command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch 'hl.dsp.exit()'"))
|
||||
hl.bind(mainMod .. " + S", function()
|
||||
local window = hl.get_active_window()
|
||||
if not window then return end
|
||||
|
||||
if window.class == "foot" and not window.floating and window.fullscreen == 0 then
|
||||
local width = math.floor(window.size.x * 0.75)
|
||||
local height = math.floor(window.size.y * 0.75)
|
||||
hl.dispatch(hl.dsp.window.float({ action = "enable", window = window }))
|
||||
hl.dispatch(hl.dsp.window.resize({ x = width, y = height, relative = false, window = window }))
|
||||
hl.dispatch(hl.dsp.window.center({ window = window }))
|
||||
else
|
||||
hl.dispatch(hl.dsp.window.float({ action = "toggle", window = window }))
|
||||
end
|
||||
end)
|
||||
hl.bind(mainMod .. " + F", hl.dsp.window.fullscreen({ mode = "fullscreen", action = "toggle" }))
|
||||
hl.bind(mainMod .. " + D", hl.dsp.exec_cmd(menu))
|
||||
hl.bind(mainMod .. " + P", hl.dsp.exec_cmd("qs ipc call wallpapers toggle"))
|
||||
hl.bind(mainMod .. " + J", hl.dsp.layout("togglesplit")) -- dwindle only
|
||||
|
||||
-- Screenshots: full output, selected region, or selected region to clipboard.
|
||||
hl.bind("Print", hl.dsp.exec_cmd([[mkdir -p "$HOME/Pictures/Screenshots" && grim "$HOME/Pictures/Screenshots/$(date +%Y-%m-%d_%H-%M-%S).png"]]))
|
||||
hl.bind("SHIFT + Print", hl.dsp.exec_cmd([[mkdir -p "$HOME/Pictures/Screenshots" && region=$(slurp) && [ -n "$region" ] && grim -g "$region" "$HOME/Pictures/Screenshots/$(date +%Y-%m-%d_%H-%M-%S).png"]]))
|
||||
hl.bind("SUPER + SHIFT + Print", hl.dsp.exec_cmd([[region=$(slurp) && [ -n "$region" ] && grim -g "$region" - | wl-copy -t image/png]]))
|
||||
|
||||
-- Move focus with mainMod + arrow keys
|
||||
hl.bind(mainMod .. " + left", hl.dsp.focus({ direction = "left" }))
|
||||
hl.bind(mainMod .. " + right", hl.dsp.focus({ direction = "right" }))
|
||||
hl.bind(mainMod .. " + up", hl.dsp.focus({ direction = "up" }))
|
||||
hl.bind(mainMod .. " + down", hl.dsp.focus({ direction = "down" }))
|
||||
|
||||
-- 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 }))
|
||||
end
|
||||
|
||||
-- Scroll through existing workspaces with mainMod + scroll
|
||||
hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
|
||||
hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
|
||||
|
||||
-- Move/resize windows with mainMod + LMB/RMB and dragging
|
||||
hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
|
||||
hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true })
|
||||
|
||||
-- Volume / brightness
|
||||
hl.bind("XF86PowerOff", hl.dsp.exec_cmd("qs ipc call power open"), { locked = true, description = "Open the power menu" })
|
||||
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("qs ipc call volume up"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("qs ipc call volume down"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("qs ipc call volume mute"), { locked = true })
|
||||
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("qs ipc call brightness up"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessDown",hl.dsp.exec_cmd("qs ipc call brightness down"), { locked = true, repeating = true })
|
||||
|
||||
-- Requires playerctl
|
||||
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true })
|
||||
hl.bind("XF86AudioPause", hl.dsp.exec_cmd("playerctl pause"), { locked = true })
|
||||
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play"), { locked = true })
|
||||
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true })
|
||||
|
||||
|
||||
--------------------------------
|
||||
---- WINDOWS AND WORKSPACES ----
|
||||
--------------------------------
|
||||
|
||||
local suppressMaximizeRule = hl.window_rule({
|
||||
name = "suppress-maximize-events",
|
||||
match = { class = ".*" },
|
||||
|
||||
suppress_event = "maximize",
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "fix-xwayland-drags",
|
||||
match = {
|
||||
class = "^$",
|
||||
title = "^$",
|
||||
xwayland = true,
|
||||
float = true,
|
||||
fullscreen = false,
|
||||
pin = false,
|
||||
},
|
||||
|
||||
no_focus = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "move-hyprland-run",
|
||||
match = { class = "hyprland-run" },
|
||||
|
||||
move = "20 monitor_h-120",
|
||||
float = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "hyprbars-only-on-foot",
|
||||
match = { class = "^(?!foot$).*" },
|
||||
["hyprbars:no_bar"] = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "disable-window-blur-by-default",
|
||||
match = { class = ".*" },
|
||||
no_blur = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "foot-tiled-no-blur",
|
||||
match = { class = "^foot$", float = false },
|
||||
no_blur = true,
|
||||
force_rgbx = true,
|
||||
["hyprbars:bar_color"] = "rgba(151515ff)",
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "foot-floating-blur",
|
||||
match = { class = "^foot$", float = true },
|
||||
no_blur = false,
|
||||
["hyprbars:bar_color"] = "rgba(15151500)",
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "disable-hyprbars-for-firefox",
|
||||
match = { class = "^(org%.mozilla%.firefox)$" },
|
||||
["hyprbars:no_bar"] = true,
|
||||
})
|
||||
@@ -1,324 +0,0 @@
|
||||
-- Hyprland Lua config: dark, minimal, small gaps, Quickshell bar on the left
|
||||
-- https://wiki.hypr.land/Configuring/Start/
|
||||
|
||||
------------------
|
||||
---- MONITORS ----
|
||||
------------------
|
||||
|
||||
hl.monitor({
|
||||
output = "",
|
||||
mode = "preferred",
|
||||
position = "auto",
|
||||
scale = "auto",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- MY PROGRAMS ----
|
||||
---------------------
|
||||
|
||||
local terminal = "foot"
|
||||
local menu = "qs ipc call launcher toggle"
|
||||
|
||||
|
||||
-------------------
|
||||
---- AUTOSTART ----
|
||||
-------------------
|
||||
|
||||
hl.on("hyprland.start", function()
|
||||
hl.exec_cmd("qs") -- Quickshell: bar + launcher
|
||||
hl.exec_cmd("hyprpaper") -- wallpaper, if you use it
|
||||
hl.exec_cmd("wl-clip-persist --clipboard regular") -- Keep copied data available after its source app exits
|
||||
hl.exec_cmd("hyprpm reload")
|
||||
end)
|
||||
|
||||
|
||||
-------------------------------
|
||||
---- ENVIRONMENT VARIABLES ----
|
||||
-------------------------------
|
||||
|
||||
hl.env("XCURSOR_SIZE", "18")
|
||||
hl.env("XCURSOR_THEME", "Bibata-Modern-Classic")
|
||||
hl.env("HYPRCURSOR_THEME", "Bibata-Modern-Classic")
|
||||
hl.env("HYPRCURSOR_SIZE", "18")
|
||||
hl.env("GTK_THEME", "KVJ")
|
||||
|
||||
-----------------------
|
||||
---- LOOK AND FEEL ----
|
||||
-----------------------
|
||||
|
||||
hl.config({
|
||||
general = {
|
||||
gaps_in = 5, -- 5 + 5 = 10px between windows
|
||||
gaps_out = 10, -- 10px to screen edges and to the bar
|
||||
|
||||
border_size = 1,
|
||||
|
||||
col = {
|
||||
active_border = "rgba(6b6b6bcc)";
|
||||
inactive_border = "rgba(3a3a3aff)",
|
||||
},
|
||||
|
||||
resize_on_border = true,
|
||||
allow_tearing = false,
|
||||
|
||||
layout = "dwindle",
|
||||
},
|
||||
|
||||
decoration = {
|
||||
rounding = 1,
|
||||
rounding_power = 2,
|
||||
|
||||
active_opacity = 1.0,
|
||||
inactive_opacity = 1.0,
|
||||
|
||||
shadow = {
|
||||
enabled = false,
|
||||
},
|
||||
|
||||
blur = {
|
||||
enabled = true,
|
||||
size = 7,
|
||||
passes = 2,
|
||||
vibrancy = 0.24,
|
||||
},
|
||||
},
|
||||
|
||||
animations = {
|
||||
enabled = true,
|
||||
},
|
||||
})
|
||||
|
||||
-- Default curves and 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} } })
|
||||
|
||||
hl.curve("easy", { type = "spring", mass = 1, stiffness = 238.1191, dampening = 24.21279333 })
|
||||
|
||||
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 = false, speed = 3, bezier = "linear", style = "popin 87%" })
|
||||
hl.animation({ leaf = "fadeIn", enabled = true, speed = 1.73, bezier = "almostLinear" })
|
||||
hl.animation({ leaf = "fadeOut", enabled = false, speed = 3, 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" })
|
||||
|
||||
hl.config({
|
||||
dwindle = {
|
||||
preserve_split = true,
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
master = {
|
||||
new_status = "master",
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
scrolling = {
|
||||
fullscreen_on_one_column = true,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
----------------
|
||||
---- MISC ----
|
||||
----------------
|
||||
|
||||
hl.config({
|
||||
misc = {
|
||||
force_default_wallpaper = 0, -- no anime mascot
|
||||
disable_hyprland_logo = true, -- plain dark background
|
||||
background_color = 0xff0b0b0b,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
hl.config({
|
||||
plugin = {
|
||||
hyprbars = {
|
||||
bar_color = "#151515",
|
||||
bar_height = 25,
|
||||
on_double_click = "hyprctl dispatch fullscreen 1",
|
||||
bar_precedence_over_border = true,
|
||||
bar_part_of_window = true,
|
||||
bar_text_font = "Maple Mono Normal",
|
||||
bar_text_size = 10,
|
||||
bar_blur = true,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
---------------
|
||||
---- INPUT ----
|
||||
---------------
|
||||
|
||||
hl.config({
|
||||
input = {
|
||||
kb_layout = "us",
|
||||
kb_variant = "",
|
||||
kb_model = "",
|
||||
kb_options = "",
|
||||
kb_rules = "",
|
||||
|
||||
follow_mouse = 1,
|
||||
|
||||
sensitivity = 0,
|
||||
|
||||
touchpad = {
|
||||
natural_scroll = false,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
hl.gesture({
|
||||
fingers = 3,
|
||||
direction = "horizontal",
|
||||
action = "workspace",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- KEYBINDINGS ----
|
||||
---------------------
|
||||
|
||||
local mainMod = "SUPER"
|
||||
|
||||
hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(terminal))
|
||||
local closeWindowBind = hl.bind(mainMod .. " + W", hl.dsp.window.close())
|
||||
hl.bind(mainMod .. " + M", hl.dsp.exec_cmd("command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch 'hl.dsp.exit()'"))
|
||||
hl.bind(mainMod .. " + S", function()
|
||||
local window = hl.get_active_window()
|
||||
if not window then return end
|
||||
|
||||
if window.class == "foot" and not window.floating and window.fullscreen == 0 then
|
||||
local width = math.floor(window.size.x * 0.75)
|
||||
local height = math.floor(window.size.y * 0.75)
|
||||
hl.dispatch(hl.dsp.window.float({ action = "enable", window = window }))
|
||||
hl.dispatch(hl.dsp.window.resize({ x = width, y = height, relative = false, window = window }))
|
||||
hl.dispatch(hl.dsp.window.center({ window = window }))
|
||||
else
|
||||
hl.dispatch(hl.dsp.window.float({ action = "toggle", window = window }))
|
||||
end
|
||||
end)
|
||||
hl.bind(mainMod .. " + F", hl.dsp.window.fullscreen({ mode = "fullscreen", action = "toggle" }))
|
||||
hl.bind(mainMod .. " + D", hl.dsp.exec_cmd(menu))
|
||||
hl.bind(mainMod .. " + P", hl.dsp.exec_cmd("qs ipc call wallpapers toggle"))
|
||||
hl.bind(mainMod .. " + J", hl.dsp.layout("togglesplit")) -- dwindle only
|
||||
|
||||
-- Screenshots: full output, selected region, or selected region to clipboard.
|
||||
hl.bind("Print", hl.dsp.exec_cmd([[mkdir -p "$HOME/Pictures/Screenshots" && grim "$HOME/Pictures/Screenshots/$(date +%Y-%m-%d_%H-%M-%S).png"]]))
|
||||
hl.bind("SHIFT + Print", hl.dsp.exec_cmd([[mkdir -p "$HOME/Pictures/Screenshots" && region=$(slurp) && [ -n "$region" ] && grim -g "$region" "$HOME/Pictures/Screenshots/$(date +%Y-%m-%d_%H-%M-%S).png"]]))
|
||||
hl.bind("SUPER + SHIFT + Print", hl.dsp.exec_cmd([[region=$(slurp) && [ -n "$region" ] && grim -g "$region" - | wl-copy -t image/png]]))
|
||||
|
||||
-- Move focus with mainMod + arrow keys
|
||||
hl.bind(mainMod .. " + left", hl.dsp.focus({ direction = "left" }))
|
||||
hl.bind(mainMod .. " + right", hl.dsp.focus({ direction = "right" }))
|
||||
hl.bind(mainMod .. " + up", hl.dsp.focus({ direction = "up" }))
|
||||
hl.bind(mainMod .. " + down", hl.dsp.focus({ direction = "down" }))
|
||||
|
||||
-- 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 }))
|
||||
end
|
||||
|
||||
-- Scroll through existing workspaces with mainMod + scroll
|
||||
hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
|
||||
hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
|
||||
|
||||
-- Move/resize windows with mainMod + LMB/RMB and dragging
|
||||
hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
|
||||
hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true })
|
||||
|
||||
-- Volume / brightness
|
||||
hl.bind("XF86PowerOff", hl.dsp.exec_cmd("qs ipc call power open"), { locked = true, description = "Open the power menu" })
|
||||
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("qs ipc call volume up"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("qs ipc call volume down"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("qs ipc call volume mute"), { locked = true })
|
||||
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("qs ipc call brightness up"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessDown",hl.dsp.exec_cmd("qs ipc call brightness down"), { locked = true, repeating = true })
|
||||
|
||||
-- Requires playerctl
|
||||
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true })
|
||||
hl.bind("XF86AudioPause", hl.dsp.exec_cmd("playerctl pause"), { locked = true })
|
||||
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play"), { locked = true })
|
||||
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true })
|
||||
|
||||
|
||||
--------------------------------
|
||||
---- WINDOWS AND WORKSPACES ----
|
||||
--------------------------------
|
||||
|
||||
local suppressMaximizeRule = hl.window_rule({
|
||||
name = "suppress-maximize-events",
|
||||
match = { class = ".*" },
|
||||
|
||||
suppress_event = "maximize",
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "fix-xwayland-drags",
|
||||
match = {
|
||||
class = "^$",
|
||||
title = "^$",
|
||||
xwayland = true,
|
||||
float = true,
|
||||
fullscreen = false,
|
||||
pin = false,
|
||||
},
|
||||
|
||||
no_focus = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "move-hyprland-run",
|
||||
match = { class = "hyprland-run" },
|
||||
|
||||
move = "20 monitor_h-120",
|
||||
float = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "hyprbars-only-on-foot",
|
||||
match = { class = "^(?!foot$).*" },
|
||||
["hyprbars:no_bar"] = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "foot-tiled-no-blur",
|
||||
match = { class = "^foot$", float = false },
|
||||
no_blur = true,
|
||||
["hyprbars:bar_color"] = "rgba(151515ff)",
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "foot-floating-blur",
|
||||
match = { class = "^foot$", float = true },
|
||||
no_blur = false,
|
||||
["hyprbars:bar_color"] = "rgba(15151500)",
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "disable-hyprbars-for-firefox",
|
||||
match = { class = "^(org%.mozilla%.firefox)$" },
|
||||
["hyprbars:no_bar"] = true,
|
||||
})
|
||||
@@ -1,304 +0,0 @@
|
||||
-- Hyprland Lua config: dark, minimal, small gaps, Quickshell bar on the left
|
||||
-- https://wiki.hypr.land/Configuring/Start/
|
||||
|
||||
------------------
|
||||
---- MONITORS ----
|
||||
------------------
|
||||
|
||||
hl.monitor({
|
||||
output = "",
|
||||
mode = "preferred",
|
||||
position = "auto",
|
||||
scale = "auto",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- MY PROGRAMS ----
|
||||
---------------------
|
||||
|
||||
local terminal = "foot"
|
||||
local menu = "qs ipc call launcher toggle"
|
||||
|
||||
|
||||
-------------------
|
||||
---- AUTOSTART ----
|
||||
-------------------
|
||||
|
||||
hl.on("hyprland.start", function()
|
||||
hl.exec_cmd("qs") -- Quickshell: bar + launcher
|
||||
hl.exec_cmd("hyprpaper") -- wallpaper, if you use it
|
||||
hl.exec_cmd("wl-clip-persist --clipboard regular") -- Keep copied data available after its source app exits
|
||||
hl.exec_cmd("hyprpm reload")
|
||||
end)
|
||||
|
||||
|
||||
-------------------------------
|
||||
---- ENVIRONMENT VARIABLES ----
|
||||
-------------------------------
|
||||
|
||||
hl.env("XCURSOR_SIZE", "18")
|
||||
hl.env("XCURSOR_THEME", "Bibata-Modern-Classic")
|
||||
hl.env("HYPRCURSOR_THEME", "Bibata-Modern-Classic")
|
||||
hl.env("HYPRCURSOR_SIZE", "18")
|
||||
hl.env("GTK_THEME", "KVJ")
|
||||
|
||||
-----------------------
|
||||
---- LOOK AND FEEL ----
|
||||
-----------------------
|
||||
|
||||
hl.config({
|
||||
general = {
|
||||
gaps_in = 5, -- 5 + 5 = 10px between windows
|
||||
gaps_out = 10, -- 10px to screen edges and to the bar
|
||||
|
||||
border_size = 1,
|
||||
|
||||
col = {
|
||||
active_border = "rgba(6b6b6bcc)";
|
||||
inactive_border = "rgba(3a3a3aff)",
|
||||
},
|
||||
|
||||
resize_on_border = true,
|
||||
allow_tearing = false,
|
||||
|
||||
layout = "dwindle",
|
||||
},
|
||||
|
||||
decoration = {
|
||||
rounding = 1,
|
||||
rounding_power = 2,
|
||||
|
||||
active_opacity = 1.0,
|
||||
inactive_opacity = 1.0,
|
||||
|
||||
shadow = {
|
||||
enabled = false,
|
||||
},
|
||||
|
||||
blur = {
|
||||
enabled = true,
|
||||
size = 7,
|
||||
passes = 2,
|
||||
vibrancy = 0.24,
|
||||
},
|
||||
},
|
||||
|
||||
animations = {
|
||||
enabled = true,
|
||||
},
|
||||
})
|
||||
|
||||
-- Default curves and 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} } })
|
||||
|
||||
hl.curve("easy", { type = "spring", mass = 1, stiffness = 238.1191, dampening = 24.21279333 })
|
||||
|
||||
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 = false, speed = 3, bezier = "linear", style = "popin 87%" })
|
||||
hl.animation({ leaf = "fadeIn", enabled = true, speed = 1.73, bezier = "almostLinear" })
|
||||
hl.animation({ leaf = "fadeOut", enabled = false, speed = 3, 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" })
|
||||
|
||||
hl.config({
|
||||
dwindle = {
|
||||
preserve_split = true,
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
master = {
|
||||
new_status = "master",
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
scrolling = {
|
||||
fullscreen_on_one_column = true,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
----------------
|
||||
---- MISC ----
|
||||
----------------
|
||||
|
||||
hl.config({
|
||||
misc = {
|
||||
force_default_wallpaper = 0, -- no anime mascot
|
||||
disable_hyprland_logo = true, -- plain dark background
|
||||
background_color = 0xff0b0b0b,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
hl.config({
|
||||
plugin = {
|
||||
hyprbars = {
|
||||
bar_color = "#151515",
|
||||
bar_height = 25,
|
||||
on_double_click = "hyprctl dispatch fullscreen 1",
|
||||
bar_precedence_over_border = true,
|
||||
bar_part_of_window = true,
|
||||
bar_text_font = "Maple Mono Normal",
|
||||
bar_text_size = 10,
|
||||
bar_blur = true,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
---------------
|
||||
---- INPUT ----
|
||||
---------------
|
||||
|
||||
hl.config({
|
||||
input = {
|
||||
kb_layout = "us",
|
||||
kb_variant = "",
|
||||
kb_model = "",
|
||||
kb_options = "",
|
||||
kb_rules = "",
|
||||
|
||||
follow_mouse = 1,
|
||||
|
||||
sensitivity = 0,
|
||||
|
||||
touchpad = {
|
||||
natural_scroll = false,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
hl.gesture({
|
||||
fingers = 3,
|
||||
direction = "horizontal",
|
||||
action = "workspace",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- KEYBINDINGS ----
|
||||
---------------------
|
||||
|
||||
local mainMod = "SUPER"
|
||||
|
||||
hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(terminal))
|
||||
local closeWindowBind = hl.bind(mainMod .. " + W", hl.dsp.window.close())
|
||||
hl.bind(mainMod .. " + M", hl.dsp.exec_cmd("command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch 'hl.dsp.exit()'"))
|
||||
hl.bind(mainMod .. " + S", function()
|
||||
local window = hl.get_active_window()
|
||||
if not window then return end
|
||||
|
||||
if window.class == "foot" and not window.floating and window.fullscreen == 0 then
|
||||
local width = math.floor(window.size.x * 0.75)
|
||||
local height = math.floor(window.size.y * 0.75)
|
||||
hl.dispatch(hl.dsp.window.float({ action = "enable", window = window }))
|
||||
hl.dispatch(hl.dsp.window.resize({ x = width, y = height, relative = false, window = window }))
|
||||
hl.dispatch(hl.dsp.window.center({ window = window }))
|
||||
else
|
||||
hl.dispatch(hl.dsp.window.float({ action = "toggle", window = window }))
|
||||
end
|
||||
end)
|
||||
hl.bind(mainMod .. " + F", hl.dsp.window.fullscreen({ mode = "fullscreen", action = "toggle" }))
|
||||
hl.bind(mainMod .. " + D", hl.dsp.exec_cmd(menu))
|
||||
hl.bind(mainMod .. " + P", hl.dsp.exec_cmd("qs ipc call wallpapers toggle"))
|
||||
hl.bind(mainMod .. " + J", hl.dsp.layout("togglesplit")) -- dwindle only
|
||||
|
||||
-- Screenshots: full output, selected region, or selected region to clipboard.
|
||||
hl.bind("Print", hl.dsp.exec_cmd([[mkdir -p "$HOME/Pictures/Screenshots" && grim "$HOME/Pictures/Screenshots/$(date +%Y-%m-%d_%H-%M-%S).png"]]))
|
||||
hl.bind("SHIFT + Print", hl.dsp.exec_cmd([[mkdir -p "$HOME/Pictures/Screenshots" && region=$(slurp) && [ -n "$region" ] && grim -g "$region" "$HOME/Pictures/Screenshots/$(date +%Y-%m-%d_%H-%M-%S).png"]]))
|
||||
hl.bind("SUPER + SHIFT + Print", hl.dsp.exec_cmd([[region=$(slurp) && [ -n "$region" ] && grim -g "$region" - | wl-copy -t image/png]]))
|
||||
|
||||
-- Move focus with mainMod + arrow keys
|
||||
hl.bind(mainMod .. " + left", hl.dsp.focus({ direction = "left" }))
|
||||
hl.bind(mainMod .. " + right", hl.dsp.focus({ direction = "right" }))
|
||||
hl.bind(mainMod .. " + up", hl.dsp.focus({ direction = "up" }))
|
||||
hl.bind(mainMod .. " + down", hl.dsp.focus({ direction = "down" }))
|
||||
|
||||
-- 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 }))
|
||||
end
|
||||
|
||||
-- Scroll through existing workspaces with mainMod + scroll
|
||||
hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
|
||||
hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
|
||||
|
||||
-- Move/resize windows with mainMod + LMB/RMB and dragging
|
||||
hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
|
||||
hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true })
|
||||
|
||||
-- Volume / brightness
|
||||
hl.bind("XF86PowerOff", hl.dsp.exec_cmd("qs ipc call power open"), { locked = true, description = "Open the power menu" })
|
||||
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("qs ipc call volume up"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("qs ipc call volume down"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("qs ipc call volume mute"), { locked = true })
|
||||
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("qs ipc call brightness up"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessDown",hl.dsp.exec_cmd("qs ipc call brightness down"), { locked = true, repeating = true })
|
||||
|
||||
-- Requires playerctl
|
||||
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true })
|
||||
hl.bind("XF86AudioPause", hl.dsp.exec_cmd("playerctl pause"), { locked = true })
|
||||
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play"), { locked = true })
|
||||
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true })
|
||||
|
||||
|
||||
--------------------------------
|
||||
---- WINDOWS AND WORKSPACES ----
|
||||
--------------------------------
|
||||
|
||||
local suppressMaximizeRule = hl.window_rule({
|
||||
name = "suppress-maximize-events",
|
||||
match = { class = ".*" },
|
||||
|
||||
suppress_event = "maximize",
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "fix-xwayland-drags",
|
||||
match = {
|
||||
class = "^$",
|
||||
title = "^$",
|
||||
xwayland = true,
|
||||
float = true,
|
||||
fullscreen = false,
|
||||
pin = false,
|
||||
},
|
||||
|
||||
no_focus = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "move-hyprland-run",
|
||||
match = { class = "hyprland-run" },
|
||||
|
||||
move = "20 monitor_h-120",
|
||||
float = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "disable-hyprbars-for-firefox",
|
||||
match = { class = "^(org%.mozilla%.firefox)$" },
|
||||
["hyprbars:no_bar"] = true,
|
||||
})
|
||||
@@ -1,316 +0,0 @@
|
||||
-- Hyprland Lua config: dark, minimal, small gaps, Quickshell bar on the left
|
||||
-- https://wiki.hypr.land/Configuring/Start/
|
||||
|
||||
------------------
|
||||
---- MONITORS ----
|
||||
------------------
|
||||
|
||||
hl.monitor({
|
||||
output = "",
|
||||
mode = "preferred",
|
||||
position = "auto",
|
||||
scale = "auto",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- MY PROGRAMS ----
|
||||
---------------------
|
||||
|
||||
local terminal = "foot"
|
||||
local menu = "qs ipc call launcher toggle"
|
||||
|
||||
|
||||
-------------------
|
||||
---- AUTOSTART ----
|
||||
-------------------
|
||||
|
||||
hl.on("hyprland.start", function()
|
||||
hl.exec_cmd("qs") -- Quickshell: bar + launcher
|
||||
hl.exec_cmd("hyprpaper") -- wallpaper, if you use it
|
||||
hl.exec_cmd("wl-clip-persist --clipboard regular") -- Keep copied data available after its source app exits
|
||||
hl.exec_cmd("hyprpm reload")
|
||||
end)
|
||||
|
||||
|
||||
-------------------------------
|
||||
---- ENVIRONMENT VARIABLES ----
|
||||
-------------------------------
|
||||
|
||||
hl.env("XCURSOR_SIZE", "18")
|
||||
hl.env("XCURSOR_THEME", "Bibata-Modern-Classic")
|
||||
hl.env("HYPRCURSOR_THEME", "Bibata-Modern-Classic")
|
||||
hl.env("HYPRCURSOR_SIZE", "18")
|
||||
hl.env("GTK_THEME", "KVJ")
|
||||
|
||||
-----------------------
|
||||
---- LOOK AND FEEL ----
|
||||
-----------------------
|
||||
|
||||
hl.config({
|
||||
general = {
|
||||
gaps_in = 5, -- 5 + 5 = 10px between windows
|
||||
gaps_out = 10, -- 10px to screen edges and to the bar
|
||||
|
||||
border_size = 1,
|
||||
|
||||
col = {
|
||||
active_border = "rgba(6b6b6bcc)";
|
||||
inactive_border = "rgba(3a3a3aff)",
|
||||
},
|
||||
|
||||
resize_on_border = true,
|
||||
allow_tearing = false,
|
||||
|
||||
layout = "dwindle",
|
||||
},
|
||||
|
||||
decoration = {
|
||||
rounding = 1,
|
||||
rounding_power = 2,
|
||||
|
||||
active_opacity = 1.0,
|
||||
inactive_opacity = 1.0,
|
||||
|
||||
shadow = {
|
||||
enabled = false,
|
||||
},
|
||||
|
||||
blur = {
|
||||
enabled = true,
|
||||
size = 7,
|
||||
passes = 2,
|
||||
vibrancy = 0.24,
|
||||
},
|
||||
},
|
||||
|
||||
animations = {
|
||||
enabled = true,
|
||||
},
|
||||
})
|
||||
|
||||
-- Default curves and 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} } })
|
||||
|
||||
hl.curve("easy", { type = "spring", mass = 1, stiffness = 238.1191, dampening = 24.21279333 })
|
||||
|
||||
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 = false, speed = 3, bezier = "linear", style = "popin 87%" })
|
||||
hl.animation({ leaf = "fadeIn", enabled = true, speed = 1.73, bezier = "almostLinear" })
|
||||
hl.animation({ leaf = "fadeOut", enabled = false, speed = 3, 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" })
|
||||
|
||||
hl.config({
|
||||
dwindle = {
|
||||
preserve_split = true,
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
master = {
|
||||
new_status = "master",
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
scrolling = {
|
||||
fullscreen_on_one_column = true,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
----------------
|
||||
---- MISC ----
|
||||
----------------
|
||||
|
||||
hl.config({
|
||||
misc = {
|
||||
force_default_wallpaper = 0, -- no anime mascot
|
||||
disable_hyprland_logo = true, -- plain dark background
|
||||
background_color = 0xff0b0b0b,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
hl.config({
|
||||
plugin = {
|
||||
hyprbars = {
|
||||
bar_color = "#151515",
|
||||
bar_height = 25,
|
||||
on_double_click = "hyprctl dispatch fullscreen 1",
|
||||
bar_precedence_over_border = true,
|
||||
bar_part_of_window = true,
|
||||
bar_text_font = "Maple Mono Normal",
|
||||
bar_text_size = 10,
|
||||
bar_blur = true,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
---------------
|
||||
---- INPUT ----
|
||||
---------------
|
||||
|
||||
hl.config({
|
||||
input = {
|
||||
kb_layout = "us",
|
||||
kb_variant = "",
|
||||
kb_model = "",
|
||||
kb_options = "",
|
||||
kb_rules = "",
|
||||
|
||||
follow_mouse = 1,
|
||||
|
||||
sensitivity = 0,
|
||||
|
||||
touchpad = {
|
||||
natural_scroll = false,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
hl.gesture({
|
||||
fingers = 3,
|
||||
direction = "horizontal",
|
||||
action = "workspace",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- KEYBINDINGS ----
|
||||
---------------------
|
||||
|
||||
local mainMod = "SUPER"
|
||||
|
||||
hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(terminal))
|
||||
local closeWindowBind = hl.bind(mainMod .. " + W", hl.dsp.window.close())
|
||||
hl.bind(mainMod .. " + M", hl.dsp.exec_cmd("command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch 'hl.dsp.exit()'"))
|
||||
hl.bind(mainMod .. " + S", function()
|
||||
local window = hl.get_active_window()
|
||||
if not window then return end
|
||||
|
||||
if window.class == "foot" and not window.floating and window.fullscreen == 0 then
|
||||
local width = math.floor(window.size.x * 0.75)
|
||||
local height = math.floor(window.size.y * 0.75)
|
||||
hl.dispatch(hl.dsp.window.float({ action = "enable", window = window }))
|
||||
hl.dispatch(hl.dsp.window.resize({ x = width, y = height, relative = false, window = window }))
|
||||
hl.dispatch(hl.dsp.window.center({ window = window }))
|
||||
else
|
||||
hl.dispatch(hl.dsp.window.float({ action = "toggle", window = window }))
|
||||
end
|
||||
end)
|
||||
hl.bind(mainMod .. " + F", hl.dsp.window.fullscreen({ mode = "fullscreen", action = "toggle" }))
|
||||
hl.bind(mainMod .. " + D", hl.dsp.exec_cmd(menu))
|
||||
hl.bind(mainMod .. " + P", hl.dsp.exec_cmd("qs ipc call wallpapers toggle"))
|
||||
hl.bind(mainMod .. " + J", hl.dsp.layout("togglesplit")) -- dwindle only
|
||||
|
||||
-- Screenshots: full output, selected region, or selected region to clipboard.
|
||||
hl.bind("Print", hl.dsp.exec_cmd([[mkdir -p "$HOME/Pictures/Screenshots" && grim "$HOME/Pictures/Screenshots/$(date +%Y-%m-%d_%H-%M-%S).png"]]))
|
||||
hl.bind("SHIFT + Print", hl.dsp.exec_cmd([[mkdir -p "$HOME/Pictures/Screenshots" && region=$(slurp) && [ -n "$region" ] && grim -g "$region" "$HOME/Pictures/Screenshots/$(date +%Y-%m-%d_%H-%M-%S).png"]]))
|
||||
hl.bind("SUPER + SHIFT + Print", hl.dsp.exec_cmd([[region=$(slurp) && [ -n "$region" ] && grim -g "$region" - | wl-copy -t image/png]]))
|
||||
|
||||
-- Move focus with mainMod + arrow keys
|
||||
hl.bind(mainMod .. " + left", hl.dsp.focus({ direction = "left" }))
|
||||
hl.bind(mainMod .. " + right", hl.dsp.focus({ direction = "right" }))
|
||||
hl.bind(mainMod .. " + up", hl.dsp.focus({ direction = "up" }))
|
||||
hl.bind(mainMod .. " + down", hl.dsp.focus({ direction = "down" }))
|
||||
|
||||
-- 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 }))
|
||||
end
|
||||
|
||||
-- Scroll through existing workspaces with mainMod + scroll
|
||||
hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
|
||||
hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
|
||||
|
||||
-- Move/resize windows with mainMod + LMB/RMB and dragging
|
||||
hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
|
||||
hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true })
|
||||
|
||||
-- Volume / brightness
|
||||
hl.bind("XF86PowerOff", hl.dsp.exec_cmd("qs ipc call power open"), { locked = true, description = "Open the power menu" })
|
||||
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("qs ipc call volume up"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("qs ipc call volume down"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("qs ipc call volume mute"), { locked = true })
|
||||
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("qs ipc call brightness up"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessDown",hl.dsp.exec_cmd("qs ipc call brightness down"), { locked = true, repeating = true })
|
||||
|
||||
-- Requires playerctl
|
||||
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true })
|
||||
hl.bind("XF86AudioPause", hl.dsp.exec_cmd("playerctl pause"), { locked = true })
|
||||
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play"), { locked = true })
|
||||
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true })
|
||||
|
||||
|
||||
--------------------------------
|
||||
---- WINDOWS AND WORKSPACES ----
|
||||
--------------------------------
|
||||
|
||||
local suppressMaximizeRule = hl.window_rule({
|
||||
name = "suppress-maximize-events",
|
||||
match = { class = ".*" },
|
||||
|
||||
suppress_event = "maximize",
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "fix-xwayland-drags",
|
||||
match = {
|
||||
class = "^$",
|
||||
title = "^$",
|
||||
xwayland = true,
|
||||
float = true,
|
||||
fullscreen = false,
|
||||
pin = false,
|
||||
},
|
||||
|
||||
no_focus = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "move-hyprland-run",
|
||||
match = { class = "hyprland-run" },
|
||||
|
||||
move = "20 monitor_h-120",
|
||||
float = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "hyprbars-only-on-foot",
|
||||
match = { class = "^(?!foot$).*" },
|
||||
["hyprbars:no_bar"] = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "translucent-foot-bar",
|
||||
match = { class = "^foot$" },
|
||||
["hyprbars:bar_color"] = "rgba(15151566)",
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "disable-hyprbars-for-firefox",
|
||||
match = { class = "^(org%.mozilla%.firefox)$" },
|
||||
["hyprbars:no_bar"] = true,
|
||||
})
|
||||
@@ -1,316 +0,0 @@
|
||||
-- Hyprland Lua config: dark, minimal, small gaps, Quickshell bar on the left
|
||||
-- https://wiki.hypr.land/Configuring/Start/
|
||||
|
||||
------------------
|
||||
---- MONITORS ----
|
||||
------------------
|
||||
|
||||
hl.monitor({
|
||||
output = "",
|
||||
mode = "preferred",
|
||||
position = "auto",
|
||||
scale = "auto",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- MY PROGRAMS ----
|
||||
---------------------
|
||||
|
||||
local terminal = "foot"
|
||||
local menu = "qs ipc call launcher toggle"
|
||||
|
||||
|
||||
-------------------
|
||||
---- AUTOSTART ----
|
||||
-------------------
|
||||
|
||||
hl.on("hyprland.start", function()
|
||||
hl.exec_cmd("qs") -- Quickshell: bar + launcher
|
||||
hl.exec_cmd("hyprpaper") -- wallpaper, if you use it
|
||||
hl.exec_cmd("wl-clip-persist --clipboard regular") -- Keep copied data available after its source app exits
|
||||
hl.exec_cmd("hyprpm reload")
|
||||
end)
|
||||
|
||||
|
||||
-------------------------------
|
||||
---- ENVIRONMENT VARIABLES ----
|
||||
-------------------------------
|
||||
|
||||
hl.env("XCURSOR_SIZE", "18")
|
||||
hl.env("XCURSOR_THEME", "Bibata-Modern-Classic")
|
||||
hl.env("HYPRCURSOR_THEME", "Bibata-Modern-Classic")
|
||||
hl.env("HYPRCURSOR_SIZE", "18")
|
||||
hl.env("GTK_THEME", "KVJ")
|
||||
|
||||
-----------------------
|
||||
---- LOOK AND FEEL ----
|
||||
-----------------------
|
||||
|
||||
hl.config({
|
||||
general = {
|
||||
gaps_in = 5, -- 5 + 5 = 10px between windows
|
||||
gaps_out = 10, -- 10px to screen edges and to the bar
|
||||
|
||||
border_size = 1,
|
||||
|
||||
col = {
|
||||
active_border = "rgba(6b6b6bcc)";
|
||||
inactive_border = "rgba(3a3a3aff)",
|
||||
},
|
||||
|
||||
resize_on_border = true,
|
||||
allow_tearing = false,
|
||||
|
||||
layout = "dwindle",
|
||||
},
|
||||
|
||||
decoration = {
|
||||
rounding = 1,
|
||||
rounding_power = 2,
|
||||
|
||||
active_opacity = 1.0,
|
||||
inactive_opacity = 1.0,
|
||||
|
||||
shadow = {
|
||||
enabled = false,
|
||||
},
|
||||
|
||||
blur = {
|
||||
enabled = true,
|
||||
size = 7,
|
||||
passes = 2,
|
||||
vibrancy = 0.24,
|
||||
},
|
||||
},
|
||||
|
||||
animations = {
|
||||
enabled = true,
|
||||
},
|
||||
})
|
||||
|
||||
-- Default curves and 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} } })
|
||||
|
||||
hl.curve("easy", { type = "spring", mass = 1, stiffness = 238.1191, dampening = 24.21279333 })
|
||||
|
||||
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 = false, speed = 3, bezier = "linear", style = "popin 87%" })
|
||||
hl.animation({ leaf = "fadeIn", enabled = true, speed = 1.73, bezier = "almostLinear" })
|
||||
hl.animation({ leaf = "fadeOut", enabled = false, speed = 3, 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" })
|
||||
|
||||
hl.config({
|
||||
dwindle = {
|
||||
preserve_split = true,
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
master = {
|
||||
new_status = "master",
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
scrolling = {
|
||||
fullscreen_on_one_column = true,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
----------------
|
||||
---- MISC ----
|
||||
----------------
|
||||
|
||||
hl.config({
|
||||
misc = {
|
||||
force_default_wallpaper = 0, -- no anime mascot
|
||||
disable_hyprland_logo = true, -- plain dark background
|
||||
background_color = 0xff0b0b0b,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
hl.config({
|
||||
plugin = {
|
||||
hyprbars = {
|
||||
bar_color = "#151515",
|
||||
bar_height = 25,
|
||||
on_double_click = "hyprctl dispatch fullscreen 1",
|
||||
bar_precedence_over_border = true,
|
||||
bar_part_of_window = true,
|
||||
bar_text_font = "Maple Mono Normal",
|
||||
bar_text_size = 10,
|
||||
bar_blur = true,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
---------------
|
||||
---- INPUT ----
|
||||
---------------
|
||||
|
||||
hl.config({
|
||||
input = {
|
||||
kb_layout = "us",
|
||||
kb_variant = "",
|
||||
kb_model = "",
|
||||
kb_options = "",
|
||||
kb_rules = "",
|
||||
|
||||
follow_mouse = 1,
|
||||
|
||||
sensitivity = 0,
|
||||
|
||||
touchpad = {
|
||||
natural_scroll = false,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
hl.gesture({
|
||||
fingers = 3,
|
||||
direction = "horizontal",
|
||||
action = "workspace",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- KEYBINDINGS ----
|
||||
---------------------
|
||||
|
||||
local mainMod = "SUPER"
|
||||
|
||||
hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(terminal))
|
||||
local closeWindowBind = hl.bind(mainMod .. " + W", hl.dsp.window.close())
|
||||
hl.bind(mainMod .. " + M", hl.dsp.exec_cmd("command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch 'hl.dsp.exit()'"))
|
||||
hl.bind(mainMod .. " + S", function()
|
||||
local window = hl.get_active_window()
|
||||
if not window then return end
|
||||
|
||||
if window.class == "foot" and not window.floating and window.fullscreen == 0 then
|
||||
local width = math.floor(window.size.x * 0.75)
|
||||
local height = math.floor(window.size.y * 0.75)
|
||||
hl.dispatch(hl.dsp.window.float({ action = "enable", window = window }))
|
||||
hl.dispatch(hl.dsp.window.resize({ x = width, y = height, relative = false, window = window }))
|
||||
hl.dispatch(hl.dsp.window.center({ window = window }))
|
||||
else
|
||||
hl.dispatch(hl.dsp.window.float({ action = "toggle", window = window }))
|
||||
end
|
||||
end)
|
||||
hl.bind(mainMod .. " + F", hl.dsp.window.fullscreen({ mode = "fullscreen", action = "toggle" }))
|
||||
hl.bind(mainMod .. " + D", hl.dsp.exec_cmd(menu))
|
||||
hl.bind(mainMod .. " + P", hl.dsp.exec_cmd("qs ipc call wallpapers toggle"))
|
||||
hl.bind(mainMod .. " + J", hl.dsp.layout("togglesplit")) -- dwindle only
|
||||
|
||||
-- Screenshots: full output, selected region, or selected region to clipboard.
|
||||
hl.bind("Print", hl.dsp.exec_cmd([[mkdir -p "$HOME/Pictures/Screenshots" && grim "$HOME/Pictures/Screenshots/$(date +%Y-%m-%d_%H-%M-%S).png"]]))
|
||||
hl.bind("SHIFT + Print", hl.dsp.exec_cmd([[mkdir -p "$HOME/Pictures/Screenshots" && region=$(slurp) && [ -n "$region" ] && grim -g "$region" "$HOME/Pictures/Screenshots/$(date +%Y-%m-%d_%H-%M-%S).png"]]))
|
||||
hl.bind("SUPER + SHIFT + Print", hl.dsp.exec_cmd([[region=$(slurp) && [ -n "$region" ] && grim -g "$region" - | wl-copy -t image/png]]))
|
||||
|
||||
-- Move focus with mainMod + arrow keys
|
||||
hl.bind(mainMod .. " + left", hl.dsp.focus({ direction = "left" }))
|
||||
hl.bind(mainMod .. " + right", hl.dsp.focus({ direction = "right" }))
|
||||
hl.bind(mainMod .. " + up", hl.dsp.focus({ direction = "up" }))
|
||||
hl.bind(mainMod .. " + down", hl.dsp.focus({ direction = "down" }))
|
||||
|
||||
-- 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 }))
|
||||
end
|
||||
|
||||
-- Scroll through existing workspaces with mainMod + scroll
|
||||
hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
|
||||
hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
|
||||
|
||||
-- Move/resize windows with mainMod + LMB/RMB and dragging
|
||||
hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
|
||||
hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true })
|
||||
|
||||
-- Volume / brightness
|
||||
hl.bind("XF86PowerOff", hl.dsp.exec_cmd("qs ipc call power open"), { locked = true, description = "Open the power menu" })
|
||||
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("qs ipc call volume up"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("qs ipc call volume down"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("qs ipc call volume mute"), { locked = true })
|
||||
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("qs ipc call brightness up"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessDown",hl.dsp.exec_cmd("qs ipc call brightness down"), { locked = true, repeating = true })
|
||||
|
||||
-- Requires playerctl
|
||||
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true })
|
||||
hl.bind("XF86AudioPause", hl.dsp.exec_cmd("playerctl pause"), { locked = true })
|
||||
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play"), { locked = true })
|
||||
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true })
|
||||
|
||||
|
||||
--------------------------------
|
||||
---- WINDOWS AND WORKSPACES ----
|
||||
--------------------------------
|
||||
|
||||
local suppressMaximizeRule = hl.window_rule({
|
||||
name = "suppress-maximize-events",
|
||||
match = { class = ".*" },
|
||||
|
||||
suppress_event = "maximize",
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "fix-xwayland-drags",
|
||||
match = {
|
||||
class = "^$",
|
||||
title = "^$",
|
||||
xwayland = true,
|
||||
float = true,
|
||||
fullscreen = false,
|
||||
pin = false,
|
||||
},
|
||||
|
||||
no_focus = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "move-hyprland-run",
|
||||
match = { class = "hyprland-run" },
|
||||
|
||||
move = "20 monitor_h-120",
|
||||
float = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "hyprbars-only-on-foot",
|
||||
match = { class = "^(?!foot$).*" },
|
||||
["hyprbars:no_bar"] = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "translucent-foot-bar",
|
||||
match = { class = "^foot$" },
|
||||
["hyprbars:bar_color"] = "rgba(151515cc)",
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "disable-hyprbars-for-firefox",
|
||||
match = { class = "^(org%.mozilla%.firefox)$" },
|
||||
["hyprbars:no_bar"] = true,
|
||||
})
|
||||
@@ -1,316 +0,0 @@
|
||||
-- Hyprland Lua config: dark, minimal, small gaps, Quickshell bar on the left
|
||||
-- https://wiki.hypr.land/Configuring/Start/
|
||||
|
||||
------------------
|
||||
---- MONITORS ----
|
||||
------------------
|
||||
|
||||
hl.monitor({
|
||||
output = "",
|
||||
mode = "preferred",
|
||||
position = "auto",
|
||||
scale = "auto",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- MY PROGRAMS ----
|
||||
---------------------
|
||||
|
||||
local terminal = "foot"
|
||||
local menu = "qs ipc call launcher toggle"
|
||||
|
||||
|
||||
-------------------
|
||||
---- AUTOSTART ----
|
||||
-------------------
|
||||
|
||||
hl.on("hyprland.start", function()
|
||||
hl.exec_cmd("qs") -- Quickshell: bar + launcher
|
||||
hl.exec_cmd("hyprpaper") -- wallpaper, if you use it
|
||||
hl.exec_cmd("wl-clip-persist --clipboard regular") -- Keep copied data available after its source app exits
|
||||
hl.exec_cmd("hyprpm reload")
|
||||
end)
|
||||
|
||||
|
||||
-------------------------------
|
||||
---- ENVIRONMENT VARIABLES ----
|
||||
-------------------------------
|
||||
|
||||
hl.env("XCURSOR_SIZE", "18")
|
||||
hl.env("XCURSOR_THEME", "Bibata-Modern-Classic")
|
||||
hl.env("HYPRCURSOR_THEME", "Bibata-Modern-Classic")
|
||||
hl.env("HYPRCURSOR_SIZE", "18")
|
||||
hl.env("GTK_THEME", "KVJ")
|
||||
|
||||
-----------------------
|
||||
---- LOOK AND FEEL ----
|
||||
-----------------------
|
||||
|
||||
hl.config({
|
||||
general = {
|
||||
gaps_in = 5, -- 5 + 5 = 10px between windows
|
||||
gaps_out = 10, -- 10px to screen edges and to the bar
|
||||
|
||||
border_size = 1,
|
||||
|
||||
col = {
|
||||
active_border = "rgba(6b6b6bcc)";
|
||||
inactive_border = "rgba(3a3a3aff)",
|
||||
},
|
||||
|
||||
resize_on_border = true,
|
||||
allow_tearing = false,
|
||||
|
||||
layout = "dwindle",
|
||||
},
|
||||
|
||||
decoration = {
|
||||
rounding = 1,
|
||||
rounding_power = 2,
|
||||
|
||||
active_opacity = 1.0,
|
||||
inactive_opacity = 1.0,
|
||||
|
||||
shadow = {
|
||||
enabled = false,
|
||||
},
|
||||
|
||||
blur = {
|
||||
enabled = true,
|
||||
size = 7,
|
||||
passes = 2,
|
||||
vibrancy = 0.24,
|
||||
},
|
||||
},
|
||||
|
||||
animations = {
|
||||
enabled = true,
|
||||
},
|
||||
})
|
||||
|
||||
-- Default curves and 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} } })
|
||||
|
||||
hl.curve("easy", { type = "spring", mass = 1, stiffness = 238.1191, dampening = 24.21279333 })
|
||||
|
||||
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 = false, speed = 3, bezier = "linear", style = "popin 87%" })
|
||||
hl.animation({ leaf = "fadeIn", enabled = true, speed = 1.73, bezier = "almostLinear" })
|
||||
hl.animation({ leaf = "fadeOut", enabled = false, speed = 3, 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" })
|
||||
|
||||
hl.config({
|
||||
dwindle = {
|
||||
preserve_split = true,
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
master = {
|
||||
new_status = "master",
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
scrolling = {
|
||||
fullscreen_on_one_column = true,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
----------------
|
||||
---- MISC ----
|
||||
----------------
|
||||
|
||||
hl.config({
|
||||
misc = {
|
||||
force_default_wallpaper = 0, -- no anime mascot
|
||||
disable_hyprland_logo = true, -- plain dark background
|
||||
background_color = 0xff0b0b0b,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
hl.config({
|
||||
plugin = {
|
||||
hyprbars = {
|
||||
bar_color = "#151515",
|
||||
bar_height = 25,
|
||||
on_double_click = "hyprctl dispatch fullscreen 1",
|
||||
bar_precedence_over_border = true,
|
||||
bar_part_of_window = true,
|
||||
bar_text_font = "Maple Mono Normal",
|
||||
bar_text_size = 10,
|
||||
bar_blur = true,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
---------------
|
||||
---- INPUT ----
|
||||
---------------
|
||||
|
||||
hl.config({
|
||||
input = {
|
||||
kb_layout = "us",
|
||||
kb_variant = "",
|
||||
kb_model = "",
|
||||
kb_options = "",
|
||||
kb_rules = "",
|
||||
|
||||
follow_mouse = 1,
|
||||
|
||||
sensitivity = 0,
|
||||
|
||||
touchpad = {
|
||||
natural_scroll = false,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
hl.gesture({
|
||||
fingers = 3,
|
||||
direction = "horizontal",
|
||||
action = "workspace",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- KEYBINDINGS ----
|
||||
---------------------
|
||||
|
||||
local mainMod = "SUPER"
|
||||
|
||||
hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(terminal))
|
||||
local closeWindowBind = hl.bind(mainMod .. " + W", hl.dsp.window.close())
|
||||
hl.bind(mainMod .. " + M", hl.dsp.exec_cmd("command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch 'hl.dsp.exit()'"))
|
||||
hl.bind(mainMod .. " + S", function()
|
||||
local window = hl.get_active_window()
|
||||
if not window then return end
|
||||
|
||||
if window.class == "foot" and not window.floating and window.fullscreen == 0 then
|
||||
local width = math.floor(window.size.x * 0.75)
|
||||
local height = math.floor(window.size.y * 0.75)
|
||||
hl.dispatch(hl.dsp.window.float({ action = "enable", window = window }))
|
||||
hl.dispatch(hl.dsp.window.resize({ x = width, y = height, relative = false, window = window }))
|
||||
hl.dispatch(hl.dsp.window.center({ window = window }))
|
||||
else
|
||||
hl.dispatch(hl.dsp.window.float({ action = "toggle", window = window }))
|
||||
end
|
||||
end)
|
||||
hl.bind(mainMod .. " + F", hl.dsp.window.fullscreen({ mode = "fullscreen", action = "toggle" }))
|
||||
hl.bind(mainMod .. " + D", hl.dsp.exec_cmd(menu))
|
||||
hl.bind(mainMod .. " + P", hl.dsp.exec_cmd("qs ipc call wallpapers toggle"))
|
||||
hl.bind(mainMod .. " + J", hl.dsp.layout("togglesplit")) -- dwindle only
|
||||
|
||||
-- Screenshots: full output, selected region, or selected region to clipboard.
|
||||
hl.bind("Print", hl.dsp.exec_cmd([[mkdir -p "$HOME/Pictures/Screenshots" && grim "$HOME/Pictures/Screenshots/$(date +%Y-%m-%d_%H-%M-%S).png"]]))
|
||||
hl.bind("SHIFT + Print", hl.dsp.exec_cmd([[mkdir -p "$HOME/Pictures/Screenshots" && region=$(slurp) && [ -n "$region" ] && grim -g "$region" "$HOME/Pictures/Screenshots/$(date +%Y-%m-%d_%H-%M-%S).png"]]))
|
||||
hl.bind("SUPER + SHIFT + Print", hl.dsp.exec_cmd([[region=$(slurp) && [ -n "$region" ] && grim -g "$region" - | wl-copy -t image/png]]))
|
||||
|
||||
-- Move focus with mainMod + arrow keys
|
||||
hl.bind(mainMod .. " + left", hl.dsp.focus({ direction = "left" }))
|
||||
hl.bind(mainMod .. " + right", hl.dsp.focus({ direction = "right" }))
|
||||
hl.bind(mainMod .. " + up", hl.dsp.focus({ direction = "up" }))
|
||||
hl.bind(mainMod .. " + down", hl.dsp.focus({ direction = "down" }))
|
||||
|
||||
-- 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 }))
|
||||
end
|
||||
|
||||
-- Scroll through existing workspaces with mainMod + scroll
|
||||
hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
|
||||
hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
|
||||
|
||||
-- Move/resize windows with mainMod + LMB/RMB and dragging
|
||||
hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
|
||||
hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true })
|
||||
|
||||
-- Volume / brightness
|
||||
hl.bind("XF86PowerOff", hl.dsp.exec_cmd("qs ipc call power open"), { locked = true, description = "Open the power menu" })
|
||||
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("qs ipc call volume up"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("qs ipc call volume down"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("qs ipc call volume mute"), { locked = true })
|
||||
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("qs ipc call brightness up"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessDown",hl.dsp.exec_cmd("qs ipc call brightness down"), { locked = true, repeating = true })
|
||||
|
||||
-- Requires playerctl
|
||||
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true })
|
||||
hl.bind("XF86AudioPause", hl.dsp.exec_cmd("playerctl pause"), { locked = true })
|
||||
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play"), { locked = true })
|
||||
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true })
|
||||
|
||||
|
||||
--------------------------------
|
||||
---- WINDOWS AND WORKSPACES ----
|
||||
--------------------------------
|
||||
|
||||
local suppressMaximizeRule = hl.window_rule({
|
||||
name = "suppress-maximize-events",
|
||||
match = { class = ".*" },
|
||||
|
||||
suppress_event = "maximize",
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "fix-xwayland-drags",
|
||||
match = {
|
||||
class = "^$",
|
||||
title = "^$",
|
||||
xwayland = true,
|
||||
float = true,
|
||||
fullscreen = false,
|
||||
pin = false,
|
||||
},
|
||||
|
||||
no_focus = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "move-hyprland-run",
|
||||
match = { class = "hyprland-run" },
|
||||
|
||||
move = "20 monitor_h-120",
|
||||
float = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "hyprbars-only-on-foot",
|
||||
match = { class = "^(?!foot$).*" },
|
||||
["hyprbars:no_bar"] = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "translucent-foot-bar",
|
||||
match = { class = "^foot$" },
|
||||
["hyprbars:bar_color"] = "rgba(151515e0)",
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "disable-hyprbars-for-firefox",
|
||||
match = { class = "^(org%.mozilla%.firefox)$" },
|
||||
["hyprbars:no_bar"] = true,
|
||||
})
|
||||
@@ -1,316 +0,0 @@
|
||||
-- Hyprland Lua config: dark, minimal, small gaps, Quickshell bar on the left
|
||||
-- https://wiki.hypr.land/Configuring/Start/
|
||||
|
||||
------------------
|
||||
---- MONITORS ----
|
||||
------------------
|
||||
|
||||
hl.monitor({
|
||||
output = "",
|
||||
mode = "preferred",
|
||||
position = "auto",
|
||||
scale = "auto",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- MY PROGRAMS ----
|
||||
---------------------
|
||||
|
||||
local terminal = "foot"
|
||||
local menu = "qs ipc call launcher toggle"
|
||||
|
||||
|
||||
-------------------
|
||||
---- AUTOSTART ----
|
||||
-------------------
|
||||
|
||||
hl.on("hyprland.start", function()
|
||||
hl.exec_cmd("qs") -- Quickshell: bar + launcher
|
||||
hl.exec_cmd("hyprpaper") -- wallpaper, if you use it
|
||||
hl.exec_cmd("wl-clip-persist --clipboard regular") -- Keep copied data available after its source app exits
|
||||
hl.exec_cmd("hyprpm reload")
|
||||
end)
|
||||
|
||||
|
||||
-------------------------------
|
||||
---- ENVIRONMENT VARIABLES ----
|
||||
-------------------------------
|
||||
|
||||
hl.env("XCURSOR_SIZE", "18")
|
||||
hl.env("XCURSOR_THEME", "Bibata-Modern-Classic")
|
||||
hl.env("HYPRCURSOR_THEME", "Bibata-Modern-Classic")
|
||||
hl.env("HYPRCURSOR_SIZE", "18")
|
||||
hl.env("GTK_THEME", "KVJ")
|
||||
|
||||
-----------------------
|
||||
---- LOOK AND FEEL ----
|
||||
-----------------------
|
||||
|
||||
hl.config({
|
||||
general = {
|
||||
gaps_in = 5, -- 5 + 5 = 10px between windows
|
||||
gaps_out = 10, -- 10px to screen edges and to the bar
|
||||
|
||||
border_size = 1,
|
||||
|
||||
col = {
|
||||
active_border = "rgba(6b6b6bcc)";
|
||||
inactive_border = "rgba(3a3a3aff)",
|
||||
},
|
||||
|
||||
resize_on_border = true,
|
||||
allow_tearing = false,
|
||||
|
||||
layout = "dwindle",
|
||||
},
|
||||
|
||||
decoration = {
|
||||
rounding = 1,
|
||||
rounding_power = 2,
|
||||
|
||||
active_opacity = 1.0,
|
||||
inactive_opacity = 1.0,
|
||||
|
||||
shadow = {
|
||||
enabled = false,
|
||||
},
|
||||
|
||||
blur = {
|
||||
enabled = true,
|
||||
size = 7,
|
||||
passes = 2,
|
||||
vibrancy = 0.24,
|
||||
},
|
||||
},
|
||||
|
||||
animations = {
|
||||
enabled = true,
|
||||
},
|
||||
})
|
||||
|
||||
-- Default curves and 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} } })
|
||||
|
||||
hl.curve("easy", { type = "spring", mass = 1, stiffness = 238.1191, dampening = 24.21279333 })
|
||||
|
||||
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 = false, speed = 3, bezier = "linear", style = "popin 87%" })
|
||||
hl.animation({ leaf = "fadeIn", enabled = true, speed = 1.73, bezier = "almostLinear" })
|
||||
hl.animation({ leaf = "fadeOut", enabled = false, speed = 3, 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" })
|
||||
|
||||
hl.config({
|
||||
dwindle = {
|
||||
preserve_split = true,
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
master = {
|
||||
new_status = "master",
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
scrolling = {
|
||||
fullscreen_on_one_column = true,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
----------------
|
||||
---- MISC ----
|
||||
----------------
|
||||
|
||||
hl.config({
|
||||
misc = {
|
||||
force_default_wallpaper = 0, -- no anime mascot
|
||||
disable_hyprland_logo = true, -- plain dark background
|
||||
background_color = 0xff0b0b0b,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
hl.config({
|
||||
plugin = {
|
||||
hyprbars = {
|
||||
bar_color = "#151515",
|
||||
bar_height = 25,
|
||||
on_double_click = "hyprctl dispatch fullscreen 1",
|
||||
bar_precedence_over_border = true,
|
||||
bar_part_of_window = true,
|
||||
bar_text_font = "Maple Mono Normal",
|
||||
bar_text_size = 10,
|
||||
bar_blur = true,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
---------------
|
||||
---- INPUT ----
|
||||
---------------
|
||||
|
||||
hl.config({
|
||||
input = {
|
||||
kb_layout = "us",
|
||||
kb_variant = "",
|
||||
kb_model = "",
|
||||
kb_options = "",
|
||||
kb_rules = "",
|
||||
|
||||
follow_mouse = 1,
|
||||
|
||||
sensitivity = 0,
|
||||
|
||||
touchpad = {
|
||||
natural_scroll = false,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
hl.gesture({
|
||||
fingers = 3,
|
||||
direction = "horizontal",
|
||||
action = "workspace",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- KEYBINDINGS ----
|
||||
---------------------
|
||||
|
||||
local mainMod = "SUPER"
|
||||
|
||||
hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(terminal))
|
||||
local closeWindowBind = hl.bind(mainMod .. " + W", hl.dsp.window.close())
|
||||
hl.bind(mainMod .. " + M", hl.dsp.exec_cmd("command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch 'hl.dsp.exit()'"))
|
||||
hl.bind(mainMod .. " + S", function()
|
||||
local window = hl.get_active_window()
|
||||
if not window then return end
|
||||
|
||||
if window.class == "foot" and not window.floating and window.fullscreen == 0 then
|
||||
local width = math.floor(window.size.x * 0.75)
|
||||
local height = math.floor(window.size.y * 0.75)
|
||||
hl.dispatch(hl.dsp.window.float({ action = "enable", window = window }))
|
||||
hl.dispatch(hl.dsp.window.resize({ x = width, y = height, relative = false, window = window }))
|
||||
hl.dispatch(hl.dsp.window.center({ window = window }))
|
||||
else
|
||||
hl.dispatch(hl.dsp.window.float({ action = "toggle", window = window }))
|
||||
end
|
||||
end)
|
||||
hl.bind(mainMod .. " + F", hl.dsp.window.fullscreen({ mode = "fullscreen", action = "toggle" }))
|
||||
hl.bind(mainMod .. " + D", hl.dsp.exec_cmd(menu))
|
||||
hl.bind(mainMod .. " + P", hl.dsp.exec_cmd("qs ipc call wallpapers toggle"))
|
||||
hl.bind(mainMod .. " + J", hl.dsp.layout("togglesplit")) -- dwindle only
|
||||
|
||||
-- Screenshots: full output, selected region, or selected region to clipboard.
|
||||
hl.bind("Print", hl.dsp.exec_cmd([[mkdir -p "$HOME/Pictures/Screenshots" && grim "$HOME/Pictures/Screenshots/$(date +%Y-%m-%d_%H-%M-%S).png"]]))
|
||||
hl.bind("SHIFT + Print", hl.dsp.exec_cmd([[mkdir -p "$HOME/Pictures/Screenshots" && region=$(slurp) && [ -n "$region" ] && grim -g "$region" "$HOME/Pictures/Screenshots/$(date +%Y-%m-%d_%H-%M-%S).png"]]))
|
||||
hl.bind("SUPER + SHIFT + Print", hl.dsp.exec_cmd([[region=$(slurp) && [ -n "$region" ] && grim -g "$region" - | wl-copy -t image/png]]))
|
||||
|
||||
-- Move focus with mainMod + arrow keys
|
||||
hl.bind(mainMod .. " + left", hl.dsp.focus({ direction = "left" }))
|
||||
hl.bind(mainMod .. " + right", hl.dsp.focus({ direction = "right" }))
|
||||
hl.bind(mainMod .. " + up", hl.dsp.focus({ direction = "up" }))
|
||||
hl.bind(mainMod .. " + down", hl.dsp.focus({ direction = "down" }))
|
||||
|
||||
-- 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 }))
|
||||
end
|
||||
|
||||
-- Scroll through existing workspaces with mainMod + scroll
|
||||
hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
|
||||
hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
|
||||
|
||||
-- Move/resize windows with mainMod + LMB/RMB and dragging
|
||||
hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
|
||||
hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true })
|
||||
|
||||
-- Volume / brightness
|
||||
hl.bind("XF86PowerOff", hl.dsp.exec_cmd("qs ipc call power open"), { locked = true, description = "Open the power menu" })
|
||||
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("qs ipc call volume up"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("qs ipc call volume down"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("qs ipc call volume mute"), { locked = true })
|
||||
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("qs ipc call brightness up"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessDown",hl.dsp.exec_cmd("qs ipc call brightness down"), { locked = true, repeating = true })
|
||||
|
||||
-- Requires playerctl
|
||||
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true })
|
||||
hl.bind("XF86AudioPause", hl.dsp.exec_cmd("playerctl pause"), { locked = true })
|
||||
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play"), { locked = true })
|
||||
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true })
|
||||
|
||||
|
||||
--------------------------------
|
||||
---- WINDOWS AND WORKSPACES ----
|
||||
--------------------------------
|
||||
|
||||
local suppressMaximizeRule = hl.window_rule({
|
||||
name = "suppress-maximize-events",
|
||||
match = { class = ".*" },
|
||||
|
||||
suppress_event = "maximize",
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "fix-xwayland-drags",
|
||||
match = {
|
||||
class = "^$",
|
||||
title = "^$",
|
||||
xwayland = true,
|
||||
float = true,
|
||||
fullscreen = false,
|
||||
pin = false,
|
||||
},
|
||||
|
||||
no_focus = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "move-hyprland-run",
|
||||
match = { class = "hyprland-run" },
|
||||
|
||||
move = "20 monitor_h-120",
|
||||
float = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "hyprbars-only-on-foot",
|
||||
match = { class = "^(?!foot$).*" },
|
||||
["hyprbars:no_bar"] = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "translucent-foot-bar",
|
||||
match = { class = "^foot$" },
|
||||
["hyprbars:bar_color"] = "rgba(151515e0)",
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "disable-hyprbars-for-firefox",
|
||||
match = { class = "^(org%.mozilla%.firefox)$" },
|
||||
["hyprbars:no_bar"] = true,
|
||||
})
|
||||
@@ -1,304 +0,0 @@
|
||||
-- Hyprland Lua config: dark, minimal, small gaps, Quickshell bar on the left
|
||||
-- https://wiki.hypr.land/Configuring/Start/
|
||||
|
||||
------------------
|
||||
---- MONITORS ----
|
||||
------------------
|
||||
|
||||
hl.monitor({
|
||||
output = "",
|
||||
mode = "preferred",
|
||||
position = "auto",
|
||||
scale = "auto",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- MY PROGRAMS ----
|
||||
---------------------
|
||||
|
||||
local terminal = "foot"
|
||||
local menu = "qs ipc call launcher toggle"
|
||||
|
||||
|
||||
-------------------
|
||||
---- AUTOSTART ----
|
||||
-------------------
|
||||
|
||||
hl.on("hyprland.start", function()
|
||||
hl.exec_cmd("qs") -- Quickshell: bar + launcher
|
||||
hl.exec_cmd("hyprpaper") -- wallpaper, if you use it
|
||||
hl.exec_cmd("wl-clip-persist --clipboard regular") -- Keep copied data available after its source app exits
|
||||
hl.exec_cmd("hyprpm reload")
|
||||
end)
|
||||
|
||||
|
||||
-------------------------------
|
||||
---- ENVIRONMENT VARIABLES ----
|
||||
-------------------------------
|
||||
|
||||
hl.env("XCURSOR_SIZE", "18")
|
||||
hl.env("XCURSOR_THEME", "Bibata-Modern-Classic")
|
||||
hl.env("HYPRCURSOR_THEME", "Bibata-Modern-Classic")
|
||||
hl.env("HYPRCURSOR_SIZE", "18")
|
||||
hl.env("GTK_THEME", "KVJ")
|
||||
|
||||
-----------------------
|
||||
---- LOOK AND FEEL ----
|
||||
-----------------------
|
||||
|
||||
hl.config({
|
||||
general = {
|
||||
gaps_in = 5, -- 5 + 5 = 10px between windows
|
||||
gaps_out = 10, -- 10px to screen edges and to the bar
|
||||
|
||||
border_size = 1,
|
||||
|
||||
col = {
|
||||
active_border = "rgba(6b6b6bcc)";
|
||||
inactive_border = "rgba(3a3a3aff)",
|
||||
},
|
||||
|
||||
resize_on_border = true,
|
||||
allow_tearing = false,
|
||||
|
||||
layout = "dwindle",
|
||||
},
|
||||
|
||||
decoration = {
|
||||
rounding = 1,
|
||||
rounding_power = 2,
|
||||
|
||||
active_opacity = 1.0,
|
||||
inactive_opacity = 1.0,
|
||||
|
||||
shadow = {
|
||||
enabled = false,
|
||||
},
|
||||
|
||||
blur = {
|
||||
enabled = true,
|
||||
size = 3,
|
||||
passes = 1,
|
||||
vibrancy = 0.1696,
|
||||
},
|
||||
},
|
||||
|
||||
animations = {
|
||||
enabled = true,
|
||||
},
|
||||
})
|
||||
|
||||
-- Default curves and 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} } })
|
||||
|
||||
hl.curve("easy", { type = "spring", mass = 1, stiffness = 238.1191, dampening = 24.21279333 })
|
||||
|
||||
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 = false, speed = 3, bezier = "linear", style = "popin 87%" })
|
||||
hl.animation({ leaf = "fadeIn", enabled = true, speed = 1.73, bezier = "almostLinear" })
|
||||
hl.animation({ leaf = "fadeOut", enabled = false, speed = 3, 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" })
|
||||
|
||||
hl.config({
|
||||
dwindle = {
|
||||
preserve_split = true,
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
master = {
|
||||
new_status = "master",
|
||||
},
|
||||
})
|
||||
|
||||
hl.config({
|
||||
scrolling = {
|
||||
fullscreen_on_one_column = true,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
----------------
|
||||
---- MISC ----
|
||||
----------------
|
||||
|
||||
hl.config({
|
||||
misc = {
|
||||
force_default_wallpaper = 0, -- no anime mascot
|
||||
disable_hyprland_logo = true, -- plain dark background
|
||||
background_color = 0xff0b0b0b,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
hl.config({
|
||||
plugin = {
|
||||
hyprbars = {
|
||||
bar_color = "#151515",
|
||||
bar_height = 25,
|
||||
on_double_click = "hyprctl dispatch fullscreen 1",
|
||||
bar_precedence_over_border = true,
|
||||
bar_part_of_window = true,
|
||||
bar_text_font = "Maple Mono Normal",
|
||||
bar_text_size = 10,
|
||||
bar_blur = true,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
---------------
|
||||
---- INPUT ----
|
||||
---------------
|
||||
|
||||
hl.config({
|
||||
input = {
|
||||
kb_layout = "us",
|
||||
kb_variant = "",
|
||||
kb_model = "",
|
||||
kb_options = "",
|
||||
kb_rules = "",
|
||||
|
||||
follow_mouse = 1,
|
||||
|
||||
sensitivity = 0,
|
||||
|
||||
touchpad = {
|
||||
natural_scroll = false,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
hl.gesture({
|
||||
fingers = 3,
|
||||
direction = "horizontal",
|
||||
action = "workspace",
|
||||
})
|
||||
|
||||
|
||||
---------------------
|
||||
---- KEYBINDINGS ----
|
||||
---------------------
|
||||
|
||||
local mainMod = "SUPER"
|
||||
|
||||
hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(terminal))
|
||||
local closeWindowBind = hl.bind(mainMod .. " + W", hl.dsp.window.close())
|
||||
hl.bind(mainMod .. " + M", hl.dsp.exec_cmd("command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch 'hl.dsp.exit()'"))
|
||||
hl.bind(mainMod .. " + S", function()
|
||||
local window = hl.get_active_window()
|
||||
if not window then return end
|
||||
|
||||
if window.class == "foot" and not window.floating and window.fullscreen == 0 then
|
||||
local width = math.floor(window.size.x * 0.75)
|
||||
local height = math.floor(window.size.y * 0.75)
|
||||
hl.dispatch(hl.dsp.window.float({ action = "enable", window = window }))
|
||||
hl.dispatch(hl.dsp.window.resize({ x = width, y = height, relative = false, window = window }))
|
||||
hl.dispatch(hl.dsp.window.center({ window = window }))
|
||||
else
|
||||
hl.dispatch(hl.dsp.window.float({ action = "toggle", window = window }))
|
||||
end
|
||||
end)
|
||||
hl.bind(mainMod .. " + F", hl.dsp.window.fullscreen({ mode = "fullscreen", action = "toggle" }))
|
||||
hl.bind(mainMod .. " + D", hl.dsp.exec_cmd(menu))
|
||||
hl.bind(mainMod .. " + P", hl.dsp.exec_cmd("qs ipc call wallpapers toggle"))
|
||||
hl.bind(mainMod .. " + J", hl.dsp.layout("togglesplit")) -- dwindle only
|
||||
|
||||
-- Screenshots: full output, selected region, or selected region to clipboard.
|
||||
hl.bind("Print", hl.dsp.exec_cmd([[mkdir -p "$HOME/Pictures/Screenshots" && grim "$HOME/Pictures/Screenshots/$(date +%Y-%m-%d_%H-%M-%S).png"]]))
|
||||
hl.bind("SHIFT + Print", hl.dsp.exec_cmd([[mkdir -p "$HOME/Pictures/Screenshots" && region=$(slurp) && [ -n "$region" ] && grim -g "$region" "$HOME/Pictures/Screenshots/$(date +%Y-%m-%d_%H-%M-%S).png"]]))
|
||||
hl.bind("SUPER + SHIFT + Print", hl.dsp.exec_cmd([[region=$(slurp) && [ -n "$region" ] && grim -g "$region" - | wl-copy -t image/png]]))
|
||||
|
||||
-- Move focus with mainMod + arrow keys
|
||||
hl.bind(mainMod .. " + left", hl.dsp.focus({ direction = "left" }))
|
||||
hl.bind(mainMod .. " + right", hl.dsp.focus({ direction = "right" }))
|
||||
hl.bind(mainMod .. " + up", hl.dsp.focus({ direction = "up" }))
|
||||
hl.bind(mainMod .. " + down", hl.dsp.focus({ direction = "down" }))
|
||||
|
||||
-- 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 }))
|
||||
end
|
||||
|
||||
-- Scroll through existing workspaces with mainMod + scroll
|
||||
hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
|
||||
hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
|
||||
|
||||
-- Move/resize windows with mainMod + LMB/RMB and dragging
|
||||
hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
|
||||
hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true })
|
||||
|
||||
-- Volume / brightness
|
||||
hl.bind("XF86PowerOff", hl.dsp.exec_cmd("qs ipc call power open"), { locked = true, description = "Open the power menu" })
|
||||
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("qs ipc call volume up"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("qs ipc call volume down"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("qs ipc call volume mute"), { locked = true })
|
||||
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("qs ipc call brightness up"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessDown",hl.dsp.exec_cmd("qs ipc call brightness down"), { locked = true, repeating = true })
|
||||
|
||||
-- Requires playerctl
|
||||
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true })
|
||||
hl.bind("XF86AudioPause", hl.dsp.exec_cmd("playerctl pause"), { locked = true })
|
||||
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play"), { locked = true })
|
||||
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true })
|
||||
|
||||
|
||||
--------------------------------
|
||||
---- WINDOWS AND WORKSPACES ----
|
||||
--------------------------------
|
||||
|
||||
local suppressMaximizeRule = hl.window_rule({
|
||||
name = "suppress-maximize-events",
|
||||
match = { class = ".*" },
|
||||
|
||||
suppress_event = "maximize",
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "fix-xwayland-drags",
|
||||
match = {
|
||||
class = "^$",
|
||||
title = "^$",
|
||||
xwayland = true,
|
||||
float = true,
|
||||
fullscreen = false,
|
||||
pin = false,
|
||||
},
|
||||
|
||||
no_focus = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "move-hyprland-run",
|
||||
match = { class = "hyprland-run" },
|
||||
|
||||
move = "20 monitor_h-120",
|
||||
float = true,
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
name = "disable-hyprbars-for-firefox",
|
||||
match = { class = "^(org%.mozilla%.firefox)$" },
|
||||
["hyprbars:no_bar"] = true,
|
||||
})
|
||||
@@ -1,8 +0,0 @@
|
||||
splash = false
|
||||
|
||||
wallpaper {
|
||||
monitor =
|
||||
#path = /home/wfalkowski/Pictures/Wallpapers/wallhaven-9oke91.png
|
||||
path = /home/wfalkowski/Pictures/Wallpapers/wallhaven-0j258m.jpg
|
||||
fit_mode = cover
|
||||
}
|
||||
-2945
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
-2958
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -1,548 +0,0 @@
|
||||
import Quickshell
|
||||
import Quickshell.Io
|
||||
import Quickshell.Hyprland
|
||||
import Quickshell.Wayland
|
||||
import Quickshell.Widgets
|
||||
import Quickshell.Services.SystemTray
|
||||
import Quickshell.Services.Pipewire
|
||||
import Quickshell.Services.UPower
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Controls
|
||||
|
||||
ShellRoot {
|
||||
id: root
|
||||
|
||||
// ───────────── SETTINGS & THEMING ─────────────
|
||||
readonly property string mono: "JetBrainsMono Nerd Font"
|
||||
readonly property int barWidth: 42
|
||||
readonly property int wsCount: 5
|
||||
|
||||
readonly property color cBar: "#0a0a0a"
|
||||
readonly property color cPanel: "#0d0d0d"
|
||||
readonly property color cBorder: "#333333"
|
||||
readonly property color cText: "#c8c8c8"
|
||||
readonly property color cDim: "#555555"
|
||||
readonly property color cBright: "#ffffff"
|
||||
readonly property color cAccent: "#ffffff"
|
||||
readonly property color cWarn: "#e05555"
|
||||
|
||||
// ───────────── STATE ─────────────
|
||||
property bool launcherOpen: false
|
||||
property bool netUp: false
|
||||
property bool btOn: false
|
||||
property string activeApplet: ""
|
||||
|
||||
PwObjectTracker { objects: [Pipewire] }
|
||||
|
||||
IpcHandler {
|
||||
target: "launcher"
|
||||
function toggle(): void { root.launcherOpen = !root.launcherOpen }
|
||||
function open(): void { root.launcherOpen = true }
|
||||
function close(): void { root.launcherOpen = false }
|
||||
}
|
||||
|
||||
SystemClock { id: clock; precision: SystemClock.Minutes }
|
||||
|
||||
Process {
|
||||
id: statusProc
|
||||
command: ["sh", "-c",
|
||||
"nmcli -t -f STATE general 2>/dev/null | grep -q '^connected' && echo net=1 || echo net=0; " +
|
||||
"nmcli -t -f WIRELESS radio 2>/dev/null | grep -q 'enabled' && echo bt=1 || echo bt=0"]
|
||||
stdout: StdioCollector {
|
||||
onStreamFinished: {
|
||||
root.netUp = text.includes("net=1")
|
||||
root.btOn = text.includes("bt=1")
|
||||
}
|
||||
}
|
||||
}
|
||||
Timer { interval: 5000; running: true; repeat: true; triggeredOnStart: true; onTriggered: statusProc.running = true }
|
||||
|
||||
// ───────────── VERTICAL BAR ─────────────
|
||||
Variants {
|
||||
model: Quickshell.screens
|
||||
|
||||
PanelWindow {
|
||||
id: bar
|
||||
required property var modelData
|
||||
screen: modelData
|
||||
|
||||
anchors { top: true; bottom: true; left: true }
|
||||
implicitWidth: root.barWidth
|
||||
color: root.cBar
|
||||
|
||||
Rectangle {
|
||||
anchors { top: parent.top; bottom: parent.bottom; right: parent.right }
|
||||
width: 1
|
||||
color: root.cBorder
|
||||
}
|
||||
|
||||
// Launcher Button & Workspaces (Top)
|
||||
ColumnLayout {
|
||||
anchors { top: parent.top; topMargin: 12; horizontalCenter: parent.horizontalCenter }
|
||||
spacing: 6
|
||||
|
||||
// App Launcher Icon
|
||||
Item {
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
implicitWidth: 32; implicitHeight: 32
|
||||
|
||||
Text {
|
||||
anchors.centerIn: parent
|
||||
text: ""
|
||||
font.family: root.mono; font.pixelSize: 14
|
||||
color: root.launcherOpen ? root.cBright : root.cDim
|
||||
}
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: root.launcherOpen = !root.launcherOpen
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle { Layout.alignment: Qt.AlignHCenter; width: 16; height: 1; color: root.cBorder; Layout.bottomMargin: 4 }
|
||||
|
||||
Repeater {
|
||||
model: root.wsCount
|
||||
delegate: Rectangle {
|
||||
required property int index
|
||||
readonly property int wsId: index + 1
|
||||
readonly property bool active: Hyprland.focusedWorkspace?.id === wsId
|
||||
readonly property bool occupied: Hyprland.workspaces.values.some(w => w.id === wsId)
|
||||
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
implicitWidth: 32; implicitHeight: 32
|
||||
color: "transparent"
|
||||
|
||||
Text {
|
||||
anchors.centerIn: parent
|
||||
text: parent.wsId
|
||||
font.family: root.mono
|
||||
font.pixelSize: 12
|
||||
font.bold: parent.active
|
||||
color: parent.active ? root.cBright : (parent.occupied ? root.cText : root.cDim)
|
||||
}
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: Quickshell.execDetached(["hyprctl", "dispatch", "workspace " + parent.wsId])
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Clock & Applet Triggers (Bottom) - NOW WITH BLUETOOTH & NETWORK INDICATORS
|
||||
ColumnLayout {
|
||||
anchors { bottom: parent.bottom; bottomMargin: 12; horizontalCenter: parent.horizontalCenter }
|
||||
spacing: 12
|
||||
|
||||
Text { Layout.alignment: Qt.AlignHCenter; text: Qt.formatDateTime(clock.date, "HH"); font.family: root.mono; font.pixelSize: 12; font.bold: true; color: root.cBright }
|
||||
Text { Layout.alignment: Qt.AlignHCenter; text: Qt.formatDateTime(clock.date, "mm"); font.family: root.mono; font.pixelSize: 12; color: root.cDim; Layout.topMargin: -8 }
|
||||
|
||||
Rectangle { Layout.alignment: Qt.AlignHCenter; width: 16; height: 1; color: root.cBorder; Layout.topMargin: 4; Layout.bottomMargin: 4 }
|
||||
|
||||
// NETWORK INDICATOR (ADDED)
|
||||
Text {
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
text: root.netUp ? "" : "" // Wi-Fi when connected, Ethernet when not (or vice versa based on preference)
|
||||
font.family: root.mono; font.pixelSize: 14
|
||||
color: root.netUp ? root.cAccent : root.cDim
|
||||
MouseArea {
|
||||
anchors.fill: parent;
|
||||
anchors.margins: -8;
|
||||
onClicked: root.activeApplet = root.activeApplet === "wifi" ? "" : "wifi"
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle { Layout.alignment: Qt.AlignHCenter; width: 16; height: 1; color: root.cBorder; Layout.topMargin: 4; Layout.bottomMargin: 4 }
|
||||
|
||||
// BLUETOOTH INDICATOR (ADDED)
|
||||
Text {
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
text: root.btOn ? "" : "" // Bluetooth on/off
|
||||
font.family: root.mono; font.pixelSize: 14
|
||||
color: root.btOn ? root.cAccent : root.cDim
|
||||
MouseArea {
|
||||
anchors.fill: parent;
|
||||
anchors.margins: -8;
|
||||
onClicked: root.activeApplet = root.activeApplet === "bluetooth" ? "" : "bluetooth"
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle { Layout.alignment: Qt.AlignHCenter; width: 16; height: 1; color: root.cBorder; Layout.topMargin: 4; Layout.bottomMargin: 4 }
|
||||
|
||||
Text {
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
text: Pipewire.defaultAudioSink?.audio?.muted ? "" : ""
|
||||
font.family: root.mono; font.pixelSize: 14
|
||||
color: root.activeApplet === "sound" ? root.cAccent : root.cText
|
||||
MouseArea { anchors.fill: parent; anchors.margins: -8; onClicked: root.activeApplet = root.activeApplet === "sound" ? "" : "sound" }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ───────────── APP LAUNCHER OVERLAY ─────────────
|
||||
PanelWindow {
|
||||
id: launcherWindow
|
||||
visible: root.launcherOpen
|
||||
|
||||
screen: Quickshell.screens.find(s => s.name === Hyprland.focusedMonitor?.name) ?? Quickshell.screens[0]
|
||||
|
||||
// Centered overlay matching the design in screenshots
|
||||
implicitWidth: 320
|
||||
implicitHeight: 520
|
||||
color: "transparent"
|
||||
|
||||
WlrLayershell.layer: WlrLayer.Overlay
|
||||
WlrLayershell.namespace: "launcher"
|
||||
WlrLayershell.keyboardFocus: WlrKeyboardFocus.Exclusive
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: root.cPanel
|
||||
border.color: root.cBorder
|
||||
border.width: 1
|
||||
|
||||
FocusScope {
|
||||
id: launcherScope
|
||||
anchors.fill: parent
|
||||
focus: launcherWindow.visible
|
||||
|
||||
Keys.onEscapePressed: root.launcherOpen = false
|
||||
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
anchors.margins: 12
|
||||
spacing: 10
|
||||
|
||||
// Search Input Box ("Apps...")
|
||||
Rectangle {
|
||||
Layout.fillWidth: true
|
||||
implicitHeight: 34
|
||||
color: "#141414"
|
||||
border.color: searchInput.activeFocus ? root.cBright : root.cBorder
|
||||
border.width: 1
|
||||
|
||||
RowLayout {
|
||||
anchors.fill: parent
|
||||
anchors.leftMargin: 10
|
||||
anchors.rightMargin: 10
|
||||
spacing: 8
|
||||
|
||||
Text {
|
||||
text: ""
|
||||
font.family: root.mono
|
||||
font.pixelSize: 12
|
||||
color: root.cDim
|
||||
}
|
||||
|
||||
TextInput {
|
||||
id: searchInput
|
||||
Layout.fillWidth: true
|
||||
font.family: root.mono
|
||||
font.pixelSize: 12
|
||||
color: root.cBright
|
||||
focus: true
|
||||
selectByMouse: true
|
||||
|
||||
Text {
|
||||
text: "Apps..."
|
||||
font.family: root.mono
|
||||
font.pixelSize: 12
|
||||
color: root.cDim
|
||||
visible: searchInput.text === ""
|
||||
}
|
||||
|
||||
Keys.onDownPressed: appListView.incrementCurrentIndex()
|
||||
Keys.onUpPressed: appListView.decrementCurrentIndex()
|
||||
Keys.onReturnPressed: {
|
||||
if (appListView.currentItem) {
|
||||
appListView.currentItem.launch()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Application List
|
||||
ListView {
|
||||
id: appListView
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
clip: true
|
||||
spacing: 2
|
||||
currentIndex: 0
|
||||
|
||||
model: appListProc.apps
|
||||
|
||||
delegate: Rectangle {
|
||||
id: appItem
|
||||
required property var modelData
|
||||
required property int index
|
||||
|
||||
width: appListView.width
|
||||
height: 36
|
||||
color: ListView.isCurrentItem ? "#1a1a1a" : (itemArea.containsMouse ? "#141414" : "transparent")
|
||||
border.color: ListView.isCurrentItem ? root.cBorder : "transparent"
|
||||
|
||||
function launch() {
|
||||
Quickshell.execDetached(["sh", "-c", modelData.exec])
|
||||
root.launcherOpen = false
|
||||
searchInput.text = ""
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
anchors.fill: parent
|
||||
anchors.leftMargin: 10
|
||||
anchors.rightMargin: 10
|
||||
spacing: 10
|
||||
|
||||
Text {
|
||||
text: ""
|
||||
font.family: root.mono
|
||||
font.pixelSize: 13
|
||||
color: ListView.isCurrentItem ? root.cBright : root.cDim
|
||||
}
|
||||
|
||||
Text {
|
||||
text: modelData.name
|
||||
font.family: root.mono
|
||||
font.pixelSize: 12
|
||||
color: ListView.isCurrentItem ? root.cBright : root.cText
|
||||
Layout.fillWidth: true
|
||||
elide: Text.ElideRight
|
||||
}
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: itemArea
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
onClicked: appItem.launch()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Process to fetch installed desktop applications
|
||||
Process {
|
||||
id: appListProc
|
||||
property var rawApps: []
|
||||
property var apps: {
|
||||
const query = searchInput.text.toLowerCase().trim()
|
||||
if (!query) return rawApps
|
||||
return rawApps.filter(a => a.name.toLowerCase().includes(query))
|
||||
}
|
||||
|
||||
command: ["python3", "-c", `
|
||||
import os, glob
|
||||
|
||||
apps = []
|
||||
dirs = ['/usr/share/applications', os.path.expanduser('~/.local/share/applications')]
|
||||
for d in dirs:
|
||||
for path in glob.glob(os.path.join(d, '*.desktop')):
|
||||
try:
|
||||
with open(path, 'r', encoding='utf-8', errors='ignore') as f:
|
||||
name, exec_cmd, nodisplay = "", "", False
|
||||
for line in f:
|
||||
if line.startswith('Name=') and not name:
|
||||
name = line.split('=', 1)[1].strip()
|
||||
elif line.startswith('Exec=') and not exec_cmd:
|
||||
exec_cmd = line.split('=', 1)[1].strip().split('%')[0].strip()
|
||||
elif line.startswith('NoDisplay=true'):
|
||||
nodisplay = True
|
||||
if name and exec_cmd and not nodisplay:
|
||||
apps.append(f"{name}|||{exec_cmd}")
|
||||
except:
|
||||
pass
|
||||
|
||||
apps = sorted(list(set(apps)), key=lambda x: x.lower())
|
||||
for a in apps:
|
||||
print(a)
|
||||
`]
|
||||
stdout: StdioCollector {
|
||||
onStreamFinished: {
|
||||
const lines = text.trim().split("\n")
|
||||
let parsed = []
|
||||
for (let line of lines) {
|
||||
const parts = line.split("|||")
|
||||
if (parts.length === 2) {
|
||||
parsed.push({ name: parts[0], exec: parts[1] })
|
||||
}
|
||||
}
|
||||
appListProc.rawApps = parsed
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: appListProc.running = true
|
||||
onVisibleChanged: {
|
||||
if (visible) {
|
||||
searchInput.text = ""
|
||||
searchInput.forceActiveFocus()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ───────────── APPLETS POPUP WINDOW ─────────────
|
||||
PanelWindow {
|
||||
id: appletWindow
|
||||
visible: root.activeApplet !== ""
|
||||
|
||||
screen: Quickshell.screens.find(s => s.name === Hyprland.focusedMonitor?.name) ?? Quickshell.screens[0]
|
||||
anchors { left: true; bottom: true }
|
||||
|
||||
margins.left: root.barWidth + 12
|
||||
margins.bottom: 12
|
||||
|
||||
implicitWidth: 340
|
||||
implicitHeight: root.activeApplet === "sound" ? 420 : 380
|
||||
color: "transparent"
|
||||
|
||||
WlrLayershell.layer: WlrLayer.Overlay
|
||||
WlrLayershell.namespace: "applet"
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: root.cPanel
|
||||
border.color: root.cBorder
|
||||
border.width: 1
|
||||
|
||||
FocusScope {
|
||||
anchors.fill: parent
|
||||
focus: appletWindow.visible
|
||||
Keys.onEscapePressed: root.activeApplet = ""
|
||||
}
|
||||
|
||||
// ─ NETWORK APPLET ─
|
||||
ColumnLayout {
|
||||
anchors.fill: parent; anchors.margins: 16
|
||||
visible: root.activeApplet === "wifi"
|
||||
spacing: 16
|
||||
|
||||
property var wifiList: []
|
||||
|
||||
Process {
|
||||
id: wifiScanProc
|
||||
command: ["nmcli", "-t", "-f", "SSID,SIGNAL,SECURITY,IN-USE", "dev", "wifi"]
|
||||
stdout: StdioCollector {
|
||||
onStreamFinished: {
|
||||
const lines = text.trim().split("\n")
|
||||
let results = []
|
||||
for (let l of lines) {
|
||||
if (!l) continue
|
||||
const parts = l.split(":")
|
||||
if (parts[0] && !results.some(r => r.ssid === parts[0])) {
|
||||
results.push({ ssid: parts[0], signal: parseInt(parts[1]), active: parts[3] === "*" })
|
||||
}
|
||||
}
|
||||
results.sort((a, b) => b.active - a.active || b.signal - a.signal)
|
||||
parent.wifiList = results
|
||||
}
|
||||
}
|
||||
}
|
||||
onVisibleChanged: if(visible) wifiScanProc.running = true
|
||||
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
ColumnLayout {
|
||||
spacing: 2
|
||||
Text { text: "Network"; font.family: root.mono; font.pixelSize: 14; font.bold: true; color: root.cBright }
|
||||
Text { text: "WI-FI & ETHERNET"; font.family: root.mono; font.pixelSize: 10; color: root.cDim }
|
||||
}
|
||||
Item { Layout.fillWidth: true }
|
||||
Rectangle {
|
||||
width: 32; height: 18; color: root.netUp ? root.cBright : root.cBorder
|
||||
Rectangle { x: root.netUp ? 15 : 1; y: 1; width: 16; height: 16; color: root.cPanel; Behavior on x { NumberAnimation { duration: 150 } } }
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle { Layout.fillWidth: true; height: 1; color: root.cBorder }
|
||||
|
||||
Text { text: "ZNANE SIECI"; font.family: root.mono; font.pixelSize: 10; color: root.cDim }
|
||||
|
||||
ListView {
|
||||
Layout.fillWidth: true; Layout.fillHeight: true; clip: true; spacing: 8
|
||||
model: parent.wifiList
|
||||
delegate: Rectangle {
|
||||
width: ListView.view.width; height: 32; color: "transparent"
|
||||
border.color: modelData.active ? root.cBorder : "transparent"
|
||||
|
||||
RowLayout {
|
||||
anchors.fill: parent; anchors.leftMargin: 12; anchors.rightMargin: 12; spacing: 12
|
||||
Text { text: ""; font.family: root.mono; font.pixelSize: 12; color: modelData.active ? root.cAccent : root.cDim }
|
||||
Text { text: modelData.ssid; font.family: root.mono; font.pixelSize: 12; color: modelData.active ? root.cBright : root.cText; Layout.fillWidth: true; elide: Text.ElideRight }
|
||||
}
|
||||
MouseArea { anchors.fill: parent; onClicked: { Quickshell.execDetached(["foot", "-e", "nmtui-connect", modelData.ssid]); root.activeApplet = "" } }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ─ AUDIO APPLET ─
|
||||
ColumnLayout {
|
||||
anchors.fill: parent; anchors.margins: 16
|
||||
visible: root.activeApplet === "sound"
|
||||
spacing: 12
|
||||
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
ColumnLayout {
|
||||
spacing: 2
|
||||
Text { text: "Audio"; font.family: root.mono; font.pixelSize: 14; font.bold: true; color: root.cBright }
|
||||
Text { text: "POKRYJ HAŁAS"; font.family: root.mono; font.pixelSize: 10; color: root.cDim }
|
||||
}
|
||||
Item { Layout.fillWidth: true }
|
||||
Rectangle {
|
||||
width: 32; height: 18; color: !Pipewire.defaultAudioSink?.audio?.muted ? root.cBright : root.cBorder
|
||||
Rectangle { x: !Pipewire.defaultAudioSink?.audio?.muted ? 15 : 1; y: 1; width: 16; height: 16; color: root.cPanel; Behavior on x { NumberAnimation { duration: 150 } } }
|
||||
MouseArea { anchors.fill: parent; onClicked: if(Pipewire.defaultAudioSink?.audio) Pipewire.defaultAudioSink.audio.muted = !Pipewire.defaultAudioSink.audio.muted }
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle { Layout.fillWidth: true; height: 1; color: root.cBorder; Layout.bottomMargin: 8 }
|
||||
|
||||
// Input Section
|
||||
Text { text: "INPUT"; font.family: root.mono; font.pixelSize: 10; color: root.cDim }
|
||||
Repeater {
|
||||
model: Pipewire.nodes.values.filter(n => n.mediaClass === "Audio/Source" && !n.description.includes("Monitor"))
|
||||
delegate: ColumnLayout {
|
||||
Layout.fillWidth: true; spacing: 4
|
||||
RowLayout {
|
||||
Text { text: ""; font.family: root.mono; font.pixelSize: 12; color: root.cDim }
|
||||
Text { text: modelData.description; font.family: root.mono; font.pixelSize: 11; color: root.cText; Layout.fillWidth: true; elide: Text.ElideRight }
|
||||
}
|
||||
Slider {
|
||||
Layout.fillWidth: true; from: 0; to: 1; value: modelData.audio?.volume ?? 0
|
||||
onValueChanged: if (modelData.audio && Math.abs(modelData.audio.volume - value) > 0.01) modelData.audio.volume = value
|
||||
background: Rectangle { width: parent.width; height: 2; color: root.cBorder; y: parent.height/2; Rectangle { width: parent.visualPosition * parent.width; height: 2; color: root.cBright } }
|
||||
handle: Rectangle { x: parent.visualPosition * (parent.width - width); y: parent.height/2 - height/2; width: 10; height: 10; color: root.cBright }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Item { Layout.preferredHeight: 8 }
|
||||
|
||||
// Output Section
|
||||
Text { text: "OUTPUT"; font.family: root.mono; font.pixelSize: 10; color: root.cDim }
|
||||
Repeater {
|
||||
model: Pipewire.nodes.values.filter(n => n.mediaClass === "Audio/Sink")
|
||||
delegate: ColumnLayout {
|
||||
Layout.fillWidth: true; spacing: 4
|
||||
RowLayout {
|
||||
Text { text: ""; font.family: root.mono; font.pixelSize: 12; color: root.cDim }
|
||||
Text { text: modelData.description; font.family: root.mono; font.pixelSize: 11; color: root.cText; Layout.fillWidth: true; elide: Text.ElideRight }
|
||||
}
|
||||
Slider {
|
||||
Layout.fillWidth: true; from: 0; to: 1; value: modelData.audio?.volume ?? 0
|
||||
onValueChanged: if (modelData.audio && Math.abs(modelData.audio.volume - value) > 0.01) modelData.audio.volume = value
|
||||
background: Rectangle { width: parent.width; height: 2; color: root.cBorder; y: parent.height/2; Rectangle { width: parent.visualPosition * parent.width; height: 2; color: root.cBright } }
|
||||
handle: Rectangle { x: parent.visualPosition * (parent.width - width); y: parent.height/2 - height/2; width: 10; height: 10; color: root.cBright }
|
||||
}
|
||||
}
|
||||
}
|
||||
Item { Layout.fillHeight: true }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -1 +0,0 @@
|
||||
permit persist wfalkowski
|
||||
File diff suppressed because it is too large.
Load diff
@@ -1,548 +0,0 @@
|
||||
import Quickshell
|
||||
import Quickshell.Io
|
||||
import Quickshell.Hyprland
|
||||
import Quickshell.Wayland
|
||||
import Quickshell.Widgets
|
||||
import Quickshell.Services.SystemTray
|
||||
import Quickshell.Services.Pipewire
|
||||
import Quickshell.Services.UPower
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Controls
|
||||
|
||||
ShellRoot {
|
||||
id: root
|
||||
|
||||
// ───────────── SETTINGS & THEMING ─────────────
|
||||
readonly property string mono: "JetBrainsMono Nerd Font"
|
||||
readonly property int barWidth: 42
|
||||
readonly property int wsCount: 5
|
||||
|
||||
readonly property color cBar: "#0a0a0a"
|
||||
readonly property color cPanel: "#0d0d0d"
|
||||
readonly property color cBorder: "#333333"
|
||||
readonly property color cText: "#c8c8c8"
|
||||
readonly property color cDim: "#555555"
|
||||
readonly property color cBright: "#ffffff"
|
||||
readonly property color cAccent: "#ffffff"
|
||||
readonly property color cWarn: "#e05555"
|
||||
|
||||
// ───────────── STATE ─────────────
|
||||
property bool launcherOpen: false
|
||||
property bool netUp: false
|
||||
property bool btOn: false
|
||||
property string activeApplet: ""
|
||||
|
||||
PwObjectTracker { objects: [Pipewire] }
|
||||
|
||||
IpcHandler {
|
||||
target: "launcher"
|
||||
function toggle(): void { root.launcherOpen = !root.launcherOpen }
|
||||
function open(): void { root.launcherOpen = true }
|
||||
function close(): void { root.launcherOpen = false }
|
||||
}
|
||||
|
||||
SystemClock { id: clock; precision: SystemClock.Minutes }
|
||||
|
||||
Process {
|
||||
id: statusProc
|
||||
command: ["sh", "-c",
|
||||
"nmcli -t -f STATE general 2>/dev/null | grep -q '^connected' && echo net=1 || echo net=0; " +
|
||||
"nmcli -t -f WIRELESS radio 2>/dev/null | grep -q 'enabled' && echo bt=1 || echo bt=0"]
|
||||
stdout: StdioCollector {
|
||||
onStreamFinished: {
|
||||
root.netUp = text.includes("net=1")
|
||||
root.btOn = text.includes("bt=1")
|
||||
}
|
||||
}
|
||||
}
|
||||
Timer { interval: 5000; running: true; repeat: true; triggeredOnStart: true; onTriggered: statusProc.running = true }
|
||||
|
||||
// ───────────── VERTICAL BAR ─────────────
|
||||
Variants {
|
||||
model: Quickshell.screens
|
||||
|
||||
PanelWindow {
|
||||
id: bar
|
||||
required property var modelData
|
||||
screen: modelData
|
||||
|
||||
anchors { top: true; bottom: true; left: true }
|
||||
implicitWidth: root.barWidth
|
||||
color: root.cBar
|
||||
|
||||
Rectangle {
|
||||
anchors { top: parent.top; bottom: parent.bottom; right: parent.right }
|
||||
width: 1
|
||||
color: root.cBorder
|
||||
}
|
||||
|
||||
// Launcher Button & Workspaces (Top)
|
||||
ColumnLayout {
|
||||
anchors { top: parent.top; topMargin: 12; horizontalCenter: parent.horizontalCenter }
|
||||
spacing: 6
|
||||
|
||||
// App Launcher Icon
|
||||
Item {
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
implicitWidth: 32; implicitHeight: 32
|
||||
|
||||
Text {
|
||||
anchors.centerIn: parent
|
||||
text: ""
|
||||
font.family: root.mono; font.pixelSize: 14
|
||||
color: root.launcherOpen ? root.cBright : root.cDim
|
||||
}
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: root.launcherOpen = !root.launcherOpen
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle { Layout.alignment: Qt.AlignHCenter; width: 16; height: 1; color: root.cBorder; Layout.bottomMargin: 4 }
|
||||
|
||||
Repeater {
|
||||
model: root.wsCount
|
||||
delegate: Rectangle {
|
||||
required property int index
|
||||
readonly property int wsId: index + 1
|
||||
readonly property bool active: Hyprland.focusedWorkspace?.id === wsId
|
||||
readonly property bool occupied: Hyprland.workspaces.values.some(w => w.id === wsId)
|
||||
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
implicitWidth: 32; implicitHeight: 32
|
||||
color: "transparent"
|
||||
|
||||
Text {
|
||||
anchors.centerIn: parent
|
||||
text: parent.wsId
|
||||
font.family: root.mono
|
||||
font.pixelSize: 12
|
||||
font.bold: parent.active
|
||||
color: parent.active ? root.cBright : (parent.occupied ? root.cText : root.cDim)
|
||||
}
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: Quickshell.execDetached(["hyprctl", "dispatch", "workspace " + parent.wsId])
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Clock & Applet Triggers (Bottom) - NOW WITH BLUETOOTH & NETWORK INDICATORS
|
||||
ColumnLayout {
|
||||
anchors { bottom: parent.bottom; bottomMargin: 12; horizontalCenter: parent.horizontalCenter }
|
||||
spacing: 12
|
||||
|
||||
Text { Layout.alignment: Qt.AlignHCenter; text: Qt.formatDateTime(clock.date, "HH"); font.family: root.mono; font.pixelSize: 12; font.bold: true; color: root.cBright }
|
||||
Text { Layout.alignment: Qt.AlignHCenter; text: Qt.formatDateTime(clock.date, "mm"); font.family: root.mono; font.pixelSize: 12; color: root.cDim; Layout.topMargin: -8 }
|
||||
|
||||
Rectangle { Layout.alignment: Qt.AlignHCenter; width: 16; height: 1; color: root.cBorder; Layout.topMargin: 4; Layout.bottomMargin: 4 }
|
||||
|
||||
// NETWORK INDICATOR (ADDED)
|
||||
Text {
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
text: root.netUp ? "" : "" // Wi-Fi when connected, Ethernet when not (or vice versa based on preference)
|
||||
font.family: root.mono; font.pixelSize: 14
|
||||
color: root.netUp ? root.cAccent : root.cDim
|
||||
MouseArea {
|
||||
anchors.fill: parent;
|
||||
anchors.margins: -8;
|
||||
onClicked: root.activeApplet = root.activeApplet === "wifi" ? "" : "wifi"
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle { Layout.alignment: Qt.AlignHCenter; width: 16; height: 1; color: root.cBorder; Layout.topMargin: 4; Layout.bottomMargin: 4 }
|
||||
|
||||
// BLUETOOTH INDICATOR (ADDED)
|
||||
Text {
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
text: root.btOn ? "" : "" // Bluetooth on/off
|
||||
font.family: root.mono; font.pixelSize: 14
|
||||
color: root.btOn ? root.cAccent : root.cDim
|
||||
MouseArea {
|
||||
anchors.fill: parent;
|
||||
anchors.margins: -8;
|
||||
onClicked: root.activeApplet = root.activeApplet === "bluetooth" ? "" : "bluetooth"
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle { Layout.alignment: Qt.AlignHCenter; width: 16; height: 1; color: root.cBorder; Layout.topMargin: 4; Layout.bottomMargin: 4 }
|
||||
|
||||
Text {
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
text: Pipewire.defaultAudioSink?.audio?.muted ? "" : ""
|
||||
font.family: root.mono; font.pixelSize: 14
|
||||
color: root.activeApplet === "sound" ? root.cAccent : root.cText
|
||||
MouseArea { anchors.fill: parent; anchors.margins: -8; onClicked: root.activeApplet = root.activeApplet === "sound" ? "" : "sound" }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ───────────── APP LAUNCHER OVERLAY ─────────────
|
||||
PanelWindow {
|
||||
id: launcherWindow
|
||||
visible: root.launcherOpen
|
||||
|
||||
screen: Quickshell.screens.find(s => s.name === Hyprland.focusedMonitor?.name) ?? Quickshell.screens[0]
|
||||
|
||||
// Centered overlay matching the design in screenshots
|
||||
implicitWidth: 320
|
||||
implicitHeight: 520
|
||||
color: "transparent"
|
||||
|
||||
WlrLayershell.layer: WlrLayer.Overlay
|
||||
WlrLayershell.namespace: "launcher"
|
||||
WlrLayershell.keyboardFocus: WlrKeyboardFocus.Exclusive
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: root.cPanel
|
||||
border.color: root.cBorder
|
||||
border.width: 1
|
||||
|
||||
FocusScope {
|
||||
id: launcherScope
|
||||
anchors.fill: parent
|
||||
focus: launcherWindow.visible
|
||||
|
||||
Keys.onEscapePressed: root.launcherOpen = false
|
||||
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
anchors.margins: 12
|
||||
spacing: 10
|
||||
|
||||
// Search Input Box ("Apps...")
|
||||
Rectangle {
|
||||
Layout.fillWidth: true
|
||||
implicitHeight: 34
|
||||
color: "#141414"
|
||||
border.color: searchInput.activeFocus ? root.cBright : root.cBorder
|
||||
border.width: 1
|
||||
|
||||
RowLayout {
|
||||
anchors.fill: parent
|
||||
anchors.leftMargin: 10
|
||||
anchors.rightMargin: 10
|
||||
spacing: 8
|
||||
|
||||
Text {
|
||||
text: ""
|
||||
font.family: root.mono
|
||||
font.pixelSize: 12
|
||||
color: root.cDim
|
||||
}
|
||||
|
||||
TextInput {
|
||||
id: searchInput
|
||||
Layout.fillWidth: true
|
||||
font.family: root.mono
|
||||
font.pixelSize: 12
|
||||
color: root.cBright
|
||||
focus: true
|
||||
selectByMouse: true
|
||||
|
||||
Text {
|
||||
text: "Apps..."
|
||||
font.family: root.mono
|
||||
font.pixelSize: 12
|
||||
color: root.cDim
|
||||
visible: searchInput.text === ""
|
||||
}
|
||||
|
||||
Keys.onDownPressed: appListView.incrementCurrentIndex()
|
||||
Keys.onUpPressed: appListView.decrementCurrentIndex()
|
||||
Keys.onReturnPressed: {
|
||||
if (appListView.currentItem) {
|
||||
appListView.currentItem.launch()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Application List
|
||||
ListView {
|
||||
id: appListView
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
clip: true
|
||||
spacing: 2
|
||||
currentIndex: 0
|
||||
|
||||
model: appListProc.apps
|
||||
|
||||
delegate: Rectangle {
|
||||
id: appItem
|
||||
required property var modelData
|
||||
required property int index
|
||||
|
||||
width: appListView.width
|
||||
height: 36
|
||||
color: ListView.isCurrentItem ? "#1a1a1a" : (itemArea.containsMouse ? "#141414" : "transparent")
|
||||
border.color: ListView.isCurrentItem ? root.cBorder : "transparent"
|
||||
|
||||
function launch() {
|
||||
Quickshell.execDetached(["sh", "-c", modelData.exec])
|
||||
root.launcherOpen = false
|
||||
searchInput.text = ""
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
anchors.fill: parent
|
||||
anchors.leftMargin: 10
|
||||
anchors.rightMargin: 10
|
||||
spacing: 10
|
||||
|
||||
Text {
|
||||
text: ""
|
||||
font.family: root.mono
|
||||
font.pixelSize: 13
|
||||
color: ListView.isCurrentItem ? root.cBright : root.cDim
|
||||
}
|
||||
|
||||
Text {
|
||||
text: modelData.name
|
||||
font.family: root.mono
|
||||
font.pixelSize: 12
|
||||
color: ListView.isCurrentItem ? root.cBright : root.cText
|
||||
Layout.fillWidth: true
|
||||
elide: Text.ElideRight
|
||||
}
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: itemArea
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
onClicked: appItem.launch()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Process to fetch installed desktop applications
|
||||
Process {
|
||||
id: appListProc
|
||||
property var rawApps: []
|
||||
property var apps: {
|
||||
const query = searchInput.text.toLowerCase().trim()
|
||||
if (!query) return rawApps
|
||||
return rawApps.filter(a => a.name.toLowerCase().includes(query))
|
||||
}
|
||||
|
||||
command: ["python3", "-c", `
|
||||
import os, glob
|
||||
|
||||
apps = []
|
||||
dirs = ['/usr/share/applications', os.path.expanduser('~/.local/share/applications')]
|
||||
for d in dirs:
|
||||
for path in glob.glob(os.path.join(d, '*.desktop')):
|
||||
try:
|
||||
with open(path, 'r', encoding='utf-8', errors='ignore') as f:
|
||||
name, exec_cmd, nodisplay = "", "", False
|
||||
for line in f:
|
||||
if line.startswith('Name=') and not name:
|
||||
name = line.split('=', 1)[1].strip()
|
||||
elif line.startswith('Exec=') and not exec_cmd:
|
||||
exec_cmd = line.split('=', 1)[1].strip().split('%')[0].strip()
|
||||
elif line.startswith('NoDisplay=true'):
|
||||
nodisplay = True
|
||||
if name and exec_cmd and not nodisplay:
|
||||
apps.append(f"{name}|||{exec_cmd}")
|
||||
except:
|
||||
pass
|
||||
|
||||
apps = sorted(list(set(apps)), key=lambda x: x.lower())
|
||||
for a in apps:
|
||||
print(a)
|
||||
`]
|
||||
stdout: StdioCollector {
|
||||
onStreamFinished: {
|
||||
const lines = text.trim().split("\n")
|
||||
let parsed = []
|
||||
for (let line of lines) {
|
||||
const parts = line.split("|||")
|
||||
if (parts.length === 2) {
|
||||
parsed.push({ name: parts[0], exec: parts[1] })
|
||||
}
|
||||
}
|
||||
appListProc.rawApps = parsed
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: appListProc.running = true
|
||||
onVisibleChanged: {
|
||||
if (visible) {
|
||||
searchInput.text = ""
|
||||
searchInput.forceActiveFocus()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ───────────── APPLETS POPUP WINDOW ─────────────
|
||||
PanelWindow {
|
||||
id: appletWindow
|
||||
visible: root.activeApplet !== ""
|
||||
|
||||
screen: Quickshell.screens.find(s => s.name === Hyprland.focusedMonitor?.name) ?? Quickshell.screens[0]
|
||||
anchors { left: true; bottom: true }
|
||||
|
||||
margins.left: root.barWidth + 12
|
||||
margins.bottom: 12
|
||||
|
||||
implicitWidth: 340
|
||||
implicitHeight: root.activeApplet === "sound" ? 420 : 380
|
||||
color: "transparent"
|
||||
|
||||
WlrLayershell.layer: WlrLayer.Overlay
|
||||
WlrLayershell.namespace: "applet"
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: root.cPanel
|
||||
border.color: root.cBorder
|
||||
border.width: 1
|
||||
|
||||
FocusScope {
|
||||
anchors.fill: parent
|
||||
focus: appletWindow.visible
|
||||
Keys.onEscapePressed: root.activeApplet = ""
|
||||
}
|
||||
|
||||
// ─ NETWORK APPLET ─
|
||||
ColumnLayout {
|
||||
anchors.fill: parent; anchors.margins: 16
|
||||
visible: root.activeApplet === "wifi"
|
||||
spacing: 16
|
||||
|
||||
property var wifiList: []
|
||||
|
||||
Process {
|
||||
id: wifiScanProc
|
||||
command: ["nmcli", "-t", "-f", "SSID,SIGNAL,SECURITY,IN-USE", "dev", "wifi"]
|
||||
stdout: StdioCollector {
|
||||
onStreamFinished: {
|
||||
const lines = text.trim().split("\n")
|
||||
let results = []
|
||||
for (let l of lines) {
|
||||
if (!l) continue
|
||||
const parts = l.split(":")
|
||||
if (parts[0] && !results.some(r => r.ssid === parts[0])) {
|
||||
results.push({ ssid: parts[0], signal: parseInt(parts[1]), active: parts[3] === "*" })
|
||||
}
|
||||
}
|
||||
results.sort((a, b) => b.active - a.active || b.signal - a.signal)
|
||||
parent.wifiList = results
|
||||
}
|
||||
}
|
||||
}
|
||||
onVisibleChanged: if(visible) wifiScanProc.running = true
|
||||
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
ColumnLayout {
|
||||
spacing: 2
|
||||
Text { text: "Network"; font.family: root.mono; font.pixelSize: 14; font.bold: true; color: root.cBright }
|
||||
Text { text: "WI-FI & ETHERNET"; font.family: root.mono; font.pixelSize: 10; color: root.cDim }
|
||||
}
|
||||
Item { Layout.fillWidth: true }
|
||||
Rectangle {
|
||||
width: 32; height: 18; color: root.netUp ? root.cBright : root.cBorder
|
||||
Rectangle { x: root.netUp ? 15 : 1; y: 1; width: 16; height: 16; color: root.cPanel; Behavior on x { NumberAnimation { duration: 150 } } }
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle { Layout.fillWidth: true; height: 1; color: root.cBorder }
|
||||
|
||||
Text { text: "ZNANE SIECI"; font.family: root.mono; font.pixelSize: 10; color: root.cDim }
|
||||
|
||||
ListView {
|
||||
Layout.fillWidth: true; Layout.fillHeight: true; clip: true; spacing: 8
|
||||
model: parent.wifiList
|
||||
delegate: Rectangle {
|
||||
width: ListView.view.width; height: 32; color: "transparent"
|
||||
border.color: modelData.active ? root.cBorder : "transparent"
|
||||
|
||||
RowLayout {
|
||||
anchors.fill: parent; anchors.leftMargin: 12; anchors.rightMargin: 12; spacing: 12
|
||||
Text { text: ""; font.family: root.mono; font.pixelSize: 12; color: modelData.active ? root.cAccent : root.cDim }
|
||||
Text { text: modelData.ssid; font.family: root.mono; font.pixelSize: 12; color: modelData.active ? root.cBright : root.cText; Layout.fillWidth: true; elide: Text.ElideRight }
|
||||
}
|
||||
MouseArea { anchors.fill: parent; onClicked: { Quickshell.execDetached(["foot", "-e", "nmtui-connect", modelData.ssid]); root.activeApplet = "" } }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ─ AUDIO APPLET ─
|
||||
ColumnLayout {
|
||||
anchors.fill: parent; anchors.margins: 16
|
||||
visible: root.activeApplet === "sound"
|
||||
spacing: 12
|
||||
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
ColumnLayout {
|
||||
spacing: 2
|
||||
Text { text: "Audio"; font.family: root.mono; font.pixelSize: 14; font.bold: true; color: root.cBright }
|
||||
Text { text: "POKRYJ HAŁAS"; font.family: root.mono; font.pixelSize: 10; color: root.cDim }
|
||||
}
|
||||
Item { Layout.fillWidth: true }
|
||||
Rectangle {
|
||||
width: 32; height: 18; color: !Pipewire.defaultAudioSink?.audio?.muted ? root.cBright : root.cBorder
|
||||
Rectangle { x: !Pipewire.defaultAudioSink?.audio?.muted ? 15 : 1; y: 1; width: 16; height: 16; color: root.cPanel; Behavior on x { NumberAnimation { duration: 150 } } }
|
||||
MouseArea { anchors.fill: parent; onClicked: if(Pipewire.defaultAudioSink?.audio) Pipewire.defaultAudioSink.audio.muted = !Pipewire.defaultAudioSink.audio.muted }
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle { Layout.fillWidth: true; height: 1; color: root.cBorder; Layout.bottomMargin: 8 }
|
||||
|
||||
// Input Section
|
||||
Text { text: "INPUT"; font.family: root.mono; font.pixelSize: 10; color: root.cDim }
|
||||
Repeater {
|
||||
model: Pipewire.nodes.values.filter(n => n.mediaClass === "Audio/Source" && !n.description.includes("Monitor"))
|
||||
delegate: ColumnLayout {
|
||||
Layout.fillWidth: true; spacing: 4
|
||||
RowLayout {
|
||||
Text { text: ""; font.family: root.mono; font.pixelSize: 12; color: root.cDim }
|
||||
Text { text: modelData.description; font.family: root.mono; font.pixelSize: 11; color: root.cText; Layout.fillWidth: true; elide: Text.ElideRight }
|
||||
}
|
||||
Slider {
|
||||
Layout.fillWidth: true; from: 0; to: 1; value: modelData.audio?.volume ?? 0
|
||||
onValueChanged: if (modelData.audio && Math.abs(modelData.audio.volume - value) > 0.01) modelData.audio.volume = value
|
||||
background: Rectangle { width: parent.width; height: 2; color: root.cBorder; y: parent.height/2; Rectangle { width: parent.visualPosition * parent.width; height: 2; color: root.cBright } }
|
||||
handle: Rectangle { x: parent.visualPosition * (parent.width - width); y: parent.height/2 - height/2; width: 10; height: 10; color: root.cBright }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Item { Layout.preferredHeight: 8 }
|
||||
|
||||
// Output Section
|
||||
Text { text: "OUTPUT"; font.family: root.mono; font.pixelSize: 10; color: root.cDim }
|
||||
Repeater {
|
||||
model: Pipewire.nodes.values.filter(n => n.mediaClass === "Audio/Sink")
|
||||
delegate: ColumnLayout {
|
||||
Layout.fillWidth: true; spacing: 4
|
||||
RowLayout {
|
||||
Text { text: ""; font.family: root.mono; font.pixelSize: 12; color: root.cDim }
|
||||
Text { text: modelData.description; font.family: root.mono; font.pixelSize: 11; color: root.cText; Layout.fillWidth: true; elide: Text.ElideRight }
|
||||
}
|
||||
Slider {
|
||||
Layout.fillWidth: true; from: 0; to: 1; value: modelData.audio?.volume ?? 0
|
||||
onValueChanged: if (modelData.audio && Math.abs(modelData.audio.volume - value) > 0.01) modelData.audio.volume = value
|
||||
background: Rectangle { width: parent.width; height: 2; color: root.cBorder; y: parent.height/2; Rectangle { width: parent.visualPosition * parent.width; height: 2; color: root.cBright } }
|
||||
handle: Rectangle { x: parent.visualPosition * (parent.width - width); y: parent.height/2 - height/2; width: 10; height: 10; color: root.cBright }
|
||||
}
|
||||
}
|
||||
}
|
||||
Item { Layout.fillHeight: true }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
-4003
File diff suppressed because it is too large.
Load diff
-3907
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,8 @@
|
||||
# Editor and manual backup files
|
||||
*.bak
|
||||
*.bak-*
|
||||
*.backup-*
|
||||
|
||||
# Backup directories
|
||||
backups/
|
||||
**/backups/
|
||||
Reference in new issue
Block a user