home/scripts/rebuild.sh
#!/usr/bin/env bash
# blatently adapted from: https://gist.github.com/0atman/1a5133b842f929ba4c1e195ee67599d5

# set -e

# cd to your config dir
pushd /home/synchronous/nix-cfg

# early return if no changes are given
git --git-dir /home/synchronous/nix-cfg/.git add .
if git --git-dir /home/synchronous/nix-cfg/.git diff-index --quiet HEAD; then
    echo "No changes detected, exiting."
    popd
    exit 0
fi

# /run/current-system/sw/bin/nix flake check /home/synchronous/nix-cfg/ || { echo "Flake check failed. Exiting."; exit 1; }

# Autoformat your nix files
alejandra . &>/dev/null \
  || ( alejandra . ; echo "formatting failed!" && exit 1)

# shows changes between last commit and head

# git --git-dir /home/synchronous/nix-cfg/.git add .
# git --git-dir /home/synchronous/nix-cfg/.git --no-pager diff -U0 
git --git-dir /home/synchronous/nix-cfg/.git --no-pager diff HEAD -U0 
# '*.nix'

echo ""
echo "Summary:"
git status --porcelain

echo ""
echo "NixOS Rebuilding..."

# brain damaged method
# prev=$(basename $(readlink /run/current-system) | sed 's/.*nixos-system-\(.*\)-.*$/\1/')
prev=$(hostname)

# Rebuild, output simplified errors, log trackebacks
sudo /run/current-system/sw/bin/nixos-rebuild switch --flake /home/synchronous/nix-cfg/flake.nix#"$prev" 2>&1 | tee /tmp/nixos-switch.log

# cat /tmp/nixos-switch.log | grep --color error && exit 1

if grep --color error /tmp/nixos-switch.log; then
    # cat /tmp/nixos-switch.log | grep --color error
    read -p "Would you like to view the error log? (y/n): " choice
    choice=${choice:-n}
    if [[ "$choice" == "y" || "$choice" == "Y" ]]; then
      cat /tmp/nixos-switch.log
    fi
    exit 1;
fi

# Get current generation metadata
# current=$(nixos-rebuild list-generations | grep current)
# current=$(sudo nix-env --list-generations --profile /nix/var/nix/profiles/system | tail -n 1 | awk '{print $1, $2, $3}')
current=$(nixos-rebuild list-generations --json | jq -r '.[1] | [.generation, .buildDate, .nixosVersion, .kernelVersion, (.current|tostring)] | @tsv' | awk '{print "generation", $1, $2}')

# Commit all changes witih the generation metadata
git --git-dir /home/synchronous/nix-cfg/.git add .
git --git-dir /home/synchronous/nix-cfg/.git commit -am "$current"

# Back to where you were
popd

# rm /tmp/nixos-switch.log

# Notify all OK!
notify-send -e "NixOS Rebuilt OK!" --icon=software-update-available

echo ""
echo "Full rebuild log in /tmp/nixos-switch.log"
