diff options
| -rw-r--r-- | Makefile | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..da4e3c2 --- /dev/null +++ b/Makefile @@ -0,0 +1,76 @@ +# 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 <target> <de>" + @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." |
