A Hyprland and Quickshell desktop for Fedora, with plugins and themes
  • Shell 46.2%
  • QML 28.9%
  • Go 7.1%
  • Lua 5.9%
  • Python 5.8%
  • Other 6%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-08-24 02:15:19 +01:00
.claude fix(review): the branch's findings, from flake to silence 2026-08-24 01:49:56 +01:00
bin fix(review): the branch's findings, from flake to silence 2026-08-24 01:49:56 +01:00
config/hypr fix(hypr): the entry names its own checkout when the greeter cannot 2026-08-23 23:02:55 +01:00
default feat(slack): the first opening wires a workspace up 2026-08-24 01:49:57 +01:00
install fix(units): write the units with the checkout named, as systemd needs 2026-08-23 23:17:29 +01:00
lib fix(themed): sandboxed apps may read the rendered theme 2026-08-24 01:49:56 +01:00
migrations fix(themed): sandboxed apps may read the rendered theme 2026-08-24 01:49:56 +01:00
plugins fix(usage): the pill rests in the foreground 2026-08-24 01:56:41 +01:00
shell fix(shell): the soft accent softens the accent, not brown 2026-08-24 02:15:19 +01:00
test fix(themed): sandboxed apps may read the rendered theme 2026-08-24 01:49:56 +01:00
tldr docs: back on the forge, with the rewritten themes pin 2026-08-23 22:28:59 +01:00
tools feat(tools): a throwaway Fedora VM that installs Donbox 2026-08-23 19:47:22 +01:00
.gitignore feat(theme): create a theme from a wallpaper or a seed colour 2026-08-23 00:21:49 +01:00
CLAUDE.md feat(test): groups and single suites run by flag 2026-08-24 01:01:19 +01:00
LICENCE docs(readme): write the README and licence 2026-08-23 18:13:23 +01:00
packages.toml Revert "refactor(board)!: retire the kanban board with the forge" 2026-08-23 22:31:00 +01:00
README.md docs(readme): rewrite for the desk the forge serves 2026-08-23 22:35:54 +01:00

Donbox

A Hyprland desktop for Fedora, built around a magnifier: one donbox command for everything the desktop does, themes as directories of small declarative files, plugins that declare what they add in a manifest, and a crash that explains itself to a coding agent.

Donbox takes its shape from Omarchy and departs where this desk does: Fedora rather than Arch, the session configured in Lua through Hyprland's own API, and shell chrome sized for a magnified screen while application text stays at sighted size. It runs one machine well rather than every machine adequately; what makes a host itself lives in one machine.lua.

What it does

  • One router. donbox <route> reaches every command in bin/ and every enabled plugin. donbox commands lists the lot, donbox docs writes the man page and the bash, fish and zsh completions from the same # donbox: headers the router routes on.
  • A themed desktop. Twenty-three themes live in donbox-themes, pinned by commit in packages.toml. donbox theme set renders every template and restyles the shell, terminal, Neovim, btop, the browsers, superfile, slk and TeamSpeak in one pass; donbox theme pick is a carousel with favourites; donbox theme schedule follows the sun between a theme and its pair.
  • A Quickshell shell. Bar, launcher, notifications with clickable actions, OSD, menu, choosers, four lock screen designs (donbox lock design preview <id>), and a pinentry pane that answers gpg with large type.
  • Plugins. A plugin.toml declares commands, binds, menu rows, bar widgets, packages, units, theme templates, hooks, migrations and settings; nothing loads undeclared. A repository of plugins/<id>/ directories installs as one pinned collection, and Omarchy plugins convert on the way in.
  • Crash diagnosis. A coredump, a failed unit, a Hyprland crash or a kernel panic caught by kdump becomes a notification whose button opens the coding agent with the evidence already gathered.
  • The board. donbox board serves the Forgejo tracker as a live kanban and roadmap; the tracker stays the source of truth for what is done and what remains.

Install

Fedora 44 with Hyprland, from a checkout that stays the source of truth:

git clone \
    https://forge.quinlan.cloud/joshquinlan/donbox \
    ~/.local/share/donbox
~/.local/share/donbox/bin/donbox install --dry-run
~/.local/share/donbox/bin/donbox install

Twelve idempotent steps run in order: packages (dnf, COPR, Flatpak, mise, fonts), the session environment, the keyring and pinentry wiring, config links, themed templates, the pinned theme collection, user units, kdump arming, snapper, docs and agent skills. --only <step> narrows to one. Log out and back in so the session reads DONBOX_PATH. Thereafter donbox update brings the checkout, its pins and its packages up in one transcripted run, behind a snapshot when the root is btrfs.

Use

donbox theme pick                choose a theme from the carousel
donbox theme set kanagawa-wave   switch by slug
donbox capture text              read a region onto the clipboard
donbox timer 25m                 a kitchen timer the shell rings
donbox alarm add 07:30 --days mon,tue,wed,thu,fri
donbox launch firefox            raise the window, or start it
donbox network share             this Wi-Fi as a QR code
donbox screentime today          who had the focus today
donbox pkg add btop              install, and record it
donbox migrate                   bring machine state up to date

The keys that matter, from default/hypr/binds.lua: Super+Space launcher, Super+Return terminal, Super+B browser, Super+Alt+T themes, Super+N notifications, Super+P screenshot, Super+Alt+P capture text, Super+Alt+R record, Escape closes the open pane.

Overrides live under ~/.config/donbox: hypr/*.lua, shell.lua, menu.lua, machine.lua, themed/*.tpl, hooks/ and plugins/<id>.lua overlay the defaults of the same name; maps merge, lists replace whole.

Write a plugin

donbox plugin new <id>
donbox plugin validate plugins/<id>
bash plugins/<id>/test/shell.d/<id>-test.sh

The first-party plugins under plugins/ are the reference for every manifest section; default/plugin-template is the scaffold.

Layout

bin/            donbox and donbox-* commands, one per file
lib/            the shared library: packages, theme, plugin,
                crash, install, docs
default/        Lua session, shell layout, menu, templates,
                units, hooks, sounds, plugin template
shell/          Quickshell: shell.qml, Commons, ui, services
plugins/        first-party plugins
install/        the ordered, idempotent install steps
migrations/     <epoch>.sh, run once per user
tools/          vm-dry-run and the theme converter
test/           the shell, qml, lua and python runners
packages.toml   everything the desktop installs, pinned

DONBOX_PATH names the checkout; ~/.config/donbox holds overrides; ~/.local/state/donbox holds rendered state and ledgers. $HOME stays clean.

Develop

./test/shell && ./test/qml && ./test/lua
shellcheck bin/* lib/*.sh lib/*/*.sh

Every script passes shellcheck, behaviour lands with a test, and anything visual is verified on the running shell. Work is tracked on the forge under repo/* labels, read and reordered through donbox board.

Licence

MIT. See LICENCE.