gitconfig template: [gitflow] autopush = @AUTOPUSH@ (exact true/false, the
hooks fail closed on anything else) and a fixed core.hooksPath =
~/.claude/githooks (created by `make link` in claude-config, git expands ~).
install.sh: resolve_autopush at the identity step. A true/false already in
~/.gitconfig wins silently, else DOTFILES_GITFLOW_AUTOPUSH (any other value
aborts before a file is touched), else a prompt that re-asks until the
answer is exactly true or false (Enter = true), else true. render_gitconfig
refuses to write when the mode is not a boolean or @AUTOPUSH@ survives.
Fix: deploy_gitconfig received the repo bashrc template, so every install
wrote `name = @USER@` / `email = @EMAIL@`. It now takes the resolved
identity directly. patsub_replacement is turned off so an `&` in a name is
not expanded on bash >= 5.2.
- choose_macos_shell answers zsh on Enter, on no terminal and on an
unknown value; MACOS_SHELL=bash still picks bash.
- remote-install.sh hands /dev/tty to install.sh when one can be opened:
piped into bash, stdin was the script, so install.sh saw no terminal
and silently skipped the identity, shell and offer questions.
- remote-install.sh cloned master by default; origin only has main
(the documented raw URL 404s on master, 200 on main). README updated.
bin/repo-sync ports the Alphalink dotfiles repo/repo-reset zsh functions to
bash + zsh on Linux and macOS, for several forges at once: GitLab, GitHub
(+GHES), Gitea/Forgejo, Bitbucket Cloud, via curl + jq (no per-forge CLI).
Tokens live in ~/.config/repos/forges.conf (0600, parsed line by line, never
tracked), written by `repo-sync add`. Cache ~/.cache/repos/list refreshed
at most once a day (mkdir lock: flock is not on macOS), same namespace/project
on two forges kept once, archived and mirrors skipped. Layout
~/repos/<namespace with / as @>/<project>.
rc files: `repo <project> [namespace]` clones on demand and cd's, with
completion (bash compgen, zsh _describe), background refresh at shell start.
install.sh: jq in the apt and brew lists, chmod repo-sync.
Verified: shellcheck + bash -n, zsh -n; stub-curl harness over the four forges
(pagination, dedup, auth headers, lock, stale cache, path/clone); live GitLab
refresh (139 projects, 3s).
window-active-style must repeat the terminal colours: "default" there
inherits window-style since tmux 3, so the active pane was dimmed too.
Inactive panes lightened to #353d48 / #a6acb6, visible against the
#15191f background.
Inactive panes get fg=colour247,bg=colour234, the active one keeps the
terminal default. Only default-coloured cells change, so coloured
output and vim's own background are untouched.
The MouseDrag1Pane binding escaped the inner quotes as \" inside a
single-quoted string. Since tmux 3.0 the backslashes are literal there,
so the branch taken when the pane has mouse tracking on failed to parse:
no selection, "syntax error" in the status line. Plain-shell panes never
hit that branch, which is why only claude/vim panes were affected.
Stock copy-mode-vi table binds C-h cursor-left, C-u halfpage-up and C-j
copy, so the pane moves turned into text navigation once scrolled. Arrows
keep that job; the four keys now select-pane in copy-mode like at root.
MouseDown cancelled copy-mode before a drag could start, so selecting text
after scrolling up jumped back to the bottom. MouseUp1Pane (sent only when
no drag happened) now cancels; MouseDown clears the selection as before.
MouseDown1Pane in copy-mode-vi now cancels the mode instead of only clearing
the selection. Drag-select (root MouseDrag1Pane re-enters copy-mode) and
click-to-switch-pane are unchanged.
- mode-style bg=yellow,fg=black (black on a dark terminal was invisible)
- MouseDragEnd1Pane copies (pbcopy on macOS, tmux buffer elsewhere) without leaving copy-mode
- y/p use pbcopy/pbpaste (xsel is X11, absent on macOS); xsel kept as the Linux variant in a comment
- bind C-a send-prefix: C-a C-a sends a literal C-a to the shell
- is_vim reads #{pane_current_command}; the @tmux_vim_<pane> variable was never set, so C-h/j/k/l never reached vim