Skip to content

Latest commit

 

History

402 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dotfiles

My personal macOS dotfiles crafted with love - version-controlled, Everforest-themed, XDG-compliant where possible.

Riced Terminal Workspace

Structure

dotfiles/
├── packages/
│   └── <pkg>/
│       ├── link/          # files to symlink (mirrored structure, optional)
│       ├── source/        # <pkg>.zsh sourced from ~/.config/zsh/source/ (optional)
│       ├── copy/          # files to copy (optional)
│       ├── hooks/         # pre-setup.zsh / post-setup.zsh run by sync.zsh (optional)
│       └── setup.toml     # install conditions and copy/link target (optional)
└── setup/
    ├── _lib.zsh           # shared utilities (colors, logging)
    ├── Brewfile           # Homebrew formulae, casks, mas apps and vscode extensions
    ├── bootstrap.zsh      # full machine setup
    ├── sync.zsh           # symlinks package files and copies assets
    ├── prune-symlinks.zsh # removes orphaned symlinks left by renamed/removed package files
    └── macos.zsh          # sensible macOS defaults

New Machine Setup

Warning

Works on my machine! Review the installation scripts and package files before adopting.

  1. Clone the repo:
git clone https://github.com/vasylromanets/dotfiles.git ~/.dotfiles
  1. Run the bootstrap script:
~/.dotfiles/setup/bootstrap.zsh
# or: cd ~/.dotfiles && make bootstrap

Bootstrap process

This will:

  • Install Xcode Command Line Tools
  • Install Homebrew
  • Install formulae, casks, App Store apps and VS Code extensions from Brewfile
  • Symlink package files and copy assets
  • Configure Git and SSH
  • Apply macOS defaults

You'll be prompted before each step.

Updating

After adding or modifying package files, re-run sync.zsh to apply them:

~/.dotfiles/setup/sync.zsh
# or: cd ~/.dotfiles && make sync

Renaming or removing a package file can leave a stale symlink behind. Run prune-symlinks.zsh occasionally to clean those up:

~/.dotfiles/setup/prune-symlinks.zsh
# or: cd ~/.dotfiles && make prune-symlinks

Package Setup

Each package may optionally include a setup.toml. Packages without one are always processed, symlinking link/ to ~ by default.

# Skip this package if the CLI tool/GUI app is not installed
[requires]
command = "bat" # checked via command -v
app = "Ghostty" # checked via /Applications/Ghostty.app

# Override symlink destination (defaults to ~)
[link]
target = "~"

# Copy files from copy/ to this directory
[copy]
target = "~/Library/..."

[requires] accepts command, app, or both. [link] is rarely needed since ~ is the default. [copy] is only used by packages that can't be symlinked because of macOS sandboxing (e.g. any app installed from the Mac App Store).

A package can also define hooks/pre-setup.zsh and/or hooks/post-setup.zsh for setup steps beyond symlinking/copying (e.g. resolving plugin dependencies). Both are optional and run only for packages that pass [requires].

Appearance

Credits

Many thanks to the dotfiles community for sharing their insights and configurations over the years.

setup/bootstrap.zsh is based on Denys Dovhan's bootstrap.sh.

setup/macos.zsh is inspired by Mathias Bynens' .macos.

About

$HOME as code

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages