HermitGrab Logo

HermitGrab

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

Copied to clipboard!