bootstrap: install Homebrew and DotSlash, then run frork
Assisted-by: Claude Opus 5 via Claude Code
diff --git a/Brewfile b/Brewfile
index db972e83..11680d7e 100644
--- a/Brewfile
+++ b/Brewfile
@@ -7,6 +7,7 @@ brew "chruby"
brew "curl"
brew "docker"
brew "dockutil"
+brew "dotslash"
brew "entr"
brew "eza"
brew "ffmpeg"
diff --git a/README.md b/README.md
index 136704f0..b335da6b 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,39 @@
-# Dotfiles
+# dotfiles
-This repo contains both my dotfiles as well as [Ansible][ansible] playbooks to
-provision new machines.
+## Bootstrapping
+
+macOS things:
+
+- In System Settings
+ - General > Sharing
+ - [ ] Set computer name (to make SSH easier)
+ - [ ] Enable Remote Login
+ - Menu Bar
+ - [ ] Automatically hide and show the menu bar: Always
+ - [ ] Show menu bar background
+ - Displays
+ - [ ] More Space
+ - Keyboard > Keyboard Shortcuts > Modifier Keys
+ - [ ] Caps Lock (⇪) -> Control (⌃)
+
+```sh
+git clone https://git.kejadlen.dev/alpha/dotfiles.git ~/.dotfiles
+~/.dotfiles/bootstrap.sh
+```
+
+`bootstrap.sh` installs Homebrew and DotSlash, then runs `frork` to handle
+the rest.
+
+Other non-automatable things:
+
+- [ ] Unlock with Apple Watch
+- [ ] 1Password
+- [ ] CleanShot X
+- [ ] Hamerspoon
+- Firefox Developer Edition
+ - [ ] [uBlock Origin hard mode](https://github.com/gorhill/uBlock/wiki/Blocking-mode:-hard-mode)
+- [ ] MailMate
+- [ ] Syncthing
## Hammerspoon and Fennel
diff --git a/bootstrap.sh b/bootstrap.sh
index 608259b5..add7ca45 100755
--- a/bootstrap.sh
+++ b/bootstrap.sh
@@ -1,42 +1,27 @@
-#!/usr/bin/env zsh
+#!/usr/bin/env bash
set -euo pipefail
if [[ "${TRACE-0}" == "1" ]]; then
set -o xtrace
fi
-cd "$(dirname "$0")"
+dotfiles="$(cd "$(dirname "$0")" && pwd)"
main() {
if ! command -v brew &> /dev/null; then
- echo "Error: Homebrew is required but not installed."
- echo "Please install Homebrew first: https://brew.sh/"
- exit 1
- else
- echo "Homebrew is installed."
+ /bin/bash -c "$(curl --fail --silent --show-error --location https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
fi
+ # A fresh Homebrew install isn't on PATH until the shell config is linked.
+ eval "$(/opt/homebrew/bin/brew shellenv)"
- if ! command -v ansible &> /dev/null; then
- echo "Installing Ansible via Homebrew..."
- brew install ansible
- else
- echo "Ansible is already installed."
+ if ! command -v dotslash &> /dev/null; then
+ brew install dotslash
fi
- mkdir -p ~/src/boxen
+ # frork shells out to DotSlash tools like bat, which live in bin/.
+ export PATH="$dotfiles/bin:$PATH"
- if [ ! -d "$HOME/src/boxen" ]; then
- echo "Cloning boxen repository..."
- mkdir -p "$HOME/src"
- git clone https://git.kejadlen.dev/alpha/boxen.git "$HOME/src/boxen"
- else
- echo "Boxen repository already exists. Updating..."
- cd "$HOME/src/boxen"
- git pull
- fi
-
- cd "$HOME/src/boxen"
- ansible-playbook -l localhost local/main.yml
+ "$dotfiles/bin/frork" satisfy "$dotfiles/frork/main.fnl"
}
main "$@"