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