<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dot.git/config/ghostty, branch master</title>
<subtitle>Shell, editor and terminal configuration, and the tools that go with them
</subtitle>
<id>https://git.soarez.net/sz/dot.git/atom?h=master</id>
<link rel='self' href='https://git.soarez.net/sz/dot.git/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/dot.git/'/>
<updated>2026-10-19T08:44:03+00:00</updated>
<entry>
<title>ghostty: stable update channel, download updates in the background</title>
<updated>2026-10-19T08:44:03+00:00</updated>
<author>
<name>Igor Soarez</name>
<email>igor@soarez.org</email>
</author>
<published>2026-10-19T08:44:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/dot.git/commit/?id=0a0471fef4fab3c9040d5b929e314a7aad787dbf'/>
<id>urn:sha1:0a0471fef4fab3c9040d5b929e314a7aad787dbf</id>
<content type='text'>
The tip channel ships a build for every commit to main, so ghostty offered
an update every day. Stable prompts only for tagged releases, and
auto-update = download fetches it before asking.

A Mac already on a tip build is ahead of stable and Sparkle will not
downgrade it: install the latest stable on it once by hand.

From dot request 20261019-093208-work-laptop-2881de.
</content>
</entry>
<entry>
<title>theme-gen: derive tmux and ghostty colours for any theme</title>
<updated>2026-10-17T10:07:32+00:00</updated>
<author>
<name>Igor Soarez</name>
<email>igor@soarez.org</email>
</author>
<published>2026-10-17T10:07:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/dot.git/commit/?id=95056eacdff97a710129bbb29e707ab83f5faa72'/>
<id>urn:sha1:95056eacdff97a710129bbb29e707ab83f5faa72</id>
<content type='text'>
`theme --set &lt;mode&gt; &lt;name&gt;` needs a tmux conf and a ghostty colour file that
alacritty-format themes do not provide, so such a name fell back to the
generic dark/light tmux colours and left ghostty unchanged, exiting 0.
bin/theme-gen reads a theme in alacritty .toml format (by alacritty-theme
checkout name or path) or Ghostty's bundled `palette = N=#hex` format, and
writes config/tmux/colors/&lt;name&gt;.conf and config/ghostty/colors/&lt;name&gt;, plus
config/alacritty/colors/&lt;name&gt;.toml for a ghostty-format source.

Generated with it: sonokai, solarized_osaka_night, kanagawabones and
dracula_plus_high_contrast, with nvim stand-ins for the three that have no
nvim port installed.

Parsed keys go through eval, so only plain section.key names and hex values
are accepted: a theme file could otherwise run commands.

From dot request 20261017-110255-work-laptop-48c22c.
</content>
</entry>
<entry>
<title>hammerspoon, ghostty: example files for their machine-local configs</title>
<updated>2026-09-21T14:41:45+00:00</updated>
<author>
<name>Igor Soarez</name>
<email>igor@soarez.org</email>
</author>
<published>2026-09-21T14:41:45+00:00</published>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/dot.git/commit/?id=7f0049952bba4ef0e22bf25dc85da6cdfe38f104'/>
<id>urn:sha1:7f0049952bba4ef0e22bf25dc85da6cdfe38f104</id>
<content type='text'>
ssh and git each ship one; these two hooks were discoverable only by reading
the config that loads them. Both examples carry what is easy to get wrong:
init.lua's hotkey() helper and mod tables are locals, so a local.lua calls
hs.hotkey.bind directly, and a binding there can only be shadowed, never
deleted; in Ghostty a single-value key replaces while keybind accumulates, and
`ignore` is how a binding is switched off rather than added to.

Checked rather than assumed: the lua parses, and the Ghostty example validates
and, dropped in as ~/.config/ghostty-local, does what it says -- font-size,
command and background-opacity replaced, super+shift+n added, alt+enter turned
off.
</content>
</entry>
<entry>
<title>ghostty: read ~/.config/ghostty-local last, where a machine has one</title>
<updated>2026-09-21T14:18:53+00:00</updated>
<author>
<name>Igor Soarez</name>
<email>igor@soarez.org</email>
</author>
<published>2026-09-21T14:18:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/dot.git/commit/?id=6c159347d75cc65536564d13d3ad2fe1c6d0a183'/>
<id>urn:sha1:6c159347d75cc65536564d13d3ad2fe1c6d0a183</id>
<content type='text'>
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.
</content>
</entry>
<entry>
<title>install.sh: install Homebrew, add bash, and seed the colour files</title>
<updated>2026-09-21T11:37:35+00:00</updated>
<author>
<name>Igor Soarez</name>
<email>igor@soarez.org</email>
</author>
<published>2026-09-21T11:37:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/dot.git/commit/?id=352bd588135b62f0da548d22188c829143bdbe32'/>
<id>urn:sha1:352bd588135b62f0da548d22188c829143bdbe32</id>
<content type='text'>
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.
</content>
</entry>
<entry>
<title>dotfiles</title>
<updated>2026-09-17T18:45:23+00:00</updated>
<author>
<name>Igor Soarez</name>
<email>igor@soarez.org</email>
</author>
<published>2026-09-17T18:45:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/dot.git/commit/?id=13cc065ec014b86369dfe4ad60d1a43fa06fd251'/>
<id>urn:sha1:13cc065ec014b86369dfe4ad60d1a43fa06fd251</id>
<content type='text'>
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.
</content>
</entry>
</feed>
