Skip to content

πŸ’» Automated macOS setup and .file management

License

Notifications You must be signed in to change notification settings

boldandbrad/dotfiles

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🏠 boldandbrad's humble dotfiles

Welcome $HOME!

This repo makes moving into your new mac a breeze by automatically furnishing it with your favorite app(liance)s, and giving you powerful tools to maintain it.

I have made my dotfiles open source to serve as a blueprint and inspiration for others. Whether or not dotfile repos should be forked is a topic of hot debate. If you do fork this repo, I strongly recommend you personalize the contained files before unpacking.

Jump to: ✨ TL;DR | πŸŽ₯ Demo | πŸ“¦ Unpack | πŸ› οΈ Maintain | πŸ›‹οΈ Contents | πŸ–ŒοΈ Personalize | πŸ’‘ Inspiration | πŸ“š Resources

✨ TL;DR

The floor plan at a glance:

Operating System macOS
Launcher and Window Tiler raycast*
Browser arc duckduckgo
Package Manager homebrew
Dotfile Manager dotbot
Env, Alias and PATH Manager aliae
Terminal Emulator wezterm
Terminal Multiplexer tmux
Shell zsh
Shell Prompt oh-my-posh
Editor neovim vscodium
Version Control git lazygit
Typeface anonymous-pro
Theme / Colorsheme catppuccin-mocha
Programming Langauges golang rust deno python

* manual configuration

πŸŽ₯ Demo

Gif/Video coming soon.

πŸ“¦ Unpack

Warning

Before unpacking, review the repo contents to make sure they match your style and backup your existing configs.

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/boldandbrad/dotfiles/main/ship.sh)"

This will download and run ship.sh, which clones this repo to ~/Setup/dotfiles (if not present), and then prompts you to run unpack.sh.

Alternatively you can clone the repo yourself and run unpack.sh manually.

git clone --recursive https://github.com/boldandbrad/dotfiles.git ~/Setup/dotfiles
cd ~/Setup/dotfiles && ./unpack.sh

The unpack script explains what it will do, prompts before doing so, and is idempotent. This means it can be safely run multiple times without compounding changes or breaking.

In brief, unpacking does the following:

  • βœ… Verify system compatibility
  • πŸ”„ Check and prompt for system updates
  • ⬇️ Install or update user packages and apps
  • πŸ”— Symlink user dotfiles and configs
  • βš™οΈ Apply user system settings
  • 🌱 Clone user github repos

Continue reading for more details on what to expect.

πŸ› οΈ Maintain

To make system maintanence simpler post-unpack, a handful of convenient aliases are provided. Invoke these from anywhere.

Command Description
sys-refresh Rerun system setup (unpack.sh)
sys-clean Clean system caches and app data (❌ Coming soon)
dot-commit Persist current dotfiles to github (❌ Coming soon)
dot-relink Relink installed dotfiles
zsh-reload Reload shell environment (.zshrc)
dep-check Check if all apps and dependencies are installed
dep-refresh Install/update all apps and dependencies
dep-prune Uninstall apps and dependencies that aren't needed
git-reclone Reclone user github repos

πŸ›‹οΈ Contents

The contents of this repo are organized into a few high level directories.

dotfiles/
β”œβ”€β”€ config/         # Config files for packages and apps. Symlinked by dotbot.
β”‚  └── ..
β”œβ”€β”€ scripts/        # Shell scripts for system and tool setup. Called by unpack.sh.
β”‚  └── ..
β”œβ”€β”€ vendor/         # Dependencies which are managed as git submodules.
β”‚  └── ..
β”œβ”€β”€ ..
β”œβ”€β”€ Makefile        # Helpful development commands.
β”œβ”€β”€ ship.sh         # Remote installation script.
β”œβ”€β”€ unpack.sh       # Main installation and setup script.
└── symlinks.yaml   # Dotbot symlink configuration.

Configs

The config/ directory contains config files for packages and apps. They are symlinked to their respective locations on the system by dotbot as specified in symlinks.yaml at the repo root.

Most packages and apps respect the XDG base directory specification to determine where to store configurations and data. This creates consistency and predictability while keeping your $HOME free of clutter.

The following XDG variables are defined in .aliae.yaml, which is sourced before symlinking.

Env Variable Location
XDG_BIN_HOME ~/.local/bin
XDG_CACHE_HOME ~/.local/var/cache
XDG_CONFIG_HOME ~/.config
XDG_DATA_HOME ~/.local/share
XDG_LIB_HOME ~/.local/lib
XDG_STATE_HOME ~/.local/state

Scripts

The scripts/ directory contains shell scripts that automate system and tool setup. This includes OS specific scripts for installing apps and dependencies, and system configurations. Most of these scripts are called directly from unpack.sh at the repo root.

Docs coming soon.

πŸ–ŒοΈ Personalize

If you have cloned or are reusing snippets from this repo for your own system setup, there are a handful of things that should change before unpacking.

  • Change the value of GITHUB_USER username in both ship.sh and unpack.sh. This is used to automatically clone your public git repos, including this one.
  • Search for and replace all other 'boldandbrad' references with your preferred user name or value.

πŸ’‘ Inspiration

There are tons of great dotfile and machine setup repos out there. In particular, I took inspiration from these gems:

πŸ“š Resources

βš–οΈ License

Copyright (c) 2021-present Bradley Wojcik. Released under the MIT License. See LICENSE for details.