-
Notifications
You must be signed in to change notification settings - Fork 57
Configuring stackline
There are 3 configuration themes:
Appearance
Customize indicator sizing, coloring, positioning, roundness, animation durations, form factor, etc
Features
Enable/disable fuzzy frame detection, click-to-focus, or the hacky workaround for a troublesome Hammerspoon bug. The ability to enable/disable features will be especially useful for upcoming features such as displaying window titles during switching.
The main benefit is that you won't have to put up with bugs in a feature that you don't even use ;-)
Paths
An easier way to specify paths to binaries & scripts without mucking around in the Stackline source.
Let's assume that you think the icon indicators use up too much valuable screen real estate. This is an easy issue to fix!
Create a local variable in your init.lua to hold your customizations. I'll call mine myStackline, but you may name yours whatever you wish.
stackline = require "stackline.stackline.stackline"
local myStackline = {
appearance = {
showIcons = false,
},
features = {
clickToFocus = false,
fzyFrameDetect = {
enabled = true,
fuzzFactor = 30
},
},
}
stackline:init(myStackline)Values that you set in this table will override Stackline's default config. Note that this table must adhere to the config schema (which can be found in stackline/configmanager.lua). If invalid config options are passed, Stackline a macOS notification will let you know, and the details will be printed to the Hammerspoon console:
2020-10-10 12:19:14: 12:19:14 ERROR:sline.conf: Invalid stackline config:
{
appearance = {
myCoolSetting = "is not allowed."
}
}All config values can be edited while stackline is running (this should seem familiar from yabai).
Values can be set using the hs cli tool:
hs -c "stackline.config:set('appearance.radius', 3)"… or the ipc port:
echo ":appearance.radius:3` | hs -m stackline-configAll config fields support get(key), set(key, val), and getOrSet(key, [val]).
In addition, boolean fields support toggle()
# Toggle with the hs cli
hs -c "stackline.config:toggle('appearance.showIcons')"
# … or the ipc port
echo ":toggle_appearance.showIcons:3` | hs -m stackline-config
# Toggling via ipc port requires prepending the settings path with 'toggle_'
# … I realize this is a bit oddYou can get and set nested config fields via a dot-separated path, like this: features.fzyFrameDetection.enabled
Config fields are typed and validated on initialization and when live-set.
stackline will notify you If you can't remember the exact path to a config variable:

c = {}
c.paths = {}
c.appearance = {}
c.features = {}
c.advanced = {}
-- Paths
c.paths.getStackIdxs = hs.configdir .. '/stackline/bin/yabai-get-stack-idx'
c.paths.jq = '/usr/local/bin/jq'
c.paths.yabai = '/usr/local/bin/yabai'
-- Appearance
c.appearance.color = { white = 0.90 }
c.appearance.alpha = 1
c.appearance.dimmer = 2.5 -- larger numbers increase contrast b/n focused & unfocused state
c.appearance.iconDimmer = 1.1 -- Higher numbers dim inactive icons *less* than the non-icon indicators
c.appearance.showIcons = true -- Window indicator style ('lozenge'-shaped when false)
c.appearance.size = 32 -- Size of window indicators (height when icons off)
c.appearance.radius = 3 -- Indicator roundness. Higher numbers → *less* roundness… I'm sorry
c.appearance.iconPadding = 4 -- Space between icon & indicator edge. Higher numbers → smaller, more inset icons
c.appearance.pillThinness = 6 -- Aspect ratio of pill-style icons (width = size / pillThinness)
c.appearance.vertSpacing = 1.2 -- Amount of vertical space between indicators
c.appearance.offset = {} -- Offset controls position of stack indicators relative to the window
c.appearance.offset.y = 2 -- Distance from top of the window to render indicators
c.appearance.offset.x = 4 -- Distance away from the edge of the window to render indicators
c.appearance.shouldFade = true -- Enable/disable fade animations
c.appearance.fadeDuration = 0.2 -- Duration of fade animations (seconds)
-- Features
c.features.clickToFocus = true -- Click indicator to focus window. Mouse clicks are tracked when enabled
c.features.hsBugWorkaround = true -- Workaround for https://github.com/Hammerspoon/hammerspoon/issues/2400
c.features.fzyFrameDetect = {} -- Round window frame dimensions by fuzzFactor before identifying stacked windows
c.features.fzyFrameDetect.enabled = true -- Enable/disable fuzzy frame detection
c.features.fzyFrameDetect.fuzzFactor = 30 -- Window frame dimensions will be rounded to nearest fuzzFactor
c.features.winTitles = 'not_implemented' -- Valid options: false, true, 'when_switching', 'not_implemented'
c.features.dynamicLuminosity = 'not_implemented' -- Valid options: false, true, 'not_implemented'
c.advanced.maxRefreshRate = 0.3 -- How aggressively to refresh Stackline. Higher = slower response time + less battery drain
return c