Personal Arch Linux + Hyprland configuration with safe HOME backups and separate device/display profiles.
git clone https://github.com/Xlerq/dotfiles.git ~/.dotfiles
cd ~/.dotfiles
./dotfiles install --dry-run
./dotfiles installPrerequisite: an Arch Linux user account with working sudo access (git is needed for the clone). The default package step installs rsync before HOME deployment.
On a fresh HOME, the default install uses the minimal package lists, detects CPU/GPU and laptop/desktop automatically, applies the safe generic display layout, and backs up replaced HOME files. A previously saved profile selection is reused.
The installer also enables audio-sanity.service (masks/stops PulseAudio and restarts PipeWire) and hyprpolkitagent.service when available. Use --skip-user-services to leave user services unchanged.
For this repository's AOC 1440p + Samsung 1080p desktop layout:
./dotfiles install --device desktop --display desktop-dualAdd --with-extras to install GUI applications, development tools, gaming packages, and Zed:
./dotfiles install --with-extras| Direction | Preview | Apply |
|---|---|---|
| Repository → HOME | ./dotfiles apply --dry-run |
./dotfiles apply |
| HOME → repository | ./dotfiles capture --dry-run |
./dotfiles capture |
A real capture requires a Git worktree and refuses to run when it is dirty; its dry-run only warns. Commit/stash existing changes first; --force is available for intentional exceptions. Capture updates the common files and only the selected device/display profiles, so pass explicit profile flags when capturing on another machine.
After applying inside a running Hyprland session, log out and back in so UWSM, cursor variables, startup programs, and Waybar all use the new configuration.
Compatibility wrappers remain available:
./scripts/deploy-home.sh # same as: ./dotfiles apply
./scripts/sync-home.sh # same as: ./dotfiles captureList the common tracked HOME components (profile overlays are listed separately by profiles):
./dotfiles listProfiles have two independent axes, applied in this order:
common dotfiles → device profile → display profile
Device profiles:
desktop: enables the Spotatui/Cava dashboard (installed with--with-extras), keeps the full Waybar status set, and turns displays off without suspending the PC automatically.laptop: skips the dashboard, adds a battery module, avoids the continuously polled system-info module, and suspends after 30 minutes of inactivity.
Display profiles:
generic:preferredresolution, automatic position and scale; safe for unknown displays and laptops.laptop-1080p:preferredresolution with native1xscale for 1080p laptop panels.desktop-dual: AOC2560×1440@155with Waybar plus Samsung1920×1080@60on the left; monitors are matched by description rather than unstable connector numbers.
Choose profiles explicitly when needed:
./dotfiles apply --device laptop --display generic
./dotfiles apply --device laptop --display laptop-1080p
./dotfiles apply --device desktop --display desktop-dualThe last applied selection is stored under ${XDG_STATE_HOME:-~/.local/state}/dotfiles/selection, so later apply and capture commands do not need repeated flags. See the saved selection (or auto before the first apply) with:
./dotfiles profilesDashboard windows and the power menu scale from the active monitor geometry, so a new resolution normally does not need another profile. Add a display profile only for a real layout that needs different outputs, scale, refresh rate, or monitor positions. Copy profiles/display/generic/, inspect identifiers with hyprctl monitors all, then edit its monitor.lua and Waybar display.jsonc. Hyprland expects desc:MAKE MODEL SERIAL; Waybar uses the same description without desc:. An empty Waybar object ({}) shows bars on all outputs, while "output" restricts it to one.
--dry-rundoes not modify HOME or the repository.- By default, real
applyoperations back up replaced/deleted HOME files under~/.dotfiles-backups/<timestamp>/. - Only explicitly listed legacy files are removed; deployment never performs a global
--deleteagainst HOME. capturefirst builds a temporary snapshot, excludes ignored/private filenames, checks changed text files for secret-like assignments, and only then updates the repository. It never deletes repository files automatically; a failed update restores the original managed files and keeps a recovery snapshot.- Spotatui secret-like fields are reset during capture, its local file remains private (
0600), HOME paths become@HOME@, and Zed runtime data is never captured. - Machine-specific LACT GPU identifiers and transient systemd/Micro state are filtered.
The installer remains Arch-specific and never applies system/ unless requested:
./dotfiles install --with-extras
./dotfiles install --cpu intel --gpu nvidia
./dotfiles install --apply-system
./dotfiles install --helpOn a fresh system, --skip-aur also omits wlogout, so the Waybar power button will not open its menu.
Package sets live in packages/:
official-minimal.txt/aur-minimal.txtofficial-extra.txt/aur-extra.txt- CPU/GPU-specific lists
manifest/home-items.tsv— common HOME mappings and capture policies.profiles/device/— laptop/desktop behavior overlays.profiles/display/— monitor layout overlays.- application directories (
hypr/,waybar/,zed/, etc.) — common configuration. scripts/dotfiles.sh— implementation behind the public./dotfilescommand.scripts/install-arch.sh— package/system installer.


