MODULES=xmodmap emacs xdg shepherd dunst zsh mcron mbsync nyxt work \ herbstluftwm mpd polybar xbindkeys firefox STOW = stow EMACS = emacs SCHEME_IMPLEMENTATION = guile # Found this sed command here: https://stackoverflow.com/a/40778047 FIREFOX_PROFILE := $(shell sed -nr "/^Name=default/ { :l /^Path=/ { s/[^=]*=[ ]*//; p; q; }; n; b l; }" ~/.mozilla/firefox/profiles.ini 2>/dev/null) .PRECIOUS: %.el define tangle = @echo -e "\e[35mOBT\e[0m" $< @$(EMACS) -quick -batch \ -eval "(package-initialize)" \ -load ob-tangle \ -eval "(setq sh-make-vars-local nil)" \ -eval "(setq geiser-default-implementation '$(SCHEME_IMPLEMENTATION))" \ -eval "(org-babel-tangle-file \"$<\" \"$(PWD)/$@\" \"$(1)\")" endef .PHONY: all clean $(MODULES) zsh all: $(MODULES) install: $(addsuffix -stow,$(MODULES)) clean: $(addsuffix -clean,$(MODULES)) before-%-install: # Dummy recipe @true %-stow: % before-%-install $(STOW) $< %-install: %-stow # Dummy recipe @true %-uninstall: $(STOW) -D $(subst -uninstall,,$@) ## Picom picom: picom/.config/picom.conf picom/.config/picom.conf: picom/.config/picom.org $(call tangle,conf) picom-clean: rm -f picom/.config/picom.conf ## Emacs emacs: emacs/.config/shepherd/init.d/emacs.scm emacs/.config/emacs/init.elc emacs-clean: rm -f emacs/.config/shepherd/init.d/emacs.scm emacs/.config/emacs/init.el \ emacs/.config/emacs/init.elc ## Xmodmap xmodmap: xmodmap/.Xmodmap xmodmap-clean: rm -f xmodmap/.Xmodmap ## Cower cower: cower/.config/cower/config cower/.config/cower/config: cower/.config/cower/config.org $(call tangle,conf-unix) cower-clean: rm -f cower/.config/cower/config ## Mowedline mowedline: mowedline/.config/mowedline/init.scm mowedline/.config/mowedline/init.scm: SCHEME_IMPLEMENTATION = chicken mowedline/.config/mowedline/init.scm: mowedline/.config/mowedline/init.org $(call tangle,scheme) mowedline-clean: rm -f mowedline/.config/mowedline/init.scm ## Dunst dunst: dunst/.config/dunst/dunstrc dunst/.config/shepherd/init.d/dunst.scm ## X11 x11-install: lib-install x11/dot-x11-0-1-any.pkg.tar.xz x11/dot-x11-0-1-any.pkg.tar.xz: x11/PKGBUILD cd x11 && makepkg -sicf ## XDG xdg: xdg/.config/mimeapps.list xdg/.config/user-dirs.dirs \ xdg/.config/user-dirs.locale # These files shouldn't be stowed because the applications managing/using them # immediately replace the symbolic links with new files and the settings in them # are lost. xdg-stow: cp xdg/.config/mimeapps.list xdg/.config/user-dirs.dirs xdg/.config/user-dirs.locale $(HOME)/.config/ ## Shepherd shepherd: shepherd/.config/shepherd/init.scm ## Mcron mcron: mcron/.config/shepherd/init.d/mcron.scm ## Mbsync mbsync: mbsync/.config/cron/mbsync.guile ## ZSH zsh: zsh/.profile zsh/.zshrc zsh/.zsh/functions/unzip.zwc \ zsh/.zsh/functions/x-yank.zwc zsh/.zsh/functions/x-copy-region-as-kill.zwc ## Nyxt nyxt: nyxt/.config/nyxt/init.lisp ## Firefox ifneq ($(FIREFOX_PROFILE),) firefox: firefox/.mozilla/firefox/$(FIREFOX_PROFILE)/chrome/userChrome.css firefox/.mozilla/firefox/$(FIREFOX_PROFILE)/chrome/userChrome.css: firefox/src/userChrome.css mkdir -p $$(dirname $@) cp $^ $@ else firefox: @echo "Error finding firefox default profile, can't make" >&2 firefox-stow: @echo "Error finding firefox default profile, can't stow" >&2 endif ## Helper %.el: %.org $(call tangle,emacs-lisp) %.elc: %.el @echo -e "\e[36mELC\e[0m" $< $(EMACS) -batch -f package-initialize -f batch-byte-compile $< %: %.org $(call tangle) .%: %.org $(call tangle) %.zwc: % zsh -c "zcompile $@ $^" check: $(SCHEME_IMPLEMENTATION) --no-auto-compile test.scm new-dotfiles: # Local Variables: # outline-regexp: "##+" # End: