Skip to content
GitHub

The terminal

Four programs, one object on screen. kitty is the window, zsh runs in it, starship is the prompt, and fastfetch greets you on fa. All four follow the palette, and so does most of what you run inside them: every open terminal repaints the moment the wallpaper changes.

SUPER Return opens one. The window is translucent over the blurred wallpaper, and its background is the accent at 22 %, so it is tinted by the wallpaper and dark under every palette, the light one included.

  • Every palette change repaints every open kitty window. It sets red, green, yellow and blue with their bright halves, the two text greys, and the accent on cyan, the selection and the active tab. Magenta and bright black have no source in a palette and keep kitty’s own values. The cursor stays white.
  • Cyan carries the accent, so whatever a program draws in cyan follows the wallpaper: ls paints symbolic links in it, and the prompt its path.
  • The font is the shell’s monospace setting, JetBrainsMono Nerd Font Mono unless you change it under Settings → Appearance → Type → Monospace. kitty follows the change. It has to be a Nerd Font, or the icons in the prompt and on the bar come out as empty boxes.
  • CTRL SHIFT H opens the scrollback in less.

zsh with oh-my-zsh, which ./setup install clones along with two plugins: zsh-autosuggestions and zsh-syntax-highlighting. Every tool .zshrc reaches for is checked for first, so a missing one prints nothing.

TypeWhat it does
yyazi, leaving the shell in the folder yazi was closed in
fathe greeting: fastfetch beside the scene chosen in the settings
fa koithe greeting with a given scene
z, zizoxide’s jump to a folder you have been in, when zoxide is installed
CTRL Rfzf through the history
CTRL Tfzf for a file, pasted into the line
ALT Cfzf for a folder to change into
matrix, bonsai, clockunimatrix, cbonsai and tty-clock, in the accent
clsclear
  • EDITOR and VISUAL are neovim, or vim when there is no neovim.
  • fnm switches the Node version as you change directory, when it is installed.
  • The history keeps one copy of each command, the most recent.
  • ~/.local/bin comes first in the PATH.
  • ~/.zshrc.local is read last and is not in the repository. Put your own lines there, and .zshrc stays a copy setup can keep up to date.

starship, laid out like the bar: what is always there on the left, what is happening now on the right. On the left, your user and host, the path in the accent, and a that turns red when the last command failed. On the right, only when there is something to say: the failed command’s exit code, how long the last command took if it took more than two seconds, the git branch and its state, and the Node or Python version in a project that uses one. It is text only, in the terminal’s own colours, so it follows the palette with nothing generated for it.

fa runs fastfetch beside an animated pixel-art scene, drawn in the terminal’s own colours. Choose the scene under Settings → Appearance → Theme → Greeting, where each tile plays it.

SceneName for fa
Lava lamplava
Critterscritters
Koikoi
Invadersinvaders
Randoma different scene every time fa runs
  • fa invaders plays that scene whatever the setting says.
  • All four are redrawn on every palette change, which takes a few seconds in the background, so just after a change fa can still show the old colours.
  • The scenes play in kitty only. They are drawn for a 9 × 20 pixel cell, and at another font size kitty rescales them and the pixel edges go soft.
  • Random is fa’s own: fastfetch run by its name shows a single scene.
  • The five dots on the last line are the paint the scenes use: accent, green, yellow, red, blue.
  • The scenes need ImageMagick, which ./setup packages installs. Until the shell has run once, they are painted in Catppuccin Mocha.
ProgramWhat followsWhen
btopevery colour, on the terminal’s own background; a bar that fills runs green to red, free memory the other waythe next btop started
cavaa gradient climbing from the accenta running cava repaints
yazithe interface, and the syntax colours in the preview panethe next yazi started
neovimthe whole colourschemeevery running neovim repaints
unimatrix (matrix), cbonsai (bonsai), tty-clock (clock), asciiquariumthey draw in the terminal’s own colourswith the terminal
yazi, cbonsai and neovim, in the palette of a golden wallpaper.
  • btop keeps nothing you change inside it. It is told not to save its settings on exit, so a preset picked in a running btop lasts until you quit.
  • unimatrix, cbonsai and tty-clock come from the AUR and asciiquarium from pacman; ./setup packages installs all four.

y opens yazi, and leaves the shell wherever you closed it. What Enter opens:

FileOpens in
A pictureimv, floating over the windows on the terminal’s tinted background; d shows or hides its overlay
A video or a songmpv, with a window to pause or close it even for audio
Text$EDITOR, which is neovim
A web pageyour default browser, through xdg-open
An archiveyazi unpacks it where it is
A PDF, and anything elsexdg-open: whatever the machine says opens it
  • The viewers are detached, so closing yazi leaves the picture or the video open.
  • c y copies the selection as files rather than as paths, ready to paste into a file manager or a chat.
  • There is no PDF reader on the desk: a PDF goes to whatever the machine names, which install sets to Zen unless you had chosen one. Outside yazi, what opens a file is that same setting; see Applications.

neovim with seven plugins and no distribution, managed by lazy.nvim, which clones itself and the plugins the first time neovim starts. Space is the leader. Plugins update with :Lazy update; nothing checks on startup.

PluginFor
nvim-treesittersyntax highlighting, with parsers compiled by the tree-sitter CLI
nvim-lspconfiglanguage servers, each started only when it is installed
blink.cmpcompletion
fzf-luafinding files, text, buffers and symbols, with the fzf the shell already uses
gitsigns.nvimchanges in the gutter
lualine.nvimthe status line, coloured from the colourscheme
nvim-tree.luathe file tree, with a git column

The language servers it looks for are lua-language-server, basedpyright or pyright, ruff, bash-language-server and Qt’s qmlls. All but basedpyright are in the package list.

Keys
Space ffind a file
Space gsearch the text of every file
Space bthe open buffers
Space hhelp
Space sthe symbols in this file
Space eshow or hide the tree
Space Ethis file, in the tree
] c · [ cthe next and the previous change
Space h ppreview a change
Space h bwho last changed this line
Space devery diagnostic, in a list
CTRL h · j · k · lmove between windows
Escclear the search highlight

neovim’s own language-server keys work as they come: grn renames, gra offers code actions, grr lists references, gri goes to the implementation, grt to the type, gO lists symbols, K shows the documentation, and ]d and [d move between diagnostics.

impasto is written on every palette change, into the shell’s state directory rather than into ~/.config/nvim, and every running neovim repaints at once, without leaving insert mode. Backgrounds are left clear, so the terminal’s tint shows through. The colours agree with yazi’s preview and with VSCodium: keywords in the accent, strings green, functions blue, numbers yellow, types in the lighter accent. Comments are deliberately quieter than the rest.

Before the shell’s first palette change there is no impasto yet, and neovim starts in its own default colours. A language with no treesitter parser falls back to neovim’s older highlighting and gets fewer of the colours.