# Makefile for archsetup dotfiles # GNU Stow operations for managing dotfiles STOW := stow --target=$(HOME) --no-folding DOTFILES := $(shell pwd)/dotfiles # Extract DE from command line (e.g., 'make stow dwm' -> DE=dwm) DE := $(filter dwm hyprland,$(MAKECMDGOALS)) .PHONY: help stow restow adopt unstow dwm hyprland # Default target - show help help: @echo "Dotfiles Management (GNU Stow)" @echo "" @echo "Usage: make " @echo "" @echo "Desktop Environments:" @echo " dwm X11/DWM setup (stows: common + dwm)" @echo " hyprland Wayland/Hyprland setup (stows: common + hyprland)" @echo "" @echo "Targets:" @echo " stow Create symlinks (fresh install)" @echo " restow Refresh symlinks (unlink + relink)" @echo " adopt Pull system files into repo, then reset to repo version" @echo " unstow Remove all symlinks" @echo "" @echo "Examples:" @echo " make stow dwm # Fresh DWM install" @echo " make stow hyprland # Fresh Hyprland install" @echo " make restow dwm # Refresh DWM links after git pull" @echo " make adopt hyprland # Resolve conflicts, keep repo version" @echo "" # Prevent 'dwm' and 'hyprland' from being treated as file targets dwm hyprland: @: # Validate DE was provided check-de: ifeq ($(DE),) @echo "Error: Desktop environment required." @echo "" @$(MAKE) --no-print-directory help @exit 1 endif # Stow - create symlinks stow: check-de @echo "Stowing common + $(DE)..." @cd $(DOTFILES) && $(STOW) common @cd $(DOTFILES) && $(STOW) $(DE) @echo "Done." # Restow - refresh symlinks (unlink + relink) restow: check-de @echo "Restowing common + $(DE)..." @cd $(DOTFILES) && $(STOW) --restow common @cd $(DOTFILES) && $(STOW) --restow $(DE) @echo "Done." # Adopt - pull system files into repo, then reset to repo version adopt: check-de @echo "Adopting common + $(DE)..." @cd $(DOTFILES) && $(STOW) --adopt common @cd $(DOTFILES) && $(STOW) --adopt $(DE) @echo "Resetting adopted files to repo version..." @git checkout -- dotfiles/ @echo "Done. Symlinks created, repo unchanged." # Unstow - remove symlinks unstow: check-de @echo "Unstowing common + $(DE)..." @cd $(DOTFILES) && $(STOW) --delete common @cd $(DOTFILES) && $(STOW) --delete $(DE) @echo "Done."