Veil is a GNOME shell extension that allows you to hide items on your GNOME panel.
It is a modern successor to Hide Items, and is designed to make your GNOME panel cleaner and quieter.
- Selective tray — When collapsed, only the status icons you pick stay visible on the right; the rest stay hidden until you open the tray again.
- Click or hover — Click mode uses the Veil indicator as a toggle. Hover mode briefly shows every tray icon while the pointer is over the status area, then restores the collapsed layout when you leave.
- Auto-hide (click mode) — Optionally collapse the tray again automatically after a delay so it doesn’t stay open indefinitely.
- Animations — Optional fade/slide when hiding and showing items; duration and scope are configurable.
- Tighter status spacing — Lower the default horizontal padding between top-bar indicators so the right cluster uses less width, without changing which icons exist.
- Coexists with other applets — Remembers icons that were already hidden by their own extension and does not force them back on when the tray expands.
- Download the
.shell-extension.zipfile from the latest release - Install using:
gnome-extensions install --force <filename> - Restart GNOME Shell or log out/in
- Enable the extension in GNOME Extensions app
See DEVELOPMENT.md for development instructions.
Status-area horizontal spacing is adapted from Status Area Horizontal Spacing (original extension by Amy Chan / mathematical.coffee@gmail.com; maintained on GitLab by p91paul).
Panel icons shown in the preview come from these extensions:
- Activity Watch
- Net Speed Simplified
- Astra Monitor
- Pop Shell
- Power Indicator
- Easy Effects Preset Switcher
Tray applets usually live in a container on the panel. Other extensions typically hide their icon in one of two ways:
- Visibility — They keep the actor in the tree and set
container.visibletofalse(or equivalent), so the slot still exists but nothing is drawn. - Removal — They remove or destroy the tray actor (or never add it), so there is no container for Veil to target until the extension adds it again.
Veil shows and hides panel items by changing container.visible (and related presentation like opacity/animation) on tray entries it already knows about. It also records whether an item was already hidden when Veil last reconciled the tray (originalVisible), so it does not force icons back on that their own extension meant to hide.
Some extensions hide their icon in a way Veil does not see as “already hidden” at the moment Veil builds its list (for example, if the ordering or lifecycle differs from a simple visible = false on the container Veil tracks).
Workaround: Turn Veil off, use the other extension’s own settings to hide its panel icon, then turn Veil on again. Veil will then treat that item as externally hidden and will not reveal it when Veil expands the tray.
