* Open the scratchpad with the default agent already in it on_created_empty fires when the special workspace is created empty, so the agent starts the first time the console drops down instead of at boot, and comes back on the next open if you close it. The exec rule pins the workspace rather than trusting the spawn to inherit it: Hyprland only tags a process with its origin workspace while misc.initial_workspace_tracking is on, and we turn that off. Nothing to guard for a missing default agent. Omarchy picks none for you, and omarchy-agent exits without opening a window when none is set, so the scratchpad just opens empty until one is chosen. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Move the console into its own file and size it to half the screen The scratchpad's presentation was scattered through looknfeel: a dim in the decoration block, a workspace rule below it, two animation leaves further down again. Gathered into qconsole.lua, where the whole console is one readable thing. Sized to half the screen while it moved. A window rule cannot do that: its size expressions resolve once, when the window maps, so rescaling the monitor afterwards leaves a console that is no longer half of anything. Gaps are re-applied by the layout, so the console is sized by the gap left underneath it, recomputed from the monitor whenever the layout changes. Monitor dimensions come back in physical pixels while gaps are logical, so the scale comes out before the reserved area comes off. That arithmetic is the whole trick, and the test pins it at 1x, 2x and 1.5x. The test runs lua with an explicit "-". Bare `lua <<EOF` reads stdin as a REPL and exits 0 even after an error, which would leave its assertions unable to fail. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Only rewrite the console rule when its size actually changes Refitting replaces the rule in place rather than stacking a new one, so there was no leak, but each write still schedules a monitor and window state refresh and monitor.focused fires on every hop between screens. Remember what was last written and skip the write when the number has not moved. Also say out loud that the scale guard is what keeps the arithmetic below it safe: a monitor handle that has outlived its output answers nil to every field, and a layout change is exactly when that happens. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Drop the active window border inside the console The gradient border marks which window has focus, which the console does not need: it is only ever focused while it is open, and the dimmed workspace behind it already sets it apart. On a single agent terminal the highlight just reads as a frame around the panel. no_border on the workspace rule pins the border to 0 at workspace-rule priority, so it applies to whatever ends up in there without touching the global border. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Omabot <david@hey.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
126 lines
3.8 KiB
Lua
126 lines
3.8 KiB
Lua
-- Refer to https://wiki.hypr.land/Configuring/Basics/Variables/
|
|
|
|
local active_border_color = { colors = { "rgba(33ccffee)", "rgba(00ff99ee)" }, angle = 45 }
|
|
local inactive_border_color = "rgba(595959aa)"
|
|
|
|
hl.config({
|
|
general = {
|
|
gaps_in = 5,
|
|
gaps_out = 10,
|
|
border_size = 2,
|
|
|
|
col = {
|
|
active_border = active_border_color,
|
|
inactive_border = inactive_border_color,
|
|
},
|
|
|
|
resize_on_border = false,
|
|
allow_tearing = false,
|
|
layout = "dwindle",
|
|
},
|
|
|
|
decoration = {
|
|
rounding = 0,
|
|
|
|
shadow = {
|
|
enabled = false,
|
|
},
|
|
|
|
blur = {
|
|
enabled = false,
|
|
},
|
|
},
|
|
|
|
group = {
|
|
col = {
|
|
border_active = active_border_color,
|
|
border_inactive = inactive_border_color,
|
|
},
|
|
|
|
groupbar = {
|
|
font_size = 12,
|
|
font_family = "monospace",
|
|
font_weight_active = "ultraheavy",
|
|
font_weight_inactive = "normal",
|
|
indicator_height = 1,
|
|
indicator_gap = 5,
|
|
height = 22,
|
|
gaps_in = 5,
|
|
gaps_out = 0,
|
|
text_color = "rgb(ffffff)",
|
|
text_color_inactive = "rgba(ffffff90)",
|
|
col = {
|
|
active = "rgba(00000040)",
|
|
inactive = "rgba(00000020)",
|
|
},
|
|
gradients = true,
|
|
gradient_rounding = 0,
|
|
gradient_round_only_edges = false,
|
|
},
|
|
},
|
|
|
|
animations = {
|
|
enabled = true,
|
|
},
|
|
})
|
|
|
|
-- Default 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.0 } } })
|
|
hl.curve("quick", { type = "bezier", points = { { 0.15, 0 }, { 0.1, 1 } } })
|
|
|
|
hl.animation({ leaf = "global", enabled = true, speed = 10, bezier = "default" })
|
|
hl.animation({ leaf = "border", enabled = true, speed = 5.39, bezier = "easeOutQuint" })
|
|
hl.animation({ leaf = "windows", enabled = true, speed = 3.79, bezier = "easeOutQuint" })
|
|
hl.animation({ leaf = "windowsIn", enabled = true, speed = 4.1, bezier = "easeOutQuint", 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 = "fadeSwitch", enabled = false })
|
|
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 = false })
|
|
|
|
hl.config({
|
|
dwindle = {
|
|
preserve_split = true,
|
|
force_split = 2,
|
|
},
|
|
|
|
scrolling = {
|
|
column_width = 0.49,
|
|
},
|
|
|
|
master = {
|
|
new_status = "master",
|
|
},
|
|
|
|
misc = {
|
|
disable_hyprland_logo = true,
|
|
disable_splash_rendering = true,
|
|
disable_scale_notification = true,
|
|
focus_on_activate = true,
|
|
anr_missed_pings = 3,
|
|
on_focus_under_fullscreen = 1,
|
|
initial_workspace_tracking = 0,
|
|
-- Let a fresh shell re-acquire the session lock after the lock client
|
|
-- died, so omarchy-restart-shell can recover the LOCK failsafe.
|
|
allow_session_lock_restore = true,
|
|
},
|
|
|
|
cursor = {
|
|
hide_on_key_press = true,
|
|
warp_on_change_workspace = 1,
|
|
},
|
|
|
|
binds = {
|
|
hide_special_on_workspace_change = true,
|
|
},
|
|
})
|