From 9d0dcf9305c51e0a0e7dc6c9cab35ad59cc099e6 Mon Sep 17 00:00:00 2001 From: Bryan Ramos Date: Mon, 9 Mar 2026 22:40:39 -0400 Subject: [PATCH] updated justfile --- justfile | 155 +++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 139 insertions(+), 16 deletions(-) diff --git a/justfile b/justfile index ea7aaff..58e525d 100644 --- a/justfile +++ b/justfile @@ -14,7 +14,18 @@ _validate SYSTEM: *) echo "Error: Unknown system '{{SYSTEM}}'. Use one of: {{VALID_SYSTEMS}}"; exit 1 ;; esac +# Helper to parse submodules from .gitmodules +[private] +_subs_init := ''' + declare -A SUBS + while read -r key path; do + name="${key#submodule.}"; name="${name%.path}" + SUBS[$name]="$path" + done < <(git config -f .gitmodules --get-regexp 'submodule\..*\.path') +''' + # Clean up build artifacts +[group('nix')] clean: #!/usr/bin/env bash set -euo pipefail @@ -24,22 +35,26 @@ clean: echo "Done" # Output what derivations will be built +[group('nix')] out SYSTEM="desktop": (_validate SYSTEM) @echo "Outputting derivations to be built for {{SYSTEM}}..." @nix build --dry-run .#nixosConfigurations."{{SYSTEM}}".config.system.build.toplevel -L # Test switch into the next generation +[group('nixos')] test SYSTEM="desktop": (_validate SYSTEM) @echo "Testing switching to next NixOS generation for {{SYSTEM}}..." @sudo nixos-rebuild test --flake .#{{SYSTEM}} # Build the nix expression and hydrate the results directory +[group('nix')] build SYSTEM="desktop": (_validate SYSTEM) @echo "Building NixOS configuration for {{SYSTEM}}..." @nix build .#nixosConfigurations."{{SYSTEM}}".config.system.build.toplevel -L @echo -e "\033[32mBuild success - result directory hydrated\033[0m" # Deploy a vm of the defined system +[group('nixos')] vm SYSTEM: (_validate SYSTEM) #!/usr/bin/env bash set -euo pipefail @@ -53,48 +68,39 @@ vm SYSTEM: (_validate SYSTEM) fi # grep nixpkgs for PKG +[group('nix')] search PKG: nix search nixpkgs {{PKG}} # Open nixos packages in the browser +[group('nix')] pkgs: @xdg-open https://search.nixos.org/packages # Open nixos options in the browser +[group('nix')] options: @xdg-open https://search.nixos.org/options # NixOS-rebuild switch for the current system +[group('nixos')] switch: @echo -e "\033[32m->> Switching to next generation ->>\033[0m" @sudo nixos-rebuild switch --flake .#{{SYSTEM}} # Rollback to previous generation +[group('nixos')] rollback: @sudo nixos-rebuild switch --rollback # NixOS-rebuild boot for the current system +[group('nixos')] boot: @echo -e "\033[34m->> Reboot to new generation ->>\033[0m" @sudo nixos-rebuild boot --flake .#{{SYSTEM}} -# Commit all changes and push to upstream -gh COMMIT_MESSAGE: - #!/usr/bin/env bash - set -euo pipefail - git add -A - git commit -m "{{COMMIT_MESSAGE}}" - git push - -# List available disks for installation -disks: - @echo "Available disks:" - @lsblk -d -o NAME,SIZE,MODEL - @echo "" - @echo "Disk IDs (use these for install):" - @ls /dev/disk/by-id/ | grep -E '^(ata|nvme|scsi|usb)' | grep -v 'part' || true - # Install NixOS from live USB (interactive disk selection) +[group('nixos')] install SYSTEM: #!/usr/bin/env bash set -euo pipefail @@ -164,7 +170,124 @@ install SYSTEM: echo -e "\033[32mDone! Reboot to start NixOS.\033[0m" +# Commit all changes and push to upstream +[group('git')] +gh COMMIT_MESSAGE: + #!/usr/bin/env bash + set -euo pipefail + git add -A + git commit -m "{{COMMIT_MESSAGE}}" + git push + +# Show status of submodules with changes +[group('submodule')] +sstatus: + #!/usr/bin/env bash + {{_subs_init}} + for name in "${!SUBS[@]}"; do + status=$(git -C "${SUBS[$name]}" status -s) + [[ -n "$status" ]] && echo -e "\033[34m$name:\033[0m" && echo "$status" + done + +# Pull all submodules and parent +[group('submodule')] +spull: + #!/usr/bin/env bash + set -euo pipefail + {{_subs_init}} + git pull + for name in "${!SUBS[@]}"; do + echo -e "\033[34m$name:\033[0m" + git -C "${SUBS[$name]}" pull + done + +# Push submodules and parent +[group('submodule')] +spush NAME="": + #!/usr/bin/env bash + set -euo pipefail + {{_subs_init}} + if [[ -n "{{NAME}}" ]]; then + path="${SUBS[{{NAME}}]:-}" + [[ -z "$path" ]] && echo "Unknown: {{NAME}}. Available: ${!SUBS[*]}" && exit 1 + git -C "$path" push + else + for path in "${SUBS[@]}"; do git -C "$path" push; done + fi + git push + +# Commit submodule changes and update parent +[group('submodule')] +scommit NAME="": + #!/usr/bin/env bash + set -euo pipefail + {{_subs_init}} + MSGS=() + + commit_sub() { + local name="$1" path="$2" + [[ -z "$(git -C "$path" status -s)" ]] && return 0 + echo -e "\033[34m$name:\033[0m" + git -C "$path" status -s + read -p "Commit message: " MSG + [[ -z "$MSG" ]] && return 0 + git -C "$path" add -A && git -C "$path" commit -m "$MSG" + git add "$path" + MSGS+=("$name: $MSG") + } + + if [[ -n "{{NAME}}" ]]; then + path="${SUBS[{{NAME}}]:-}" + [[ -z "$path" ]] && echo "Unknown: {{NAME}}. Available: ${!SUBS[*]}" && exit 1 + commit_sub "{{NAME}}" "$path" + else + for name in "${!SUBS[@]}"; do commit_sub "$name" "${SUBS[$name]}"; done + fi + + if ! git diff --cached --quiet; then + COMMIT_MSG="updated submodules"$'\n' + for m in "${MSGS[@]}"; do COMMIT_MSG+="- $m"$'\n'; done + git commit -m "$COMMIT_MSG" + fi + +# Commit and push submodules + parent +[group('submodule')] +ssync NAME="": + #!/usr/bin/env bash + set -euo pipefail + {{_subs_init}} + MSGS=() + + sync_sub() { + local name="$1" path="$2" + [[ -z "$(git -C "$path" status -s)" ]] && return 0 + echo -e "\033[34m$name:\033[0m" + git -C "$path" status -s + read -p "Commit message: " MSG + [[ -z "$MSG" ]] && return 0 + git -C "$path" add -A && git -C "$path" commit -m "$MSG" + git -C "$path" push + git add "$path" + MSGS+=("$name: $MSG") + } + + if [[ -n "{{NAME}}" ]]; then + path="${SUBS[{{NAME}}]:-}" + [[ -z "$path" ]] && echo "Unknown: {{NAME}}. Available: ${!SUBS[*]}" && exit 1 + sync_sub "{{NAME}}" "$path" + else + for name in "${!SUBS[@]}"; do sync_sub "$name" "${SUBS[$name]}"; done + fi + + if ! git diff --cached --quiet; then + COMMIT_MSG="updated submodules"$'\n' + for m in "${MSGS[@]}"; do COMMIT_MSG+="- $m"$'\n'; done + git commit -m "$COMMIT_MSG" + fi + git push + # Fetch resources and compute sha256 hash +[group('nix')] hash URL: #!/usr/bin/env bash set -euo pipefail