Your Dotfiles, Mastered.
A powerful, tag-based dotfile manager written in Rust. Effortlessly manage configurations, install tools, and sync your entire development environment across any machine.
One Tool to Rule Them All
HermitGrab is more than just a symlinker. It's a complete environment manager.
Tag-Based System
Use tags to conditionally apply configurations. Set up profiles for `work`, `personal`, or specific machines with ease.
Tool Installation
Go beyond dotfiles. Install your favorite CLIs and applications using the same declarative `hermit.toml` file.
Universal Binary Installer
Leverage the built-in `ubi` to fetch and install binaries from URLs, ensuring cross-platform consistency.
Automatic Discovery
Find and use community-managed dotfile repos effortlessly via GitHub and GitLab topics.
File Patching
Atomically patch existing files. Perfect for modifying `settings.json` in VSCode or other JSON configs.
Single Static Binary
Written in Rust for speed and reliability. No dependencies, no runtime, no hassle. Just one binary.
Simple, Powerful Configuration
Define your entire environment in a single, intuitive TOML file.
hermit.toml
# This configuration file provides the fish shell
provides = ["fish"]
# It requires a unix-like OS and will not run if zsh is a tag
requires = ["+os_family=unix", "-zsh"]
# Soft-link the main fish config, with a backup strategy
[[file]]
source = "config.fish"
target = "~/.config/fish/config.fish"
fallback = "BackupOverwrite"
# Conditionally install aliases only when 'ripgrep' tag is active
[[file]]
source = "functions/egrep.fish"
target = "~/.config/fish/functions/egrep.fish"
requires = ["+ripgrep"]
# Patch VSCode settings in a DevContainer
[[patch]]
type = "JsonMerge"
source = "vscode_settings.json"
target = "~/.vscode-server/data/Machine/settings.json"
requires = ["user=vscode"]
# Install the fish shell with the universal binary installer (ubi)
[[install]]
name = "fish"
check_cmd = "command -v fish"
source = "ubi"
requires = ["+arch=aarch64", "+os=linux"]
[install.variables]
exe = "fish"
url = "https://..."
# Profiles are collections of tags to activate
[profiles]
default = ["fish"]
karsten = ["bashrc", "bat", "fish", "ripgrep"]
work-rust = ["fish", "git", "rust", "starship"]
Powerful CLI & A Bright Future
A rich command-line interface for power users, with an intuitive TUI on the horizon.
/bin/bash
$ hermitgrab apply --profile work-rust
> Activating profile: work-rust
> ✓ Tag 'fish' provided by '.../fish/hermit.toml'
> ✓ Tag 'git' provided by '.../git/hermit.toml'
> ✓ Tag 'rust' provided by '.../rust/hermit.toml'
> ✓ Tag 'starship' provided by '.../starship/hermit.toml'
> Linking files...
> Done.
$ hermitgrab install eza
> Installing 'eza'...
$ hermitgrab profile update karsten --add nvim
> Profile 'karsten' updated.
Get HermitGrab Now
It's open source and ready to manage your world. Grab the single binary and get started in seconds.
# Install from your domain (Recommended)
bash -c "$(curl -fsSL https://hermitgrab.app/install.sh)"
# Or, build from source with Cargo
cargo install --git https://github.com/KarstenB/hermitgrab.git hermitgrab