Skip to content

Repository files navigation

dotfiles

CI

@fohte's personal dotfiles for macOS and Linux environments.

Terminal Screenshot

🛠️ Tools & Configuration

🚀 Installation

Clone the repository, set the machine role, and run the dot command:

git clone https://github.com/fohte/dotfiles ~/ghq/github.com/fohte/dotfiles
cd ~/ghq/github.com/fohte/dotfiles
git submodule update --init
config/bin/dot role set private   # or: dot role set work repo=<owner>/<name>
config/bin/dot deploy

After the initial deployment, dot will be available on your PATH (via the bin symlink to ~/bin).

🎭 Machine Roles

dot deploy requires a machine role to be set so that overlay files (e.g. extra MCP servers, role-specific zsh tweaks) are merged into the right configs. The role is stored in the gitignored .role file at the repository root.

Role Overlay source
private config/<tool>/<file>.private.<ext> (in this repo, git-tracked)
work ~/ghq/github.com/<owner>/<name>/config-overlays/<tool>/<file> (external repo)
dot role set private
dot role set work repo=<owner>/<name>

dot role get          # print the current role
dot role get repo     # print the repo (work only)
dot role overlay config/zsh/.zshrc   # print the overlay path for a given file

Tools that consume the role:

  • config/zsh/.zshenv and .zshrc source role overlays via symlinks at ~/.config/zsh/.zshenv.overlay / ~/.config/zsh/.zshrc.overlay. The symlinks are created by dot deploy, so re-run it after changing the role.
  • config/claude/Makefile merges role overlays into settings.json / mcp-servers.json.

✨ Updating

Run dot refresh to update the dotfiles and upgrade packages:

dot refresh

This command automatically updates the SKK dictionary, Neovim plugins, mise tools, and more.

🔧 How Deployment Works

Symlink Configuration

The deployment system uses the symlinks bash script to define how configuration files are linked to your system. This script contains conditional blocks that:

  • Check for specific tags using the match_tag function
  • Use the sym function to create symbolic links from source to destination
  • Handle platform-specific paths with is_macos, is_linux, is_wsl functions

For example:

if match_tag nvim; then
  sym config/nvim ~/.config/nvim
fi

Deploy Script Options

The dot deploy command reads the symlinks file and supports various options to customize the deployment process:

  • Deploy only specified configs:
    dot deploy -t nvim,zsh
  • Force deployment:
    dot deploy -f
  • Dry run:
    dot deploy -f -t nvim -n
  • Enable debug mode:
    dot deploy --debug

About

@fohte's personal dotfiles for Neovim, Zsh, Tmux and more

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages