Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

211 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dotfiles

One source tree → Windows, macOS, and Debian-based Linux. No WSL. Colemak-DH. Personal and work.

CI Managed with chezmoi Platforms License: Unlicense

My personal, cross-platform machine setup, managed with chezmoi. The repo is the source of truth; chezmoi apply renders it into $HOME on every machine I touch, so a fresh laptop is one command away from feeling like home.

✨ Highlights

  • One source tree → three OSes. Windows, macOS, and Debian-based Linux render from the same repo — no WSL, no per-machine forks — giving one unified set of apps, tools, and aliases everywhere.
  • Idempotent & convention-driven. Built on chezmoi templates, .chezmoidata, and run_onchange_ scripts; chezmoi apply is safe to run twice and CI verifies there's no drift.
  • A cohesive terminal stack. WezTerm, oh-my-posh, Neovim, fzf, ripgrep, zoxide, and a pyenv + uv + ruff Python toolchain.
  • Home and work aware. An install_host = home | work prompt at init time switches package sets and config from the same source.
  • Colemak-DH first. Keymaps tuned for the Colemak-DH layout.

Table of contents

Project state

The platforms I've actually verified chezmoi apply on:

OS Tested on
Debian-based Linux Pop!_OS 22.04 LTS, Ubuntu 22.04 LTS
macOS macOS 15 Sequoia
Windows Windows 10, 11 — no WSL support

Install

chezmoi init will prompt for a few values the first time (git username, git email, work/home install type, and — on Windows — the Git install path), then render and apply everything.

Debian-based Linux

cd ~
sh -c "$(curl -fsLS get.chezmoi.io)"
export PATH="$PATH:$HOME/bin"
export GITHUB_USERNAME="StephenGemin"
chezmoi init --apply -v https://github.com/$GITHUB_USERNAME/dotfiles.git

macOS

For Apple Silicon, confirm brew config shows arm64 and NOT x86_64.

# Install Homebrew first if you don't have it:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

brew install chezmoi
export GITHUB_USERNAME="StephenGemin"
chezmoi init --apply -v https://github.com/$GITHUB_USERNAME/dotfiles.git

Windows (semi-automated)

Expand Windows install steps
  • Run the prerequisite installs in Windows PowerShell 5.1 (the powershell that ships with Windows) — pwsh might not be installed by this point.

    • run as non-admin (for scoop)
    • may need to change the execution policy(ies):
      • Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
      • Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine
  • Install prerequisite dependencies:

    get-Command winget  # check winget installed
    # if missing:
    # 1. download winget from MS store
    # 2. If MS store is blocked (typically work env) then install from .msixbundle
    #    - https://github.com/microsoft/winget-cli/releases/latest
    #    - double click downloaded file to install
    #    - if this is also blocked, can install from powershell command `Add-AppxPackage -Path "PATH_TO_FILE"`
    #    - may need to install missing deps for winget based on errors.
    #      - i.e. Github microsoft/winget-cli issue 4916
    
    winget install -e --id Git.Git
    winget install Microsoft.PowerShell
    winget install twpayne.chezmoi
    $GITHUB_USERNAME = "StephenGemin"
    chezmoi init --apply https://github.com/$GITHUB_USERNAME/dotfiles.git
  • May need to install MSYS2 manually

  • Neovim

    • Do not start Neovim until the reqs below are installed!
    • Install build dependencies (use MSYS2)
      • pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain
      • pacman -S make gcc
  • To install fonts go to ~\.local\share\fonts; find ttf files, right-click desired files, and select install

  • Install WhatsApp from MS store (unavailable from winget)

    • Ref microsoft/winget-pkgs issue 156231
  • Add to PATH (if not there):

    • %USERPROFILE%\.pyenv\pyenv-win\shims
    • C:\Program Files\Git\cmd
    • C:\Program Files\Neovim\bin

Per-tool setup

Manual setup steps for individual tools / apps:

  • PyCharm — Import settings from ~\.config

Tooling

Legend: ✅ supported · ❓ may work (untested / unused) · 🚫 not supported

Terminals

Deb Win Mac
WezTerm
Windows Terminal 🚫 🚫

Shells

Deb Win Mac Notes
Zsh 🚫 Slow on Windows, see Notes
Bash Slow on Windows
PowerShell 🚫 🚫

Package managers

Language-agnostic managers, per OS:

Full package lists are the source of truth in .chezmoidata/brew.yaml (macOS / Linux brew), scripts/install_debian.sh (apt / snap / cargo), and .chezmoitemplates/winget_packages_home.json (Windows).

Apps & tools

Deb Win Mac Notes
Chezmoi
Git git-lfs / git-extras
Neovim nvim-config
Vim
Nano 🚫
Notepad++ 🚫 🚫
Visual Studio Code
JetBrains IDEs
Oh-My-Posh
Zinit 🚫 Zsh plugin manager
Oh-My-Zsh 🚫 Plugins loaded via Zinit
Ripgrep
fzf
zoxide
pyenv Windows uses pyenv-win
uv
Ruff
GitHub CLI
PlantUML / Graphviz
Double Commander
KeePassXC No chezmoi integration yet
VLC
Firefox
Opera
Chromium
Notion
WhatsApp Windows: install from MS Store
F.lux Linux uses Redshift
Wireshark
LibreOffice
MSYS2 🚫 🚫

Platform-specific extras not listed above (e.g. JupyterLab, scrcpy, Java/Temurin, Zoom, 7-Zip, ShareX, Tesseract OCR, DB Browser for SQLite) live in the data files linked under Package managers.

Notes

Windows

  • To get zsh working on Windows:
    • Install MSYS2; pacman -S zsh
    • Modify C:\msys64\etc\nsswitch.conf (see below)
  • Initial attempt to use zsh did not go well:
    • terminal was very sluggish
    • tried in MSYS2, MSYS (Git Bash) and Windows Terminal
    • issues accessing Windows tooling
    • difficult working with Windows paths
    • Decided to use PowerShell on Windows
# Begin /etc/nsswitch.conf

passwd: files db
group: files db

db_enum: cache builtin

db_shell: /usr/bin/zsh
db_home: /c/Users/USERNAME
db_env: windows
#db_home: cygwin desc
#db_shell: cygwin desc
#db_gecos: cygwin desc

# End /etc/nsswitch.conf

License

Released into the public domain under The Unlicense. Copy, adapt, and reuse freely.

💡 Inspirations

About

Cross-platform dotfiles managed with chezmoi — Debian Linux, macOS, and Windows, same tools everywhere

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Contributors

Languages