MODULES=xmodmap emacs xdg shepherd dunst zsh mcron mbsync nyxt work \ herbstluftwm mpd polybar xbindkeys firefox STOW = stow EMACS = emacs SCHEME_IMPLEMENTATION = guile .PRECIOUS: %.el define tangle = @printf "\e[35mOBT\e[0m %s\n" $< @$(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 before-emacs-install: emacs/.emacs.d/init.elc emacs-clean: rm -f emacs/.config/shepherd/init.d/emacs.scm emacs/.emacs.d/init.el \ emacs/.emacs.d/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 ## Helper %.el: %.org $(call tangle,emacs-lisp) %.elc: %.el @printf "\e[36mELC\e[0m %s\n" $< @$(EMACS) -q -batch -f package-initialize -f batch-byte-compile $< %.fnl: %.org $(call tangle,fennel) %.lua: %.fnl @printf "\e[32mFNL\e[0m %s\n" $< @fennel --compile $^ > $@ %: %.org $(call tangle) .%: %.org $(call tangle) %.zwc: % zsh -c "zcompile $@ $^" check: $(SCHEME_IMPLEMENTATION) --no-auto-compile test.scm $(HOME)/code/%/: mkdir -p $@ new-dotfiles: ## Surfingkeys surfingkeys/dist/home.js: surfingkeys/home.ts surfingkeys/dist/punt.js: surfingkeys/punt.ts surfingkeys/home.ts cd surfingkeys && guix shell nodejs -- npx webpack -c webpack.config.js ## Diamond Interactive MacOS diamond-interactive: ssh-keygen brew-install wezterm-install glide-install git-install zsh-install _mbsetupuser-install change-macos-defaults ssh-keygen: $(HOME)/.ssh/id_ed25519.pub $(HOME)/.ssh/id_ed25519.pub: ssh-keygen -t ed25519 -C "Tom Punt Macos Laptop" brew-install: _mbsetupuser/Brewfile brew bundle --quiet --file $^ before-_mbsetupuser-install: \ _mbsetupuser/.emacs.d/init.elc \ _mbsetupuser/.emacs.d/scripts/find-php-class before-wezterm-install: wezterm/.config/wezterm/wezterm.lua _mbsetupuser/.config/zsh/conf.d/postgresql.sh: _mbsetupuser/Brewfile $(call tangle,shell) _mbsetupuser/.emacs.d/init.el: \ emacs/.emacs.d/init.el \ emacs/.emacs.d/oni-outline.el \ emacs/.emacs.d/oni-gui.el \ emacs/.emacs.d/oni-dashboard.el \ emacs/.emacs.d/oni-stillness.el \ emacs/.emacs.d/oni-xterm-color.el \ emacs/.emacs.d/oni-compilation.el \ emacs/.emacs.d/oni-php.el \ emacs/.emacs.d/oni-prescient.el \ emacs/.emacs.d/oni-corfu.el \ emacs/.emacs.d/oni-yasnippet.el \ emacs/.emacs.d/oni-smartparens.el \ emacs/.emacs.d/oni-flycheck.el \ emacs/.emacs.d/oni-dumb-jump.el \ emacs/.emacs.d/oni-grep.el \ oni/home/config/pop-os/emacs.el mkdir -p $$(dirname $@) cat $^ > $@ _mbsetupuser/.emacs.d/scripts/%: emacs/.emacs.d/scripts/% mkdir -p $$(dirname $@) cp $^ $@ project-directories: \ $(HOME)/code/personal/ \ $(HOME)/code/diamond-interactive/ \ $(HOME)/code/foreign/ \ $(HOME)/code/study/ change-macos-defaults: # https://macos-defaults.com/dock/autohide.html defaults write com.apple.dock "autohide" -bool "true" killall Dock # Local Variables: # outline-regexp: "##+" # End: