This is a collection of configurations and customizations I've hoarded, throughout the years, in order to tweak my various desktops into supporting my preferred workflows.
- Operating System is Arch Linux;
- Window Management is handled by Hyprland;
- Top & Bottom bars are built with Polybar;
- Widgets are built with Eww;
- Notifications are provided by Wired;
- Window decoration and animations are from Picom;
- Wallpapers are by the talented Byrotek;
- Application Launcher is rofi;
- Code editing using NeoVim.
Configuration is done through symlinks and relative paths.
$ git clone --recurse-submodules git@github.com:lukelex/dotfiles.git
$ cd dotfiles && ./linux/install/allFor a headless homelab server, run ./linux/install/all --server. This
installs terminal tooling, OpenSSH, and Docker without an AUR helper, GUI
packages, display services, desktop configuration, or personal Git settings.
Profile packages, groups, and services are defined in
linux/packages.yaml and parsed by the bundled static yq binary.
The common section applies to every profile; profile sections contain only
their additions. Package values list the Unix groups required by that package.
Packages can also declare repository-to-target config links, such as
linux/config/nvim:$XDG_CONFIG_HOME/nvim.
Desktop install options live under profiles.desktop.options. Each option has
prompt, default, and packages fields; the installer discovers every
option at runtime and asks whether to install its package set.
Run ./linux/install/all --dry-run to preview every action without touching
the system. The config stage skips links that would overwrite existing files;
pass --replace (e.g. ./linux/install/configs --replace) to overwrite them.
Run ./linux/install/sync --server (or --desktop) to reconcile a profile.
Each package, group, service, and config-link stage requires confirmation.
Only resources previously recorded under $XDG_STATE_HOME/dotfiles/install are
eligible for removal.
Run ./linux/install/validate-packages to verify every installable manifest
package is available from the configured Arch repositories or AUR. Repository
packages use the local pacman sync databases; AUR candidates are checked with
batched AUR RPC requests.
