nixos-config/quick-switch.sh

63 lines
1.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
commitchanges="false"
while getopts 'c' OPTION; do
case "$OPTION" in
c) commitchanges="true" ;;
esac
done
# Stolen from https://stackoverflow.com/a/29436423
function yes_or_no {
while true; do
read -p "$* [y/n]: " yn
case $yn in
[Yy]*) return 0 ;;
[Nn]*) echo "Aborted" ; return 1 ;;
esac
done
}
function reset_bspwm() {
pkill -USR1 -x sxhkd
pkill -x picom
pkill polybar
sxhkd &
bspc wm -r
}
function apply() {
git push --force-with-lease
rev=$(git rev-parse HEAD)
sudo nixos-rebuild switch \
--flake "git+https://git.atauno.com/atau/nixos-config.git?ref=main&rev=$rev"
reset_bspwm
}
function commit_and_apply() {
read -p "Git working directory is unclean. Commit message: " msg
git add .
git commit -m "$(hostname): $msg"
apply
}
if [ -z "$(git status --porcelain)" ]
then
apply
else
if [ "$commitchanges" == "false" ]
then
echo "Using local flake..."
sudo nixos-rebuild switch --show-trace --flake .
reset_bspwm
else
echo "Committing flake and pushing..."
commit_and_apply
fi
echo "\nOperation completed."
fi