Commit Graph
45 Commits
Author SHA1 Message Date
bchanot e4cf81830c Merge feature/gitconfig-autopush into develop 2026-10-07 18:26:08 +02:00
bchanot c2196424b9 chore(memory): journal + contract/plan/oracle — feat gitconfig-autopush 2026-10-07 18:25:56 +02:00
bchanot 30b330967f docs: README step 6 precedence, empty-identity skip, fixed hooksPath + global caveat, macOS question order; CHANGELOG Unreleased — feat gitconfig-autopush 2026-10-07 18:25:55 +02:00
bchanot 252954b803 docs(claude): layout line — gitconfig template carries @AUTOPUSH@ and a fixed core.hooksPath 2026-10-07 18:23:25 +02:00
bchanot 9901ec5da0 feat(install): ask the gitflow push mode at install, fixed hooksPath, identity into gitconfig
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.
2026-10-07 18:22:34 +02:00
bchanot f42e28807b feat(repo-sync): one local tree for every repo reachable on your forges
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).
2026-10-07 15:31:03 +02:00
bchanot 2573756e73 chore(memory): LRN-015 tmux window-active-style inherits window-style 2026-10-07 12:32:38 +02:00
bchanot fab1c8a0de Merge feature/tmux-dim-inactive-panes into develop 2026-10-07 12:24:00 +02:00
bchanot 6f0f6c1fa3 chore(memory): journal — tmux dim inactive panes 2026-10-07 12:23:58 +02:00
bchanot 08ad4ddbfe fix(tmux): dim colours tuned for the iTerm2 dark profile
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.
2026-10-07 12:23:57 +02:00
bchanot ccc220fc69 feat(tmux): dim inactive panes (window-style / window-active-style)
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.
2026-10-07 12:13:28 +02:00
bchanot 6b634e2c77 chore(memory): journal — tmux drag fix merged 2026-10-06 18:05:20 +02:00
bchanot 22452477d5 Merge bugfix/tmux-drag-syntax-error into develop 2026-10-06 18:05:11 +02:00
bchanot 72d38b68df chore(memory): journal — tmux drag syntax error 2026-10-06 18:02:54 +02:00
bchanot 31f8400852 fix(tmux): drag in a mouse app (claude, vim) died with "syntax error"
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.
2026-10-06 18:02:47 +02:00
bchanot 773e1c5fa6 chore(memory): journal — tmux ctrl nav in copy-mode 2026-10-06 17:16:20 +02:00
bchanot 8b6ed6b983 Merge bugfix/tmux-copy-mode-ctrl-nav into develop 2026-10-06 17:16:06 +02:00
bchanot dda78bb9bb fix(tmux): ctrl+u/h/j/k switch panes in copy-mode too
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.
2026-10-06 16:58:19 +02:00
bchanot cbdbe58491 chore(memory): journal — tmux wheel halved, dtach mac/termux 2026-10-06 16:51:39 +02:00
bchanot ec9d0ed934 Merge bugfix/tmux-wheel-half into develop 2026-10-06 16:51:28 +02:00
bchanot 0a34c528ca fix(tmux): wheel scrolls 2 lines per tick instead of 5 2026-10-06 16:49:32 +02:00
bchanot 7f63f4b0e2 chore(memory): journal — identity asked at install 2026-10-06 15:35:22 +02:00
bchanot 0687f6a4fe Merge feature/identity-prompt into develop 2026-10-06 15:35:14 +02:00
bchanot 8f6969001f feat(identity): ask name/email at install, no hardcoded USER/EMAIL in the repo
- rc templates carry @USER@/@EMAIL@ placeholders; install.sh renders them
- resolve_identity: an export already in ~/.bashrc or ~/.zshrc is reused silently,
  else IDENTITY_USER/IDENTITY_EMAIL, else a prompt, else login name + empty email
- render_gitconfig generalised to render_identity_template (gitconfig unchanged)
- vimrc reads g:_author/g:_email from $USER/$EMAIL instead of hardcoded values
- README + CLAUDE.md
2026-10-06 15:34:11 +02:00
bchanot f6a039fc80 chore(memory): journal — tmux click exit, alt copy/paste 2026-10-06 15:22:23 +02:00
bchanot 8b5e9367d4 Merge bugfix/tmux-click-exit into develop 2026-10-06 15:22:14 +02:00
bchanot 1f5e8990c8 feat(tmux): alt+c copies and leaves copy-mode, alt+v pastes (cmd-less keyboards) 2026-10-06 15:19:47 +02:00
bchanot 51aed0e24d fix(tmux): return to the prompt on click release, not on press
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.
2026-10-06 15:17:21 +02:00
bchanot 8ab681627c fix(tmux): a click in copy-mode returns to the prompt
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.
2026-10-06 15:13:00 +02:00
bchanot ef418fea04 chore(memory): journal — tmux selection, keep tmux 2026-10-06 15:05:00 +02:00
bchanot b73ee086fd Merge bugfix/tmux-selection into develop 2026-10-06 15:04:48 +02:00
bchanot b900c6d3a3 fix(tmux): visible selection colour, mouse drag copies on release
- 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
2026-10-06 15:02:42 +02:00
bchanot ec9187c70f chore(memory): BDR-017 tmux ctrl+uhjk, BDR-018 Linux clipboard OSC 52 2026-10-06 14:28:35 +02:00
bchanot 7abef66f50 chore(memory): journal — tmux keys + Linux deploy 2026-10-06 14:26:39 +02:00
bchanot e3be25f94c Merge bugfix/tmux-macos-keys into develop 2026-10-06 14:26:29 +02:00
bchanot d2821fa462 feat(tmux): deploy the config on Linux too; prefix i / - splits
- install.sh: deploy_tmux_config runs on both OSes after the bashrc (gated on tmux)
- tmux.conf: clipboard via if-shell (pbcopy on macOS, tmux buffer + OSC 52 elsewhere)
- bashrc-linux exports XDG_CACHE_HOME like the macOS rc files
- prefix i = side-by-side split, prefix - = stacked split (h/j/k/l kept)
- verified in an Ubuntu 24.04 container (tmux 3.4): deploy, bindings, split, plugins, libtmux
2026-10-06 13:09:34 +02:00
bchanot ca8b1c19c9 feat(tmux): pane moves on ctrl+u/h/j/k (arrow layout, AZERTY/QWERTY invariant)
Replaces ctrl+h/j/k/l and the option+arrow bindings. Resize mirrors it with prefix.
C-l is free again, so it clears the shell screen.
2026-10-06 13:05:25 +02:00
bchanot b2244fc7ba feat(tmux): option+arrow moves between panes without prefix 2026-10-06 13:02:37 +02:00
bchanot d639f22e08 fix(tmux): macOS clipboard, C-a passthrough, vim detection
- 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
2026-10-06 12:41:18 +02:00
bchanot 7adcef4f94 Merge feature/tmux-config into develop 2026-10-06 12:27:34 +02:00
bchanot 825abe842a feat(macos): deploy tmux.conf + tpm plugins; cloudpex becomes an install-time offer
- tmux.conf (vi keys, C-a prefix, resurrect/continuum, window-name) → ~/.config/tmux/tmux.conf
  on macOS; tpm cloned, plugins fetched headlessly, libtmux installed non-fatally
- bashrc-osx / zshrc-osx export XDG_CACHE_HOME (session save dir of the config)
- Linux: install_cloudpex → offer_cloudpex ([y/N] with the /tmp and SSH offers)
- README + CLAUDE.md updated
2026-10-06 12:27:22 +02:00
bchanot 1fbbffcedc chore(memory): journal — v1.0.0 release 2026-10-06 11:53:26 +02:00
bchanot dda3fabcf7 Merge release/1.0.0 into develop 2026-10-06 11:41:37 +02:00
bchanot caf388ce0b chore(release): 1.0.0 — version.txt + CHANGELOG 2026-10-06 11:39:40 +02:00
bchanot dd36bc6f18 chore(githooks): refresh post-commit/post-merge from the lib (hook label) 2026-10-06 11:38:56 +02:00