- QML 61.6%
- Shell 18.3%
- Go 17.2%
- Lua 2.8%
| cmd/my-desktop | ||
| components | ||
| configs | ||
| internal | ||
| profiles | ||
| .gitignore | ||
| .luarc.json | ||
| go.mod | ||
| go.sum | ||
| install.sh | ||
| README.md | ||
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:
normalinstalls the complete desktop.laptopinstalls 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.