Skip to content

Releases: waxdred/skyland

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 25 Oct 23:47

Glyph style

  • [decoration] ui-style = 'glyph' (or Glyph in the settings window): a Nothing OS like look
    for skyland's panels. Opaque panels in the theme's panel color on a faint dot grid, a thin
    line around; numbers and titles in a dot matrix font (Doto: overview workspaces, switcher,
    mode HUD, startup HUD, settings title), labels in Space Mono caps, text in Space Grotesk;
    the one live thing (shown workspace, selection, startup runner) in the theme's highlight.
  • The wallpaper picker (alt-w) too: glyph panel, Space Mono names, Doto counts, the selection
    outlined with the red dot.
  • Themes glyph-dark and glyph-light: black, white dots, one red (#D71921), palette after
    glyph-rice. The focused window border goes
    white to red. theme.env gets HIGHLIGHT (the red) for the bar.
  • Fonts bundled in Skyland.app (resources/fonts, SIL OFL) and registered for skyland only:
    nothing installed. The media widget keeps the metal look for now.

Monitors settings

  • A Monitors tab in the settings window: the screens laid out as in Displays, each workspace a
    chip to drag (or pick from its menu) onto a screen; written to
    [workspace-to-monitor-force-assignment] and applied at once.

Config file: ~/.config/skyland/skyland.toml (or ~/.skyland.toml), no longer
~/.config/aerospace/aerospace.toml / ~/.aerospace.toml. skyland-env (run at login)
copies an existing ~/.config/aerospace/aerospace.toml there once; the old file stays for
AeroSpace. A clone's ~/.config/skyland may now be a real folder: the profile entries it
misses (themes...) are linked into it.

CLI: skyland-cli (.build/skyland-cli, was .build/aerospace), called through the
skyland command as before; its messages say skyland. The release keeps a copy at the old
path for sketchybar items of 0.5 until skyland bar rebuilds them. skyland-keys reads the
new config path.

Wallpaper colors

  • [wallpaper] dynamic-colors = false still generates the wallpaper colors on a wallpaper
    change, without applying them: skyland-cyberdeck theme wallpaper keeps using them.

Install: brew install waxdred/tap/skyland && skyland install, or download the zip and run bin/skyland-install.

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 20 Oct 08:04

No window lost

  • Dock guard: the payload remembers the windows it made see-through, moved or darker, and
    shows them again (alpha 1, real frame, no dim) when Skyland ends, a crash or kill -9
    included. A Skyland gone mid-fade left windows invisible until it ran again.
  • A floating window found off screen is centered on its monitor: an app quit while its
    window sat in a hidden workspace's corner reopened there, 1 px from the edge.
  • tools/e2e-visibility.swift: switches, moves, closes and opens windows at random on two
    spare workspaces and fails if one ends up off screen or see-through.
  • docs/compatibility.md: what is checked on which macOS (27.0.1, 15.6.1), what an update
    can break, how to check a version.

Faster

  • alt-w opens at once: the wallpaper picker stays running, hidden (22 MB), and a key shows
    or hides it (about 85 ms, 180 to 255 ms before); it reads the folder, the theme and the
    style again at each opening.
  • The menu bar icon is drawn on the CPU: each workspace switch allocated about 200 MB of
    graphics memory for a second (25 MB now).
  • Workspace memory written 1 s after the last change, not on every refresh; the apps
    showing a popup found once per decoration pass (it scanned every window for each one);
    skylandbar's lock tested without taking it (a starting bar could exit as already running).

Switcher

  • Opened with no modifier held (a script, the CLI): skyland comes forward so its keys work,
    and it closes on a workspace change, a closed window or when another window takes the
    keyboard.
  • Thumbnails of windows on hidden workspaces: their last picture, taken while shown.

Focus

  • Focus follows the mouse only if the focus has not moved since the mouse did.
  • A Dock click on the app already in front goes to its window, on whatever workspace.
  • Sheets and dialogs stay opaque, and the windows of an app showing one (a save panel took
    no clicks); System Settings and security windows stay opaque and undimmed.
  • Popups and alerts at the normal level stay over the windows.

Layout

  • Profile: cmd-shift-h/j/k/l swap with the neighbour (Hyprland movewindow).
  • master off: the windows laid out again as dwindle, in the same order.
  • fullscreen --no-outer-gaps stays below a bar taller than the menu bar.

Mouse

  • alt + drag a tile onto another tile's edge (its outer quarter): it goes beside it on that
    side, a preview of the place in the theme accent while dragging; the middle still swaps.

Startup

  • A "starting" HUD (skyland's icon, the windows found, a running line) while skyland lays
    the windows out, gone with a short scale and fade; [decoration] startup-hud = false turns
    it off.

Liquid Glass

  • glass panels never use the metal engine (its screen capture blacked protected videos):
    Apple's glass on macOS 26 and later, the backdrop blur before.
  • Protected videos (Netflix, Prime Video) play again: the metal glass takes snapshots of
    what is behind instead of running a capture stream (macOS hides protected content while
    one runs, and the media widget's never stopped). A new snapshot when the front app
    changes, when the panel moves, and every 30 s.
  • The media widget's audio bars and wave read the system's audio from a Core Audio tap
    (macOS 14.2), not a ScreenCaptureKit stream: protected videos went black as soon as they
    played with the widget open. macOS may ask once to let Skyland record the system's audio.
  • [decoration] glass-blur, also in the settings window.

Fixes

  • An alpha track over, the window's opacity is sent again (a window could stay faded).
  • Startup: windows put back to their real frame (a transform left by an animation); quit:
    popups (bars, panels) are not centered with the windows.
  • The animated border is placed again after an unlock, a wake or a screen change.
  • The media widget's audio tap starts off the main thread (it hung with a spinning cursor).

Install: brew install waxdred/tap/skyland && skyland install, or download the zip and run bin/skyland-install.

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 18 Oct 19:17

Liquid Glass

  • skylandbar's glass in skyland's panels (ui-style = 'glass'): lightly tinted glass, the
    selection a lens of glass flowing on springs and leaving a drop behind, a lighter drop
    under the mouse. The window switcher, the overview and the wallpaper / theme pickers use
    it (GlassSurface); big blocks (cards, thumbnails) take a lens that slides in one piece,
    with rounder corners.
  • The refraction stays within a shape's corner radius: it broke along the diagonal of the
    corners.
  • No flash when a panel opens: Core Animation's glass stands in until the first capture,
    which used to show the panel clear, then darker for a few frames.
  • Settings window in glass: the theme tint in the glass, under its rim, the save bar lightly
    tinted.
  • Pickers: room around the thumbnails, whole ones only (none cut at the edge).
  • Fixes: glass views added at 0 x 0 never grew (the media widget's glass was not drawn), the
    capture did not restart after a drag, and the Metal texture cache kept every frame's
    surface.

Media widget

  • Its own drag from the mouse position: it no longer lags behind or keeps moving after the
    button is released, and the audio wave keeps playing while it moves.
  • A defined glass edge (one rim, no hairline over it), radius 26.

skylandbar

  • subscribe event workspace-swipe: while a trackpad swipe moves, workspace,
    targetWorkspace and progress. skylandbar's workspace lens follows the fingers.

Process name

  • The process is named Skyland (it was AeroSpaceApp) in Activity Monitor, btop and
    pkill -x Skyland; the app's executable is Skyland.app/Contents/MacOS/Skyland.

Fixes

  • Quitting never waits for good on a window's frame: a window whose frame could not be read,
    or an app that did not answer, left skyland stuck (no CLI, no keys, kill -9 only).

Install: brew install waxdred/tap/skyland && skyland install, or download the zip and run bin/skyland-install.

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 18 Oct 08:18

Overview

  • Typing searches the windows by app or title (/ for the letters the overview binds):
    the others are dimmed, on the cards and behind; enter focuses the selection.
  • Keyboard selection of windows (j / k, up / down, tab), enter focuses it, x or a
    middle click closes a window, the overview stays open.
  • A + card: a window dropped there goes to the first empty workspace of the screen.
  • alt + drag a card onto another: the two workspaces swap their windows, layout and
    floating windows included.
  • Pinned windows show on every card of their screen.
  • overview next|prev|confirm|close|search command for [mode.overview.binding].

Login

  • skyland starts skylandbar when it is installed (~/.local/bin or Homebrew) and not
    running yet, at login too: a new session came up without a bar (the login LaunchAgent
    only starts skyland, and launchd kills what a LaunchAgent leaves running). skyland
    starts either way.

Safety

  • skyland quits at once when its Accessibility permission is taken back while it runs:
    its active event taps (alt + mouse, arrow keys) froze every key and click until a
    forced reboot.

Install: brew install waxdred/tap/skyland && skyland install, or download the zip and run bin/skyland-install.

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 17 Oct 21:16

Animations

  • Hyprland's animation system: [animations] preset = 'hyprland' | 'slide' | 'gnome' | 'vertical' | 'cyberspace' (or several stacked, ['cyberspace', 'gnome']: the later
    one replaces the nodes it sets), and bezier / animation lines pasted from a hyprland.conf
    (tree with inheritance, named curves, slide, slidevert, popin, gnomed, fade,
    slidefade, and skyland's cyberspace that rezzes windows in through a white-hot scan
    line). Window open, close, move, workspace and scratchpad switches play as tracks in
    the Dock payload; the older keys keep skyland's look. Preset choice in the settings
    window. Needs the payload (skyland sa build, killall Dock; skyland sa load).

Liquid Glass

  • [decoration] ui-style = 'metal' | 'glass' (also in the settings window): skyland's
    panels (overview, window switcher, mode and on / off HUDs, settings window, wallpaper
    picker, media widget) in Liquid Glass, the engine of skylandbar: Apple's glass on macOS
    26, a refraction shader with Screen Recording, Core Animation's backdrop otherwise.
    metal keeps the theme tinted blur.

Bar height

  • bar-height <px>|default command: a bar (SkylandBar, sketchybar) sends its own height
    over the socket and the windows are laid out below it, over the config's bar-height
    (default goes back to it, no argument prints the height in use). The hypr profile's
    sketchybar sends it at every load.

Border

  • The animated border hides while a window is dragged or resized with the mouse (title
    bar, edges, or the mouse modifier) instead of lagging behind it, and comes back at
    mouse up.

Binding modes

  • mode-indicator = 'hud' | 'bar' | 'off': a mode other than main (Hyprland submap)
    shows its name and keys in a HUD, or in the skyland.mode sketchybar item with a
    skyland_mode event (MODE=<name>). Example resize mode on alt-shift-r in the hypr
    profile.

Window switcher

  • switcher [next|prev] [--workspace focused|all] (alt-backtick): windows of every
    workspace, most recently focused first, with live thumbnails (app icons without Screen
    Recording). Held like cmd-tab, releasing the modifier focuses the selection;
    switcher alone stays open and filters as you type. Thumbnails freed on close.

Window rules

  • window-rule command, Hyprland's windowrule v2 for on-window-detected: size /
    move (points or % of the screen), center, opacity <active> [<inactive>],
    rounding, noborder, nodim, noanim per window. Editable in the Rules tab
    ("More").

Shadows

  • [decoration] shadow = 'on' | 'off' | 'floating': macOS window shadows off, or only on
    floating windows (Hyprland decoration:shadow); each window gets its own shadow back
    when skyland is turned off or quits. Needs the payload (skyland sa build, then
    killall Dock; skyland sa load).

Smart gaps, workspace rules

  • smart-gaps / smart-border: a workspace's single tiled window fills the screen
    below the bar, without border nor rounded corners (Hyprland w[tv1] rules, formerly
    no_gaps_when_only); switches in the settings window.
  • [workspace-rules.<name>]: gaps.outer, gaps.inner and layout = 'master' | 'dwindle'
    per workspace.

Pin

  • New pin [on|off|toggle] command (Hyprland pin, alt-ctrl-p): a floating window
    stays on screen at the same place on every workspace of its monitor (picture in
    picture, a call, a timer), remembered across restarts, %{window-is-pinned}.

Trackpad

  • [gestures] workspace-swipe: a 3 (or 4) finger swipe switches the screen under the
    cursor to the previous / next workspace (Hyprland workspace_swipe), with distance,
    threshold, direction and invert options, a Trackpad section in the settings window,
    and a skyland doctor check for the macOS gesture using as many fingers.
  • The windows follow the fingers: the current workspace's tiles slide with the swipe and
    the next one's come in from the edge; let go past the threshold and the switch goes
    on from there, before it they spring back (rubber band past the last workspace).

Scratchpads

  • New scratchpad toggle [name] [--app <bundle id>] | move [name] command: the
    scratchpad windows slide in from the top, floating and centered, and slide back up;
    done inside skyland (a toggle took 6 to 10 CLI processes, an app start polled the CLI
    up to 40 times). skyland scratch … still works. Your config: bind
    alt-s = 'scratchpad toggle' instead of exec-and-forget skyland scratch toggle
    (same for move and named ones) to skip the process.

Performance

  • Skyland.app and the aerospace CLI are built in release mode (they shipped as
    debug builds): half the CPU for a workspace switch, faster CLI queries (sketchybar,
    scripts). The CLI moves to .build/aerospace; bin/skyland-build --debug for
    development.
  • Input: alt + drag no longer runs a refresh per mouse event (one at the drop),
    focus follows mouse does nothing while the cursor stays over the focused window,
    and the key / mouse taps run on their own thread, so typing and clicking in other
    apps never wait for skyland.
  • sketchybar: skyland pushes the workspaces and the window title itself, with one
    sketchybar call when they change, instead of a script with ~20 processes and 4
    CLI calls on up to 3 events per change. CLI queries (list-*, config, echo)
    no longer run a refresh session. Your config: drop
    exec-and-forget sketchybar --trigger skyland_update from on-focus-changed and
    the exec-on-workspace-change line (they still work, but cost for nothing).
  • Animations: the Dock payload steps every running animation (slides, fades, dim)
    in one loop synced to the display, and applies each frame of all windows in one
    SkyLight transaction: the windows of a workspace switch move together, without
    judder, and one thread instead of one per window. Several payload commands go in
    one connection. Needs skyland sa build then killall Dock; skyland sa load.
  • Idle: skyland no longer polls the window list all day (the menu bar check runs
    only while the cursor is near the top of a screen, the system prompt check on app
    activation and once a second), reads the theme once per change, and decorates
    once per command: about 0.2% CPU at rest instead of 0.7%.
  • Media widget: no work while nothing plays (the 30 fps timer stops once the wave
    is flat, and while the widget is hidden), the now playing check backs off to 15 s
    when paused, the artwork is decoded once per track, and the audio analysis no
    longer wakes the main thread ~100 times a second.
  • Media widget audioware: the wave is drawn with Metal on the GPU (blur too) instead
    of Core Graphics bitmaps: about 9% CPU while playing instead of 21%, the same look.

Install: brew install waxdred/tap/skyland && skyland install, or download the zip and run bin/skyland-install.

v0.1.9

Choose a tag to compare

@github-actions github-actions released this 16 Oct 20:13

Performance

  • Media widget audioware style: about 26% CPU instead of 38% while playing (each
    plane of the wave drawn into its own bitmap, the blurred planes repaint at 15 fps,
    the wave shape is capped at 260 points).

Install: brew install waxdred/tap/skyland && skyland install, or download the zip and run bin/skyland-install.

v0.1.8

Choose a tag to compare

@github-actions github-actions released this 16 Oct 17:49

Media widget

  • New audioware style ([media] style = 'audioware'): a light wave after the
    Audioware cover art, driven by the audio (flat when silent, the center line is the
    progress), in the theme's colors, live.
  • Fixes: play / pause and a new track or video are always picked up (the now playing
    stream could go silent), a non-square artwork (video thumbnail) fills its square
    instead of showing grey bands, leftover background helpers are cleaned up.

cyberdeck

  • alt-shift-d opens the skyland-cyberdeck
    HUD (clock, calendar, connections, system, herdr agents), needs skyland-cyberdeck 0.2.0.

Install: brew install waxdred/tap/skyland && skyland install, or download the zip and run bin/skyland-install.

v0.1.7

Choose a tag to compare

@github-actions github-actions released this 16 Oct 14:18

Performance

  • Memory: skyland uses about 42 MB instead of 137 MB with the rotating border on
    (its gradient is computed at a quarter of the resolution, the stroke stays sharp), and
    the workspace overview frees its thumbnails and full-screen panel when it closes
    instead of keeping them all day (stable around 76 MB after using it).

Install: brew install waxdred/tap/skyland && skyland install, or download the zip and run bin/skyland-install.

v0.1.6

Choose a tag to compare

@github-actions github-actions released this 16 Oct 12:25

Fixes

  • alt + mouse works again on the focused window with the rotating border on (the
    border window was taken for the window under the cursor).

Docs

  • New README demo: rotating border, dim inactive, alt + mouse.

Install: brew install waxdred/tap/skyland && skyland install, or download the zip and run bin/skyland-install.

v0.1.5

Choose a tag to compare

@github-actions github-actions released this 16 Oct 09:48

Hyprland

  • Dim inactive windows ([decoration] dim-inactive, percent, also in the settings
    window): unfocused windows are darkened, fading with focus. Needs the Dock payload
    rebuilt (skyland sa build && skyland sa load).
  • Rotating border ([decoration] border-rotate-ms, Hyprland borderangle loop): the
    focused window border gradient turns. skyland draws it itself, rotated by Core
    Animation (no measurable CPU); hidden while windows animate and in the overview.

Install

  • skyland sa load offers to write the sudoers rule (payload injected at login without
    a password) and renews it after each rebuild of the payload.

Docs

  • CONTRIBUTING.md for the fork.

Known issue: with border-rotate-ms on, alt + mouse does nothing on the focused window. Fixed in v0.1.6.

Install: brew install waxdred/tap/skyland && skyland install, or download the zip and run bin/skyland-install.