summaryrefslogtreecommitdiff
path: root/Brewfile
blob: bbf4f2abbe05fe69a9c0d120d001cd273ae6d513 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# The account's tools: what this repo's own config and scripts use, so that a
# machine with only this repo has what the shell, editor and terminals expect,
# plus the handful of Mac apps this account wants on any machine it uses.
# What is not here: per-machine apps and toolchains -- install those by hand --
# and server software, which comes from whatever provisions that machine.
# install.sh applies this with `brew bundle`, which only adds.

# Something breaks without these.
brew "bash"                # macOS ships 3.2. szecret's fallback that fetches
                           # age -- the path taken before this file is applied
                           # -- dies there on `${os,,}`, and config/bashrc
                           # looks for the bash-completion 2.x that needs 4.2
brew "tmux"                # both terminals start every window in tmux
brew "neovim"              # the editor; vi, vim and git all call nvim
brew "age"                 # szecret
brew "git"
brew "git-lfs"             # config/git/config sets up the lfs filter
brew "fzf"                 # zshrc loads its key bindings from Homebrew

# Used when present.
brew "bat"                 # man pages, fzf previews
brew "lsd"                 # ls
brew "ripgrep"             # nvim's grep
brew "the_silver_searcher"
brew "gh"                  # config/profile hands it the GitHub token
brew "mosh"                # alacritty-mosh, mosh-tmux.sh
brew "terminal-notifier"   # bin/notify
brew "fswatch"             # bin/sz-wait-for
brew "xz"                  # bin/dot-request, for requests over 400 KB
brew "n"                   # node versions, under $N_PREFIX
brew "bash-completion"
brew "shellcheck"
brew "tree-sitter-cli"     # nvim-treesitter generates and compiles parsers with it

# Wanted on any machine this account uses, though nothing here reads them.
brew "glow"                # markdown rendered in the terminal

# Not alacritty: Homebrew disabled that cask on 2026-09-01 (it fails the
# Gatekeeper check), so install.sh installs it from the release DMG, pinned.
cask "hammerspoon"
cask "neovide-app"
# Wanted on any Mac this account uses, though nothing here depends on it.
cask "keepingyouawake"     # menu-bar toggle that stops the Mac sleeping
cask "jordanbaird-ice"     # Ice: hides and arranges the menu bar itself

# Not in homebrew-cask, so it comes from the author's own tap, with what that
# means: nobody reviewed the cask, and the tap can change what it installs
# between two runs of install.sh, which applies this file again every time.
# What earns it that: the app is signed with a Developer ID and notarized
# (checked 2026-10-01), so macOS can still say who shipped it.
#
# toggleMute was here too and was dropped: ad-hoc signed, no TeamIdentifier,
# and `spctl -a` rejecting the bundle as modified since signing. It only runs
# with its quarantine flag cleared, and nothing in a shared setup script should
# quietly put an unverifiable binary past Gatekeeper on every machine.
tap "b451c/quickmd"
cask "b451c/quickmd/quickmd"  # qmd.app: native markdown viewer, live preview,
                              # AppKit rather than Electron

# Only where no Ghostty is installed yet: a machine running the ghostty@tip
# build would collide with a second cask over /Applications/Ghostty.app.
cask "ghostty" unless File.exist?("/Applications/Ghostty.app")

# Every Nerd Font Homebrew has, asked at run time rather than listed, so new
# families arrive without editing this file. brew bundle evaluates it with no
# brew on PATH, hence the full path it passes in HOMEBREW_BREW_FILE.
brew_bin = ENV.fetch("HOMEBREW_BREW_FILE") { "#{ENV.fetch("HOMEBREW_PREFIX", "/opt/homebrew")}/bin/brew" }
`"#{brew_bin}" search --cask nerd-font`.split.grep(/\Afont-.*-nerd-font\z/).each { |font| cask font }