No description
  • QML 61.6%
  • Shell 18.3%
  • Go 17.2%
  • Lua 2.8%
Find a file
2026-09-12 01:24:46 +02:00
cmd/my-desktop Added tui. 2026-09-05 17:15:47 +02:00
components Added nautilus deamon service. 2026-09-12 01:24:46 +02:00
configs Added nautilus deamon service. 2026-09-12 01:24:46 +02:00
internal Added freecad mcp component and removed component revisions 2026-09-10 11:20:03 +02:00
profiles Added tui. 2026-09-05 17:15:47 +02:00
.gitignore First simple commit. 2026-08-27 16:12:08 +02:00
.luarc.json Fixed globals issue. 2026-08-28 12:32:17 +02:00
go.mod Added tui. 2026-09-05 17:15:47 +02:00
go.sum Added tui. 2026-09-05 17:15:47 +02:00
install.sh Go refactor. 2026-09-05 17:23:46 +02:00
README.md Added freecad mcp component and removed component revisions 2026-09-10 11:20:03 +02:00

My Desktop

My reusable Arch Linux and Hyprland desktop setup. The my-desktop Go program manages installable components, their dependencies, configuration syncing, and safe removal of packages it installed.

Install

The familiar installer remains available:

./install.sh                 # bootstrap the command and open the TUI
./install.sh development/wails
./install.sh --list
./install.sh --tui

install.sh is now a small source-checkout bootstrapper. It builds the Go program, installs it as ~/.local/bin/my-desktop, and applies the normal profile when you confirm the desktop installation in the TUI. Go must currently be installed to build from a checkout; packaged release binaries can remove that source-build requirement later. Make sure ~/.local/bin is included in your shell's PATH.

After the initial bootstrap, open the TUI from any terminal with:

my-desktop

For the original non-interactive default installation, run:

my-desktop install

Updating

Update the repository, rebuild the command, and update Arch and AUR packages:

cd ~/my-desktop
git pull --ff-only
./install.sh --build
yay -Syu
my-desktop apply

Open my-desktop and press C when repository-managed configuration files should also be refreshed.

You can also use ./install.sh --tui, or run it directly during development:

go run ./cmd/my-desktop

The command-line interface uses the same planner:

go run ./cmd/my-desktop list
go run ./cmd/my-desktop status
go run ./cmd/my-desktop plan --computer laptop --add development/wails
go run ./cmd/my-desktop apply --computer laptop --add development/wails
go run ./cmd/my-desktop remove development/wails
go run ./cmd/my-desktop sync

There are two computer configurations:

  • normal installs the complete desktop.
  • laptop installs the normal desktop plus power profiles, battery reporting, brightness control, and firmware update support.

Components are declared by strict component.toml manifests under components/. Dependencies are automatic. For example, Wails selects the Go and Web components, while Spotify and other AUR applications share the Yay component.

A component can declare settings and cache directories under [cleanup]. These paths appear in the uninstall review and are deleted after its packages are removed. Paths must be children of ${HOME} or an XDG user directory; documents and other user-created files should never be listed.

[cleanup]
settings = ["${XDG_CONFIG_HOME}/example", "${XDG_CACHE_HOME}/example"]

Some applications mix settings with personal data. Their data directories are retained unless a safe boundary can be declared, and the uninstall review explains what will remain.

State is stored at ~/.local/state/my-desktop/state.json (or $XDG_STATE_HOME/my-desktop/state.json). The state distinguishes components selected by the user from dependencies and remembers whether a package was installed by this tool. Removing a component cleans up unused dependencies only when the tool owns them. Packages that existed beforehand are left alone.

The installer links the Hyprland, Quickshell, Kitty, and Fontconfig configurations from this repository into ~/.config. Roboto is the desktop's default interface font, JetBrains Mono is the default monospace font, and Noto provides broader Unicode and emoji coverage when applications need it. my-desktop sync reapplies repository-managed configuration without reinstalling packages.

Component examples

Wails automatically includes both required toolchains:

go run ./cmd/my-desktop apply --add development/wails

Steam and Gamescope are separate selections:

go run ./cmd/my-desktop apply --add games/steam
go run ./cmd/my-desktop apply --add games/gamescope

Firefox web apps use the optional apps/firefox-pwa component:

go run ./cmd/my-desktop apply --add apps/firefox-pwa

The component installs the native connector. You must also install the PWAsForFirefox extension and complete its guided runtime setup in Firefox.

GNOME Online Accounts can remain installed while Control Center is used only for account setup. Add both components, sign in through the Online Accounts panel, and then remove just Control Center:

go run ./cmd/my-desktop apply --add system/gnome-online-accounts --add system/gnome-control-center
control-center
go run ./cmd/my-desktop apply --remove system/gnome-control-center

The compatibility component games selects both for existing commands.

Wine requires Arch Linux's [multilib] repository. Enable it in /etc/pacman.conf if Pacman cannot find the lib32-* packages.

Personal settings

The optional Color picker component adds hyprpicker. With it installed, use Super+C to pick a color from the screen and copy its hex value.

Open the settings window from the bottom bar or with Super+I. Appearance, input, power, and display choices are stored per computer under ~/.config/my-desktop and are not committed to this repository.

Repository configuration remains authoritative for Hyprland, Quickshell, Kitty, and Fontconfig. The Firefox sync only manages the repository preference file and leaves personal browsing data alone.