diff --git a/Makefile b/Makefile index 3307dcc..96733a4 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,9 @@ -HOME_TARGET := $(HOME) +HOME_TARGET ?= $(HOME) +SYSTEM_DIRS := etc usr var opt boot +PACKAGES := $(patsubst %/,%,$(wildcard */)) + +.PHONY: check-stow pull-updates unlink link -.PHONY: check-stow check-stow: @command -v stow >/dev/null 2>&1 && { \ echo "✅ stow already installed"; \ @@ -35,23 +38,103 @@ check-stow: ;; \ esac -.PHONY: pull-updates pull-updates: @echo "Pulling all recent updates" @git pull origin main @git submodule update --recursive --remote -.PHONY: link +unlink: + @echo "Unlinking dotfiles to machine" + @for pkg in $(PACKAGES); do \ + echo ">>> Unstowing package: $$pkg"; \ + for subdir in "$$pkg"/* "$$pkg"/.[!.]*; do \ + [ -d "$$subdir" ] || continue; \ + sub="$${subdir##*/}"; \ + is_sys=0; \ + for sys in $(SYSTEM_DIRS); do \ + [ "$$sub" = "$$sys" ] && is_sys=1 && break; \ + done; \ + if [ "$$is_sys" -eq 1 ]; then \ + echo " [SYSTEM] Unstowing $$pkg/$$sub from $$sub"; \ + sudo stow -D -d "$$pkg" -t "/$$sub" "$$sub"; \ + else \ + echo " [USER] Unstowing $$pkg/$$sub from $(HOME_TARGET)/$$sub"; \ + stow -D -d "$$pkg" -t "$(HOME_TARGET)/$$sub" "$$sub"; \ + fi; \ + done; \ + done + link: check-stow @echo "Linking dotfiles to machine" - @for pkg in *; do \ - [ -d "$$pkg" ] || continue; \ - echo "📦 stowing $$pkg"; \ - if [ -d "$$pkg/etc" ] || [ -d "$$pkg/usr" ] || [ -d "$$pkg/mnt" ]; then \ - echo "[System] Stowing '$$pkg' to /..."; \ - sudo stow -R "$$pkg" -t / --adopt; \ - else \ - echo "[User] Stowing '$$pkg' to $(HOME_TARGET)..."; \ - stow -R "$$pkg" -t "$(HOME_TARGET)" --adopt; \ - fi; \ + @for pkg in $(PACKAGES); do \ + echo ">>> Processing package: $$pkg"; \ + for subdir in "$$pkg"/* "$$pkg"/.[!.]*; do \ + [ -d "$$subdir" ] || continue; \ + sub="$${subdir##*/}"; \ + is_sys=0; \ + for sys in $(SYSTEM_DIRS); do \ + [ "$$sub" == "$$sys" ] && is_sys=1 && break; \ + done; \ + if [ "$$is_sys" -eq 1 ]; then \ + echo " [System] Stowing $$pkg/$$sub to $$sub"; \ + sudo stow -d "$$pkg" -t "/$$sub" "$$sub"; \ + else \ + echo " [USER] Stowing $$pkg/$$sub to $(HOME_TARGET)/$$sub"; \ + stow -d "$$pkg" -t "$(HOME_TARGET)/$$sub" "$$sub"; \ + fi; \ + done; \ done + +# # Define variables +# HOME_TARGET ?= $(HOME) +# # Space-separated list of directories that should go to the system root +# SYSTEM_DIRS := etc usr var opt boot +# +# # Find all top-level directories in your dotfiles repo (e.g., 'systemd', 'nvim') +# PACKAGES := $(patsubst %/,%,$(wildcard */)) +# +# .PHONY: all stow unstow +# +# all: stow +# +# stow: +# @for pkg in $(PACKAGES); do \ +# echo ">>> Processing package: $$pkg"; \ +# for subdir in "$$pkg"/* "$$pkg"/.[!.]*; do \ +# [ -d "$$subdir" ] || continue; \ +# sub="$${subdir##*/}"; \ +# is_sys=0; \ +# for sys in $(SYSTEM_DIRS); do \ +# [ "$$sub" = "$$sys" ] && is_sys=1 && break; \ +# done; \ +# if [ "$$is_sys" -eq 1 ]; then \ +# echo " [System] Stowing $$pkg/$$sub to /$$sub"; \ +# sudo mkdir -p "/$$sub"; \ +# sudo stow -d "$$pkg" -t "/$$sub" "$$sub"; \ +# else \ +# echo " [User] Stowing $$pkg/$$sub to $(HOME_TARGET)/$$sub"; \ +# mkdir -p "$(HOME_TARGET)/$$sub"; \ +# stow -d "$$pkg" -t "$(HOME_TARGET)/$$sub" "$$sub"; \ +# fi; \ +# done; \ +# done +# +# unstow: +# @for pkg in $(PACKAGES); do \ +# echo ">>> Unstowing package: $$pkg"; \ +# for subdir in "$$pkg"/* "$$pkg"/.[!.]*; do \ +# [ -d "$$subdir" ] || continue; \ +# sub="$${subdir##*/}"; \ +# is_sys=0; \ +# for sys in $(SYSTEM_DIRS); do \ +# [ "$$sub" = "$$sys" ] && is_sys=1 && break; \ +# done; \ +# if [ "$$is_sys" -eq 1 ]; then \ +# echo " [System] Unstowing $$pkg/$$sub from /$$sub"; \ +# sudo stow -D -d "$$pkg" -t "/$$sub" "$$sub"; \ +# else \ +# echo " [User] Unstowing $$pkg/$$sub from $(HOME_TARGET)/$$sub"; \ +# stow -D -d "$$pkg" -t "$(HOME_TARGET)/$$sub" "$$sub"; \ +# fi; \ +# done; \ +# done diff --git a/systemd/.config/systemd/user/mnt-nas-credentials.service b/systemd/.config/systemd/user/mnt-nas-credentials.service index 030d3de..45a99ed 100644 --- a/systemd/.config/systemd/user/mnt-nas-credentials.service +++ b/systemd/.config/systemd/user/mnt-nas-credentials.service @@ -1,6 +1,6 @@ [Unit] Description=Fetch NAS credentials from 1Password -After=graphical-session.target +After=op-cli-signin.service [Service] Type=oneshot