63 lines
1.2 KiB
Bash
Executable File
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
|
|
|