working stowing for system drives and user space

This commit is contained in:
2026-07-24 20:43:03 -06:00
parent f85882f944
commit fe2aa6572e
2 changed files with 98 additions and 15 deletions
+95 -12
View File
@@ -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: check-stow:
@command -v stow >/dev/null 2>&1 && { \ @command -v stow >/dev/null 2>&1 && { \
echo "✅ stow already installed"; \ echo "✅ stow already installed"; \
@@ -35,23 +38,103 @@ check-stow:
;; \ ;; \
esac esac
.PHONY: pull-updates
pull-updates: pull-updates:
@echo "Pulling all recent updates" @echo "Pulling all recent updates"
@git pull origin main @git pull origin main
@git submodule update --recursive --remote @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 link: check-stow
@echo "Linking dotfiles to machine" @echo "Linking dotfiles to machine"
@for pkg in *; do \ @for pkg in $(PACKAGES); do \
[ -d "$$pkg" ] || continue; \ echo ">>> Processing package: $$pkg"; \
echo "📦 stowing $$pkg"; \ for subdir in "$$pkg"/* "$$pkg"/.[!.]*; do \
if [ -d "$$pkg/etc" ] || [ -d "$$pkg/usr" ] || [ -d "$$pkg/mnt" ]; then \ [ -d "$$subdir" ] || continue; \
echo "[System] Stowing '$$pkg' to /..."; \ sub="$${subdir##*/}"; \
sudo stow -R "$$pkg" -t / --adopt; \ 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 \ else \
echo "[User] Stowing '$$pkg' to $(HOME_TARGET)..."; \ echo " [USER] Stowing $$pkg/$$sub to $(HOME_TARGET)/$$sub"; \
stow -R "$$pkg" -t "$(HOME_TARGET)" --adopt; \ stow -d "$$pkg" -t "$(HOME_TARGET)/$$sub" "$$sub"; \
fi; \ fi; \
done; \
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
@@ -1,6 +1,6 @@
[Unit] [Unit]
Description=Fetch NAS credentials from 1Password Description=Fetch NAS credentials from 1Password
After=graphical-session.target After=op-cli-signin.service
[Service] [Service]
Type=oneshot Type=oneshot