NIX := nix --experimental-features "nix-command flakes"

DEPS_EDITOR := \
	nixeovim

DEPS_SYSTEM := \
	nixpkgs \
	nixpkgs-unstable \
	hardware \
	home-manager \
	agenix \
	wired \
	nil

MACHINES := \
	home \
	asus-gl553vd \
	macbook-pro

VPS := \
	amstel \
	tatos

.PHONY: help
help:
	bat -p Makefile

################################################################################
# Hosts
################################################################################

define machine_rule
.PHONY: $(1)
$(1): ;
	# systemctl --user reset-failed
	sudo $(NIX) run -L $(NIX_ARGS) .#switch/$(1) -- $(BUILD_ARGS)
endef

define vps_rule
.PHONY: $(1)
$(1): ; $(NIX) run -L .#deploy/$(1) -- $(BUILD_ARGS)

endef

$(foreach machine,$(MACHINES),$(eval $(call machine_rule,$(machine))))
$(foreach vps,$(VPS),$(eval $(call vps_rule,$(vps))))

.PHONY: rollback
rollback:
	sudo nixos-rebuild switch --rollback

################################################################################
# Editor
################################################################################

.PHONY: neovim
neovim:
	$(NIX) profile upgrade $(or $(NEOVIM_INDEX),$(shell $(NIX) profile list --json | jq '.elements | to_entries[] | select(.value.attrPath | endswith(".neovim-dev")) | .key'))

.PHONY: install/neovim
install/neovim:
	$(NIX) profile install .#neovim-dev

################################################################################
# Deps
################################################################################

.PHONY: deps/editor
deps/editor:
	$(NIX) flake update $(DEPS_EDITOR)

.PHONY: deps/system
deps/system:
	$(NIX) flake update $(DEPS_SYSTEM)

.PHONY: deps
deps: deps/editor deps/system ;