hyprlock.conf shipped with Tokyo Night Moon hardcoded in six places, so choosing light mode left the lock screen dark. Every other surface had been taught to follow the scheme this week -- kitty, GTK, the launcher, btop, tmux, neovim -- and this was the one left, which is unfortunate, because it is the screen a user sees most often and the worst possible place to find a theming bug: you discover it while locked out of the machine and cannot fix it from there. It is now generated from a template on every scheme change, the same shape kitty, GTK, tmux and btop already use, and seeded by link-dotfiles so the first lock of a fresh install is themed rather than falling back to hyprlock's bare grey default. hyprlock is launched fresh on each lock (`pidof hyprlock || hyprlock`), so it picks the file up with no restart. The dark output is byte-identical to the file it replaces, ignoring comments -- verified by diff -- so nothing changes for anyone already in dark mode. One detail worth recording: hyprlock takes rgba(r, g, b, a) in DECIMAL, not hex, so the template carries "R, G, B" triples where every other theme file in this repository uses hex. Two values are the exception, sitting inside Pango markup where hyprlock wants ##rrggbb. Getting either wrong is not a parse error -- hyprlock ignores the value and uses its own default, silently. Which is why this has a contract. It generates both schemes into a fixture, never the live config, and checks that no placeholder survives substitution, that every colour is a well-formed decimal triple, that the Pango values are well-formed hex, that a light lock screen is actually light, and that the two schemes differ at all. Verified it catches a hardcoded colour left in the template and a light mode built from the dark palette, which is the original bug exactly. Claude-Session: https://claude.ai/code/session_01BRvzt4H8XXLPVH5MyYdk9L
124 lines
4.1 KiB
Plaintext
124 lines
4.1 KiB
Plaintext
# ─────────────────────────────────────────────────────────────────────────────
|
|
# hyprlock — lock screen.
|
|
#
|
|
# GENERATED FILE. Edit hyprlock.conf.template and re-run
|
|
# quickshell/scripts/panama-theme-apps; editing this copy is overwritten on the
|
|
# next colour scheme change.
|
|
#
|
|
# The colours here follow the desktop's light/dark setting. They used to be
|
|
# hardcoded Tokyo Night Moon, which meant the one screen you see most often
|
|
# stayed dark when everything else went light.
|
|
#
|
|
# hyprlock takes rgba(r, g, b, a) in DECIMAL rather than hex, which is why the
|
|
# template carries "R, G, B" triples where the rest of Panama uses hex. The two
|
|
# Pango markup values are the exception and want ##rrggbb.
|
|
#
|
|
# hyprlang syntax, not Lua — hyprlock is a separate project from Hyprland.
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
general {
|
|
hide_cursor = true
|
|
|
|
# 2 = auto. Matters at the 1.5x fractional scale this display runs.
|
|
fractional_scaling = 2
|
|
|
|
# 0 = GPU-accelerated screencopy. 1 is a CPU fallback and is very slow at
|
|
# 4500x3000.
|
|
screencopy_mode = 0
|
|
|
|
fail_timeout = 2000
|
|
}
|
|
|
|
auth {
|
|
pam:enabled = true
|
|
pam:module = hyprlock
|
|
}
|
|
|
|
# ── Background ──────────────────────────────────────────────────────────────
|
|
# `path = screenshot` grabs the desktop at lock time and blurs it in place,
|
|
# which is what GNOME does.
|
|
#
|
|
# Caveat: this uses screencopy. If the desktop is ever switched to full-time
|
|
# HDR (see hypr/overrides.lua), this background may come back black — that is
|
|
# the same upstream screencopy bug, not a hyprlock misconfiguration.
|
|
background {
|
|
monitor =
|
|
path = screenshot
|
|
|
|
blur_passes = 3
|
|
blur_size = 8
|
|
noise = 0.0117
|
|
contrast = 0.9
|
|
brightness = 0.8
|
|
vibrancy = 0.17
|
|
vibrancy_darkness = 0.05
|
|
|
|
# Shown if the screenshot is unavailable.
|
|
color = rgba(@BG@, 1.0)
|
|
|
|
zindex = -1
|
|
}
|
|
|
|
# ── Clock ───────────────────────────────────────────────────────────────────
|
|
label {
|
|
monitor =
|
|
text = cmd[update:1000] date +"%-I:%M"
|
|
color = rgba(@FG@, 1.0)
|
|
font_size = 120
|
|
font_family = Adwaita Sans Light
|
|
position = 0, 260
|
|
halign = center
|
|
valign = center
|
|
}
|
|
|
|
label {
|
|
monitor =
|
|
text = cmd[update:60000] date +"%A, %B %-d"
|
|
color = rgba(@MUTED@, 1.0)
|
|
font_size = 24
|
|
font_family = Adwaita Sans
|
|
position = 0, 160
|
|
halign = center
|
|
valign = center
|
|
}
|
|
|
|
# ── Password field ──────────────────────────────────────────────────────────
|
|
input-field {
|
|
monitor =
|
|
size = 340, 52
|
|
position = 0, -40
|
|
halign = center
|
|
valign = center
|
|
|
|
outline_thickness = 2
|
|
rounding = 26
|
|
|
|
outer_color = rgba(@ACCENT@, 0.9)
|
|
inner_color = rgba(@FIELD@, 0.85)
|
|
font_color = rgba(@FG@, 1.0)
|
|
check_color = rgba(@ACCENT@, 1.0)
|
|
fail_color = rgba(@ERROR@, 1.0)
|
|
|
|
dots_size = 0.25
|
|
dots_spacing = 0.3
|
|
dots_center = true
|
|
|
|
placeholder_text = <span foreground="##@MUTED_HEX@"><i>Password</i></span>
|
|
fail_text = <span foreground="##@ERROR_HEX@"><i>$FAIL ($ATTEMPTS)</i></span>
|
|
|
|
fade_on_empty = false
|
|
hide_input = false
|
|
}
|
|
|
|
# ── User ────────────────────────────────────────────────────────────────────
|
|
label {
|
|
monitor =
|
|
text = $USER
|
|
color = rgba(@FG@, 0.9)
|
|
font_size = 16
|
|
font_family = Adwaita Sans
|
|
position = 0, -110
|
|
halign = center
|
|
valign = center
|
|
}
|