add hyprland
This commit is contained in:
@@ -134,4 +134,6 @@
|
|||||||
},
|
},
|
||||||
"workbench.colorTheme": "Monokai Pro Light",
|
"workbench.colorTheme": "Monokai Pro Light",
|
||||||
"workbench.editor.editorActionsLocation": "hidden",
|
"workbench.editor.editorActionsLocation": "hidden",
|
||||||
|
"editor.overtypeCursorStyle": "block-outline",
|
||||||
|
"editor.cursorStyle": "block",
|
||||||
}
|
}
|
||||||
@@ -16,3 +16,7 @@ separator = "|"
|
|||||||
|
|
||||||
[editor.soft-wrap]
|
[editor.soft-wrap]
|
||||||
enable = true
|
enable = true
|
||||||
|
|
||||||
|
[keys.normal]
|
||||||
|
j = "move_visual_line_up"
|
||||||
|
k = "move_visual_line_down"
|
||||||
|
|||||||
6
.config/hypr/hypr/.vscode/settings.json
vendored
Normal file
6
.config/hypr/hypr/.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"editor.lineNumbers": "relative",
|
||||||
|
"Lua.workspace.library": [
|
||||||
|
"/usr/share/hypr/stubs"
|
||||||
|
]
|
||||||
|
}
|
||||||
27
.config/hypr/hypr/hypridle.conf
Normal file
27
.config/hypr/hypr/hypridle.conf
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
general {
|
||||||
|
lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances.
|
||||||
|
before_sleep_cmd = loginctl lock-session # lock before suspend.
|
||||||
|
after_sleep_cmd = hyprctl dispatch 'hl.dsp.dpms({ action = "enable" })' # to avoid having to press a key twice to turn on the display.
|
||||||
|
}
|
||||||
|
|
||||||
|
# listener {
|
||||||
|
# timeout = 150 # 2.5min.
|
||||||
|
# on-timeout = brightnessctl -s set 10 # set monitor backlight to minimum, avoid 0 on OLED monitor.
|
||||||
|
# on-resume = brightnessctl -r # monitor backlight restore.
|
||||||
|
# }
|
||||||
|
|
||||||
|
listener {
|
||||||
|
timeout = 300 # 5min
|
||||||
|
on-timeout = loginctl lock-session # lock screen when timeout has passed
|
||||||
|
}
|
||||||
|
|
||||||
|
listener {
|
||||||
|
timeout = 330 # 5.5min
|
||||||
|
on-timeout = hyprctl dispatch 'hl.dsp.dpms({ action = "disable" })' # screen off when timeout has passed
|
||||||
|
on-resume = hyprctl dispatch 'hl.dsp.dpms({ action = "enable" })' # screen on when activity is detected after timeout has fired.
|
||||||
|
}
|
||||||
|
|
||||||
|
#listener {
|
||||||
|
# timeout = 2700 # 45min
|
||||||
|
# on-timeout = systemctl suspend # suspend pc
|
||||||
|
#}
|
||||||
1
.config/hypr/hypr/hyprland.conf
Symbolic link
1
.config/hypr/hypr/hyprland.conf
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../dotfiles/.config/hypr/hyprland.conf
|
||||||
1
.config/hypr/hypr/hyprland.conf.deprecated
Symbolic link
1
.config/hypr/hypr/hyprland.conf.deprecated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../dotfiles/.config/hypr/hyprland.conf
|
||||||
14
.config/hypr/hypr/hyprland.lua
Normal file
14
.config/hypr/hypr/hyprland.lua
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
require("hyprland.general")
|
||||||
|
require("hyprland.monitors")
|
||||||
|
require("hyprland.autostart")
|
||||||
|
require("hyprland.environment")
|
||||||
|
require("hyprland.animations")
|
||||||
|
require("hyprland.layout")
|
||||||
|
require("hyprland.input")
|
||||||
|
require("hyprland.binds")
|
||||||
|
|
||||||
|
require("hyprland.rules.windows")
|
||||||
|
require("hyprland.rules.workspaces")
|
||||||
|
require("hyprland.rules.layers")
|
||||||
|
|
||||||
|
require("hyprland.listeners")
|
||||||
38
.config/hypr/hypr/hyprland/animations.lua
Normal file
38
.config/hypr/hypr/hyprland/animations.lua
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
hl.config({
|
||||||
|
animations = {
|
||||||
|
enabled = true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
hl.curve("custom", { type = "bezier", points = {{ 0.05, 0.09 }, { 0.1, 1.05 }}})
|
||||||
|
|
||||||
|
-- Default curves and animations, see https://wiki.hypr.land/Configuring/Advanced-and-Cool/Animations/
|
||||||
|
hl.curve("easeOutQuint", { type = "bezier", points = { {0.23, 1}, {0.32, 1} } })
|
||||||
|
hl.curve("easeInOutCubic", { type = "bezier", points = { {0.65, 0.05}, {0.36, 1} } })
|
||||||
|
hl.curve("linear", { type = "bezier", points = { {0, 0}, {1, 1} } })
|
||||||
|
hl.curve("almostLinear", { type = "bezier", points = { {0.5, 0.5}, {0.75, 1} } })
|
||||||
|
hl.curve("quick", { type = "bezier", points = { {0.15, 0}, {0.1, 1} } })
|
||||||
|
|
||||||
|
-- Default springs
|
||||||
|
hl.curve("easy", { type = "spring", mass = 1, stiffness = 71.2633, dampening = 15.8273644 })
|
||||||
|
|
||||||
|
hl.animation({ leaf = "global", enabled = true, speed = 10, bezier = "default" })
|
||||||
|
|
||||||
|
hl.animation({ leaf = "windows", enabled = true, speed = 2, bezier = "custom" })
|
||||||
|
hl.animation({ leaf = "windowsOut", enabled = true, speed = 4, bezier = "easeOutQuint", style = "popin 80%" })
|
||||||
|
|
||||||
|
hl.animation({ leaf = "border", enabled = true, speed = 5.39, bezier = "easeOutQuint" })
|
||||||
|
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 = 7, 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 = 3, bezier = "default" })
|
||||||
|
hl.animation({ leaf = "zoomFactor", enabled = true, speed = 7, bezier = "quick" })
|
||||||
|
|
||||||
|
hl.animation({ leaf = "specialWorkspace", enabled = true, speed = 2, bezier = "easeOutQuint", style = "fade"})
|
||||||
20
.config/hypr/hypr/hyprland/autostart.lua
Normal file
20
.config/hypr/hypr/hyprland/autostart.lua
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
local programs = require("hyprland.variables.programs")
|
||||||
|
local workspaces = require("hyprland.variables.workspaces")
|
||||||
|
|
||||||
|
-- TODO: Convert as many of these as possible to systemd units
|
||||||
|
|
||||||
|
hl.on("hyprland.start", function ()
|
||||||
|
hl.exec_cmd("swayosd-server")
|
||||||
|
|
||||||
|
hl.exec_cmd(programs.terminal, { workspace = workspaces.special.term .. " silent"})
|
||||||
|
hl.exec_cmd(programs.browser .. " 'ext+container:name=Meta&url=https://web.whatsapp.com' 'ext+container:name=Wasteside&url=https://mail.google.com'", { workspace = workspaces.special.social .. " silent"})
|
||||||
|
hl.exec_cmd("gnome-calendar", { workspace = workspaces.special.social .. " silent"})
|
||||||
|
hl.exec_cmd(programs.terminal .. " -e spotify_player", { workspace = workspaces.special.media .. " silent"})
|
||||||
|
hl.exec_cmd(programs.terminal .. " -e wiremix", { workspace = workspaces.special.media .. " silent"})
|
||||||
|
hl.exec_cmd("clickup", { workspace = workspaces.special.todo .. " silent"})
|
||||||
|
hl.exec_cmd(programs.file_manager, { workspace = workspaces.special.files .. " silent"})
|
||||||
|
hl.exec_cmd("localsend", { workspace = workspaces.special.files .. " silent"})
|
||||||
|
|
||||||
|
hl.exec_cmd("ratbagctl list")
|
||||||
|
hl.exec_cmd("~/code/ha-notifications/ha-notifications")
|
||||||
|
end)
|
||||||
96
.config/hypr/hypr/hyprland/binds.lua
Normal file
96
.config/hypr/hypr/hyprland/binds.lua
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
local programs = require("hyprland.variables.programs")
|
||||||
|
|
||||||
|
hl.config({
|
||||||
|
binds = {
|
||||||
|
hide_special_on_workspace_change = true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
local mainMod = "SUPER"
|
||||||
|
|
||||||
|
hl.bind(mainMod .. " + T", hl.dsp.exec_cmd(programs.terminal))
|
||||||
|
hl.bind(mainMod .. " + B", hl.dsp.exec_cmd(programs.browser))
|
||||||
|
hl.bind(mainMod .. " + Return", hl.dsp.exec_cmd(programs.launcher))
|
||||||
|
hl.bind(mainMod .. " + Space", hl.dsp.exec_cmd(programs.launcher))
|
||||||
|
hl.bind(mainMod .. " + Q", hl.dsp.window.close())
|
||||||
|
hl.bind(mainMod .. " + F", hl.dsp.window.fullscreen())
|
||||||
|
hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(programs.file_manager))
|
||||||
|
hl.bind(mainMod .. " + V", hl.dsp.exec_cmd("vicinae vicinae://launch/clipboard/history"))
|
||||||
|
hl.bind(mainMod .. " + X", hl.dsp.window.float({ action = "toggle" }))
|
||||||
|
hl.bind(mainMod .. " + P", hl.dsp.window.pin())
|
||||||
|
hl.bind(mainMod .. " + J", hl.dsp.layout("togglesplit"))
|
||||||
|
hl.bind(mainMod .. " + SHIFT + S", hl.dsp.exec_cmd("hyprshot -m region"))
|
||||||
|
hl.bind(mainMod .. " + SHIFT + ALT + S", hl.dsp.exec_cmd("hyprshot -m window"))
|
||||||
|
hl.bind("PRINT", hl.dsp.exec_cmd("hyprshot -m active"))
|
||||||
|
hl.bind(mainMod .. " + SHIFT + B", hl.dsp.exec_cmd("pkill waybar && hyprctl dispatch exec waybar"))
|
||||||
|
hl.bind(mainMod .. " + SHIFT + C", hl.dsp.exec_cmd("hyprpicker | wl-copy"))
|
||||||
|
hl.bind(mainMod .. " + END", hl.dsp.exec_cmd("wlogout -b 6 -L 1100 -T 650 -B 650"))
|
||||||
|
hl.bind(mainMod .. " + N", hl.dsp.exec_cmd(programs.notepad))
|
||||||
|
|
||||||
|
-- Moving 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" }))
|
||||||
|
|
||||||
|
-- Moving windows with mainMod + SHIFT + arrow keys
|
||||||
|
hl.bind(mainMod .. " + SHIFT + left", hl.dsp.window.move({ direction = "left" }))
|
||||||
|
hl.bind(mainMod .. " + SHIFT + right", hl.dsp.window.move({ direction = "right" }))
|
||||||
|
hl.bind(mainMod .. " + SHIFT + up", hl.dsp.window.move({ direction = "up" }))
|
||||||
|
hl.bind(mainMod .. " + SHIFT + down", hl.dsp.window.move({ direction = "down" }))
|
||||||
|
|
||||||
|
local workspaces = require("hyprland.variables.workspaces")
|
||||||
|
|
||||||
|
-- Switch workspaces of primary monitor with mainMod + [1-7]
|
||||||
|
for i, workspace in ipairs(workspaces.primary) do
|
||||||
|
hl.bind(mainMod .. " + " .. i, hl.dsp.focus({ workspace = workspace }))
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Switch workspaces of secondary monitor with mainMod + [F1-F7]
|
||||||
|
for i, workspace in ipairs(workspaces.secondary) do
|
||||||
|
hl.bind(mainMod .. " + F" .. i, hl.dsp.focus({ workspace = workspace }))
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Move active window to a workspace with mainMod + SHIFT + [1-7] (primary monitor)
|
||||||
|
for i, workspace in ipairs(workspaces.primary) do
|
||||||
|
hl.bind(mainMod .. " + SHIFT + " .. i, hl.dsp.window.move({ workspace = workspace }))
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Move active window to a workspace with mainMod + SHIFT + [F1-F7] (secondary monitor)
|
||||||
|
for i, workspace in ipairs(workspaces.secondary) do
|
||||||
|
hl.bind(mainMod .. " + SHIFT + F" .. i, hl.dsp.window.move({ workspace = workspace }))
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Special workspaces are bound to F8-F12 (aliased to G1-G5 on my keyboard)
|
||||||
|
local order = { workspaces.special.term, workspaces.special.social, workspaces.special.media, workspaces.special.todo, workspaces.special.files }
|
||||||
|
for i, workspace in ipairs(order) do
|
||||||
|
local specialWorkspace = string.match(workspace, "special:(.+)")
|
||||||
|
local fkey = 12 - (i - 1)
|
||||||
|
hl.bind(mainMod .. " + F" .. fkey, hl.dsp.focus({ monitor = "DP-1"}))
|
||||||
|
hl.bind(mainMod .. " + F" .. fkey, hl.dsp.workspace.toggle_special(specialWorkspace))
|
||||||
|
hl.bind(mainMod .. " + SHIFT + F" .. fkey, hl.dsp.window.move({ workspace = workspace }))
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Special workspace for recording
|
||||||
|
hl.bind(mainMod .. " + R", hl.dsp.focus({ workspace = workspaces.recording }))
|
||||||
|
hl.bind(mainMod .. " + SHIFT + R", hl.dsp.window.move({ workspace = workspaces.recording }))
|
||||||
|
|
||||||
|
-- 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 })
|
||||||
|
|
||||||
|
-- Media controls
|
||||||
|
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("swayosd-client --output-volume raise"), { locked = true, repeating = true })
|
||||||
|
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("swayosd-client --output-volume lower"), { locked = true, repeating = true })
|
||||||
|
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("swayosd-client --output-volume mute-toggle"), { locked = true, repeating = true })
|
||||||
|
|
||||||
|
|
||||||
|
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true })
|
||||||
|
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { 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(mainMod .. "+ L", hl.dsp.exec_cmd("loginctl lock-session"))
|
||||||
|
|
||||||
|
hl.bind(mainMod .. " + page_up", hl.dsp.exec_cmd("~/.config/hypr/scripts/random-wallpaper.sh"), { locked = true })
|
||||||
4
.config/hypr/hypr/hyprland/environment.lua
Normal file
4
.config/hypr/hypr/hyprland/environment.lua
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
hl.env("XCURSOR_SIZE", "24")
|
||||||
|
hl.env("HYPRCURSOR_SIZE", "24")
|
||||||
|
hl.env("XDG_SESSION_TYPE", "wayland")
|
||||||
|
hl.env("HYPRSHOT_DIR", "/home/paul/screenshots")
|
||||||
56
.config/hypr/hypr/hyprland/general.lua
Normal file
56
.config/hypr/hypr/hyprland/general.lua
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
local colors = require("hyprland.variables.colors")
|
||||||
|
|
||||||
|
hl.config({
|
||||||
|
general = {
|
||||||
|
gaps_in = 5,
|
||||||
|
gaps_out = { top = 10, right = 20, bottom = 20, left = 20 },
|
||||||
|
|
||||||
|
border_size = 2,
|
||||||
|
|
||||||
|
-- https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
|
||||||
|
col = {
|
||||||
|
active_border = { colors = { colors.primary.from, colors.primary.to }, angle = 45 },
|
||||||
|
},
|
||||||
|
|
||||||
|
-- Set to true enable resizing windows by clicking and dragging on borders and gaps
|
||||||
|
resize_on_border = false,
|
||||||
|
|
||||||
|
-- Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
|
||||||
|
allow_tearing = false,
|
||||||
|
|
||||||
|
-- Use dwindle per default, changed on a per-workspace basis in the workspace rules below
|
||||||
|
layout = "dwindle"
|
||||||
|
},
|
||||||
|
|
||||||
|
decoration = {
|
||||||
|
rounding = 10,
|
||||||
|
rounding_power = 2,
|
||||||
|
|
||||||
|
-- Change transparency of focused and unfocused windows
|
||||||
|
active_opacity = 1.0,
|
||||||
|
inactive_opacity = 1.0,
|
||||||
|
|
||||||
|
dim_special = 0.7,
|
||||||
|
|
||||||
|
shadow = {
|
||||||
|
enabled = true,
|
||||||
|
range = 4,
|
||||||
|
render_power = 3,
|
||||||
|
color = 0xee1a1a1a,
|
||||||
|
},
|
||||||
|
|
||||||
|
blur = {
|
||||||
|
enabled = true,
|
||||||
|
size = 3,
|
||||||
|
passes = 1,
|
||||||
|
|
||||||
|
vibrancy = 0.1696,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
misc = {
|
||||||
|
force_default_wallpaper = 0,
|
||||||
|
disable_hyprland_logo = true,
|
||||||
|
close_special_on_empty = false,
|
||||||
|
}
|
||||||
|
})
|
||||||
20
.config/hypr/hypr/hyprland/input.lua
Normal file
20
.config/hypr/hypr/hyprland/input.lua
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
hl.config({
|
||||||
|
cursor = {
|
||||||
|
no_hardware_cursors = 0,
|
||||||
|
},
|
||||||
|
|
||||||
|
input = {
|
||||||
|
kb_layout = "de",
|
||||||
|
kb_variant = "",
|
||||||
|
kb_model = "",
|
||||||
|
kb_options = "",
|
||||||
|
kb_rules = "",
|
||||||
|
|
||||||
|
numlock_by_default = true,
|
||||||
|
|
||||||
|
follow_mouse = 2,
|
||||||
|
sensitivity = 0
|
||||||
|
},
|
||||||
|
|
||||||
|
gestures = {}
|
||||||
|
})
|
||||||
46
.config/hypr/hypr/hyprland/layout.lua
Normal file
46
.config/hypr/hypr/hyprland/layout.lua
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
hl.config({
|
||||||
|
dwindle = {
|
||||||
|
preserve_split = true,
|
||||||
|
|
||||||
|
smart_split = false, -- No splitting based on cursor position
|
||||||
|
force_split = 2, -- Always split to the right
|
||||||
|
},
|
||||||
|
|
||||||
|
master = {
|
||||||
|
new_status = "slave", -- New windows are added as slaves
|
||||||
|
|
||||||
|
mfact = 0.7,
|
||||||
|
orientation = "right"
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
-- I needed to create a custom layout, because I can only configure the master layout's
|
||||||
|
-- orientation globally, and this layout is used specifically for a vertical monitor.
|
||||||
|
local focus_split = 0.66
|
||||||
|
hl.layout.register("vertical", {
|
||||||
|
recalculate = function(ctx)
|
||||||
|
local n = #ctx.targets
|
||||||
|
if n == 0 then return end
|
||||||
|
|
||||||
|
-- First, we place the first target in the focus area
|
||||||
|
local focus_area = ctx:split(ctx.area, "bottom", focus_split)
|
||||||
|
ctx.targets[1]:place(focus_area)
|
||||||
|
|
||||||
|
-- Then we split the remaining area into equal parts for the other targets (left-to-right)
|
||||||
|
local remaining_area = ctx:split(ctx.area, "top", 1 - focus_split)
|
||||||
|
local remaining = n - 1
|
||||||
|
|
||||||
|
for i, target in ipairs(ctx.targets) do
|
||||||
|
if i == 1 then goto continue end -- Skip the first target, it's already placed
|
||||||
|
|
||||||
|
local remaining_split = 1 / remaining
|
||||||
|
local target_area = ctx:split(remaining_area, "left", remaining_split)
|
||||||
|
|
||||||
|
remaining_area = ctx:split(remaining_area, "right", 1 - remaining_split)
|
||||||
|
remaining = remaining - 1
|
||||||
|
|
||||||
|
target:place(target_area)
|
||||||
|
::continue::
|
||||||
|
end
|
||||||
|
end
|
||||||
|
})
|
||||||
23
.config/hypr/hypr/hyprland/listeners.lua
Normal file
23
.config/hypr/hypr/hyprland/listeners.lua
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
|
||||||
|
-- Since the Bitwarden modal is a Firefox window (and its name only changes some
|
||||||
|
-- time after opening), it cannot be centered/floated by a window rule, as these
|
||||||
|
-- effects are static and need to be known at the time of window creation.
|
||||||
|
-- This listener instead detects when the title of a Firefox window changes to the
|
||||||
|
-- one Bitwarden uses, and then applies the floating and centering effects at that time.
|
||||||
|
hl.on("window.title", function (w)
|
||||||
|
if w.class ~= "firefox" then return end
|
||||||
|
|
||||||
|
local title = w.title
|
||||||
|
|
||||||
|
if string.find(title, "Extension: (Bitwarden Password Manager)", 1, true) then
|
||||||
|
if w.floating then return end
|
||||||
|
hl.dispatch(hl.dsp.window.float({ window = w}))
|
||||||
|
hl.dispatch(hl.dsp.window.resize({ window = w, x = 800, y = 800 }))
|
||||||
|
hl.dispatch(hl.dsp.window.center({ window = w }))
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- On every boot, change the lock screen wallpaper
|
||||||
|
hl.on("hyprland.start", function ()
|
||||||
|
hl.dispatch(hl.dsp.exec_cmd("~/.config/hypr/scripts/random-wallpaper.sh"))
|
||||||
|
end)
|
||||||
31
.config/hypr/hypr/hyprland/monitors.lua
Normal file
31
.config/hypr/hypr/hyprland/monitors.lua
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
local monitors = require("hyprland.variables.monitors")
|
||||||
|
|
||||||
|
hl.monitor({
|
||||||
|
output = monitors.primary,
|
||||||
|
mode = "3440x1440@144",
|
||||||
|
position = "auto",
|
||||||
|
scale = "auto"
|
||||||
|
})
|
||||||
|
|
||||||
|
hl.monitor({
|
||||||
|
output = monitors.secondary,
|
||||||
|
mode = "1920x1080",
|
||||||
|
position = "-1080x-550",
|
||||||
|
scale = 1,
|
||||||
|
transform = 1
|
||||||
|
})
|
||||||
|
|
||||||
|
hl.monitor({
|
||||||
|
output = monitors.tv,
|
||||||
|
mode = "3440x1440",
|
||||||
|
position = "auto",
|
||||||
|
scale = "auto"
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Recommended rule for quickly plugging in random monitors:
|
||||||
|
hl.monitor({
|
||||||
|
output = "",
|
||||||
|
mode = "preferred",
|
||||||
|
position = "auto",
|
||||||
|
scale = 1
|
||||||
|
})
|
||||||
34
.config/hypr/hypr/hyprland/rules/layers.lua
Normal file
34
.config/hypr/hypr/hyprland/rules/layers.lua
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
hl.layer_rule({
|
||||||
|
name = "notifications",
|
||||||
|
match = { namespace = "notifications" },
|
||||||
|
|
||||||
|
animation = "slide"
|
||||||
|
})
|
||||||
|
|
||||||
|
hl.layer_rule({
|
||||||
|
name = "no-anim-for-selection",
|
||||||
|
match = { namespace = "selection" },
|
||||||
|
|
||||||
|
no_anim = true
|
||||||
|
})
|
||||||
|
|
||||||
|
hl.layer_rule({
|
||||||
|
name = "blur-waybar",
|
||||||
|
match = { namespace = "waybar" },
|
||||||
|
|
||||||
|
blur = true,
|
||||||
|
})
|
||||||
|
|
||||||
|
hl.layer_rule({
|
||||||
|
name = "blur-tofi",
|
||||||
|
match = { namespace = "tofi" },
|
||||||
|
|
||||||
|
blur = true,
|
||||||
|
})
|
||||||
|
|
||||||
|
hl.layer_rule({
|
||||||
|
name = "blur-swayosd",
|
||||||
|
match = { namespace = "swayosd" },
|
||||||
|
|
||||||
|
blur = true,
|
||||||
|
})
|
||||||
118
.config/hypr/hypr/hyprland/rules/windows.lua
Normal file
118
.config/hypr/hypr/hyprland/rules/windows.lua
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
local colors = require("hyprland.variables.colors")
|
||||||
|
|
||||||
|
-- See https://wiki.hypr.land/Configuring/Basics/Window-Rules/
|
||||||
|
-- and https://wiki.hypr.land/Configuring/Basics/Workspace-Rules/
|
||||||
|
|
||||||
|
-- Example window rules that are useful
|
||||||
|
|
||||||
|
hl.window_rule({
|
||||||
|
-- Ignore maximize requests from all apps. You'll probably like this.
|
||||||
|
name = "suppress-maximize-events",
|
||||||
|
match = { class = ".*" },
|
||||||
|
|
||||||
|
suppress_event = "maximize",
|
||||||
|
})
|
||||||
|
|
||||||
|
hl.window_rule({
|
||||||
|
-- Fix some dragging issues with XWayland
|
||||||
|
name = "fix-xwayland-drags",
|
||||||
|
match = {
|
||||||
|
class = "^$",
|
||||||
|
title = "^$",
|
||||||
|
xwayland = true,
|
||||||
|
float = true,
|
||||||
|
fullscreen = false,
|
||||||
|
pin = false,
|
||||||
|
},
|
||||||
|
|
||||||
|
no_focus = true,
|
||||||
|
})
|
||||||
|
|
||||||
|
hl.window_rule({
|
||||||
|
name = "nofloat-xfreerdp",
|
||||||
|
match = { class = "^(xfreerdp)$" },
|
||||||
|
|
||||||
|
tile = true
|
||||||
|
})
|
||||||
|
|
||||||
|
hl.window_rule({
|
||||||
|
name = "float-audio-settings",
|
||||||
|
match = { class = "org.pulseaudio.pavucontrol" },
|
||||||
|
|
||||||
|
float = true,
|
||||||
|
size = { 500, 1000 },
|
||||||
|
move = { 2841, 61 },
|
||||||
|
pin = true
|
||||||
|
})
|
||||||
|
|
||||||
|
hl.window_rule({
|
||||||
|
name = "float-bluetooth-settings",
|
||||||
|
match = { title = "overskride" },
|
||||||
|
|
||||||
|
float = true,
|
||||||
|
size = { 765, 765 },
|
||||||
|
move = { 2653, 44 },
|
||||||
|
pin = true
|
||||||
|
})
|
||||||
|
|
||||||
|
hl.window_rule({
|
||||||
|
name = "pinned-bordercolor",
|
||||||
|
match = { pin = true },
|
||||||
|
|
||||||
|
border_color = { colors = { colors.secondary.from, colors.secondary.to }, angle = 45 },
|
||||||
|
})
|
||||||
|
|
||||||
|
hl.window_rule({
|
||||||
|
name = "float-waydroid",
|
||||||
|
match = { initial_class = "Waydroid" },
|
||||||
|
|
||||||
|
float = true,
|
||||||
|
size = { 576, 1024 }
|
||||||
|
})
|
||||||
|
|
||||||
|
hl.window_rule({
|
||||||
|
name = "float-waydroid-apps",
|
||||||
|
match = { initial_class = "waydroid\\..*" },
|
||||||
|
|
||||||
|
float = true,
|
||||||
|
size = { 576, 1024 }
|
||||||
|
})
|
||||||
|
|
||||||
|
hl.window_rule({
|
||||||
|
name = "vicinae",
|
||||||
|
match = { initial_class = "vicinae" },
|
||||||
|
|
||||||
|
float = true,
|
||||||
|
pin = true,
|
||||||
|
stay_focused = true,
|
||||||
|
dim_around = true,
|
||||||
|
no_anim = true
|
||||||
|
})
|
||||||
|
|
||||||
|
hl.window_rule({
|
||||||
|
name = "center-clickup-command-bar",
|
||||||
|
match = { title = "ClickUp Command Bar" },
|
||||||
|
|
||||||
|
center = true,
|
||||||
|
float = true,
|
||||||
|
stay_focused = true,
|
||||||
|
})
|
||||||
|
|
||||||
|
hl.window_rule({
|
||||||
|
name = "libreoffice-import-modal",
|
||||||
|
match = { initial_class = "soffice", initial_title = "Text Import.*" },
|
||||||
|
|
||||||
|
float = true,
|
||||||
|
size = { 800, 400 },
|
||||||
|
stay_focused = true,
|
||||||
|
dim_around = true,
|
||||||
|
move = { 1320, 520 }
|
||||||
|
})
|
||||||
|
|
||||||
|
hl.window_rule({
|
||||||
|
name = "focus-bitwarden",
|
||||||
|
match = { class = "firefox", title = "Extension: \\(Bitwarden Password Manager\\).*" },
|
||||||
|
|
||||||
|
stay_focused = true,
|
||||||
|
dim_around = true,
|
||||||
|
})
|
||||||
31
.config/hypr/hypr/hyprland/rules/workspaces.lua
Normal file
31
.config/hypr/hypr/hyprland/rules/workspaces.lua
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
local workspaces = require("hyprland.variables.workspaces")
|
||||||
|
local monitors = require("hyprland.variables.monitors")
|
||||||
|
|
||||||
|
-- Assign workspaces to monitors
|
||||||
|
for _, workspace in ipairs(workspaces.primary) do
|
||||||
|
hl.workspace_rule({ workspace = workspace, monitor = monitors.primary })
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Secondary monitor workspaces should have a gap at the top if only one window
|
||||||
|
-- is present, to make it more readable (vertical setup).
|
||||||
|
for _, workspace in ipairs(workspaces.secondary) do
|
||||||
|
hl.workspace_rule({ workspace = workspace, monitor = monitors.secondary, layout = "lua:vertical" })
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Set gaps for special workspaces
|
||||||
|
for _, workspace in pairs(workspaces.special) do
|
||||||
|
hl.workspace_rule({ workspace = workspace, gaps_out = 64 })
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Configure layouts
|
||||||
|
hl.workspace_rule({ workspace = workspaces.primary[1], layout = "master"})
|
||||||
|
hl.workspace_rule({ workspace = workspaces.special.term, layout = "master"})
|
||||||
|
|
||||||
|
-- Set defaults
|
||||||
|
hl.workspace_rule({ workspace = workspaces.primary[1], default = true })
|
||||||
|
hl.workspace_rule({ workspace = workspaces.secondary[1], default = true })
|
||||||
|
|
||||||
|
-- Special monitor for recording in 16:9 aspect ration on the widescreen monitor
|
||||||
|
hl.workspace_rule({ workspace = workspaces.recording, layout = "dwindle", gaps_out = {left = 758, bottom = 164, right = 758, top = 164}, monitor = monitors.primary})
|
||||||
13
.config/hypr/hypr/hyprland/variables/colors.lua
Normal file
13
.config/hypr/hypr/hyprland/variables/colors.lua
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
local M = {}
|
||||||
|
|
||||||
|
M.primary = {
|
||||||
|
from = "rgba(33ccffee)",
|
||||||
|
to = "rgba(00ff99ee)"
|
||||||
|
}
|
||||||
|
|
||||||
|
M.secondary = {
|
||||||
|
from = "rgb(cc34a4)",
|
||||||
|
to = "rgb(4b2d70)"
|
||||||
|
}
|
||||||
|
|
||||||
|
return M
|
||||||
8
.config/hypr/hypr/hyprland/variables/monitors.lua
Normal file
8
.config/hypr/hypr/hyprland/variables/monitors.lua
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
local M = {}
|
||||||
|
|
||||||
|
M.primary = "DP-1"
|
||||||
|
M.secondary = "DP-2"
|
||||||
|
|
||||||
|
M.tv = "HDMI-A-1"
|
||||||
|
|
||||||
|
return M
|
||||||
9
.config/hypr/hypr/hyprland/variables/programs.lua
Normal file
9
.config/hypr/hypr/hyprland/variables/programs.lua
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
local M = {}
|
||||||
|
|
||||||
|
M.terminal = "alacritty"
|
||||||
|
M.browser = "firefox"
|
||||||
|
M.launcher = "vicinae toggle"
|
||||||
|
M.file_manager = "nautilus --new-window"
|
||||||
|
M.notepad = "gnome-text-editor -in"
|
||||||
|
|
||||||
|
return M
|
||||||
17
.config/hypr/hypr/hyprland/variables/workspaces.lua
Normal file
17
.config/hypr/hypr/hyprland/variables/workspaces.lua
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
local M = {}
|
||||||
|
|
||||||
|
M.special = {
|
||||||
|
term = "special:term",
|
||||||
|
social = "special:social",
|
||||||
|
media = "special:media",
|
||||||
|
todo = "special:todo",
|
||||||
|
files = "special:files"
|
||||||
|
}
|
||||||
|
|
||||||
|
M.primary = { "1", "2", "3", "4", "5", "6", "7" }
|
||||||
|
|
||||||
|
M.secondary = { "11", "12", "13", "14", "15", "16", "17" }
|
||||||
|
|
||||||
|
M.recording = "name:recording"
|
||||||
|
|
||||||
|
return M
|
||||||
91
.config/hypr/hypr/hyprlock.conf
Normal file
91
.config/hypr/hypr/hyprlock.conf
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
# BACKGROUND
|
||||||
|
background {
|
||||||
|
monitor = DP-1
|
||||||
|
path = ~/.config/hypr/wallpaper/current.jpg
|
||||||
|
blur_passes = 0
|
||||||
|
contrast = 0.8916
|
||||||
|
brightness = 0.8172
|
||||||
|
vibrancy = 0.1696
|
||||||
|
vibrancy_darkness = 0.0
|
||||||
|
}
|
||||||
|
|
||||||
|
background {
|
||||||
|
monitor = DP-2
|
||||||
|
color = rgba(0, 0, 0, 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
# GENERAL
|
||||||
|
general {
|
||||||
|
no_fade_in = false
|
||||||
|
grace = 10
|
||||||
|
disable_loading_bar = false
|
||||||
|
}
|
||||||
|
|
||||||
|
# Time
|
||||||
|
label {
|
||||||
|
monitor = DP-1
|
||||||
|
text = cmd[update:1000] echo "<span>$(date +"%H:%M")</span>"
|
||||||
|
color = rgba(216, 222, 233, .75)
|
||||||
|
font_size = 60
|
||||||
|
font_family = Verdana Bold
|
||||||
|
position = 0, 450
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
}
|
||||||
|
|
||||||
|
# Date
|
||||||
|
label {
|
||||||
|
monitor = DP-1
|
||||||
|
text = cmd[update:1000] echo "<span>$(date +"%d. %b %Y")</span>"
|
||||||
|
color = rgba(216, 222, 233, .75)
|
||||||
|
font_size = 15
|
||||||
|
font_family = Verdana
|
||||||
|
position = 0, 380
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
}
|
||||||
|
|
||||||
|
# Password Input
|
||||||
|
input-field {
|
||||||
|
monitor = DP-1
|
||||||
|
size = 320, 55
|
||||||
|
outline_thickness = 0
|
||||||
|
dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8
|
||||||
|
dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0
|
||||||
|
dots_center = true
|
||||||
|
outer_color = rgba(255, 255, 255, 0)
|
||||||
|
inner_color = rgba(255, 255, 255, 0.1)
|
||||||
|
font_color = rgb(200, 200, 200)
|
||||||
|
rounding = 16
|
||||||
|
fade_on_empty = true
|
||||||
|
font_family = SF Pro Display
|
||||||
|
placeholder_text = <span foreground="##ffffff99"></span>
|
||||||
|
hide_input = false
|
||||||
|
position = 0, -600
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
}
|
||||||
|
|
||||||
|
# Force unlock hint on second monitor
|
||||||
|
label {
|
||||||
|
monitor = DP-2
|
||||||
|
text = <span foreground="##ffffff99">Locked. To force unlock, send SIGUSR1 to hyprlock using a TTY.</span>
|
||||||
|
color = rgba(216, 222, 233, .75)
|
||||||
|
font_size = 12
|
||||||
|
font_family = Verdana
|
||||||
|
position = 0, -875
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
}
|
||||||
|
|
||||||
|
# Current wallpaper label
|
||||||
|
label {
|
||||||
|
monitor = DP-2
|
||||||
|
text = cmd[] echo "<span foreground=\"##ffffff99\">Current wallpaper: $(basename "$(readlink ~/.config/hypr/wallpaper/current.jpg)")</span>"
|
||||||
|
color = rgba(216, 222, 233, .75)
|
||||||
|
font_size = 12
|
||||||
|
font_family = Verdana
|
||||||
|
position = 0, -900
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
}
|
||||||
1
.config/hypr/hypr/hyprpaper.conf
Symbolic link
1
.config/hypr/hypr/hyprpaper.conf
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../dotfiles/.config/hypr/hyprpaper.conf
|
||||||
BIN
.config/hypr/hypr/img/gnome-background-lock.webp
Normal file
BIN
.config/hypr/hypr/img/gnome-background-lock.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 66 KiB |
BIN
.config/hypr/hypr/img/gnome-background.webp
Normal file
BIN
.config/hypr/hypr/img/gnome-background.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 66 KiB |
1
.config/hypr/hypr/presets
Symbolic link
1
.config/hypr/hypr/presets
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../dotfiles/.config/hypr/presets
|
||||||
9
.config/hypr/hypr/scripts/random-wallpaper.sh
Executable file
9
.config/hypr/hypr/scripts/random-wallpaper.sh
Executable file
@@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
cd ~/.config/hypr/wallpaper
|
||||||
|
|
||||||
|
ln -sf "$(find candidates/ -maxdepth 1 -type f | shuf -n1)" current.jpg
|
||||||
|
|
||||||
|
# Update hyprlock (if running) by sending SIGUSR2 (doesnt work currently, maybe because of symlink).
|
||||||
|
# https://wiki.hypr.land/Hypr-Ecosystem/hyprlock/#user-signals
|
||||||
|
pkill -USR2 hyprlock
|
||||||
1
.config/hypr/hypr/scripts/songdetail.sh
Symbolic link
1
.config/hypr/hypr/scripts/songdetail.sh
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../dotfiles/.config/hypr/scripts/songdetail.sh
|
||||||
1
.config/hypr/hypr/wallpaper/candidates
Symbolic link
1
.config/hypr/hypr/wallpaper/candidates
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
source/nature
|
||||||
1
.config/hypr/hypr/wallpaper/current.jpg
Symbolic link
1
.config/hypr/hypr/wallpaper/current.jpg
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
candidates/190 - S2CCnyp.jpg
|
||||||
3
.config/hypr/hypr/xdph.conf
Normal file
3
.config/hypr/hypr/xdph.conf
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
screencopy {
|
||||||
|
# custom_picker_binary = "/home/paul/code/hyprland-share-picker/test-replacement"
|
||||||
|
}
|
||||||
1
.config/systemd/user/default.target.wants/darkman.service
Symbolic link
1
.config/systemd/user/default.target.wants/darkman.service
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
/usr/lib/systemd/user/darkman.service
|
||||||
1
.config/systemd/user/default.target.wants/udiskie.service
Symbolic link
1
.config/systemd/user/default.target.wants/udiskie.service
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
/home/paul/.config/systemd/user/udiskie.service
|
||||||
12
.config/systemd/user/dunst.service
Normal file
12
.config/systemd/user/dunst.service
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Dunst notification daemon
|
||||||
|
Documentation=man:dunst(1)
|
||||||
|
PartOf=graphical-session.target
|
||||||
|
After=graphical-session.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=dbus
|
||||||
|
BusName=org.freedesktop.Notifications
|
||||||
|
ExecStart=/usr/bin/dunst
|
||||||
|
ExecReload=/usr/bin/dunstctl reload
|
||||||
|
Slice=session.slice
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
/usr/lib/systemd/user/hypridle.service
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
/usr/lib/systemd/user/hyprpaper.service
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
/usr/lib/systemd/user/hyprpolkitagent.service
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
/usr/lib/systemd/user/vicinae.service
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
/usr/lib/systemd/user/waybar.service
|
||||||
9
.config/systemd/user/udiskie.service
Normal file
9
.config/systemd/user/udiskie.service
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Handle automounting of usb devices
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/usr/bin/udiskie
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
2
.zshrc
2
.zshrc
@@ -18,6 +18,8 @@ DISABLE_UNTRACKED_FILES_DIRTY="true"
|
|||||||
# Add wisely, as too many plugins slow down shell startup.
|
# Add wisely, as too many plugins slow down shell startup.
|
||||||
plugins=(git zsh-autosuggestions zsh-syntax-highlighting fast-syntax-highlighting pip docker uv zsh-uv-env colorize copyfile)
|
plugins=(git zsh-autosuggestions zsh-syntax-highlighting fast-syntax-highlighting pip docker uv zsh-uv-env colorize copyfile)
|
||||||
|
|
||||||
|
autoload zmv
|
||||||
|
|
||||||
source $ZSH/oh-my-zsh.sh
|
source $ZSH/oh-my-zsh.sh
|
||||||
|
|
||||||
# User configuration
|
# User configuration
|
||||||
|
|||||||
Reference in New Issue
Block a user