Personal dotfiles and configuration management for cross-machine synchronization.
Bootstrap (new machine):
curl -fsSL https://raw.githubusercontent.com/jemus42/syncbin/main/bootstrap.sh | sh
# Or interactive mode:
curl -fsSL https://raw.githubusercontent.com/jemus42/syncbin/main/bootstrap.sh | sh -s -- -iManual:
git clone --recursive https://github.com/jemus42/syncbin ~/syncbin
cd ~/syncbin && ./install.shHealth check:
syncbin-doctorsyncbin/
├── zsh/ # Zsh configuration (primary shell)
│ ├── zshrc.zsh # Main entry point (~/.zshrc)
│ ├── config/ # Modular configs (00-*.zsh to 99-*.zsh)
│ └── completions/ # Custom completions (_command format)
├── bash/ # Bash configuration
│ ├── bashrc # Main entry point (~/.bashrc)
│ ├── config/ # Modular configs (00-*.bash to 99-*.bash)
│ └── completions/ # Custom completions (command.bash)
├── fish/ # Fish configuration
│ ├── config.fish # Main entry point
│ ├── config/ # Modular configs (00-*.fish to 99-*.fish)
│ └── completions/ # Custom completions (command.fish)
├── ohmyzsh_custom/ # Oh-My-Zsh plugins (git submodules)
├── bin/ # Custom scripts (added to PATH)
├── alacritty/ # Alacritty terminal config
├── ghostty/ # Ghostty terminal config
├── bat/ # Bat config and themes
├── btop/ # Btop system monitor config
├── helix/ # Helix editor config
├── micro/ # Micro editor config
├── zed/ # Zed editor config
├── zellij/ # Zellij multiplexer config
├── R/ # R/RStudio configuration
├── common/ # POSIX sh scripts (bash + zsh compatible)
│ └── aliases.sh # Git, docker, systemd aliases
├── carapace/ # Carapace completion specs
│ └── specs/ # Custom specs (symlinked to ~/.config/carapace/specs)
├── bootstrap.sh # One-line installer
├── install.sh # Main installation script
└── dependencies.yaml # Tool dependencies manifest
All three shells use a modular configuration approach with numbered files:
config/
├── 00-early.zsh # Profiling, basic setup
├── 01-environment.zsh # Environment variables, PATH, XDG
├── 02-oh-my-zsh.zsh # Oh-My-Zsh initialization (zsh only)
├── 03-completions.zsh # Completion system (carapace + fallback)
├── 04-aliases.zsh # Shell aliases
├── 05-functions.zsh # Custom functions
├── 06-rstudio-server.zsh
├── 07-integrations.zsh # Tool integrations (zoxide, direnv, etc.)
├── 08-prompt.zsh # Prompt configuration
├── 09-tmux.zsh # Tmux integration
└── 99-local.zsh # Local machine overrides
Local configuration that shouldn't be committed lives in ~/.config/syncbin/:
~/.config/syncbin/
├── env # Environment variables (KEY=value, one per line)
├── path # PATH additions (one directory per line)
├── local.zsh # ZSH-specific overrides
├── local.bash # Bash-specific overrides
├── local.fish # Fish-specific overrides
├── work.zsh # Example: work-specific config
└── experiments.zsh # Example: trying new things
How it works:
envandpathfiles are shell-agnostic (work for all shells)- All
*.zshfiles are sourced by zsh,*.bashby bash,*.fishby fish - Drop in new files to experiment without touching syncbin
- Comments (
#) supported in env and path files
Example:
# ~/.config/syncbin/env
MY_API_KEY=secret123
# ~/.config/syncbin/path
/opt/custom/bin
~/projects/tools/bin
# ~/.config/syncbin/experiments.zsh
alias foo='echo bar'Carapace is the primary completion system (600+
commands). Custom completions in */completions/ directories serve as fallback
for commands carapace doesn't support.
Adding completions:
- Carapace spec (preferred):
carapace/specs/mycmd.yaml(synced across machines) - Shell-specific:
zsh/completions/_mycmd,bash/completions/mycmd.bash,fish/completions/mycmd.fish
| Command | Description |
|---|---|
reload |
Pull latest syncbin, run doctor, reload shell |
syncbin-doctor |
Health check for the installation |
extract / x |
Universal archive extraction (tar, zip, 7z, rar, etc.) |
See dependencies.yaml for full list. Key tools:
- Required: git
- Recommended: carapace, starship, bat, eza/lsd, fd, ripgrep, fzf, zoxide
- https://github.com/mathiasbynens/dotfiles
- Oh-My-Zsh
- Powerlevel10k
- zsh-users (completions, autosuggestions, syntax-highlighting)
- Carapace