Migration from the ThinkPad X1 Carbon (2880x1800) to the Framework Laptop 13 Pro, whose panel is CSOT MND508ZB1-1 = 2880x1920 3:2 @120Hz and exposes only 2880x1920@120000Hz / @60000Hz. shikane was requesting [email protected], a mode this panel cannot provide, so the variant could never be satisfied: it sat in NoVariantApplied for the whole session, with 61 historical "Discarded" events. Both profiles now use 2880x1920@120Hz (including the disabled eDP-1 block, whose mode string still has to resolve). Verified: profile now reaches VariantApplied. Scale is 1.75 -> 1645x1097 logical, ~147 effective DPI, chosen to reproduce the ~145 DPI of the old panel at 1.67. 1.75 is exactly representable as float32, which sway stores scale in; 1.6 and 1.67 are not. 2.0 would be the only integer (1:1, unresampled) scale but yields just 1440x960 logical. The .config/sway/config hunk also adds the matching `output $laptop` baseline so sway does not start at scale 2.0 and re-flow when shikane applies 1.75, and carries previously-uncommitted session wiring for the scripts below. shikane's config.toml was previously unversioned; it now lives in this repo and ~/.config/shikane is a symlink, matching the existing convention.
48 lines
1.9 KiB
TOML
48 lines
1.9 KiB
TOML
[[profile]]
|
|
name = "laptop"
|
|
exec = ["notify-send shikane \"Profile $SHIKANE_PROFILE_NAME has been applied\""]
|
|
[[profile.output]]
|
|
enable = true
|
|
search = "eDP-1"
|
|
# Panel on the Framework Laptop 13 Pro is CSOT MND508ZB1-1 = 2880x1920 (3:2)
|
|
# @120Hz. /sys/class/drm/card0-eDP-1/modes exposes ONLY 2880x1920@120000Hz
|
|
# and @60000Hz. The previous value here, [email protected], was the OLD
|
|
# ThinkPad's panel mode and does not exist on this panel, so shikane could
|
|
# never satisfy the variant -- the most likely root cause of the
|
|
# VariantInProgress deadlocks.
|
|
mode = "2880x1920@120Hz"
|
|
position = "0,0"
|
|
# Scale 1.75 chosen deliberately (2026-10-27).
|
|
# Panel: CSOT MND508ZB1-1, 2880x1920 on 13.5in = 256 PPI. What matters is
|
|
# effective DPI = PPI/scale; 1.75 -> 147 DPI, which matches the 145 DPI this
|
|
# laptop's owner previously used on the old ThinkPad (2880x1800 on 14in at
|
|
# 1.67). The exact equivalent would be 1.765; 1.75 is the nearest value that
|
|
# is exactly representable as float32 (sway stores scale as float).
|
|
# 2.0 is the only integer scale (1:1 pixel mapping, no resampling, sharpest)
|
|
# but gives just 1440x960 logical. 1.5 = max workspace at 171 DPI (small).
|
|
# History: 1.67/1.5/1.6 all tried; 1.6 was not float-exact (1.600000024).
|
|
scale = 1.75
|
|
transform = "normal"
|
|
adaptive_sync = false
|
|
|
|
[[profile]]
|
|
name = "External Display"
|
|
exec = ["notify-send shikane \"Profile $SHIKANE_PROFILE_NAME has been applied\""]
|
|
[[profile.output]]
|
|
enable = false
|
|
search = "eDP-1"
|
|
# Even a disabled block carries a mode string that shikane must resolve
|
|
# against the panel's mode list, so keep it valid.
|
|
mode = "2880x1920@120Hz"
|
|
position = "0,0"
|
|
scale = 1.75
|
|
transform = "normal"
|
|
adaptive_sync = false
|
|
|
|
[[profile.output]]
|
|
enable = true
|
|
search = "n/DP-(.*)"
|
|
scale = 1.3
|
|
transform = "normal"
|
|
adaptive_sync = false
|