flake-update-20260505
 1# Lazyworktree integration
 2has lazyworktree || return
 3
 4# Source shell functions (fast: ~0.4ms)
 5# Resolve symlink for NixOS where commands[] points to /etc/profiles/per-user/...
 6local lw_functions="${commands[lazyworktree]:A:h:h}/share/lazyworktree/functions.zsh"
 7[[ -f "$lw_functions" ]] && source "$lw_functions"
 8
 9# Named repo shortcuts
10wh()   { worktree_jump "$HOME/src/home" "$@"; }
11wnix() { worktree_jump "$HOME/src/nixpkgs" "$@"; }
12_wh()   { _worktree_jump "$HOME/src/home"; }
13_wnix() { _worktree_jump "$HOME/src/nixpkgs"; }
14(( $+functions[compdef] )) && { compdef _wh wh; compdef _wnix wnix; }
15
16# Auto-discover worktree aliases from source directories
17_lazyworktree_discover_aliases() {
18  setopt local_options nullglob
19  local -A repo_dirs=()
20  local base_dirs=(
21    "$HOME/src/gitlab.com:wgb"
22    "$HOME/src/github.com:wgh"
23    "$HOME/src/osp:wo"
24    "$HOME/src:ws"
25    "$HOME/src/tektoncd:wt"
26  )
27  local entry base_dir prefix repo_dir repo_name target_dir alias_name org_name
28
29  for entry in "${base_dirs[@]}"; do
30    base_dir="${entry%%:*}"
31    prefix="${entry##*:}"
32    [[ -d "$base_dir" ]] || continue
33
34    if [[ "$prefix" == "wgh" ]] || [[ "$prefix" == "wgb" ]]; then
35      eval "${prefix}_() {
36        local selection org_dir
37        selection=\$(find \"$base_dir\" -maxdepth 2 -name .git -type d 2>/dev/null | sed 's|/.git$||' | sed \"s|^$base_dir/||\" | fzf --prompt=\"$base_dir: \")
38        [[ -n \"\$selection\" ]] || return 1
39        worktree_jump \"$base_dir/\$selection\" \"\$@\"
40      }"
41      for org_dir in "$base_dir"/*/; do
42        [[ -d "$org_dir" ]] || continue
43        org_name="$(basename "$org_dir")"
44        for repo_dir in "$org_dir"/*/; do
45          [[ -d "$repo_dir" ]] || continue
46          [[ -d "$repo_dir/.git" ]] || continue
47          repo_name="$(basename "$repo_dir")"
48          target_dir="$repo_dir"
49          alias_name="${prefix}_${org_name}_${repo_name}"
50          repo_dirs[$alias_name]="$target_dir"
51          eval "${alias_name}() { worktree_jump \"$target_dir\" \"\$@\"; }"
52        done
53      done
54    else
55      eval "${prefix}_() {
56        local selection
57        selection=\$(ls -1 \"$base_dir\" 2>/dev/null | fzf --prompt=\"$base_dir: \")
58        [[ -n \"\$selection\" ]] || return 1
59        if [[ -d \"$base_dir/\$selection/.git\" ]]; then
60          worktree_jump \"$base_dir/\$selection\" \"\$@\"
61        else
62          echo \"Not a git repo: $base_dir/\$selection\" >&2
63          return 1
64        fi
65      }"
66      for repo_dir in "$base_dir"/*/; do
67        [[ -d "$repo_dir" ]] || continue
68        repo_name="$(basename "$repo_dir")"
69        [[ -d "$repo_dir/.git" ]] || continue
70        target_dir="$repo_dir"
71        alias_name="${prefix}_${repo_name}"
72        if [[ -n "${repo_dirs[$alias_name]}" ]] && [[ "${repo_dirs[$alias_name]}" != "$target_dir" ]]; then
73          alias_name="${prefix}_${repo_name}"
74        fi
75        repo_dirs[$alias_name]="$target_dir"
76        eval "${alias_name}() { worktree_jump \"$target_dir\" \"\$@\"; }"
77      done
78    fi
79  done
80}
81# Defer discovery to first prompt (saves ~210ms)
82__deferred_lazyworktree() {
83  _lazyworktree_discover_aliases >/dev/null 2>&1
84  add-zsh-hook -d precmd __deferred_lazyworktree
85  unfunction __deferred_lazyworktree
86}
87add-zsh-hook precmd __deferred_lazyworktree