# Panacea Shell
**One pill for everything.** A Hyprland desktop where the whole shell is a single
capsule at the edge of the screen.
demo.mp4; the link above is GitHub's own upload, since
it only plays videos inline when they come from its editor rather than from a
file in the repository.
## Pages
Every panel is the same capsule at a different size, so the whole shell shares
one geometry, one palette and one animation timeline.
| Page | Opens with | What it does |
|---|---|---|
| Quick settings | `Super + Z` | Wi‑Fi, Bluetooth, sound, now playing with transport and seeking straight on the equaliser, recorder, battery, passwords, tray |
| Networks / Bluetooth | `Super + Shift + W` / `+ B` | Scan, connect, pair |
| Notifications | `Super + Shift + N` | Live cards that open what they are about, one history list, do‑not‑disturb |
| Wallpapers | `Super + Shift + T` | Full‑screen carousel with parallax previews, stills and live video |
| Workspaces | `Super + Tab` | Live previews of every workspace, switch from the grid |
| Launcher | `Super + A` | App search + calculator, recents first; also the agent panel and the other systems on the disk |
| Launchpad | `Super + G` | Every app as a full-screen grid over the blurred desktop; drop an app on another to make a folder, right-click for the same actions. Layout lives in `~/.local/share/panacea/launchpad.json` |
| Clipboard | `Super + V` | Smart clipboard: automatic detection of HEX colors (swatch preview & RGB/HSL copy), URLs (open in browser), files/images (thumbnails), and pinned snippets |
| Files | `Super + E` | Bookmarks, disks, sorting, trash, context menu, drag between windows |
| Media | opens a file | Images, GIFs, video — trim and crop |
| Recorder | `Super + P` | FPS, folder, system audio, microphone |
| Passwords | `Super + Shift + P` | Encrypted vault, browser import, save prompts |
| Battery | from quick settings | Power profiles, charge state, capacity and wear |
| Lock screen | `Super + L` | Lock current session (or `Mod + Alt + L` on Niri) |
| Power | `Ctrl + Alt + Del` | Sleep, lock, log out, restart, shut down |
| Settings | `Super + I` | Pill, system, displays, keys — with live mock‑ups |
| Shortcuts | `Super + /` | Every binding in one place, rebindable |
Hovering the pill opens it too — the player if something is playing, quick
settings otherwise. Every page closes with the same key, `Escape`, or a click
outside. Collapsed, it shows day, clock, workspace, layout and battery.
### Nothing OS Desktop Widgets
Minimalist desktop cards that live directly on your wallpaper (`Super + I` → *Appearance* → *Desktop widgets*):
- **Nothing Analog Clock**: Signature 12-dot dial with cardinal points, double dot at 12 o'clock, clean white hands, and an orbiting red accent second hand (`colCrit`). Click to toggle between Analog and Digital Dot Clock.
- **Concentric System Monitor**: Dual concentric minimalist arcs (outer ring for RAM %, inner ring for root SSD %) with dot-matrix percentage in the center. Click the card or icon to toggle between Weather details and the System monitor.
- **Life Bar / Day & Year Progress**: A 24-segment dot bar representing the hours of the day (elapsed hours in solid white, current hour pulsing red, future hours dimmed) and time remaining. Click to switch between 24-hour Day Progress and 365-day Year Progress.
**Settings** has twelve sections, searchable from the top of the panel: *Bar &
Island* (a mock‑up of your desktop with the real island on it, its screen edge
and geometry), *Media*, *Clock & Date*, *Appearance* (palette, fonts, interface
language), *Motion*, *Launcher*, *Notifications*, *Control Center* (the quick
settings tiles, rearranged by dragging), *Lock Screen*, *Display* (resolution,
refresh rate, scale, orientation, VRR, multi‑monitor arrangement, brightness and
digital vibrance), *Mouse* and *System*.
## Dual boot
If this machine has more than one operating system on it, three separate things
here know about that.
**The boot menu is themed.** `grub/panacea/` is a GRUB theme in the same
language as the island — the wallpaper, a capsule highlight on the selected
entry, nothing else. The installer copies it to `/boot/grub/themes/panacea`,
points `/etc/default/grub` at it and regenerates the config. Skip it with
`--no-grub`.
**Other systems are made to show up.** Arch disables `os-prober` by default,
which is why a fresh GRUB config often lists only Linux and quietly loses the
Windows that is still sitting on the disk. The installer sets
`GRUB_DISABLE_OS_PROBER=false` when `os-prober` is installed, and says so if it
is missing.
**You can restart into another system from the launcher.** Open it, type
`windows` — or whatever the system is called — and press Enter. There is no
fixed list of two: `panacea/scripts/bootos.sh` finds what is actually there, so
three systems give three entries and one system gives none at all. Names are
tidied for reading, so `Windows Boot Manager (on /dev/nvme0n1p1)` becomes
`Windows`, while distributions keep their versions.
The choice is **one‑shot**: it sets the next boot only, through `grub-reboot`
(or `BootNext` in EFI variables when GRUB is not the bootloader). Your default
system does not change, and the boot after that comes back here. Touching the
bootloader needs root, so `pkexec` asks for a password — that prompt is also the
confirmation, which is why there is no separate "are you sure". These entries
never appear in an empty launcher and are never remembered as recent: a line
that reboots the machine should not sit one careless Enter away from the browser.
> [!NOTE]
> A theme that copies successfully and a config that regenerates without error
> can still both be ignored. The `grubx64.efi` image carries a **prefix** inside
> it — the directory it reads the config, modules and themes from — and if that
> points somewhere else, everything above lands in a folder the bootloader never
> opens. Nothing reports an error; the menu simply never changes. The classic
> case is an ESP mounted at `/boot` over a non‑empty directory, leaving the
> prefix pointing at the old `/boot/grub` now hidden under the mount point. The
> installer checks for exactly this after regenerating and prints the fix:
> `sudo grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB`.
## Colours and wallpapers
There is **one palette** for the whole system, in `hypr/palette.conf`.
`hypr/scripts/palette.sh` spreads it across the terminal, btop, fish,
neovim and the login screen. Changing the wallpaper never touches the colours —
and never touches a file that Hyprland sources, so your windows are left alone.
## What's inside
| | |
|---|---|
| **Compositor** | [Hyprland](https://hyprland.org) (primary, Lua config) · [Niri](https://github.com/YaLTeR/niri) (scrollable-tiling, beta) |
| **Shell** | [Quickshell](https://quickshell.org) — the pill, in QML |
| **CLI** | Fish + eza + zoxide |
| **Terminal** | [foot](https://codeberg.org/dnkl/foot), as a server — `foot --server` starts with the session and `footclient` opens windows instantly |
| **Lock / wallpaper** | the pill's own lock screen, hyprpaper, hyprsunset |
| **Boot / login** | GRUB theme, SDDM theme — both matching the palette |
The pill is also the notification daemon and the polkit agent, so don't run
`mako`, `dunst` or `hyprpolkitagent` alongside it. Only one process can own
`org.freedesktop.Notifications`, and the rival never has to be launched to win —
D‑Bus starts it on the first notification, and from then on it draws them in its
own window instead of the island. The installer masks `dunst` and `mako` for that
reason; `systemctl --user unmask dunst.service` puts one back.
## Install these dotfiles
> [!TIP]
> **Cross-Distribution Support (Ubuntu, Debian, Linux Mint, Fedora, openSUSE, Arch)**
> The installer automatically detects your distribution and package manager (`pacman`, `apt`, `dnf`, `zypper`).
> Running on Ubuntu, Debian or Linux Mint? See [**docs/other-distros.md**](docs/other-distros.md) for build instructions, dependencies, and compatibility notes.
> [!NOTE]
> **Experimental Niri Support**
> Panacea features dual-compositor support: while **Hyprland** is the default, fully supported compositor, preliminary integration for the **[Niri](https://github.com/YaLTeR/niri)** scrollable-tiling compositor is now available in `niri/`. The shell automatically detects Niri at launch via `$NIRI_SOCKET` and switches its IPC hooks accordingly.
> *Notice:* Niri support is experimental and actively being refined. Certain features (such as layer blur, screen shaders, and specific gesture transitions) are Hyprland-specific, and you may encounter minor edge cases or glitches under Niri. If you use Niri, your personal overrides belong in `~/.config/niri/custom/custom.kdl` so they are preserved across updates.
> [!WARNING]
> **The installer is young.** It has been run on a handful of machines, mostly
> the author's. It backs up everything it replaces as `*.bak-