mirror of
https://github.com/harivansh-afk/nix.git
synced 2026-04-15 05:02:10 +00:00
Add netty worktree helpers
Add netty-specific worktree helper commands and a zsh wrapper that creates sibling worktrees and cds into them. Also split script packaging so Darwin keeps the existing wt integration while netty gets git-worktree-based helpers. Co-authored-by: Codex <noreply@openai.com>
This commit is contained in:
parent
2a79a099c1
commit
8ad1784a82
7 changed files with 172 additions and 74 deletions
|
|
@ -2,22 +2,20 @@
|
|||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
}:
|
||||
let
|
||||
theme = import ../lib/theme.nix { inherit config; };
|
||||
}: let
|
||||
theme = import ../lib/theme.nix {inherit config;};
|
||||
|
||||
tmuxConfigs = {
|
||||
dark = pkgs.writeText "tmux-theme-dark.conf" (theme.renderTmux "dark");
|
||||
light = pkgs.writeText "tmux-theme-light.conf" (theme.renderTmux "light");
|
||||
};
|
||||
|
||||
mkScript =
|
||||
{
|
||||
file,
|
||||
name,
|
||||
runtimeInputs ? [ ],
|
||||
replacements ? { },
|
||||
}:
|
||||
mkScript = {
|
||||
file,
|
||||
name,
|
||||
runtimeInputs ? [],
|
||||
replacements ? {},
|
||||
}:
|
||||
pkgs.writeShellApplication {
|
||||
inherit name runtimeInputs;
|
||||
text = lib.replaceStrings (builtins.attrNames replacements) (builtins.attrValues replacements) (
|
||||
|
|
@ -25,11 +23,11 @@ let
|
|||
);
|
||||
};
|
||||
|
||||
packages = {
|
||||
commonPackages = {
|
||||
ga = mkScript {
|
||||
name = "ga";
|
||||
file = ./ga.sh;
|
||||
runtimeInputs = with pkgs; [ git ];
|
||||
runtimeInputs = with pkgs; [git];
|
||||
};
|
||||
|
||||
ghpr = mkScript {
|
||||
|
|
@ -73,7 +71,7 @@ let
|
|||
ni = mkScript {
|
||||
name = "ni";
|
||||
file = ./ni.sh;
|
||||
runtimeInputs = with pkgs; [ nix ];
|
||||
runtimeInputs = with pkgs; [nix];
|
||||
};
|
||||
|
||||
theme = mkScript {
|
||||
|
|
@ -104,13 +102,30 @@ let
|
|||
"@TMUX_CONFIG@" = "${config.xdg.configHome}/tmux/tmux.conf";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
darwinPackages = {
|
||||
wtc = mkScript {
|
||||
name = "wtc";
|
||||
file = ./wtc.sh;
|
||||
};
|
||||
};
|
||||
in
|
||||
{
|
||||
inherit packages theme tmuxConfigs;
|
||||
|
||||
nettyPackages = {
|
||||
wt-create = mkScript {
|
||||
name = "wt-create";
|
||||
file = ./wt-create.sh;
|
||||
runtimeInputs = with pkgs; [coreutils git gnused];
|
||||
};
|
||||
|
||||
wt-path = mkScript {
|
||||
name = "wt-path";
|
||||
file = ./wt-path.sh;
|
||||
runtimeInputs = with pkgs; [coreutils git gnused];
|
||||
};
|
||||
};
|
||||
in {
|
||||
inherit commonPackages darwinPackages nettyPackages theme tmuxConfigs;
|
||||
|
||||
packages = commonPackages;
|
||||
}
|
||||
|
|
|
|||
29
scripts/wt-create.sh
Normal file
29
scripts/wt-create.sh
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
if [[ $# -ne 1 ]]; then
|
||||
printf 'usage: wt-create <worktree-name>\n' >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
branch_name=$1
|
||||
repo_root=$(git rev-parse --show-toplevel 2>/dev/null) || {
|
||||
printf 'wt-create: not inside a git repository\n' >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
target_path=$(wt-path "$branch_name")
|
||||
|
||||
if [[ -e "$target_path" ]]; then
|
||||
printf 'wt-create: path already exists: %s\n' "$target_path" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if git -C "$repo_root" show-ref --verify --quiet "refs/heads/$branch_name"; then
|
||||
git -C "$repo_root" worktree add -- "$target_path" "$branch_name" 1>&2
|
||||
else
|
||||
git -C "$repo_root" worktree add -b "$branch_name" -- "$target_path" HEAD 1>&2
|
||||
fi
|
||||
|
||||
printf '%s\n' "$target_path"
|
||||
26
scripts/wt-path.sh
Normal file
26
scripts/wt-path.sh
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
if [[ $# -ne 1 ]]; then
|
||||
printf 'usage: wt-path <worktree-name>\n' >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
repo_root=$(git rev-parse --show-toplevel 2>/dev/null) || {
|
||||
printf 'wt-path: not inside a git repository\n' >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
worktree_name=$1
|
||||
clean_name=$(printf '%s' "$worktree_name" | sed -E 's#[^[:alnum:]._-]+#-#g; s#-+#-#g; s#(^[.-]+|[.-]+$)##g')
|
||||
|
||||
if [[ -z "$clean_name" ]]; then
|
||||
printf 'wt-path: %s does not produce a usable path name\n' "$worktree_name" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
repo_parent=$(dirname "$repo_root")
|
||||
repo_name=$(basename "$repo_root")
|
||||
|
||||
printf '%s/%s-%s\n' "$repo_parent" "$repo_name" "$clean_name"
|
||||
Loading…
Add table
Add a link
Reference in a new issue