65 lines
1.2 KiB
Bash
Executable File
65 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" ;;
|
|
*) exit 1 ;;
|
|
esac
|
|
done
|
|
|
|
# Stolen from https://stackoverflow.com/a/29436423
|
|
function yes_or_no {
|
|
while true; do
|
|
read -r -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 -r -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
|
|
# shellcheck disable=SC2028
|
|
echo "\nOperation completed."
|
|
fi
|