aboutsummaryrefslogtreecommitdiff
path: root/working/hyprland-lua-port/velox-local.lua
diff options
context:
space:
mode:
Diffstat (limited to 'working/hyprland-lua-port/velox-local.lua')
-rw-r--r--working/hyprland-lua-port/velox-local.lua64
1 files changed, 64 insertions, 0 deletions
diff --git a/working/hyprland-lua-port/velox-local.lua b/working/hyprland-lua-port/velox-local.lua
new file mode 100644
index 0000000..1da7359
--- /dev/null
+++ b/working/hyprland-lua-port/velox-local.lua
@@ -0,0 +1,64 @@
+-- velox — Framework 13, HiDPI 2256x1504. Sourced via conf.d/*.lua glob;
+-- values here override hyprland.lua (last wins).
+
+hl.monitor({
+ output = "eDP-1",
+ mode = "preferred",
+ position = "auto",
+ scale = "1.566667",
+})
+
+-- Scaling on this panel comes from the compositor alone.
+--
+-- There used to be `env = GDK_SCALE,1.5` and `env = QT_SCALE_FACTOR,1.5` here,
+-- to compensate for `xwayland:force_zero_scaling = true` in hyprland.lua, which
+-- makes XWayland clients render unscaled and therefore tiny. That worked for
+-- XWayland and broke everything else, because env vars reach every app, not just
+-- the XWayland ones. Qt 6 and GTK on Wayland already take their scale from the
+-- compositor, so the factor multiplied the monitor scale above: Qt saw a 960x640
+-- logical screen instead of 1440x960 and drew half again too large. Measured
+-- with QScreen.geometry on 2026-08-19; 2256/1.566667 is exactly 1440, which is
+-- what Qt reports once nothing overrides it.
+--
+-- Turning force_zero_scaling off for this host is the other half. XWayland then
+-- scales through the compositor, so those apps come out the right size and a
+-- little soft rather than sharp and tiny. That cost lands only on XWayland,
+-- which is the thing I avoid anyway, and correctly-sized beats crisp for the
+-- occasional Zoom window the browser spawns.
+--
+-- ratio needs neither: its monitor runs at scale 1, so nothing multiplies and
+-- XWayland has nothing to compensate for.
+hl.config({
+ xwayland = {
+ force_zero_scaling = false,
+ },
+})
+
+-- calibre renders oversized at the 1.57 compositor scale. Pin its own DPI so its
+-- UI is comfortable without touching the desktop or other apps (validated at 96,
+-- 2026-06-27). CALIBRE_OVERRIDE_DPI is calibre-only, so a session-wide env is safe.
+hl.env("CALIBRE_OVERRIDE_DPI", "96")
+-- No XCURSOR_SIZE here: Hyprland scales the native cursor by the monitor scale
+-- already, so the shared default (24) renders correctly on HiDPI. Pre-scaling it
+-- (the old 36 = 24 x 1.5) double-applied on top of the compositor's scale.
+
+-- org-capture popup: match the terminal scratchpad (75% x 70% of the 1437x958
+-- logical desktop = 1078 x 671 px). Native window rules ignore percentages, so
+-- it's pinned in pixels here rather than in the shared hyprland.lua.
+hl.window_rule({
+ match = {
+ title = "^(org-capture)$",
+ },
+ size = "1078 671",
+})
+
+-- Growth cap (Craig, 2026-07-14): the frame must never outgrow its pinned
+-- size even when capture content pushes it. 1078 px is ~98 Emacs columns,
+-- already under the 120-column cap ratio uses.
+hl.window_rule({
+ match = {
+ title = "^(org-capture)$",
+ },
+ max_size = "1078 671",
+})
+