LinuxCommandLibrary

homeshick

Manage dotfiles across multiple machines

TLDR

Create a new castle

$ homeshick generate [castle_name]
copy

Add a file to your castle
$ homeshick track [castle_name] [path/to/file]
copy

Go to a castle
$ homeshick cd [castle_name]
copy

Clone a castle
$ homeshick clone [github_username]/[repository_name]
copy

Symlink all files from a castle
$ homeshick link [castle_name]
copy

SYNOPSIS

homeshick [command] [options] [arguments]

PARAMETERS

clone URL [CASTLE]
    Clone castle from URL into $HOMESICK, name it CASTLE if specified.

generate [SHELL] [CASTLES...]
    Generate shell code for autocompletion and cd integration (supports sh, bash, zsh, fish).

list [-u]
    List installed castles (-u shows upstream changes).

symlink [CASTLE]
    Create symlinks from castle(s) to $HOME (all if no CASTLE).

track FILE [CASTLE]
    Symlink FILE into castle and add to Git.

untrack FILE [CASTLE]
    Remove symlink and Git tracking for FILE.

remove CASTLE
    Remove castle directory and symlinks.

-h, --help
    Show help.

-v, --version
    Show version.

DESCRIPTION

Homeshick is a POSIX shell tool for managing dotfiles by organizing them into separate Git repositories called castles. Each castle is cloned into $HOMESICK (default $HOME/.homesick) and symlinked into your home directory.

It simplifies dotfile management by allowing you to track configurations per project or tool, avoiding a monolithic repo. Key features include cloning castles, generating shell integration, symlinking files, tracking/untracking specific files, and listing available castles.

Unlike heavier tools, homeshick is fast, dependency-free (pure shell), and focuses on simplicity. It's ideal for users wanting modular dotfiles without Ruby or other runtimes required by predecessors like homesick. Usage starts with cloning a castle, symlinking, and adding shell hooks for autocompletion and cd integration.

CAVEATS

Requires $HOMESICK env var or defaults to $HOME/.homesick.
Run homeshick generate after install for shell integration.
Conflicts possible with existing dotfiles; use track selectively.

INSTALLATION

git clone https://github.com/andsens/homeshick.git $HOME/.homeshick
homeshick --sh >> ~/.profile # or ~/.bashrc, ~/.zshrc

EXAMPLE USAGE

homeshick clone https://github.com/user/dotfiles vim
homeshick symlink vim
homeshick generate bash

HISTORY

Created in 2013 by Tor Hediger (@andsens) as a faster, shell-only alternative to Ruby-based homesick. Actively maintained on GitHub with focus on speed and POSIX compliance.

SEE ALSO

git(1), ln(1)

Copied to clipboard