No description
  • QML 57.3%
  • Shell 19.7%
  • Go 15.7%
  • Python 4.7%
  • Lua 2.5%
Find a file
2026-11-05 17:51:52 +01:00
cmd/my-desktop Added tui. 2026-09-05 17:15:47 +02:00
components Added ableton component and fixed bug. 2026-11-03 20:26:09 +01:00
configs Made tooltips a bit smaller. 2026-11-05 17:51:52 +01:00
internal Added ableton component and fixed bug. 2026-11-03 20:26:09 +01: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 moonlight and sunchine components. 2026-10-13 13:50:31 +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 explicit app uninstallation and cleanup of dependencies 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. Explicitly uninstalling a component removes its installed packages even if they existed beforehand, except packages still needed by another selected component. Pre-existing dependency packages 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.

To control the laptop from the main PC, install Sunshine on the laptop and Moonlight on the main PC. Both are optional components in the application list:

# On the laptop (the host):
my-desktop apply --add apps/sunshine
# On the main PC (the client):
my-desktop apply --add apps/moonlight

Sunshine uses native KMS capture for Hyprland and starts with the UWSM graphical session. Open https://localhost:47990 on the laptop to set up Sunshine, then pair it from Moonlight and select Desktop. Keep the laptop logged in, awake, and its display enabled. See the Sunshine setup guide and Moonlight notes for pairing, GPU, Wayland, and troubleshooting details.

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.

Computer-specific audio configuration also lives there, under ~/.config/my-desktop/pipewire/*.conf. Installation and configuration sync link these local files into PipeWire without overwriting them. See local audio configuration for WebRTC microphone echo cancellation and device selection.

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.