aboutsummaryrefslogtreecommitdiff
path: root/dm
diff options
context:
space:
mode:
authorRyan Kavanagh <ryanakca@kubuntu.org>2011-08-16 21:16:41 -0400
committerRyan Kavanagh <ryanakca@kubuntu.org>2011-08-25 07:43:05 -0400
commit25af40e8ad087b1c86a85b3075b8fd4c35d79a81 (patch)
tree4de9f1eedaa052eaee52660ee3bc8ae5da48c429 /dm
parentFixed detach sig signing (diff)
Rename executable makefile to dm
Diffstat (limited to 'dm')
-rwxr-xr-xdm135
1 files changed, 135 insertions, 0 deletions
diff --git a/dm b/dm
new file mode 100755
index 0000000..39633c6
--- /dev/null
+++ b/dm
@@ -0,0 +1,135 @@
+#!gmake -f
+SUBSTS_FILE=SUBSTS.local
+
+# Files that need changes to work locally or that contain sensitive
+# information
+LOCAL_FILES = \
+ .imapfilter/config.lua \
+ .mutt/accounts.rc \
+ .netrc \
+ .offlineimaprc \
+ .xmonad/xmonad.hs \
+
+# Files that are system independent.
+# IMPORTANT: directories must have trailing slash
+GLOBAL_FILES = \
+ .Xdefaults \
+ .config/nitrogen/ \
+ .dzen/ \
+ .gitconfig \
+ .imapfilter/ \
+ .inputrc \
+ .local/share/wallpapers/ \
+ .mailcheckrc \
+ .mutt/ \
+ .muttrc \
+ .notmuch-config \
+ .quiltrc-dpkg \
+ .screenrc \
+ .screenlayout/ \
+ .signature \
+ .vim/ \
+ .vimrc \
+ .xinitrc \
+ .xmobarrc \
+ .xmonad/ \
+ .zsh/ \
+ .zsh_logout \
+ .zshrc \
+ bin/ \
+
+get-val = $(shell awk '{if (match($$0, /$1/)) { print $$2 } }' $(SUBSTS_FILE))
+
+SHA256 = $(call get-val,SHA256)
+
+LOCAL_PASS = $(call get-val,LOCAL_PASS)
+GMAIL_PASS = $(call get-val,GMAIL_PASS)
+QUEENSU_PASS = $(call get-val,QUEENSU_PASS)
+PM_EMAIL = $(call get-val,PM_EMAIL)
+SCREENLAYOUT = $(call get-val,SCREENLAYOUT)
+XMONAD_DZEN_W = $(call get-val,XMONAD_DZEN_W)
+XMONAD_DZEN_X = $(call get-val,XMONAD_DZEN_X)
+XMONAD_DZEN_Y = $(call get-val,XMONAD_DZEN_Y)
+
+# This target relies on GLOBAL_FILES being before LOCAL_FILES so that the
+# build/LOCAL_FILES targets overwrite what was copied in GLOBAL_FILES.
+BUILD = $(patsubst %,build/%,$(GLOBAL_FILES) $(LOCAL_FILES))
+
+build: $(BUILD)
+
+build/.offlineimaprc: .offlineimaprc $(SUBSTS_FILE)
+ [ -d build ] || mkdir build
+ sed -e 's/LOCAL_PASS/$(LOCAL_PASS)/g' \
+ -e 's/GMAIL_PASS/$(GMAIL_PASS)/g' \
+ -e 's/QUEENSU_PASS/$(QUEENSU_PASS)/g' $< > $@
+
+build/.imapfilter/config.lua: .imapfilter/config.lua $(SUBSTS_FILE)
+ [ -d build/.imapfilter ] || mkdir -p build/.imapfilter
+ sed -e 's/LOCAL_PASS/$(LOCAL_PASS)/g' \
+ -e 's/PM_EMAIL/$(PM_EMAIL)/g' $< > $@
+
+build/.netrc: .netrc $(SUBSTS_FILES)
+ [ -d build ] || mkdir build
+ sed -e 's/LOCAL_PASS/$(LOCAL_PASS)/g' $< > $@
+
+build/.mutt/accounts.rc: .mutt/accounts.rc $(SUBSTS_FILE)
+ [ -d build/.mutt ] || mkdir -p build/.mutt
+ sed -e 's/LOCAL_PASS/$(LOCAL_PASS)/g' \
+ -e 's/GMAIL_PASS/$(GMAIL_PASS)/g' \
+ -e 's/QUEENSU_PASS/$(QUEENSU_PASS)/g' $< > $@
+
+build/.xinitrc: .xinitrc $(SUBSTS_FILE)
+ [ -d build ] || mkdir build
+ sed -e 's/SCREENLAYOUT/$(SCREENLAYOUT)/g' $< > $@
+
+build/.xmonad/xmonad.hs: .xmonad/xmonad.hs $(SUBSTS_FILE)
+ [ -d build/.xmonad ] || mkdir -p build/.xmonad
+ sed -e 's/XMONAD_DZEN_W/$(XMONAD_DZEN_W)/g' \
+ -e 's/XMONAD_DZEN_X/$(XMONAD_DZEN_X)/g' \
+ -e 's/XMONAD_DZEN_y/$(XMONAD_DZEN_Y)/g' $< > $@
+
+build/%: %
+ [ -d $(dir $@) ] || mkdir -p $(dir $@)
+ rsync -a $< $@
+
+install: $(BUILD)
+ rsync -a build/ ~/
+
+sha256sums: $(LOCAL_FILES) $(GLOBAL_FILES) dm
+ $(SHA256) `git ls-files | grep -v $@` > $@
+
+sha256sums.asc: sha256sums
+ rm -f $@
+ gpg --armor --detach-sign $<
+
+verify:
+ # BSD sha256 sum command doesn't have a -c option.
+ # BSD and coreutils sha256 commands have different outputs, however, the
+ # sum is always the last field.
+ awk 'BEGIN {\
+ mismatch_count = 0; \
+ match_count = 0; \
+ } { \
+ file = $$2; \
+ sub(/^\(/, "", file); \
+ sub(/\)$$/, "", file); \
+ cmd = "$(SHA256) " file; \
+ cmd | getline sum; \
+ close(cmd); \
+ sum = split(sum, fields); \
+ if (fields[sum] == $$NF) { \
+ print "Match: " file; \
+ match_count += 1; \
+ } else { \
+ print "Mismatch: " file; \
+ mismatch_count += 1; \
+ } \
+ } END { \
+ print match_count, "matches, ", mismatch_count, "mismatches." \
+ }' sha256sums
+ gpg --verify sha256sums.asc
+
+clean:
+ rm -fr build
+
+.PHONY: build install clean verify