| 1 | MAKEFLAGS := --no-builtin-rules |
| 2 | SHELL := /bin/bash |
| 3 | |
| 4 | DEPS := $(wildcard deps/*) |
| 5 | |
| 6 | ifeq ($(shell uname),Darwin) |
| 7 | GREP := ggrep |
| 8 | SED := gsed |
| 9 | DIFF := $(shell gls -t1 /usr/local/Cellar/diffutils/*/bin/diff | head -1) |
| 10 | else |
| 11 | GREP := grep |
| 12 | SED := sed |
| 13 | DIFF := diff |
| 14 | endif |
| 15 | |
| 16 | .PHONY: \ |
| 17 | default \ |
| 18 | clean \ |
| 19 | $(DEPS) \ |
| 20 | deps \ |
| 21 | home \ |
| 22 | diff \ |
| 23 | pull \ |
| 24 | push \ |
| 25 | mpdconf_dirs \ |
| 26 | pkgs_void \ |
| 27 | pkgs_void_update \ |
| 28 | pkgs_brew_cask_install \ |
| 29 | pkgs_brew_install \ |
| 30 | pkgs_cargo \ |
| 31 | pkgs_deb_install \ |
| 32 | pkgs_deb_purge \ |
| 33 | pkgs_debian \ |
| 34 | pkgs_mac \ |
| 35 | pkgs_pip_install \ |
| 36 | pkgs_pip_upgrade \ |
| 37 | pkgs_snap_classic \ |
| 38 | pkgs_snap_strict |
| 39 | |
| 40 | default: |
| 41 | @echo '================================================================================' |
| 42 | @echo '| Default target disabled. Specify a concrete one.' |
| 43 | @echo '================================================================================' |
| 44 | @exit 1 |
| 45 | |
| 46 | home: compiled | mpdconf_dirs |
| 47 | cp -Rp bin $(HOME)/ |
| 48 | $(MAKE) push |
| 49 | xdg-user-dirs-update |
| 50 | |
| 51 | mpdconf_dirs: |
| 52 | mkdir -p ~/arc/aud |
| 53 | mkdir -p ~/var/lib/mpd/playlists |
| 54 | mkdir -p ~/var/log/mpd |
| 55 | mkdir -p ~/var/run/mpd |
| 56 | |
| 57 | compiled: |
| 58 | mkdir -p bin |
| 59 | cd src && make |
| 60 | mv src/clockloop bin/ |
| 61 | |
| 62 | font_cache: |
| 63 | fc-cache -fv |
| 64 | |
| 65 | # |
| 66 | # Void Linux |
| 67 | # |
| 68 | |
| 69 | pkgs_void: |
| 70 | sudo xbps-install $(shell ./list pkgs-void.list) |
| 71 | |
| 72 | pkgs_void_update: |
| 73 | xbps-query -m | awk -F - '{sub("-" $$NF "$$", ""); print}' | sort -u | grep -vf <(./list -v sep='\n' -v end='\n' pkgs-void-src.list) > pkgs-void.list |
| 74 | (echo '#'; ./patch-comments pkgs-void.list.comments pkgs-void.list) | sponge pkgs-void.list |
| 75 | |
| 76 | # |
| 77 | # Golang |
| 78 | # |
| 79 | pkgs_golang: list pkgs-golang.list |
| 80 | go get -u $(shell ./list pkgs-golang.list) |
| 81 | |
| 82 | # |
| 83 | # Ubuntu |
| 84 | # |
| 85 | pkgs_ubuntu: list pkgs-ubuntu.list |
| 86 | sudo apt install $(shell ./list pkgs-ubuntu.list) |
| 87 | |
| 88 | pkgs_ubuntu_debfiles: list pkgs-ubuntu-debfiles.list |
| 89 | ./install-debfiles pkgs-ubuntu-debfiles.list |
| 90 | |
| 91 | # |
| 92 | # PIP |
| 93 | # |
| 94 | pkgs_pip_install: |
| 95 | pip install --user $(shell ./list pkgs-pip.list) |
| 96 | |
| 97 | pkgs_pip_upgrade: |
| 98 | pip install --user --upgrade $(shell ./list pkgs-pip.list) |
| 99 | |
| 100 | # |
| 101 | # Rust (cargo) |
| 102 | # |
| 103 | |
| 104 | pkgs_cargo: list pkgs-cargo.list |
| 105 | cargo install $(shell ./list pkgs-cargo.list) |
| 106 | |
| 107 | # |
| 108 | # Homebrew/Mac |
| 109 | # |
| 110 | |
| 111 | pkgs_mac: |
| 112 | $(MAKE) pkgs_brew_install |
| 113 | $(MAKE) pkgs_brew_cask_install |
| 114 | |
| 115 | # TODO: Test pkgs_brew_tap when list contains multiple items |
| 116 | pkgs_brew_tap: list pkgs-brew-tap.list |
| 117 | brew tap $(shell ./list pkgs-brew-tap.list) |
| 118 | |
| 119 | pkgs_brew_install: list pkgs-brew-install.list |
| 120 | brew install $(shell ./list pkgs-brew-install.list) |
| 121 | |
| 122 | pkgs_brew_cask_install: list pkgs-brew-cask-install.list |
| 123 | brew cask install $(shell ./list pkgs-brew-cask-install.list) |
| 124 | |
| 125 | # |
| 126 | # Debian |
| 127 | # |
| 128 | pkgs_deb_install: list pkgs-deb-install.list |
| 129 | sudo apt install $(shell ./list pkgs-deb-install.list) |
| 130 | |
| 131 | pkgs_deb_purge: list pkgs-deb-purge.list |
| 132 | sudo apt purge $(shell ./list pkgs-deb-purge.list) |
| 133 | |
| 134 | # |
| 135 | # Snap |
| 136 | # |
| 137 | pkgs_snap_classic: list pkgs-snap-classic.list |
| 138 | @$(MAKE) $(foreach p,$(shell ./list pkgs-snap-classic.list),pkg_snap_classic_$(p)) |
| 139 | |
| 140 | pkgs_snap_strict: list pkgs-snap-strict.list |
| 141 | @$(MAKE) $(foreach p,$(shell ./list pkgs-snap-strict.list),pkg_snap_strict_$(p)) |
| 142 | |
| 143 | # 'snap' command comes from 'snapd' deb pkg |
| 144 | pkg_snap_classic_%: |
| 145 | sudo snap install --classic $* |
| 146 | pkg_snap_strict_%: |
| 147 | sudo snap install $* |
| 148 | |
| 149 | deps: $(DEPS) |
| 150 | |
| 151 | define GEN_DEP_RULE |
| 152 | $(1): |
| 153 | cd $1 && make |
| 154 | endef |
| 155 | |
| 156 | $(foreach d,$(DEPS),$(eval $(call GEN_DEP_RULE,$(d)))) |
| 157 | |
| 158 | diff: |
| 159 | find home -type f -print0 \ |
| 160 | | $(SED) -z 's/^home\///g' \ |
| 161 | | sort -zr \ |
| 162 | | xargs -0 -I% sh -c 'echo %; $(DIFF) --color=auto ~/% home/%' |
| 163 | |
| 164 | pull: |
| 165 | find home -type f -print0 \ |
| 166 | | $(SED) -z 's/^home\///g' \ |
| 167 | | xargs -0 -I% sh -c '$(DIFF) -q ~/% home/% > /dev/null || cp ~/% home/%' |
| 168 | |
| 169 | push: |
| 170 | # TODO Backup files before replacing. |
| 171 | # But - recursive copy is not a good strategy for this. |
| 172 | # Need to do a file by file pass, like the diff recipe. |
| 173 | # |
| 174 | # Limit depth because directories are copied recursively: |
| 175 | find home -maxdepth 1 -print0 \ |
| 176 | | $(GREP) -zv '^home$$' \ |
| 177 | | xargs -0 -I% cp -Rp % ~ |
| 178 | |
| 179 | clean: |
| 180 | rm -rf ./debfiles |
| 181 | cd src && make clean |