Skip to content
GitHub

The impasto command

impasto drives the running shell from a terminal: timers, notes, tasks, panels, music, virtual machines, the window layout, palettes, wallpapers, the lock and more. It is installed in ~/.local/bin, which the shell’s .zshrc puts on the path.

Terminal window
impasto <command> [arguments] [--flags]

Every answer is one line of JSON, {"ok": true, ...} or {"error": "..."}, and an error exits 1, so a script or an assistant can read what happened and go on. In a terminal the same answer is indented to read. An error names the values that would have done.

Terminal window
$ impasto timer start 25m Pomodoro
$ impasto layout scrolling
$ impasto status
{"ok": true, "timer": null, "media": {"title": "…", "artist": "…", "playing": true}, "notes": 1, "tasks": {"todo": 0, "doing": 0, "done": 0}, "machines": [], "palette": "adaptive", "wallpaper": "…", "layout": "dwindle", "game": false, "focus": false, "nightLight": false, "volume": 90, "muted": false, "brightness": 21}

impasto help lists every command, and impasto help <command> one of them.

CommandWhat it does
statusEverything at once: the timer, the music, notes, tasks, machines and the look
timer start <duration> [label]Starts a countdown: 25m, 1h30m, 90s, 10:00
timer pause, timer resume, timer cancelPauses it, carries on, stops it
timerWhat is left
note add <text> [--title …] [--tint …]A new note; --tint is yellow, pink, blue, green, orange or purple
note listEvery note that is not archived, newest first
note get, append, archive, remove <key>One note: read it, add a line, put it away, delete it
task add <text> [--due …] [--state …] [--notes …]A new task; --due takes today, tomorrow, fri, 12 oct, +3 or 2026-10-12, --state todo, doing or done
task list [--state …]Every task, or those in one state
task done, move, due, remove <key>Marks it done, moves it to a lane, sets or clears its date, deletes it
open <panel>, close, panelsOpens a panel of the island, closes the island, lists the panels open takes
vm listThe virtual machines, and which run
vm start, open, pause, resume, stop, kill <name>Boots one without a window, opens its window, freezes it, carries on, shuts it down as its power button does, ends it at once
media play, pause, toggle, next, prevThe player; media alone is what is playing
game [on|off|toggle]Game mode
layout [dwindle|master|scrolling|next]How windows are tiled
focus [on|off|toggle]Do not disturb
nightlight [on|off|toggle]The night light
bar, widgetsHide or show the bar, or the desktop widgets
volume set <percent>, volume mute [on|off|toggle], volumeThe output’s volume
brightness set <percent>, brightnessThe screen’s brightness
theme list, theme set <id>The palettes, and which is on; adaptive follows the wallpaper
wallpaper set <path>, list, randomChanges the wallpaper, and the palette with it
say <text> [--icon …]A message on the island for a moment
lockLocks the screen
reloadReloads the shell
capture screenA shot of the focused screen to a file; prints its path
capture textThe text on the focused screen, read with tesseract
capture region, capture windowOpens the capture surface to pick one by hand
watch [--interval s]A line of JSON for each change, below
versionimpasto’s version, as ./setup last installed it

Notes and tasks are named by key, which their list gives:

Terminal window
impasto task list --state todo
impasto task done task-muvd69it

impasto watch prints a line for each change until it is stopped. The first line is the status itself; after it, one event a line, each with the time it was seen:

EventWhen
timer.started, timer.paused, timer.resumedA countdown changes
timer.finished, timer.cancelledIt runs out, or is stopped
media.track, media.playing, media.paused, media.stoppedThe player changes
machine.started, machine.stoppedA virtual machine boots or goes down
shell.goneThe shell stopped answering

It reads the status once a second, or every --interval seconds, so an event is up to that late.

zsh completes it: the commands, then the keys of notes and tasks, the palettes and the machines, asked of the command itself, so the completion is never behind it. wallpaper set completes file names.

What the command does not do is listed under Limitations.