Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

sottomano logo

Sottomano

Sottomano is Italian for “at hand”: avere tutto sottomano, to have everything within reach. It is my desktop shell: a top panel, a bottom panel, an optional workspace sidebar and notification toasts, in one binary.

Why

After twenty years of GNOME and KDE Plasma I wanted a desktop that never asks for attention but answers when I look, with the widgets I kept missing there. Sottomano is written in Rust, so readings arrive as streams from compositor IPC, D-Bus, PipeWire and native libraries instead of polled commands, and each one explains itself in a hover card whose top line says what a click does.

Previous work:

  • niri-waybar-windowlist: a hard fork of a Waybar window list module, where styling meant fighting GTK CSS.
  • Odin: two Qt Quick panels on Quickshell, with a subprocess spawned and polled for every reading.

Tour

Weather: Conditions

Hovering the info icon of the temperature opens the forecast for the coming hours.

Hovering the temperature in the weather group

Tailscale: Exit node

The tailnet: how each peer is reached, when the key expires, and which exit node carries the traffic, next to the switch that offers this machine as one.

Opening the Tailscale group from the Network menu and hovering an exit node

Dictation: Speech model

The speech model the dictation daemon loaded.

Opening the dictation group from the Media menu and hovering the speech model

Toast: Next to its window

When the sending window is visible, the toast sits in its top corner.

A build toast placed in the corner of the terminal that sent it

The other groups, each in its menu next to pinned in the bar, are in the guide. The recordings use fixtures, so the numbers are made up.

Built on

  • iced, through a fork that carries a small rendering patch.
  • Wayland layer surfaces from iced_exwlshell in waycrate’s exwlshelleventloop, through a fork with the patches the shell needs until they land upstream.
  • niri-ipc and swayipc-types for compositor IPC, zbus for D-Bus services, PipeWire for audio, and a CLI only where nothing else is available.

Get started

  • Try it from a checkout: cargo r inside nix develop.
  • Install it with the home-manager and NixOS modules: installation.
  • Configure it with one TOML file whose complete default the shell prints: configuration.
  • Work on it: development and style.