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

screenshot


πŸ—οΈ Welcome $HOME

These dotfiles simplify moving into a new workstation by automatically furnishing it with your favorite app(liance)s, and setting up power(ful) tools so you can maintain it.

Warning

I have made my floor plan open source to serve as a blueprint and inspiration for others. However, these dotfiles are both highly customized and volatile. Feel free to explore the contents and use what you like, but I do not recommend forking.


✨ TL;DR | πŸ“¦ Unpack | πŸ›‹οΈ Contents | πŸ› οΈ Maintain | πŸ’‘ Inspiration | πŸ“š Resources


✨ TL;DR

The floor plan at a glance:

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

* manual configuration required

** experimental container support


πŸ“¦ Unpack

Setup and installation is handled by 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 to keep the system in sync 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

Warning

Before unpacking, review the repo contents and backup any pre-existing configs.

Get it Delivered

Automatically download and run ship.sh, which clones this repo to ~/Dotfiles (if not present) and then prompts you to run unpack.sh.

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

Haul it Yourself

Manually clone this repo and run unpack.sh.

git clone https://github.com/boldandbrad/dotfiles.git ~/Dotfiles
cd ~/Dotfiles && ./unpack.sh

Mobile Home

Note

Container support is a work in progress and considered experimental.

A taste of home when you're on the road goes a long way. Spin up a simplified version of this setup in a cozy alpine linux container (requires podman).

git clone https://github.com/boldandbrad/dotfiles.git ~/Dotfiles
cd ~/Dotfiles
make build
make run

πŸ›‹οΈ Contents

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

dotfiles/
β”œβ”€β”€ bin/            # Custom executables and scripts. Appended to PATH by aliae.
β”‚  └── ..
β”œβ”€β”€ config/         # Config files for packages and apps. Symlinked by aliae.
β”‚  └── ..
β”œβ”€β”€ util/           # Scripts and utilities for specific system and tool setup. Sourced by unpack.sh.
β”‚  └── ..
β”œβ”€β”€ ..
β”œβ”€β”€ Makefile        # Helpful development commands.
β”œβ”€β”€ ship.sh         # Remote installation script.
└── unpack.sh       # Main installation and setup script.

Bin

The bin/ directory contains custom executable binaries and shell scripts. The directory is automatically appended to PATH by aliae on shell startup.

Executables

Invoke these from anywhere.

Executable Description
cleanpods Clean podman caches without confirmation, and print podman disk usage
flushdns Flush macOS dns records
license Create an MIT license file in the current working directory
today Return today's date in YYYY-MM-DD format
togglehidden Toggle showing hidden files in macOS Finder
trash Move items to trash

Config

The config/ directory contains config files for user packages and apps. They are symlinked to their respective locations on the system by aliae as specified in aliae.yaml.

XDG Base Directories

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

XDG Variables

The following XDG variables are defined in aliae.yaml, and are sourced on shell startup before symlinking configs.

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

Configs

Docs coming soon.

Util

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

Docs coming soon.


πŸ› οΈ Maintain

To make system maintanence simpler after unpacking, 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

πŸ’‘ 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.