The previous `[include] path = .gitconfig.user` was resolved relative to
the config file being read, which — because `~/.gitconfig` is a symlink
to `~/.yadr/git/gitconfig` — meant git looked for the user-identity
override at `~/.yadr/git/.gitconfig.user` instead of the conventional
`~/.gitconfig.user`. Switch to an absolute path so the include picks up
the homedir file regardless of symlink layout.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The previous deploy_one() did `mv $HOME/<dir> $BACKUP_DIR/<dir>` then
`cp -a $YADR_DIR/<dir> $HOME/<dir>` for every entry in PERSONAL_DIRS.
For dirs the repo only partially populates (notably .local — repo only
tracks .local/bin/), this swept away unrelated user data: the most
recent re-bootstrap moved ~/.local/share/fonts/ (Intel One Mono, Open
Gorton, Roboto Mono, GALLAUDET, code128) into the timestamped backup,
making them appear missing.
Rework deploy logic:
- deploy_file: copies one file/symlink, backing up only the conflicting
destination (if any). Idempotent via paths_equivalent() so re-runs
with no changes produce no output and no spurious backups.
- deploy_dir: walks the repo's tree for that dir and deploys each leaf
via deploy_file. Files in $HOME the repo doesn't know about are left
untouched. Subdirs are mkdir'd as needed.
Also: track the personal fonts at .local/share/fonts/ so they redeploy
on every install, and run fc-cache -f at the end so apps see them
without a logout/login.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
~/ascii is a symlink to ~/.yadr/ascii. Without -L, 'find <symlink>'
treats the link itself as the starting point, -type f rules it out,
and fuzzy matches return nothing.
New .local/bin/spam-ascii POSIX shell script: resolves a pattern to
a file in ~/ascii with this order:
1. exact filename match
2. exact name + common ASCII-art extension (.txt/.ans/.asc)
3. first case-insensitive substring match (sorted alphabetically)
Non-zero exit + stderr-ish error if nothing matches, so /spam
prints 'no match in ~/ascii for: <pattern>' instead of spewing
a missing-file error.
Rewire the irssi /spam alias to call the script instead of
hardcoding 'cat ~/ascii/$0'. Now:
/spam mario -> matches ~/ascii/mario.txt or ~/ascii/Mario_art.ans
/spam MARIO -> case-insensitive
/spam nothere -> 'no match in ~/ascii for: nothere'
/spam <name> runs 'cat ~/ascii/<name>' via EXEC -out, which sends
each line of output as a message to the current channel/query. Good
for posting ASCII art.
Usage: /spam <filename> (file lives at ~/ascii/<filename>)
- rainbow-dark.theme: revert line_start back to the stock '-!-' pattern.
- .irssi/scripts/autorun/rainbow-timestamp.pl: new autorun script that
hooks 'print text', matches a leading HH:MM[:SS], and reruns it
through rainbow.pl's make_colors (same palette [4,8,9,11,12,13],
same 2-char stride, same phase-advance on each line). The result
is that every successive timestamp is a 5-character rainbow
gradient that also shifts starting colour line-to-line.
claude.theme: a dark irssi theme whose colours map 1:1 to the roles
Claude Code uses in its default dark UI:
#8c8c8c dim timestamps, brackets, connective text
#f85149 red errors, netsplits, parts, private msg frames
#56d364 green joins, ctcp, dcc, netjoins, quiet activity
#e3b341 yellow messages-to-me, /me, statusbar chatter
#4a9eff blue channel names, pubnicks, diff-style accents
#c9a3ff magenta own nick / prompt / notices / hilights
#4ec9b0 cyan whois field names, info lines
Uses 24-bit true-colour escapes (%z<rrggbb>) so the shades land
exactly regardless of terminal palette. Requires irssi 1.2+ and a
truecolour-capable terminal (modern xterm/tmux both are).
irssi/config: switch the active theme from rainbow-dark to claude.
Autorun script so the same drunkendotfiles deploy gives each host a
distinctive nick without per-host config hand-edits. Trims FQDNs to
the short hostname before composing. Static 'nick = "`"' in
config stays as a fallback if the script ever fails to load.
R-Y-G-C-B-M was only six. Full spectrum now: red, orange (%y dark
yellow, renders brown-orange on most terminals), yellow, green,
blue, indigo (%b dark blue as the closest ANSI indigo), violet
(%M bright magenta). Stays ANSI-only so it renders reliably
regardless of 24-bit truecolor support.
Scrap the over-engineered version. Start from irssi's default theme
(already dark-safe) and apply rainbow only where it actually earns
its keep:
- line_start: the leading '-!-' on non-message lines gets a full
R-Y-G-C-B-M dash sequence instead of blue-blue.
- sb_act_msg: drop the %W (white) on statusbar activity — on a dark
terminal this was the one stark-white glyph. Re-colour the whole
activity band as a rainbow escalation: %G (quiet) -> %Y (chatter)
-> %R (hilight), so urgency tracks the colour.
- sb_act_sep: comma separator drops to %K (dark grey) so the rainbow
entries stand apart.
Everything else stays untouched from default.theme. No invented
24-bit escapes, no format overrides.
Previous commit used %Z005f5f, which irssi 1.4 interprets as a
24-bit *background* colour. That rendered as 'teal background
behind each affected character' — easy to miss on short glyphs,
invisible on whitespace. Foreground is %z (lowercase).
Earlier pass tried %X17 (256-palette idx 23), but %X isn't the
256-colour code in modern irssi — 1.4+ treats %X as a no-op for
unknown sequences, so every intended teal element was silently
falling through to the terminal default (= bright white).
irssi 1.4.5 supports %Z<rrggbb> for 24-bit foreground colour, so
use it directly: %Z005f5f renders as exactly #005f5f (dark teal),
no palette guessing.
Every %K (dark grey / bright-black) swapped for %X17 — 256-colour
foreground 0x17 == palette index 23, RGB #005f5f, a very dark
teal/cyan. Applies to: body text, bracket/punctuation replaces,
message-body dim, connective text in join/part/quit/etc. formats,
dccfile name, whois values, servernotice body, wallop body.
Requires a 256-colour-capable terminal; irssi renders %X17 as
palette 23 when the terminal advertises 256 colour support (most
modern terminals do — .tmux.conf already sets TERM=screen-256color).
- Body text color bumped from %w (light grey, sometimes renders ~white)
to %K (dark grey / 'bright black'), affecting msgnick and all action
templates.
- Statusbar / info bg changed from %8 (terminal default, which some
terminals render as reverse-video white) to explicit %0 (black) so
the bar is reliably dark everywhere.
- Added color to spots that were falling through to terminal default:
whois values, servernotice body, wallop_nick, wallop_action body,
dccfile.
- Expanded 'fe-common/core' formats block to override joins, parts,
quits, kicks, nick/topic/mode changes, aways etc. — coloured nicks
via the existing abstracts but the surrounding 'has joined' /
'changed the topic' verbiage now renders in dim grey instead of
stark white.
rainbow-dark.theme:
- Message body text now tinted dim grey (%w) instead of inheriting
terminal-default (usually stark white) — done via a trailing %w in
the msgnick template.
- Own nick in public, private, and DCC contexts switches from bold
white (%W) to bold bright magenta (%M) so 'you' stays distinct but
stops looking like every other bright-white element.
- Action bodies (public, private, DCC) get the same %w dim-grey tint.
.irssi/config: add W1..W99 aliases so /w1, /w2, ... /w99 jump
directly to that window (pair to the existing bare numeric /1 /2
aliases, for users whose muscle memory has 'w' in it).
The skwp prompt's precmd calls git-info and ruby-info (prezto module
functions that live in ~/.zprezto/modules/{git,ruby}/functions). On
interactive shell startup, something — likely compinit's
insecure-directory pruning when parent dirs are group-writable —
strips those paths from $fpath after pmodload seeded them.
When precmd then references the autoload-declared-but-unfindable
functions, zsh fails to locate the definition file, aborts the
prompt render midway through, and zsh-syntax-highlighting latches
onto the broken half-prompt. Observed symptoms:
prompt_skwp_precmd: git-info: function definition file not found
prompt_skwp_precmd: ruby-info: function definition file not found
zsh: bad math expression: operand expected at '%F{135}%n%...'
_zsh_highlight_call_widget:2: bad math expression: operand...
Defensive re-seed: before calling 'prompt skwp', prepend the helper,
git, and ruby module function dirs to $fpath if they aren't already
present. Idempotent, cheap, and masks any upstream stripping
regardless of cause.
Adds a step after personal-dotfile deploy that runs Anthropic's
official one-liner installer (curl -fsSL https://claude.ai/install.sh | bash)
when no 'claude' binary is found. No-ops if claude is already on the
machine. Opt out with DRUNKENDOTFILES_SKIP_CLAUDE=1. Install failures
are non-fatal — the rest of the flow still completes.
README: document the new step + the opt-out env var + curl in the
required tools list.
install.sh: use --recurse-submodules on the initial clone, and always
run 'git submodule update --init --recursive' before rake install so a
fresh checkout doesn't leave zsh/prezto empty.
README: document --recurse-submodules for manual clones; mention the
recovery command for existing shallow clones.
Fixes: bad math expression errors and 'no such file or directory:
~/.zprezto/runcoms/zshrc' on fresh shell startup when the Prezto
submodule hadn't been initialized.
The DigitalOcean metadata endpoint for reserved/floating IPv4 is
/metadata/v1/{reserved,floating}_ip/ipv4/ip_address, not .../address.
The .../active check works but the wrong IP path returned an empty
body, causing the script to silently fall through to ipify on every
droplet with a reserved/floating IP attached.
Verified on a droplet:
curl .../reserved_ip/ipv4/ip_address -> 45.55.111.240
curl .../reserved_ip/ipv4/address -> (empty)
If /sys/class/dmi/id/sys_vendor says DigitalOcean and the droplet has
a reserved_ip or floating_ip assigned, use that over the ipify-based
egress IP. Keeps the ipify/hostname -I fallback intact for other hosts.
Gated on the DMI check so non-DO hosts skip the metadata probe entirely
and the tmux status bar refresh stays fast.
install.sh: curl-pipe installer that clones to ~/.yadr, runs YADR's
native rake install, then layers personal dotfiles on top of $HOME
with backups on collision.
README.md: replace YADR's upstream readme with drunkendotfiles-
specific usage docs, credit, and refresh-from-upstream instructions.
- Convert 21 absolute-path symlinks into YADR to relative paths
(e.g. .vimrc -> .yadr/vimrc), so they resolve correctly under
any user's $HOME after a standard YADR install.
- .fehbg: replace hardcoded background path with $HOME-based one
- .gtk-bookmarks: remove (trivially personal; GTK regenerates)
- .themes/*/index.theme: drop BackgroundImage= lines pointing at
personal image files that other users won't have.
- .xscreensaver: scrub username from header comment.
- .irssi/config: generic dcc_download_path.
Tracks shell configs (zsh/bash), vim, tmux, irssi, fonts, themes,
and ~/.local/bin scripts. Sensitive files (.ssh, .gnupg, history,
credentials) and large app data are excluded via .gitignore.