switch *args:
	# Avoid "Unit nixos-rebuild-switch-to-configuration.service was already loaded"
	# when another switch is still running.
	bash -lc 'if systemctl is-active --quiet nixos-rebuild-switch-to-configuration.service; then \
	  echo "nixos-rebuild switch already running; waiting..." >&2; \
	  systemctl status nixos-rebuild-switch-to-configuration.service --no-pager >&2 || true; \
	  while systemctl is-active --quiet nixos-rebuild-switch-to-configuration.service; do sleep 1; done; \
	fi'
	sudo nixos-rebuild switch --flake '.#' --impure --option warn-dirty false {{args}}

switch-local-taffybar *args:
	# Like `switch`, but use the local taffybar checkout (useful when hacking on it).
	# Note: requires the submodule/checkout to exist at ../dotfiles/config/taffybar/taffybar.
	bash -lc 'if systemctl is-active --quiet nixos-rebuild-switch-to-configuration.service; then \
	  echo "nixos-rebuild switch already running; waiting..." >&2; \
	  systemctl status nixos-rebuild-switch-to-configuration.service --no-pager >&2 || true; \
	  while systemctl is-active --quiet nixos-rebuild-switch-to-configuration.service; do sleep 1; done; \
	fi'
	sudo nixos-rebuild switch --flake '.#' --impure --option warn-dirty false \
	  --override-input taffybar path:../dotfiles/config/taffybar/taffybar \
	  {{args}}

remote-switch host *args:
	nixos-rebuild switch --flake '.#{{host}}' --target-host {{host}}.local --sudo --impure --option warn-dirty false {{args}}

fix-local-path-issue:
	# Kept for backwards-compat: update the lockfile inputs explicitly.
	nix flake update taffybar imalison-taffybar
