#!/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