+pacman: $(XDG_CONFIG_HOME)
+       ln -sfT $(APATH)/$@ $(XDG_CONFIG_HOME)/$@
+.PHONY: pacman
+
+picom: $(XDG_CONFIG_HOME)
+       ln -sfT $(APATH)/$@ $(XDG_CONFIG_HOME)/$@
+.PHONY: picom
+
+qute_scripts := $(wildcard qutebrowser/userscripts/*)
+$(qute_scripts):
+       mkdir -p $(XDG_DATA_HOME)/qutebrowser/userscripts
+       ln -sfT $(APATH)/$@ $(XDG_DATA_HOME)/$@
+.PHONY: $(qute_scripts)
+
+qutebrowser: $(XDG_CONFIG_HOME) $(qute_scripts)
+       ln -sfT $(APATH)/qutebrowser $(XDG_CONFIG_HOME)/qutebrowser
+       mkdir -p ~/downloads
+.PHONY: qutebrowser
+
+rofi: $(XDG_CONFIG_HOME)
+       ln -sfT $(APATH)/$@ $(XDG_CONFIG_HOME)/$@
+.PHONY: rofi
+
+ssh:
+       ln -sfT $(APATH)/ssh/config ~/.ssh/config
+.PHONY: ssh
+
+# copy system files, do not link, it doesn't work if home is encrypted
+/etc/systemd/system/%: systemd/system/%
+       sudo cp $(APATH)/$< $@
+
+systemd_system_units := $(patsubst %,/etc/%,$(wildcard systemd/system/*))
+systemd: $(XDG_CONFIG_HOME) $(systemd_system_units)
+       ln -sfT $(APATH)/$@ $(XDG_CONFIG_HOME)/$@
+.PHONY: systemd
+
+task: $(XDG_CONFIG_HOME)
+       ln -sfT $(APATH)/$@ $(XDG_CONFIG_HOME)/$@
+.PHONY: task
+
+tmux: $(XDG_CONFIG_HOME)
+       ln -sfT $(APATH)/tmux $(XDG_CONFIG_HOME)/tmux
+       git submodule update --init \
+               tmux/plugins/nord-tmux \
+               tmux/plugins/tpm
+.PHONY: tmux
+
+urxvt: $(XDG_CONFIG_HOME)
+       ln -sfT $(APATH)/urxvt $(XDG_CONFIG_HOME)/urxvt
+.PHONY: urxvt
+
+vdirsyncer: $(XDG_CACHE_HOME)
+       ln -sfT $(APATH)/$@ $(XDG_CONFIG_HOME)/$@
+       mkdir -p $(XDG_DATA_HOME)/vdirsyncer/{contacts,calendars}
+.PHONY: vdirsyncer
+
+vim: $(XDG_CONFIG_HOME)
+       ln -sfT $(APATH)/vim $(XDG_CONFIG_HOME)/vim
+       mkdir -p $(XDG_DATA_HOME)/vim
+.PHONY: vim
+       
+nvim: $(XDG_CONFIG_HOME) vim
+       ln -sfT $(APATH)/$@ $(XDG_CONFIG_HOME)/$@
+.PHONY: nvim
+
+yay: $(XDG_CONFIG_HOME)
+       ln -sfT $(APATH)/yay $(XDG_CONFIG_HOME)/yay
+       mkdir -p $(XDG_CACHE_HOME)/yay
+
+xinit: $(XDG_CONFIG_HOME) xprofile
+       ln -sfT $(APATH)/$@rc ~/.$@rc
+       ln -sfT $(APATH)/$@   $(XDG_CONFIG_HOME)/$@
+.PHONY: xinit
+
+xprofile: $(XDG_CONFIG_HOME)
+       ln -sfT $(APATH)/$@   ~/.$@
+       ln -sfT $(APATH)/$@.d $(XDG_CONFIG_HOME)/$@.d
+.PHONY: xprofile
+
+wakeonlan: $(XDG_CONFIG_HOME)
+       ln -sfT $(APATH)/$@ $(XDG_CONFIG_HOME)/$@
+.PHONY: wakeonlan
+
+weechat: $(XDG_CONFIG_HOME) $(XDG_CACHE_HOME)
+       ln -sfT $(APATH)/weechat $(XDG_CONFIG_HOME)/weechat
+       mkdir -p $(XDG_CACHE_HOME)/weechat
+.PHONY: weechat
+
+zathura: $(XDG_CONFIG_HOME)
+       ln -sfT $(APATH)/$@ $(XDG_CONFIG_HOME)/$@
+.PHONY: zathura
+
+zellij: $(XDG_CONFIG_HOME)
+       ln -sfT $(APATH)/$@ $(XDG_CONFIG_HOME)/$@
+.PHONY: zellij
+
+zsh: $(XDG_CONFIG_HOME)