A blazing fast dotFiles manager written in Go. Easily manage your dotfiles, symlinks, and system configuration with a simple YAML config.
- π Fast symlink management with subcommands
- π Home directory path expansion (
~/) - π Git repository cloning
- π οΈ Shell command execution
- π Duplicate symlink detection
- π§ͺ Dry-run mode
- π Automatic backups before overwriting files
- β©οΈ Unlink & restore symlinks with backup restoration
- π Status command to check symlink health
- π·οΈ Profiles for different machines/environments
- π Templates with variables (hostname, OS, etc.)
- πͺ Hooks for pre/post operations
brew tap youhide/homebrew-youhide
brew install hidedot# Create symlinks (default command)
hidedot
hidedot link
# Check status of all symlinks
hidedot status
# Remove symlinks
hidedot unlink
# Remove symlinks and restore backups
hidedot unlink --restore
# Manage backups
hidedot backup create
hidedot backup listCreate hidedot.conf.yaml:
- defaults:
link:
relink: true
force: true
backup: true # Enable automatic backups
# Optional: profile for filtering configs
profile: personal
# Create directories
create:
- ~/.config
- ~/.local/bin
# Manage symlinks
link:
~/.config/nvim: ~/.mydotfiles/nvim
~/.zshrc: ~/.mydotfiles/zsh/zshrc
# Clone git repositories
git:
~/.oh-my-zsh:
url: https://github.com/ohmyzsh/ohmyzsh.git
description: "Oh My Zsh"
# Run shell commands
shell:
- [touch ~/.hushlogin, Create hushlogin]
# Or with stdin support:
- command: "cat > ~/.config/myapp/config.json"
description: "Create config file"
stdin: '{"key": "value"}'
# Hooks for custom actions
hooks:
pre_link:
- echo "Starting link process..."
post_link:
- echo "Links created successfully!"
# Multiple profiles in same file
- profile: work
link:
~/.gitconfig: ~/.mydotfiles/git/gitconfig-workTemplates use Go's text/template syntax with these variables:
- link:
~/.config/git/config-{{ .Hostname }}: ./git/config
shell:
- ["echo 'Running on {{ .OS }}/{{ .Arch }}'", "Show system info"]Available template variables:
{{ .Hostname }}- Machine hostname{{ .Username }}- Current user{{ .HomeDir }}- Home directory path{{ .OS }}- Operating system (darwin, linux, windows){{ .Arch }}- Architecture (amd64, arm64){{ .Date }}- Current date (YYYY-MM-DD)
| Flag | Short | Description |
|---|---|---|
--config |
-c |
Path to config file (default: hidedot.conf.yaml) |
--profile |
-p |
Only apply configs matching this profile |
--dry-run |
-n |
Show what would be done without making changes |
--verbose |
-v |
Enable verbose output with debug info |
--quiet |
-q |
Only show errors |
--no-color |
Disable colored output | |
--no-backup |
Disable automatic backups |
| Command | Description |
|---|---|
link |
Create symlinks from config (default) |
status |
Show status of all symlinks (OK, MISSING, BROKEN, MISMATCH) |
unlink |
Remove symlinks (use --restore to restore backups) |
backup create |
Manually create backups of all linked files |
backup list |
List available backups |
# Apply only work profile configs
hidedot --profile work
# Preview changes without applying
hidedot --dry-run
# Verbose output for debugging
hidedot -v
# Use custom config file
hidedot -c ~/my-dotfiles/config.yaml
# Quick status check
hidedot status
# Remove all symlinks and restore original files
hidedot unlink --restoreFor detailed documentation, check out our Wiki.
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.
This means you are free to use, modify, and distribute this software, as long as any derivative works are also licensed under GPL-3.0.