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

4
.envrc Normal file
View file

@ -0,0 +1,4 @@
#!/bin/bash
use flake

2
.gitignore vendored
View file

@ -1,4 +1,4 @@
# if in /etc/nixos don't grab defaults
./hardware-configuration.nix
./configuration.nix
modules/

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
'';
};
}
);
};
}

View file

@ -4,6 +4,39 @@
<https://git.joshuabell.xyz/dotfiles/~files/6527f67145fe047df57b4778c154dde580ec04c4>
## Setup local dev
* Get modules in the same directory for ease of development
```sh
#!/bin/bash
# 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
```
# First Install on new Machine
## NixOS install