bootstrap: install Homebrew and DotSlash, then run frork
Assisted-by: Claude Opus 5 via Claude Code
change slxtqynvkxmspxszkxpozsmllvzmpzvo
commit 1e4130056acfb428b8ea35fb9a2d16c30e3bf617
author Alpha Chen <alpha@kejadlen.dev>
date
parent kzunrutu
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 "$@"