Summary
Add the ability to import dotfiles from arbitrary GitHub repos into dwell, supporting the diverse structures found in popular Hyprland/themed dotfiles repositories.
Motivation
Users find dotfiles repos with unique themes and want to adopt parts of them. Each repo has a different layout:
Repo structures to support
| Repo |
Structure |
| garuda-hyprdots |
Direct .config/ subdirs (ags/, alacritty/, btop/, cava/) — copy to ~/.config/ |
| hyprzepyx |
config/, home-configs/, scripts/, deps-installer.sh |
| retrilzzy/dotfiles |
Configs/, Scripts/ |
| Hyprland-Simple-Setup |
dotfiles/, dev/, Documents/, Wallpaper/ — also a Rust project |
| NeKoRoSHELL-DLux-Shell |
Quickshell config (shell.qml, components/, panels/) |
Proposed design
dwell import <repo-url>
dwell import https://github.com/user/dotfiles # Interactive import
dwell import https://github.com/user/dotfiles --all # Import everything
dwell import https://github.com/user/dotfiles --dry-run # Preview only
dwell import gh:user/dotfiles # Shorthand
Auto-detection logic
When cloning a repo, detect its structure:
- Direct
.config/ style (garuda-hyprdots) — dirs like ags/, alacritty/, btop/ are treated as ~/.config/<name>/ — add each as dot_config/<name>/
- Home-relative style (hyprzepyx) —
home-configs/ contains home-relative files — add via dwell add logic
- Configs/ dir style (retrilzzy) —
Configs/ contains config directories — map to .config/
- Nested dotfiles/ dir (Hyprland-Simple-Setup) —
dotfiles/ is the source — import from there
- App-specific config (NeKoRoSHELL) — quickshell config files — import to
~/.config/quickshell/
Interactive import flow
$ dwell import https://github.com/zepyxunderscore/hyprzepyx
→ Cloning hyprzepyx...
→ Detected structure: home-configs/ + config/ + scripts/
→ Found 23 config files, 5 scripts, 1 deps script
[?] Import all? [Y/n] Y
[?] Import scripts to ~/bin/? [Y/n] n
[?] Run deps-installer.sh? [y/N] N
✓ Imported 23 files from hyprzepyx
✓ Generated .dwell/deps.toml
✓ Staged in git
Implementation notes
- Each repo import creates a named "source" in
.dwell/sources/ tracking the origin URL and date
- Duplicate paths are detected and prompted for conflict resolution
- Scripts/binaries are optionally imported to
~/bin/ and tracked in setup manifest
- Deps scripts are scanned for package names and merged into
deps.toml
- Wallpapers/themes are detected and tracked separately (handled by
dwell setup later)
Acceptance criteria
Summary
Add the ability to import dotfiles from arbitrary GitHub repos into dwell, supporting the diverse structures found in popular Hyprland/themed dotfiles repositories.
Motivation
Users find dotfiles repos with unique themes and want to adopt parts of them. Each repo has a different layout:
Repo structures to support
.config/subdirs (ags/, alacritty/, btop/, cava/) — copy to~/.config/config/,home-configs/,scripts/,deps-installer.shConfigs/,Scripts/dotfiles/,dev/,Documents/,Wallpaper/— also a Rust projectProposed design
dwell import <repo-url>Auto-detection logic
When cloning a repo, detect its structure:
.config/style (garuda-hyprdots) — dirs likeags/,alacritty/,btop/are treated as~/.config/<name>/— add each asdot_config/<name>/home-configs/contains home-relative files — add viadwell addlogicConfigs/contains config directories — map to.config/dotfiles/is the source — import from there~/.config/quickshell/Interactive import flow
Implementation notes
.dwell/sources/tracking the origin URL and date~/bin/and tracked insetup manifestdeps.tomldwell setuplater)Acceptance criteria
dwell import <url>detects repo structure and imports configs.config/subdir layout (garuda-hyprdots)home-configs/layout (hyprzepyx)Configs/layout (retrilzzy)dotfiles/subdir layout--dry-runpreviews without importing