Something went wrong. Try again.
~/ is where the heart is
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129#!/usr/bin/env bash# sourced from https://github.com/JustCoderdev/dotfiles
# Exit alt-buffecho -ne "\033[?1049l"
pushd "${HOME}/dotfiles/" > /dev/null || exitshopt -s globstarclear
if [[ -d .jj ]]; then VCS="jj"else VCS="git"fi
# Update hostif [ -f "./flake.nix" ]; then HOST_FLAKE=$(awk '/_hostname = / {print $3}' ./flake.nix) HOST_FLAKE="${HOST_FLAKE//\"/}" HOST_FLAKE="${HOST_FLAKE%;}"else HOST_FLAKE=""fi
HOST_SHELL="${HOST:-}"HOST_INPUT="${1:-}"
## Check for inputif [ -z "${HOST_INPUT}" ]; then echo -e "Hostname not passed, defaulting to \033[32m#${HOST_SHELL}\033[0m"else echo -e "Requested rebuild for \033[32m\"${HOST_INPUT}\"\033[0m" HOST_SHELL="${HOST_INPUT}"fi
## Update flake fileif [ "${HOST_SHELL}" != "${HOST_FLAKE}" ]; then echo "Updating flake... (${HOST_FLAKE:---}) -> ($HOST_SHELL)" sed -i "s/\(_hostname = \).*/\1\"${HOST_SHELL}\";/" ./flake.nixfi
# Check differencesecho -ne "Analysing changes..."if [[ "${VCS}" == "jj" ]]; then change_summary=$(jj diff --summary -- .) || exit has_changes=$([[ -n "${change_summary}" ]] && echo true || echo false)else if git diff --quiet -- .; then # -- ./**/*.nix has_changes=false else has_changes=true fifi
if ! ${has_changes}; then echo -e " \033[31mNot found\033[0m"else echo " Found"
read -r -p 'Open diff? (y/N): ' diff_confirm if [[ "${diff_confirm}" == [yY] ]] || [[ "${diff_confirm}" == [yY][eE][sS] ]]; then if [[ "${VCS}" == "jj" ]]; then jj diff --color-words --context 0 -- . else git diff --word-diff=porcelain -U0 -- . fi fi
if [[ "${VCS}" == "git" ]]; then git add . fifi
# Rebuild systemecho -n "Rebuilding NixOS... "echo -ne "\033[?1049h\033[H" # enter alt-buff and clearecho "Rebuilding NixOS..."
set +o pipefail # Disable pipafail since we check ourselvessudo nixos-rebuild switch --show-trace --flake ".#${HOST_SHELL}" 2>&1 | tee .nixos-switch.logexit_code="${PIPESTATUS[0]}"set -o pipefail # Re-enable pipefail
echo -e "\n\033[34mNixOS rebuild completed\033[0m (code: $exit_code)"echo -ne "\rExit in 3" && sleep 1echo -ne "\rExit in 2" && sleep 1echo -ne "\rExit in 1" && sleep 1echo -ne "\033[?1049l" # exit alt-buff
if [[ "${exit_code}" == 0 ]]; then echo -e "Done\n"
## Commit changes if ${has_changes}; then generation=$(sudo nix-env -p /nix/var/nix/profiles/system --list-generations | grep current | awk '{print $1}') message="$(hostname): NixOS build #${generation}" if [[ "${VCS}" == "jj" ]]; then jj commit -m "${message}" else GIT_COMMITTER_NAME="ptdewey" GIT_COMMITTER_EMAIL="noreply" git commit -m "${message}" --author="ptdewey <noreply>" fi echo -e "\n\n\033[32mCommitted as ${message}\033[0m" fi
echo -e "\033[34mNixOS Rebuild Completed!\033[0m\n"
else echo -e "\033[31mFailed\033[0m\n"
grep --color -F "error" .nixos-switch.log if ${has_changes} && [[ "${VCS}" == "git" ]]; then git restore --staged . fi
echo -ne "\n"
read -r -p 'Open log? (y/N): ' log_confirm if [[ "${log_confirm}" == [yY] ]] || [[ "${log_confirm}" == [yY][eE][sS] ]]; then nvim .nixos-switch.log fifi
shopt -u globstarpopd > /dev/null || exit