From e8ab4015c02800b9696804695ea62cc530e39bbc Mon Sep 17 00:00:00 2001 From: Tyler Mayoff Date: Wed, 3 Dec 2025 10:53:41 -0500 Subject: [PATCH] Added some worktree aliases/functions --- dot_config/flake/home/fish.nix | 94 ++++++++++++++++++++++ dot_config/flake/home/shell.nix | 6 ++ dot_config/flake/machines/hinge/darwin.nix | 51 ++++++------ dot_config/flake/machines/hinge/home.nix | 12 --- 4 files changed, 126 insertions(+), 37 deletions(-) diff --git a/dot_config/flake/home/fish.nix b/dot_config/flake/home/fish.nix index 9d66306..34b944a 100644 --- a/dot_config/flake/home/fish.nix +++ b/dot_config/flake/home/fish.nix @@ -2,6 +2,10 @@ programs.fish = { enable = true; interactiveShellInit = '' + # Fix for fish 4.2.0+ embedded completions not loading with home-manager + # See: https://github.com/nix-community/home-manager/issues/8178 + set -p fish_complete_path ${pkgs.fish}/share/fish/completions + set -gx EDITOR hx set -gx GIT_EDITOR $EDITOR set -gx DEBEMAIL "tyler@tylermayoff.com" @@ -14,6 +18,96 @@ bind \cz 'fg 2>/dev/null; commandline -f repaint' export GPG_TTY=$(tty) + + # Git worktree functions + function gwn --description "Create new worktree with new branch" + # Show help if requested + if test (count $argv) -eq 1; and string match -qr '^(-h|--help|help)$' $argv[1] + echo "Usage: gwn [base-branch]" + echo "" + echo "Create a new git worktree with a new branch" + echo "" + echo "Arguments:" + echo " path Path where the worktree will be created" + echo " branch-name Name of the new branch to create" + echo " base-branch Optional base branch (will prompt with fzf if not provided)" + echo "" + echo "Examples:" + echo " gwn ../feature my-feature # Interactive base branch selection" + echo " gwn ../feature my-feature main # Create from main branch" + return 0 + end + + if test (count $argv) -lt 2 + echo "Usage: gwn [base-branch]" + echo "Run 'gwn --help' for more information" + return 1 + end + + set -l path $argv[1] + set -l new_branch $argv[2] + set -l base_branch "" + + # If base branch is provided, use it + if test (count $argv) -ge 3 + set base_branch $argv[3] + else + # Otherwise, offer to select one with fzf + echo "Select base branch (or press ESC to use current branch):" + set base_branch (git branch --all | grep -v HEAD | sed 's/^[ *]*//' | sed 's/remotes\/origin\///' | sort -u | fzf --prompt="Base branch (ESC for current): " --height=40%) + end + + if test -n "$base_branch" + git worktree add -b $new_branch $path $base_branch + else + git worktree add -b $new_branch $path + end + end + + function gwnb --description "Create new worktree with new branch based on another branch" + if test (count $argv) -lt 3 + echo "Usage: gwnb " + return 1 + end + git worktree add -b $argv[2] $argv[1] $argv[3] + end + + function gwc --description "Create worktree for existing branch" + set -l branch $argv[1] + set -l path $argv[1] + + # If no branch is specified, use fzf to select one + if test (count $argv) -lt 1 + set branch (git branch --all | grep -v HEAD | sed 's/^[ *]*//' | sed 's/remotes\/origin\///' | sort -u | fzf --prompt="Select branch: " --height=40%) + if test -z "$branch" + echo "No branch selected" + return 1 + end + set path $branch + end + + if test (count $argv) -ge 2 + set path $argv[2] + end + git worktree add $path $branch + end + + function gwrm --description "Remove worktree and delete branch" + if test (count $argv) -lt 1 + echo "Usage: gwrm " + return 1 + end + set -l branch (git -C $argv[1] branch --show-current) + git worktree remove $argv[1] + and git branch -D $branch + end + + function gwcd --description "CD to a worktree by selecting from list" + set -l worktree (git worktree list | tail -n +2 | awk '{print $1}' | fzf) + if test -n "$worktree" + cd $worktree + end + end ''; shellInit = '' diff --git a/dot_config/flake/home/shell.nix b/dot_config/flake/home/shell.nix index f198bbb..b3f4fe4 100644 --- a/dot_config/flake/home/shell.nix +++ b/dot_config/flake/home/shell.nix @@ -7,6 +7,12 @@ gacp = "gac and git push"; gs = "git status"; + # Git worktree + gwa = "git worktree add"; + gwl = "git worktree list"; + gwr = "git worktree remove"; + gwp = "git worktree prune"; + # nix flake = "nix flake"; diff --git a/dot_config/flake/machines/hinge/darwin.nix b/dot_config/flake/machines/hinge/darwin.nix index 6098545..0d1bb0e 100644 --- a/dot_config/flake/machines/hinge/darwin.nix +++ b/dot_config/flake/machines/hinge/darwin.nix @@ -71,31 +71,32 @@ in { autoUpdate = true; # Fetch the newest stable branch of Homebrew's git repo upgrade = true; # Upgrade outdated casks, formulae, and App Store apps # 'zap': uninstalls all formulae(and related files) not listed in the generated Brewfile - cleanup = "zap"; + # cleanup = "zap"; }; brews = [ - "autoconf" - "automake" - "fastlane" - "freetype" - "git-lfs" - "libtool" - "m4" - "nasm" - "pkg-config" - "python@${py_ver}" - "rsync" - "jq" - "pipenv" - "ffmpeg" - "wget" - "ios-deploy" - "unzip" - "yarn" - "xz" + # "autoconf" + # "automake" + # "direnv" + # "fastlane" + # "freetype" + # "git-lfs" + # "libtool" + # "m4" + # "nasm" + # "pkg-config" + # "python@${py_ver}" + # "rsync" + # "jq" + # "pipenv" + # "ffmpeg" + # "wget" + # "ios-deploy" + # "unzip" + # "yarn" + # "xz" - "llvm@20" + # "llvm@20" ]; casks = [ @@ -113,10 +114,10 @@ in { ]; }; - services.jankyborders = { - enable = true; - active_color = "0xFF95bcf9"; - }; + # services.jankyborders = { + # enable = true; + # active_color = "0xFF95bcf9"; + # }; programs.fish.enable = true; programs.zsh.enable = false; diff --git a/dot_config/flake/machines/hinge/home.nix b/dot_config/flake/machines/hinge/home.nix index 9706088..fcfdd0d 100644 --- a/dot_config/flake/machines/hinge/home.nix +++ b/dot_config/flake/machines/hinge/home.nix @@ -141,32 +141,20 @@ # homeDirectory = /Users/tyler.mayoff; packages = with pkgs; [ - bazelisk - cmake - conan - pre-commit - black ruff - swiftlint - unstable.helix-gpt unstable.lsp-ai python312Packages.python-lsp-server unstable.openscad-lsp typescript-language-server - cmake-language-server jdt-language-server - unstable.biome uv - unstable.jiratui - ffmpeg sccache just - nodejs_24 cocoapods ];