- Install several Hyprland dotfile distributions side by side.
- Keep each distribution as close to upstream as possible.
- Switch between complete profiles, including keybindings.
- Support safe upstream updates.
- Avoid mutating user config during package installation.
- Merge different dotfiles into one unified configuration.
- Force common keybindings across profiles.
- Hide upstream licensing or ownership.
installclones the upstream source into staging.- The staged source is checked out according to the profile update policy.
- The staged source replaces the managed source directory.
switchcreates symlinks from user config paths to the managed source.updaterepeats the staging flow before replacing the managed source.rollbackrestores the previous profile link state where available.
upstream tracks the configured branch.
stable tracks a pinned revision listed in the manifest. This should become the default once the project has CI that validates known-good revisions.
- The package installation must not edit
$HOME. - Managed destinations must be under allow-listed user paths.
- Shell commands in manifests should be argv arrays.
- Existing non-symlink targets are moved into transaction backups before replacement.
- A lock file prevents concurrent switch/update operations.
- A failed switch must restore every target touched by the in-progress transaction.
- Dry-run mode must not create, move, delete, or relink managed user paths.
- Manifest link sources must be relative paths that remain inside the profile source tree.
- Managed destination checks must use path ancestry, not string prefixes.
- Profile manifests should reject unknown fields, duplicate link targets, invalid command shapes, and invalid health checks before switching starts.
Lifecycle commands are argv arrays and are executed without a shell.
Health checks of type command are shell snippets. This keeps simple checks compact, but it
means command health checks are trusted manifest content and should not be loaded from
unreviewed sources.
Each upstream project has a different layout and installer model. The generic manifest model is enough for simple layouts, but production quality requires per-profile adapters for:
- dependency discovery
- upstream install script compatibility
- generated config files
- split repositories
- services and process lifecycle
- health checks that prove the UI actually started