aboutsummaryrefslogtreecommitdiff
path: root/dm
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xdm214
1 files changed, 11 insertions, 203 deletions
diff --git a/dm b/dm
index 3a7f8ee..21adf13 100755
--- a/dm
+++ b/dm
@@ -1,207 +1,15 @@
-#!gmake -f
-SUBSTS_FILE=SUBSTS.local
+#!/bin/sh
-# Files that need changes to work locally or that contain sensitive
-# information
-LOCAL_FILES = \
- .devscripts \
- .gitconfig \
- .imapfilter/config.lua \
- .msmtprc \
- .mutt/accounts.rc \
- .mutt/score.rc \
- .muttrc \
- .netrc \
- .offlineimaprc \
- .screenrc \
- .xinitrc \
- .xmonad/xmonad.hs \
- .zsh/func/prompt_wunjo_setup \
- .zshrc \
- bin/run-mailcheck
+set -e
-# GPG encrypted files
-GPG_FILES = \
- .mutt/alias.rc \
- .ssh/id_ecdsa \
- .ssh/id_rsa \
- .ssh/id_rsa.lambda
+if [ `uname` = "Linux" ]; then
+ make --version | grep "GNU Make" > /dev/null 2>&1 || { echo "Please install GNU Make"; exit 1; }
+ MAKE=`command -v make`
+else
+ command -v gmake > /dev/null 2>&1 || { echo "Please install GNU Make"; exit 1; }
+ MAKE=`command -v gmake`
+fi
-# Files that are system independent.
-# IMPORTANT: directories must have trailing slash
-GLOBAL_FILES = \
- .Xdefaults \
- .Xsession \
- .config/nitrogen/ \
- .cmus/ \
- .dput.cf \
- .dzen/ \
- .fonts.conf \
- .gitconfig \
- .imapfilter/ \
- .inputrc \
- .local/share/wallpapers/ \
- .mailcap \
- .mailcheckrc \
- .mutt/ \
- .mutt/alias.rc \
- .muttrc \
- .notmuch-config \
- .offlineimap.py \
- .pythonrc.py \
- .quiltrc-dpkg \
- .reportbugrc \
- .sbuildrc \
- .screenlayout/ \
- .screenrc-mail \
- .signature \
- .ssh/ \
- .urxvt/ \
- .vim/ \
- .vimperatorrc \
- .vimrc \
- .xinitrc \
- .xkb/ \
- .xmobarrc \
- .xmonad/ \
- .zsh/ \
- .zlogout \
- bin/ \
+${MAKE} -f Makefile $@
-get-val = $(shell awk '{if (match($$0, /$1/)) { print $$2 } }' $(SUBSTS_FILE))
-get-sed-args = $(foreach var,$($(1)),-e 's|$(var)|$(call get-val,$(var))|g')
-
-CURRENT_BRANCH = $(shell git branch --no-color | colrm 1 2)
-
-SHA256 = $(call get-val,SHA256)
-GPG_DISABLED = $(call get-val,GPG_DISABLED)
-
-VARS_.devscripts = MSMTP_PATH
-VARS_.gitconfig = MSMTP_PATH
-VARS_.imapfilter/config.lua = LOCAL_PASS PM_EMAIL
-VARS_.msmtprc = GMAIL_PASS QUEENSU_PASS LOCALHOST MCGSOCS_PASS MCGILL_PASS
-VARS_.mutt/accounts.rc = LOCAL_PASS GMAIL_PASS QUEENSU_PASS MSMTP_PATH MCGILL_PASS
-VARS_.mutt/score.rc = MUTT_10_SCORE MUTT_20_SCORE
-VARS_.muttrc = MSMTP_PATH
-VARS_.netrc = LOCAL_PASS GMAIL_PASS
-VARS_.offlineimaprc = LOCAL_PASS GMAIL_PASS QUEENSU_PASS MCGSOCS_PASS MCGILL_PASS
-VARS_.screenrc = ZSH_PATH SCREEN_HOST_COLOUR
-VARS_.xinitrc = SCREENLAYOUT REDSHIFT_MODE GSD_PATH
-VARS_.xmonad/xmonad.hs = XMONAD_DZEN_W XMONAD_DZEN_X XMONAD_DZEN_Y
-VARS_.zsh/func/prompt_wunjo_setup = ZSH_HOST_COLOUR
-VARS_.zshrc = LOCALE SUBSTS_RM SUBSTS_LS MSMTP_PATH KEYCHAIN
-VARS_bin/run-mailcheck = ZSH_PATH GREP_PATH
-
-all: clean build
-
-# 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) $(GPG_FILES))
-
-build: $(BUILD)
-
-# We must force these with a phony target, otherwise, make will see that they're
-# already there (for example, from installing the rest of .mutt or .zsh) and
-# will skip them---which means they don't get their substitutions
-build/.imapfilter/config.lua: FORCE
-build/.mutt/accounts.rc: FORCE
-build/.xmonad/xmonad.hs: FORCE
-build/.zsh/func/prompt_wunjo_setup: FORCE
-FORCE:
-
-.mutt/alias.rc: gpg/.mutt/alias.rc.gpg
-.ssh/id_%: gpg/.ssh/id_%.gpg
-# $(patsubst gpg/,,$(wildcard gpg/.* gpg/*))
-$(GPG_FILES):
- touch $@ && chmod 600 $@
- [ "$(GPG_DISABLED)" = "True" ] || gpg --decrypt gpg/$@.gpg > $@
-
-build/%: % $(SUBSTS_FILE)
- [ -d $(dir $@) ] || mkdir -p $(dir $@)
- ( [ -d $< ] && rsync -a $</* $@/ ) || rsync -a $< $@
- @# sed will only be called if $* is in LOCAL_FILES.
- @# Thought of using ifeq/ifneq, but the gmake manual reads:
- @# "make evaluates conditionals when it reads a makefile. Consequently,
- @# you cannot use automatic variables in the tests of conditionals
- @# because they are not defined until recipes are run (see Automatic
- @# Variables)."
- [ "$(filter $*,$(LOCAL_FILES))" != "$*" ] || sed $(call get-sed-args,VARS_$*) $< > $@
-
-install: $(BUILD)
- rsync -a build/ ~
- chmod 600 ~/.msmtprc ~/.netrc ~/.ssh/id_*
- chmod 700 ~/.ssh
-
-sha256sums: .git/refs/heads/$(CURRENT_BRANCH)
- $(SHA256) `git ls-files | grep -v $@` > $@
- [ $(SHA256) = 'sha256' ] || awk '{ \
- sum = $$1; \
- $$1 = ""; \
- # We want (filename), not ( filename). \
- gsub(/^ /,""); \
- print "SHA256 (" $$0 ") = " sum; \
- }' $@ > $@.temp
- mv $@.temp $@
-
-sha256sums.asc: sha256sums
- rm -f $@
- gpg --armor --detach-sign $<
-
-merge: SUBSTS $(SUBSTS_FILE)
- # sdiff has exit status 1 if files are different. Ignore
- - sdiff -o SUBSTS.merged $^
- @echo ""
- @echo "Please review SUBSTS.merged, then run"
- @echo "mv SUBSTS.merged $(SUBSTS_FILE)"
-
-verify:
- # BSD sha256 sum command doesn't have a -c option.
- # BSD and coreutils sha256 commands have different outputs, however, the
- # file is always in field two. The sum's location varies.
- awk --posix 'BEGIN {\
- mismatch_count = 0; \
- match_count = 0; \
- } { \
- # The file associated with the sum we`re checking \
- # Appears to be field 2 in BSD and coreutils sum \
- file = $$2; \
- # We want `filename`, not `(filename)` \
- sub(/^\(/, "", file); \
- sub(/\)$$/, "", file); \
- # Generate the sum to compare with \
- cmd = "$(SHA256) " file; \
- cmd | getline gensum; \
- close(cmd); \
- split(gensum, gensum_fields); \
- gensum = ""; \
- for (field in gensum_fields) { \
- if (gensum_fields[field] ~ /[[:xdigit:]]{64}/) { \
- gensum = gensum_fields[field]; \
- } \
- } \
- for (i = 1; i <= NF; i++) { \
- if ($$i ~ /[[:xdigit:]]{64}/) { \
- filesum = $$i; \
- } \
- } \
- if (filesum == gensum) { \
- 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
-
-udh:
- rsync -avz master.debian.org:/var/lib/misc/master.debian.org/ssh_known_hosts .ssh/known_hosts.d/debian
-
-clean:
- rm -fr build
-
-clobber: clean
- rm -f $(GPG_FILES)
-.PHONY: build install clean verify merge udh
+# vim:ft=sh