[[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, 2880x1800@60.001Hz, 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