summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2026-09-21ghostty: read ~/.config/ghostty-local last, where a machine has oneIgor Soarez
Ghostty had no way to differ per machine. It cannot take the shape the other tools use -- a file beside the linked one -- because link.sh links this whole directory, so ~/.config/ghostty is the checkout itself and a sibling file would be an untracked file in the repo every machine shares. An optional include at the end does the same job: later values replace earlier ones, so a local file overrides anything here, the theme colours included, and its keybinds add to these. Verified against the shipped config: font-size 12 becomes 18 with a local file, back to 12 without, and the config still validates when there is none.
2026-09-21hammerspoon: load ~/.config/hammerspoon/local.lua where a machine has oneIgor Soarez
The shell has ~/.localprofile and ssh and git their config-local; Hammerspoon had nothing, so a machine wanting one different hotkey had to edit the file every machine shares. Only init.lua is linked, so the directory around it is already the machine's own -- a sibling file there is in no repo. Loaded last, so it can override anything above, and through pcall: a mistake in a local file must not take the rest of the config down. Reload with ctrl-shift-alt-h as usual.
2026-09-21zshrc: find Homebrew's completions on the prefix this machine usesIgor Soarez
fpath carried /usr/local/share/zsh-completions, which is wrong twice over: Apple Silicon puts Homebrew under /opt/homebrew, and formulae install their completions into share/zsh/site-functions, not the share/zsh-completions of the formula by that name. The directory existed on neither Mac, so _brew, _bat, _deno and the rest have been missing all along -- silently, since a missing fpath entry says nothing. All four candidates are probed now, HOMEBREW_PREFIX first where a machine exports it. No `brew --prefix`: that forks on every interactive shell, and this file already pays for one of those further down.
2026-09-21Brewfile: keepingyouawake, and say that Mac apps belong hereIgor Soarez
Installed by hand on machine after machine, which is the signal it belongs in the list. Nothing in this repo uses it, so the header now says what the casks were already doing: the few Mac apps this account wants wherever it works, alongside the tools the config itself needs.
2026-09-21supermaven off unless asked for; a blocked cask no longer ends install.shIgor Soarez
Supermaven was running everywhere. Its `condition` option reads the other way round from what the code assumed -- `true` stops it -- so `return false` meant "never stop", and the plugin loaded on InsertEnter, started its agent and offered inline suggestions on every machine. Only blink's source for it was off, which is what made it look disabled. It sends buffer context to a third party, so it is now opt-in: DOT_SUPERMAVEN=1, in ~/.localenv where it is wanted. Off, lazy keeps both plugins off disk entirely. install.sh no longer stops at brew bundle either. A managed machine can refuse a cask outright -- "disabled because it does not pass the macOS Gatekeeper check" -- and brew bundle fails the whole run for one such entry, which left the checkouts, nvim plugins and colour files undone. It warns and carries on; brew has already named the entry.
2026-09-21Brewfile: say why bash is here, correctlyIgor Soarez
The reason given named bin/open, which does not need it: on macOS it execs /usr/bin/open on line 13, before anything 3.2 cannot parse. What does need it is szecret's age bootstrap -- `${os,,}` in secrets/common.sh, reached only when age is absent, which is precisely the state a machine is in before this file has been applied.
2026-09-21install.sh: install Homebrew, add bash, and seed the colour filesIgor Soarez
Three things a machine set up from this repo alone hit on its first run: Homebrew was a dead end -- install.sh printed the command and exited, leaving the one prerequisite everything else needs to be run by hand. It installs it now, NONINTERACTIVE so it does not wait on a RETURN; the sudo password is still asked for, which is why this script is run by hand. bash was missing from the Brewfile, so bin/open and secrets/ ran under the 3.2 macOS ships and failed on `${v,,}`; config/bashrc also looks for the bash-completion 2.x that wants 4.2. Ghostty refused to start -- "error opening config-file ... error.FileNotFound" -- because config-file pointed at the colour file bin/theme writes, which does not exist until theme has run. The include is optional now (`?`), and this script seeds the colour files when a machine has none, leaving a machine that already has a theme alone.
2026-09-21link: a part named in ~/.config/dot/skip does nothing on that machineIgor Soarez
A machine may need one of the parts left out: on a laptop it does not own, ~/.claude/settings.json is the owner's, holding their environment and plugins, and linking this account's over it is wrong in both directions -- theirs is lost, and anything of theirs worth keeping would have to be carried here, in the repo every machine shares. The file is hand-written and in no repo, like ~/.localenv, so the exception stays on the machine that needs it. The check is in link/lib.sh, as each part starts, rather than in link.sh's loop, so `link/claude.sh yes` obeys it too; link.sh and other repos' link.sh source that file as well, and sit outside link/, so their names can never be read as a part's.
2026-09-18link/claude: secrets in MCP specs, and a separate spec for DesktopIgor Soarez
Two things a spec in ~/.config/claude/mcp-servers.d/ may now carry beyond what Claude Code takes, both resolved at link time: - "${szecret:NAME}" in any string value, replaced with `szecret get NAME` when the server is registered with Claude Code. For a remote server's Authorization header: Claude Code's own headersHelper is not run in a workspace without persisted trust, which includes $HOME, so a token fetched that way is simply missing. A secret that cannot be read skips that server, loudly. - "desktop", a whole spec given to Claude Desktop instead. Desktop only starts local stdio servers, so a layer that moves a server to HTTP for Claude Code can keep Desktop on a local copy.
2026-09-17dotfilesIgor Soarez
Shell, editor and terminal configuration, the tools that go with them, and szecret, an age-based secret manager whose store lives elsewhere. History restarts here. What came before was not written to be read by anyone else, and carried machine names, addresses and an encrypted secret store; it is kept privately instead. What is left is meant to be safe on any machine, including one whose owner is not me: see CLAUDE.md for the rule it is written to.