add worktree ease for local dev of my modules system

This commit is contained in:
RingOfStorms (Joshua Bell) 2025-01-02 01:24:01 -06:00
parent 3b5c7da33a
commit cd045e99ad
4 changed files with 94 additions and 1 deletions

View file

@ -63,6 +63,7 @@
{
self,
nypkgs,
nixpkgs_stable,
cosmic,
lio_nixpkgs,
lio_home-manager,
@ -147,6 +148,15 @@
hostsDir = ./hosts_old;
usersDir = ./users;
};
# Utilities
inherit (nixpkgs_stable) lib;
# Define the systems to support (all Linux systems exposed by nixpkgs)
systems = lib.intersectLists lib.systems.flakeExposed lib.platforms.linux;
forAllSystems = lib.genAttrs systems;
# Create a mapping from system to corresponding nixpkgs : https://nixos.wiki/wiki/Overlays#In_a_Nix_flake
nixpkgsFor = forAllSystems (system: nixpkgs_stable.legacyPackages.${system});
in
{
# foldl' is "reduce" where { } is the accumulator and myHosts is the array to reduce on.
@ -186,5 +196,51 @@
// nixConfig.opts;
}
) { } myHosts;
devShells = forAllSystems (
system:
let
pkgs = nixpkgsFor.${system};
mod_worktrees = pkgs.writeShellScriptBin "mod_worktrees" ''
# Get all local and remote mod_* branches, removing lines with '+'
branches=$(git branch -a | grep -E 'mod_' | grep -v '^\s*+' | sed 's/^[* ]*//; s/^remotes\/origin\///')
# Remove duplicates and sort
branches=$(echo "$branches" | sort -u)
for branch in $branches; do
# Skip master or other non-mod branches
if [[ ! "$branch" =~ ^mod_ ]]; then
continue
fi
# Derive module name (remove mod_ prefix)
module_name="''${branch#mod_}"
module_path="modules/$module_name"
# Check if worktree already exists
if [ ! -d "$module_path" ]; then
echo "Adding worktree for $branch in $module_path"
git worktree add "$module_path" "$branch" 2>/dev/null
# else
# echo "Worktree for $branch already exists"
fi
done
'';
in
{
default = pkgs.mkShell {
nativeBuildInputs = [
mod_worktrees
];
shellHook = ''
mod_worktrees
'';
};
}
);
};
}