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
The floor plan at a glance:
* manual configuration required
** experimental container support
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.
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)"
Manually clone this repo and run unpack.sh
.
git clone https://github.com/boldandbrad/dotfiles.git ~/Dotfiles
cd ~/Dotfiles && ./unpack.sh
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
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.
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 |
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
.
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 |
Docs coming soon.
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.
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 |
There are tons of great dotfile and machine setup repos out there. In particular, I took inspiration from these gems:
- dreamsofcode-io/dotfiles - nvim and tmux configs
- lissy93/dotfiles - install scripts and repo structure
- stefanzweifel/dotfiles
- superatomic/dotfiles
- webpro/dotfiles
- Roadmap - planned changes and updates to this repo
- boldandbrad docs π - my personal dev docs
- Dotfiles Community π - a great collection of dotfile resources
- dotfyle π - discover neovim plugins and configurations, including mine
Copyright (c) 2021-present Bradley Wojcik. Released under the MIT License. See LICENSE for details.