initial commit
This commit is contained in:
106
scripts/rebuild.sh
Executable file
106
scripts/rebuild.sh
Executable file
@@ -0,0 +1,106 @@
|
||||
#!/usr/bin/env bash
|
||||
# shellcheck disable=SC2086
|
||||
#
|
||||
# This script is used to rebuild the system configuration for the current host.
|
||||
#
|
||||
# SC2086 is ignored because we purposefully pass some values as a set of arguments, so we want the splitting to happen
|
||||
|
||||
function red() {
|
||||
echo -e "\x1B[31m[!] $1 \x1B[0m"
|
||||
if [ -n "${2-}" ]; then
|
||||
echo -e "\x1B[31m[!] $($2) \x1B[0m"
|
||||
fi
|
||||
}
|
||||
function green() {
|
||||
echo -e "\x1B[32m[+] $1 \x1B[0m"
|
||||
if [ -n "${2-}" ]; then
|
||||
echo -e "\x1B[32m[+] $($2) \x1B[0m"
|
||||
fi
|
||||
}
|
||||
|
||||
function yellow() {
|
||||
echo -e "\x1B[33m[*] $1 \x1B[0m"
|
||||
if [ -n "${2-}" ]; then
|
||||
echo -e "\x1B[33m[*] $($2) \x1B[0m"
|
||||
fi
|
||||
}
|
||||
|
||||
switch_args="--show-trace --impure --flake "
|
||||
if [[ -n $1 && $1 == "trace" ]]; then
|
||||
switch_args="$switch_args --show-trace "
|
||||
elif [[ -n $1 ]]; then
|
||||
HOST=$1
|
||||
else
|
||||
HOST=$(hostname)
|
||||
fi
|
||||
switch_args="$switch_args .#$HOST switch"
|
||||
|
||||
os=$(uname -s)
|
||||
if [ "$os" == "Darwin" ]; then
|
||||
# FIXME: This might not have to be darwin specific
|
||||
|
||||
# FIXME: This will break if HM tries to create the file. We should use environment variables instead
|
||||
mkdir -p ~/.config/nix || true
|
||||
CONF=~/.config/nix/nix.conf
|
||||
if [ ! -f $CONF ]; then
|
||||
# Enable nix-command and flakes to bootstrap
|
||||
cat <<-EOF >$CONF
|
||||
experimental-features = nix-command flakes
|
||||
EOF
|
||||
fi
|
||||
|
||||
# Do some darwin pre-installation for bootstrapping
|
||||
if ! which git &>/dev/null; then
|
||||
echo "Installing xcode tools"
|
||||
xcode-select --install
|
||||
fi
|
||||
|
||||
# https://docs.brew.sh/Installation
|
||||
if [ ! -e /opt/homebrew/bin/brew ]; then
|
||||
echo "Installing rosetta"
|
||||
# This is required for emulation of x86_64 binaries, so let's just
|
||||
# assume if they didn't install brew yet, they need this
|
||||
softwareupdate --install-rosetta --agree-to-license
|
||||
echo "Installing homebrew"
|
||||
export NONINTERACTIVE=1
|
||||
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
|
||||
fi
|
||||
|
||||
green "====== REBUILD ======"
|
||||
# Test if there's no darwin-rebuild, then use nix build and then run it
|
||||
if ! which darwin-rebuild &>/dev/null; then
|
||||
nix build --show-trace .#darwinConfigurations."$HOST".system
|
||||
./result/sw/bin/darwin-rebuild $switch_args
|
||||
else
|
||||
echo $switch_args
|
||||
darwin-rebuild $switch_args
|
||||
fi
|
||||
else
|
||||
green "====== REBUILD ======"
|
||||
if command -v nh &>/dev/null; then
|
||||
REPO_PATH=$(pwd)
|
||||
export REPO_PATH
|
||||
nh os switch . -- --impure --show-trace
|
||||
else
|
||||
sudo nixos-rebuild $switch_args
|
||||
fi
|
||||
fi
|
||||
|
||||
# shellcheck disable=SC2181
|
||||
if [ $? -eq 0 ]; then
|
||||
green "====== POST-REBUILD ======"
|
||||
green "Rebuilt successfully"
|
||||
|
||||
# Check if there are any pending changes that would affect the build succeeding.
|
||||
if git diff --exit-code >/dev/null && git diff --staged --exit-code >/dev/null; then
|
||||
# Check if the current commit has a buildable tag
|
||||
if git tag --points-at HEAD | grep -q buildable; then
|
||||
yellow "Current commit is already tagged as buildable"
|
||||
else
|
||||
git tag buildable-"$(date +%Y%m%d%H%M%S)" -m ''
|
||||
green "Tagged current commit as buildable"
|
||||
fi
|
||||
else
|
||||
yellow "WARN: There are pending changes that would affect the build succeeding. Commit them before tagging"
|
||||
fi
|
||||
fi
|
||||
Reference in New Issue
Block a user