Extension Icon

Dotmate

Dotfile Manager for Raycast
AvatarNeal King
100 Installs
Overview

DotMate

Header Banner

DotMate Icon

Powerful Raycast extension for dotfile management


A powerful Raycast extension for managing your dotfiles with ease. Keep your configuration files synchronized between your local machine and your dotfiles repository.

Features

  • Dotmate: List and run all available commands
  • Backup Configs: Backup your local configuration files to your dotfiles repository
  • Restore Configs: Restore configuration files from your repository to your local machine
  • Show Status: Check the synchronization status of your dotfiles
  • Show Diffs: View differences between local and repository configurations

Installation

  1. Install the extension from the Raycast Store or clone this repository
  2. Open Raycast preferences and navigate to Extensions → DotMate
  3. Set the Dotfile Repository Path to point to your dotfiles repository

Setup

Repository Structure

DotMate expects your dotfiles repository to have a specific structure:

your-dotfiles-repo/
├── config/
│   ├── shell/
│   │   ├── aliases
│   │   ├── env
│   │   ├── exports
│   │   ├── functions
│   │   ├── inputrc
│   │   └── path
│   ├── zsh/
│   │   ├── zlogin
│   │   ├── zlogout
│   │   ├── zprofile
│   │   ├── zshenv
│   │   ├── zshrc
│   │   └── p10k.zsh
│   ├── bash/
│   │   ├── bash_login
│   │   ├── bash_logout
│   │   ├── bash_profile
│   │   ├── bashrc
│   │   └── profile
│   ├── fish/
│   │   └── config.fish
│   ├── starship/
│   │   └── starship.toml
│   ├── git/
│   │   ├── attributes
│   │   ├── config
│   │   ├── gh-config.yml
│   │   ├── glab-config.yml
│   │   ├── gitconfig
│   │   ├── gitignore
│   │   └── gitignore_global
│   ├── vim/
│   │   └── vimrc
│   ├── nvim/
│   │   └── init.lua
│   ├── emacs/
│   │   ├── emacs
│   │   └── init.el
│   ├── vscode/
│   │   ├── keybindings.json
│   │   ├── mcp.json
│   │   ├── settings.json
│   │   └── vscode-extensions
│   ├── zed/
│   │   └── settings.json
│   ├── kitty/
│   │   └── kitty.conf
│   ├── alacritty/
│   │   └── alacritty.yml
│   ├── wezterm/
│   │   └── wezterm.lua
│   ├── ghostty/
│   │   └── config
│   ├── iterm2/
│   │   └── com.googlecode.iterm2.plist
│   ├── warp/
│   │   └── dev.warp.Warp-Stable.plist
│   ├── terminal/
│   │   └── com.apple.Terminal.plist
│   ├── tmux/
│   │   ├── tmux.conf
│   │   └── tmux.conf.xdg
│   ├── screen/
│   │   └── screenrc
│   ├── ruff/
│   │   └── ruff.toml
│   ├── python/
│   │   ├── flake8
│   │   └── pylintrc
│   ├── prettier/
│   │   ├── prettierignore
│   │   ├── prettierrc
│   │   └── prettierrc.json
│   ├── editor/
│   │   └── editorconfig
│   ├── clang/
│   │   └── clang-format
│   ├── rust/
│   │   ├── cargo-config.toml
│   │   └── rustfmt.toml
│   ├── eslint/
│   │   ├── eslintrc.js
│   │   ├── eslintrc.json
│   │   └── eslintignore
│   ├── stylelint/
│   │   ├── stylelintrc
│   │   ├── stylelintrc.json
│   │   └── stylelintignore
│   ├── shellcheck/
│   │   └── shellcheckrc
│   ├── bat/
│   │   └── config
│   ├── delta/
│   │   └── delta.toml
│   ├── tldr/
│   │   └── config.json
│   ├── fzf/
│   │   ├── fzf.bash
│   │   └── fzf.zsh
│   ├── ripgrep/
│   │   └── ripgreprc
│   ├── ignore/
│   │   ├── agignore
│   │   └── ignore
│   ├── net/
│   │   ├── curlrc
│   │   └── wgetrc
│   ├── asdf/
│   │   └── tool-versions
│   ├── sdkman/
│   │   └── config
│   ├── pyenv/
│   │   └── version
│   ├── rbenv/
│   │   └── version
│   ├── nodenv/
│   │   └── version
│   ├── swiftenv/
│   │   └── version
│   ├── ruby/
│   │   ├── gemrc
│   │   ├── irbrc
│   │   └── pryrc
│   ├── go/
│   │   └── env
│   ├── node/
│   │   ├── npmrc
│   │   ├── pnpmrc
│   │   ├── yarnrc
│   │   └── yarnrc.yml
│   ├── brew/
│   │   └── Brewfile
│   ├── ssh/
│   │   ├── config
│   │   └── known_hosts
│   └── gdb/
│       ├── gdbinit
│       └── gdbinit.xdg
└── ...

Configuration

  1. Dotfile Repository Path: The absolute path to your dotfiles repository
    • Example: /Users/yourname/dotfiles
    • This directory should contain a config/ subdirectory where your dotfiles are stored

Commands

🔄 Backup Configs

Backs up your local configuration files to your dotfiles repository.

Usage: Open Raycast → Type "Backup Configs" → Press Enter

What it does:

  • Copies configuration files from their standard locations in your home directory to your dotfiles repository
  • Skips files that don't exist locally
  • Skips files that are already identical between local and repository
  • Shows a summary of operations performed

📥 Restore Configs

Restores configuration files from your dotfiles repository to your local machine.

Usage: Open Raycast → Type "Restore Configs" → Press Enter

What it does:

  • Copies configuration files from your dotfiles repository to their standard locations
  • Creates necessary directories if they don't exist
  • Skips files that don't exist in the repository
  • Skips files that are already identical between repository and local
  • Shows a summary of operations performed

🔍 Show Diffs

View differences between your local configuration files and those in your repository.

Usage: Open Raycast → Type "Show Diffs" → Press Enter

What it shows:

  • Side-by-side comparison of local vs repository files
  • Files that exist in only one location
  • Visual highlighting of differences
  • File modification times

📊 Show Status

Check the synchronization status of all your dotfiles.

Usage: Open Raycast → Type "Show Status" → Press Enter

What it shows:

  • List of all managed dotfiles
  • Synchronization status (identical, different, missing)
  • File sizes and modification dates
  • Quick overview of what needs attention

Supported Configuration Files

DotMate currently manages these configuration files:

CategoryApplicationLocal PathRepository Path
ShellGeneric includes~/.aliases, ~/.env, ~/.exports, ~/.functions, ~/.inputrc, ~/.pathconfig/shell/aliases, config/shell/env, config/shell/exports, config/shell/functions, config/shell/inputrc, config/shell/path
ShellZsh~/.zlogin, ~/.zlogout, ~/.zprofile, ~/.zshenv, ~/.zshrc, ~/.p10k.zshconfig/zsh/zlogin, config/zsh/zlogout, config/zsh/zprofile, config/zsh/zshenv, config/zsh/zshrc, config/zsh/p10k.zsh
ShellBash~/.bash_login, ~/.bash_logout, ~/.bash_profile, ~/.bashrc, ~/.profileconfig/bash/bash_login, config/bash/bash_logout, config/bash/bash_profile, config/bash/bashrc, config/bash/profile
ShellFish~/.config/fish/config.fishconfig/fish/config.fish
PromptsStarship~/.config/starship.tomlconfig/starship/starship.toml
GitCore~/.gitconfig, ~/.gitignore_globalconfig/git/gitconfig, config/git/gitignore_global
GitXDG~/.config/git/config, ~/.config/git/attributes, ~/.config/git/ignoreconfig/git/config, config/git/attributes, config/git/ignore
GitGitHub CLI~/.config/gh/config.ymlconfig/git/gh-config.yml
GitGitLab CLI~/.config/glab-cli/config.ymlconfig/git/glab-config.yml
EditorsVim~/.vimrcconfig/vim/vimrc
EditorsNeovim~/.config/nvim/init.luaconfig/nvim/init.lua
EditorsEmacs~/.emacs, ~/.emacs.d/init.elconfig/emacs/emacs, config/emacs/init.el
EditorsVS Code (settings)~/Library/Application Support/Code/User/settings.jsonconfig/vscode/settings.json
EditorsVS Code (keybindings)~/Library/Application Support/Code/User/keybindings.jsonconfig/vscode/keybindings.json
EditorsVS Code (MCP)~/Library/Application Support/Code/User/mcp.jsonconfig/vscode/mcp.json
EditorsVS Code (extensions list)~/.vscode/vscode-extensionsconfig/vscode/vscode-extensions
EditorsZed~/.config/zed/settings.jsonconfig/zed/settings.json
TerminalsKitty~/.config/kitty/kitty.confconfig/kitty/kitty.conf
TerminalsAlacritty~/.config/alacritty/alacritty.ymlconfig/alacritty/alacritty.yml
TerminalsWezTerm~/.wezterm.luaconfig/wezterm/wezterm.lua
TerminalsGhostty~/.config/ghostty/configconfig/ghostty/config
TerminalsiTerm2~/Library/Preferences/com.googlecode.iterm2.plistconfig/iterm2/com.googlecode.iterm2.plist
TerminalsWarp~/Library/Preferences/dev.warp.Warp-Stable.plistconfig/warp/dev.warp.Warp-Stable.plist
TerminalsTerminal.app~/Library/Preferences/com.apple.Terminal.plistconfig/terminal/com.apple.Terminal.plist
MultiplexersTmux~/.tmux.conf, ~/.config/tmux/tmux.confconfig/tmux/tmux.conf, config/tmux/tmux.conf.xdg
MultiplexersScreen~/.screenrcconfig/screen/screenrc
Linters/FormattersRuff~/.config/ruff/ruff.tomlconfig/ruff/ruff.toml
Linters/FormattersPython~/.pylintrc, ~/.flake8config/python/pylintrc, config/python/flake8
Linters/FormattersPrettier~/.prettierrc, ~/.prettierrc.json, ~/.prettierignoreconfig/prettier/prettierrc, config/prettier/prettierrc.json, config/prettier/prettierignore
Linters/FormattersEditorConfig~/.editorconfigconfig/editor/editorconfig
Linters/FormattersClang-Format~/.clang-formatconfig/clang/clang-format
Linters/FormattersRustfmt~/.rustfmt.tomlconfig/rust/rustfmt.toml
Linters/FormattersESLint~/.eslintrc.js, ~/.eslintrc.json, ~/.eslintignoreconfig/eslint/eslintrc.js, config/eslint/eslintrc.json, config/eslint/eslintignore
Linters/FormattersStylelint~/.stylelintrc, ~/.stylelintrc.json, ~/.stylelintignoreconfig/stylelint/stylelintrc, config/stylelint/stylelintrc.json, config/stylelint/stylelintignore
Linters/FormattersShellCheck~/.shellcheckrcconfig/shellcheck/shellcheckrc
CLI Toolsbat~/.config/bat/configconfig/bat/config
CLI Toolsdelta~/.config/delta/delta.tomlconfig/delta/delta.toml
CLI Toolstldr~/.config/tldr/config.jsonconfig/tldr/config.json
CLI Toolsfzf~/.fzf.bash, ~/.fzf.zshconfig/fzf/fzf.bash, config/fzf/fzf.zsh
CLI Toolsripgrep~/.ripgreprcconfig/ripgrep/ripgreprc
CLI Toolsignore files~/.agignore, ~/.ignoreconfig/ignore/agignore, config/ignore/ignore
CLI Toolscurl, wget~/.curlrc, ~/.wgetrcconfig/net/curlrc, config/net/wgetrc
Env Managersasdf~/.tool-versionsconfig/asdf/tool-versions
Env ManagersSDKMAN!~/.sdkman/etc/configconfig/sdkman/config
Env Managerspyenv~/.pyenv/versionconfig/pyenv/version
Env Managersrbenv~/.rbenv/versionconfig/rbenv/version
Env Managersnodenv~/.nodenv/versionconfig/nodenv/version
Env Managersswiftenv~/.swiftenv/shims/.versionconfig/swiftenv/version
Language ToolingRuby~/.gemrc, ~/.irbrc, ~/.pryrcconfig/ruby/gemrc, config/ruby/irbrc, config/ruby/pryrc
Language ToolingRust~/.cargo/config.tomlconfig/rust/cargo-config.toml
Language ToolingGo~/.config/go/envconfig/go/env
Package Managersnpm~/.npmrcconfig/node/npmrc
Package Managerspnpm~/.config/pnpm/rcconfig/node/pnpmrc
Package Managersyarn~/.yarnrc, ~/.yarnrc.ymlconfig/node/yarnrc, config/node/yarnrc.yml
Package ManagersRubyGems~/.gemrcconfig/ruby/gemrc
Package ManagersHomebrew~/Brewfileconfig/brew/Brewfile
SSHOpenSSH~/.ssh/config, ~/.ssh/known_hostsconfig/ssh/config, config/ssh/known_hosts
DebuggersGDB~/.gdbinit, ~/.config/gdb/gdbinitconfig/gdb/gdbinit, config/gdb/gdbinit.xdg

Notes:

  • Some files (e.g., GitHub/GitLab CLI, known_hosts) can contain sensitive information. Back them up only if you’re comfortable and your repo is private.
  • VS Code extensions list is captured via a plain text export at ~/.vscode/vscode-extensions. Consider regenerating it periodically with: code --list-extensions > ~/.vscode/vscode-extensions.
  • Homebrew’s Brewfile is generated via brew bundle dump --file=~/Brewfile --force.

Tips

Best Practices

  1. Version Control: Keep your dotfiles repository under version control (Git)
  2. Backup First: Always backup your existing configurations before first use
  3. Regular Sync: Use "Show Status" regularly to keep track of changes
  4. Review Diffs: Use "Diff Configs" before collecting or deploying to review changes

Troubleshooting

  • Permission Errors: Ensure you have read/write permissions to both your home directory and dotfiles repository
  • Missing Files: Some configuration files might not exist initially - DotMate will skip them gracefully
  • Path Issues: Double-check that your repository path is correct and contains a config/ directory

Workflow Example

  1. Make changes to your local configuration files
  2. Run Show Status to see what's changed
  3. Run Show Diffs to review the differences
  4. Run Backup Configs to backup changes to your repository
  5. Commit and push changes to your version control system

When setting up a new machine:

  1. Clone your dotfiles repository
  2. Configure DotMate with the repository path
  3. Run Restore Configs to restore all your configurations

License

MIT

Contributing

Issues and pull requests are welcome! Please feel free to contribute to make DotMate even better.