fedora-csb-system-manager
 1makefile := $(abspath $(lastword $(MAKEFILE_LIST)))
 2dotfiles := $(abspath $(dir $(makefile)))
 3
 4~ := $(abspath $(dotfiles))
 5
 6force:
 7
 8define rule.template
 9$(1)/% : $(2)/% force
10	@echo "📋 Linking $$< → $$@"
11	@mkdir -p $$(@D)
12	@ln -snf $$< $$@
13endef
14
15rule.define = $(eval $(call rule.template,$(1),$(2)))
16
17$(call rule.define,~,$(~))
18
19all += niri
20niri : ~/.config/niri/config.kdl
21
22all += emacs
23emacs : ~/.config/emacs
24
25all += claude-skills
26claude-skills : ~/.config/claude/skills
27
28all += claude-agents claude-settings claude-plugins claude-statusline claude-compat
29claude-agents : ~/.config/claude/agents
30claude-settings : ~/.config/claude/settings.json
31claude-plugins : ~/.config/claude/plugins/session-manager
32claude-statusline : ~/.config/claude/statusline.sh
33claude-compat : ~/.claude
34
35all += ntfy-config ntfy-scripts
36ntfy-config : ~/.config/ntfy/client.yml
37ntfy-scripts : ~/.config/ntfy/handle-notification.sh ~/.config/ntfy/acknowledge-notification.sh ~/.config/ntfy/ntfy-update-config
38
39all += xmpp-research-bot
40xmpp-research-bot : ~/.config/xmpp-research-bot/commands.yaml
41
42all += aichat-config aichat-genconf aichat-roles
43aichat-config : ~/.config/aichat/config.yaml
44aichat-genconf : ~/.config/aichat/genconf.py
45aichat-roles : ~/.config/aichat/roles
46
47# Backward compatibility: symlink ~/.claude to ~/.config/claude
48~/.claude : force
49	@echo "🔗 Creating backward compatibility symlink: ~/.claude -> ~/.config/claude"
50	@mkdir -p ~/.config
51	@ln -snf ~/.config/claude ~/.claude
52
53# Generate ntfy client.yml from template with passage secrets injected
54~/.config/ntfy/client.yml : $(dotfiles)/.config/ntfy/client.yml.in $(dotfiles)/.config/ntfy/ntfy-update-config force
55	@echo "⚙️  Generating $$@ from template with passage secrets"
56	@$(dotfiles)/.config/ntfy/ntfy-update-config
57
58# Generate aichat config.yaml from template with dynamic model fetching
59~/.config/aichat/config.yaml : $(dotfiles)/.config/aichat/config.yaml.in $(dotfiles)/.config/aichat/genconf.py force
60	@echo "⚙️  Generating ~/.config/aichat/config.yaml with dynamic models and passage secrets"
61	@$(dotfiles)/.config/aichat/genconf.py > ~/.config/aichat/config.yaml 2>/dev/null
62
63all : $(all)
64	@echo "✅ All dotfiles installed!"
65
66.PHONY: all $(all)
67.DEFAULT_GOAL := all
68