diff options
author | Sean Whitton <spwhitton@spwhitton.name> | 2022-10-16 15:54:34 -0700 |
---|---|---|
committer | Sean Whitton <spwhitton@spwhitton.name> | 2022-10-18 12:40:47 -0700 |
commit | 5b165f7a3b8ca561debd4920356ceeaa923fccfb (patch) | |
tree | f34e79ae241ed08d9ab6d956b1f7c8758b4de9ad /lib-src | |
parent | fb078c0fb7f275f802eb78531344ef848798646b (diff) | |
download | dotfiles-5b165f7a3b8ca561debd4920356ceeaa923fccfb.tar.gz |
attempt to replace normalise-mrconfig script w/ "include" directive
Diffstat (limited to 'lib-src')
-rw-r--r-- | lib-src/mr/config | 842 |
1 files changed, 842 insertions, 0 deletions
diff --git a/lib-src/mr/config b/lib-src/mr/config new file mode 100644 index 00000000..fd2519cb --- /dev/null +++ b/lib-src/mr/config @@ -0,0 +1,842 @@ +# -*- mode: conf -*- + +[DEFAULT] + +# --- global settings + +# avoid hangs due to SSH connection sharing +jobs = 1 + +# custom actions to be configured repository-by-repository, that do +# nothing by default +git_sync = : +git_rebase = : +git_autoci = : + +# avoid pushing non-matching branches, while trying to avoid errors +# from trying to push to read-only remotes +git_push = git push-all "$@" + +# find dirty working directories, i.e., uncommitted changes, untracked +# files and stashes +git_isclean = git is-clean + +git_clean = git clean -xdff + +# --- Plugin for dgit repos + +# actually shipped with upstream mr, but use an include command that +# will always work +include = cat ~/src/dotfiles/lib-src/mr/dgit + +# --- git-svn + +# include = [ -e "/usr/share/mr/git-svn" ] && cat /usr/share/mr/git-svn + +# --- Sensible pulls + +# Redefine git_update to avoid an unconditional `git pull`, which can +# result in unwanted merge commits all over $HOME (this has to come +# after we include the dgit lib, which also redefines git_update) +git_update = git pull-safe + +# --- Adam Spiers' plugin for managing dotfile symlinks with mr + +# actually shipped with upstream mr, but use an include command that +# will always work +include = + # stow is not available on Windows + if [ -e "$HOME/src/dotfiles/lib-src/mr/stow" ] \ + && ! [ "$(perl -e 'print $^O')" = "msys" ]; then + cat "$HOME/src/dotfiles/lib-src/mr/stow" + fi + +# --- joeyh's code for specifying what machine we're on for repo skip +# --- tests, plus my code for detecting Git-on-Windows + +lib = + win32() { + test "$(perl -e 'print $^O')" = "msys" + } + # + if win32; then + hostname=$(hostname) + else + hostname=$(hostname -s) + fi + # + whoami="$(whoami)" + # cut off the machine name on Windows + win32 && whoami=${whoami##*\\} + # + on() { + for host in $@; do + if [ "${host%@*}" != "${host#*@}" ]; then + if [ "$whoami" != "${host%@*}" ]; then + continue + fi + host="${host#*@}" + fi + if [ "$hostname" = "$host" ]; then + return 0 + fi + done + return 1 + } + workstation() { + on swhitton@zephyr spwhitton@melete spwhitton@erebus + } + mine() { + workstation || on spwhitton@athena + } + # tucson() { + # on artemis shortgeese athena hephaestus iris melete + # } + +# --- run a command on athena in a sane environment + +# lib = +# athena_cmd () { +# # here we rely on the fact that ssh already passes argument +# # through `/bin/sh -c' (note use of single-quotes in this +# # function) +# ssh athena 'cd $HOME/'"$1"' && . $HOME/.shenv && '"$2" +# } + +# --- standard procedures + +lib = + homedir_mkdirs() { + ( + cd $HOME + mkdir -p \ + .ssh \ + tmp \ + src \ + lib \ + mnt \ + local/mutt \ + local/src \ + local/bin \ + local/big \ + local/lib \ + local/log \ + local/pub \ + local/tmp \ + local/auth \ + local/info + # lib/athena \ + # lib/backup \ + # local/anacron/spool \ + chmod 700 local/auth + # [ -L "src/build-area" ] || ln -s -T /tmp/debuild src/build-area + [ -e "Downloads" ] || ln -s tmp Downloads + # clean up after additions to .stow-local-ignore + find bin lib -type l 2>/dev/null | while read -r link; do + if readlink "$link" | grep --quiet "^[../]*/.STOW/"; then + rm "$link" + fi + done + # cleanup some old dirs if they're empty + find \ + bin \ + lib/aid \ + lib/backup \ + lib/perl5 \ + lib/hooks \ + lib/athena \ + lib/bins \ + lib/img \ + lib/mr \ + lib/src \ + local/anacron/spool \ + -type d -empty -delete 2>/dev/null ||: + ) + } + # specify files that should automatically be adopted because + # programs convert them from symlinks to regular files. Arguments + # to this function should be paths relative to the stow target + # (usually $HOME) + always_adopt () { + for f in $@; do + if ! [ -L "$STOW_TARGET/$f" ]; then + # ignore errors; if it doesn't work, the user will + # have to fix up manually + mv 2>/dev/null "$STOW_TARGET/$f" "$MR_REPO/$f" || true + fi + done + } + # export plain text Org agenda in post_ hooks of ~/doc repo (not currently used) + export_org_agenda () { + if on athena; then + emacs --batch -l ~/.emacs.d/init.el -eval '(org-batch-agenda "a")' 2>/dev/null \ + >~/local/priv/agenda.txt + else + emacs --batch -l ~/.emacs.d/init.el -eval '(org-batch-agenda "a")' 2>/dev/null \ + | ssh athena "cat >/home/spwhitton/local/priv/agenda.txt" + fi + } + +# --- primary dotfiles repository + +# TODO we need to unstow before switching branches, and stow +# afterwards, or else do some sort of automatic cleanup of dangling +# symlinks before a restow, so a broken situation is easy to fix? +# Also see kill-broken-stowed-symlink() in .bashrc. +# +# Note that the scan is expensive. So actually we probably don't want +# the cleanup to happen automatically. Also, it should exclude +# lib/annex, src/*/ (but not src/) because I don't stow files into +# those dirs. +# +# Maybe just run it as part of sysmaint +# +# Hmm. Situation is not as bad as I thought. stow manages to clean +# up quite a few of the symlinks. So running it as part of sysmaint +# seems like a sufficient fix + +[src/dotfiles] +checkout = git clone https://git.spwhitton.name/dotfiles.git dotfiles +stowable = true +# we have a script to update master, and all other branches should +# only be checked out and committed to on a single host +update = git dotfiles-update-master +push = git push origin master +# use `git dotfiles-rebase` instead +# rebase = +# # usual rebasing pattern. Per dotfiles repo policy (excluding +# # win32 case), the branch being rebased will always be rebaseable +# # on master, since it is only checked out and committed to on this +# # host +# branch="$(git rev-parse --abbrev-ref HEAD)" +# hostname="$(hostname -s)" +# if [ "$branch" = "win32" -o "$branch" = "$hostname" -o "$branch" = "develacc-$hostname" ]; then +# git rebase master +# fi +fixups = + # Use a rebase workflow as I'm the only committer + git config pull.rebase true + # Pushing and pulling are always done explicitly + for head in $(git for-each-ref --format='%(refname)' refs/heads/); do + branch=$(echo "$head" | cut -d/ -f3) + git branch --unset-upstream "$branch" 2>/dev/null || true + done + git config push.default nothing + # this is just for M-x magit-status + git config remote.pushDefault origin + # + if win32; then + ( cd ~/src/dotfiles/bin && cmd "/C win32setup.bat" ) + else + homedir_mkdirs + chmod -Rf u+rwX,go= $HOME/local/auth/* || true + fi + # eventually move the following two lines from fixups to post_checkout + install-git-hooks dotfiles + git config user.signingkey 8DC2487E51ABDD90B5C4753F0F56D0553B6D411B + # eventually drop this + rm -f .git/hooks/post-checkout{,_01gpgsign} + +# clean-ups so that initial stow will be successful +pre_stow = + homedir_mkdirs + $HOME/src/dotfiles/bin/unskel + # these will often end up created, e.g. by insinuate-dotfiles script + rm -f $HOME/.gnupg/{gpg.conf,gpg-agent.conf,dirmngr.conf,.gpg-v21-migrated} + +# this file frequently gets desymlinked +pre_unstow_append = always_adopt .config/mimeapps.list +pre_restow_append = always_adopt .config/mimeapps.list +pre_stow_append = always_adopt .config/mimeapps.list +pre_update_append = always_adopt .config/mimeapps.list + +# --- private dotfiles repositories + +[lib/priv] +checkout = git clone athenag:libpriv.git priv +update = git annex sync --content cloud origin +push = git annex sync --content cloud origin +stowable = true +sync = mr autoci && git annex sync --no-commit --content cloud origin +skip = lazy + +post_checkout = + cd priv + git annex init + git annex enableremote cloud + git annex group . backup + +fixups = + chmod 600 .passwddb.pet \ + .gnupg/*.kbx \ + .gnupg/private-keys-v1.d/*.key \ + .ssh/id_* + # + git config push.default nothing + git config remote.origin.gcrypt-publish-participants true + git config remote.origin.gcrypt-participants 0x0F56D0553B6D411B + git config annex.startupscan false + git config annex.autocommit true # needed for `git annex sync` + git config remote.origin.annex-ignore true + git config unpushed-tags.ignore true + # + git config annex.gitaddtoannex false # see README + git config annex.addunlocked true # see README + # + git config mrrepo.review-unused false + +autoci = + git annex add .passwddb.pet .labbook.gpg .gnupg/pubring.kbx + git commit -a -m \ + "auto passwddb, pubring and labbook commit on $(hostname -s)" || true +pre_update = mr autoci + +# since dotfiles repo also stows into ~/.gnupg, and athpriv repo stows +# into ~/.duply, make the dirs first +pre_stow = homedir_mkdirs +post_stow = load-trustdb + +[src/athpriv] +checkout = git clone demeterp:athpriv athpriv +pre_update = on athena || git annex sync origin athenah +pre_push = on athena || git annex sync --content origin athenah +stowable = true +skip = ! mine + +post_checkout = + cd athpriv + git annex init + on athena || git remote add athenah athenah:src/athpriv + git annex group . backup + +fixups = + git config remote.origin.annex-ignore true + git config unpushed-tags.ignore true + git config annex.addunlocked true + git config annex.synconlyannex true + # + # TODO Use git-annex-whereused to systematically drop old News/*. + git config mrrepo.review-unused false + +# We also ran: +# % git annex config --set annex.largefiles "include=*.SCORE or include=*.ADAPT" + +autoci = + git annex add News/* + git commit News -m"auto commit of Gnus score files" ||: + +# since priv repo also stows into ~/.duply, make the dir first +pre_stow = homedir_mkdirs + +# r2e always desymlinks this file +pre_stow_append = always_adopt .config/rss2email.cfg +pre_unstow_append = always_adopt .config/rss2email.cfg +pre_restow_append = always_adopt .config/rss2email.cfg +pre_update_append = always_adopt .config/rss2email.cfg + +# --- hosts configuration + +[src/propellor] +checkout = git clone demeter:propellor propellor --branch spw3conf +post_checkout = + cd propellor + # get new release tags for merging into 'spw3conf' and 'debian' branches + git remote add -f upstream https://git.joeyh.name/git/propellor.git + # This hook sets up .dir-locals.el to make it easier to follow + # Propellor's coding style. We have to use a hook because + # .dir-locals.el and the cabal sandbox must be nuked when working + # with dgit on the 'debian' branch + install-git-hooks propellor + echo ".dir-locals.el" >>.git/info/exclude +fixups = + # check that the link isn't already in place before making the link + # because otherwise we get an infinite loop of links that breaks propellor + [ -L ~/.propellor ] || ln -sf ~/src/propellor ~/.propellor + # my preferences when using propellor for configuring my own machines + git config propellor.spin-branch spw3conf + git config propellor.forbid-dirty-spin true + git config --local sendemail.to "Joey Hess <propellor@joeyh.name>" +skip = lazy + +# --- personal website source + +[src/wiki] +checkout = git clone demeter:wiki +skip = ! mine + +# --- misc. source repos with special config (e.g. installation of git +# --- hooks) + +[src/dgit] +checkout = git clone salsa:dgit-team/dgit +post_checkout = + cd dgit + git remote add -f demeter demeter:dgit + dgit setup-new-tree + install-git-hooks dgit +skip = lazy + +# [src/ublock-origin] +# checkout = git clone 'https://anonscm.debian.org/git/pkg-mozext/ublock-origin.git' 'ublock-origin' +# # beta, rc and alpha tags get deleted by upstream so there will very +# # often be unpushed tags +# push = git push-all --no-tags +# skip = lazy + +[src/grml-live] +checkout = git clone demeter:grml-live -b spw/std +post_checkout = + cd grml-live + git remote add -f upstream github:grml/grml-live +fixups = git config commit.gpgsign true +skip = lazy + +[src/mailscripts] +checkout = git clone 'demeter:mailscripts' 'mailscripts' +post_checkout = + cd mailscripts + install-git-hooks mailscripts + git config branch.buster-bpo.signOffOptional true + dgit fetch buster-backports; dgit fetch sid +skip = lazy + +[src/p5-Git-Annex] +checkout = git clone demeter:p5-Git-Annex p5-Git-Annex +post_checkout = + cd p5-Git-Annex + install-git-hooks p5-Git-Annex + git remote add -f salsa salsa:perl-team/modules/packages/libgit-annex-perl + git branch --track debian salsa/master + git config branch.debian.signOffOptional true + git config branch.buster-bpo.signOffOptional true +skip = lazy + +[src/p5-API-GitForge] +checkout = git clone demeter:p5-API-GitForge p5-API-GitForge +post_checkout = + cd p5-API-GitForge + install-git-hooks p5-API-GitForge + git remote add -f salsa salsa:perl-team/modules/packages/libapi-gitforge-perl + git branch --track debian salsa/master + git config branch.debian.signOffOptional true +skip = lazy + +[src/org-d20] +checkout = git clone 'demeter:org-d20' 'org-d20' +post_checkout = + cd org-d20 + install-git-hooks org-d20 +skip = lazy + +[src/haskell-tab-indent] +checkout = git clone 'demeter:haskell-tab-indent' 'haskell-tab-indent' +post_checkout = + cd haskell-tab-indent + install-git-hooks haskell-tab-indent +skip = lazy + +[src/git-remote-gcrypt] +checkout = git clone 'demeter:git-remote-gcrypt' 'git-remote-gcrypt' +post_checkout = + cd git-remote-gcrypt + install-git-hooks git-remote-gcrypt +skip = lazy + +[src/pandoc-citeproc-preamble] +checkout = git clone 'demeter:pandoc-citeproc-preamble' 'pandoc-citeproc-preamble' +post_checkout = + cd pandoc-citeproc-preamble + install-git-hooks pandoc-citeproc-preamble +skip = lazy + +# 'master' branch: just for installing changes to upstream master +# +# 'melete' branch: +# +# Rebased onto sv.gnu.org's master branch. It has +# +# - patch(es) to integrate these development builds with my Debian +# workstation setup, just enough that I can use these builds day-to-day; +# these assume a sufficiently recent emacs-snapshot package from demeter +# is installed, to provide /usr/share/emacs-snapshot/site-lisp/elpa +# +# - bug fixes, reversions etc., (cleaned up versions of) which have not +# yet made it onto sv.gnu.org's master, but which are required for my +# own usage +# +# - WIP patches of my own -- this branch is used for my own development +# work, at least where that doesn't require long-lived feature branches. +# +# A key advantage of using these development builds is that references to +# files in *Help* buffers will be to ~/src/emacs, not to somewhere owned by +# root. The branch is named after my laptop at the time I first set it up. +# +# 'athena/unstable' branch: +# +# Merges from sv.gnu.org's master branch only. .deb packages produced from +# this branch are available from <http://silentflame.com/debian>. There are +# two purposes: +# +# - providing byte-compiled Lisp /usr/share/emacs-snapshot/site-lisp/elpa +# to builds from the 'melete' branch +# +# - direct use on machines other than my development laptop where I want +# something more current than the stable release of Emacs but not with +# my current WIP. +# +# Updated only when new fixes, features or reversions on sv.gnu.org's +# master branch are wanted on machines other than my development laptop. +# To do that, first 'melete' is updated using 'mr pull', and then I run +# that build for a day or so. Then +# +# % cd ~/src/emacs-snapshot +# % debian/merge-snapshot +# % dgit sbuild --no-run-lintian +# % cp ../emacs-snapshot_29~git202*amd64.deb<TAB> ~/local/develacc/tmp +# % sudo virsh start develacc.melete.silentflame.com +# % cd /ssh:root@develacc:/home/spwhitton/tmp +# % apt-get install ./emacs-snapshot_29~git202*amd64.deb<TAB> +# % rm emacs-snapshot_29~git202*amd64.deb<TAB> +# % cd //ssh:develacc:src/dotfiles +# % mr up +# +# C-i s develacc RET +# $ /opt/emacs-snapshot/bin/emacs -nw --debug-init +# +# % cd ~//src/emacs-snapshot +# % reprepro-rebuilder --release # if develacc test was successful +# +# If need to back out before reprepro-rebuilder: +# % cd ~/src/emacs-snapshot && git reset --hard demeter/athena/unstable +# +# It is important to test local installability of the new .deb, probably +# in develacc or a sid chroot, before adding to demeter-apt, because +# running the rebased 'melete' branch doesn't detect any byte compilation +# issues against my current selection of elpa-* packages. +# +# 'athena/CODENAME-bpo' branch: +# +# Backported from athena/unstable. Automatically updated by +# reprepro-rebuilder when updating athena/unstable as described above. +# +# See also bin/emacsclient wrapper script in dotfiles.git. +[src/emacs] +checkout = git clone https://git.savannah.gnu.org/git/emacs.git emacs +post_clean = ./autogen.sh autoconf +post_checkout = + cd emacs + git remote add -f demeter demeter:emacs + git remote add -f debian https://salsa.debian.org/rlb/deb-emacs.git/ + on spwhitton@melete && git checkout -b melete demeter/melete + ./autogen.sh all +fixups = + git rev-parse melete@{upstream} >/dev/null 2>&1 \ + && git branch --unset-upstream melete + git config branch.master.rebase true + git config branch.melete.rebase true + git config branch.melete.pushRemote demeter + git config --replace-all remote.demeter.push ":" "^:$" + git config --replace-all remote.demeter.push "+melete:melete" "^\+melete:melete$" + git config branch.deb/emacs/d/sid/master.dpmUpstreamBranch deb/emacs/d/sid/upstream + git config branch.deb/emacs/d/sid/master.dpmPatchedBranch deb/emacs/d/sid/patched + git config branch.deb/emacs-non-dfsg/d/sid/master.dpmUpstreamBranch \ + deb/emacs-non-dfsg/d/sid/upstream + git config branch.deb/emacs-non-dfsg/d/sid/master.dpmPatchedBranch \ + deb/emacs-non-dfsg/d/sid/patched +# We don't have the melete branch's upstream set to origin/master to avoid +# accidentally pushing personal commits to Savannah (push.default cannot help +# here). So for convenient updates of melete to its conceptual upstream, we +# have this definition. "pull" not "update" because we want to update from +# upstream master deliberately, not as part of automated updates. +pull = git checkout melete \ + && git pull --rebase --autostash origin master \ + && git push -f demeter melete +skip = lazy || [ "$1" = pull ] && ! on spwhitton@melete + +# myrepos git_status assumes a separate registration for each worktree. +# Empty update action to prevent fetching from remotes over and over again. + +[src/emacs-snapshot] +checkout = git -C "$HOME/src/emacs" worktree add -b athena/unstable \ + "$HOME/src/emacs-snapshot" demeter/athena/unstable +update = : +skip = ! workstation || ! [ -d "$HOME/src/emacs" ] + +[src/emacs-dfsg] +checkout = git -C "$HOME/src/emacs" worktree add -b deb/emacs/d/sid/master \ + "$HOME/src/emacs-dfsg" debian/deb/emacs/d/sid/master +update = : +skip = ! workstation || ! [ -d "$HOME/src/emacs" ] + +[src/emacs-non-dfsg] +checkout = git -C "$HOME/src/emacs" worktree add -b deb/emacs-non-dfsg/d/sid/master \ + "$HOME/src/emacs-non-dfsg" debian/deb/emacs-non-dfsg/d/sid/master +update = : +skip = ! workstation || ! [ -d "$HOME/src/emacs" ] + +[src/elpa] +checkout = git clone https://git.savannah.gnu.org/git/emacs/elpa.git elpa +post_checkout = cd elpa && make setup +skip = lazy + +[src/nongnu-elpa] +checkout = git clone https://git.savannah.gnu.org/git/emacs/nongnu.git nongnu-elpa +post_checkout = cd elpa && make +skip = lazy + +[src/org-mode] +checkout = git clone https://git.savannah.gnu.org/git/emacs/org-mode.git org-mode +skip = lazy + +[src/cl/consfigurator] +checkout = git clone 'demeter:consfigurator' 'consfigurator' +post_checkout = + cd consfigurator + install-git-hooks consfigurator +skip = lazy + +[src/notmuch] +checkout = git clone 'https://git.notmuchmail.org/git/notmuch' 'notmuch' +fixups = git config --local sendemail.to notmuch@notmuchmail.org +skip = lazy + +[src/linux] +checkout = git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git linux +skip = lazy + +[src/sbcl] +checkout = git -c fetch.fsckobjects=false clone https://git.code.sf.net/p/sbcl/sbcl +skip = lazy + +# --- radicale collections + +[lib/radicale] +checkout = git clone demeterp:radicale radicale +skip = ! on spwhitton@athena + +# could use /usr/share/mr/git-annex helper to simplify the following +# configuration of annexes (overriding its update definition to avoid +# --content) but probably not flexible enough for all that's going on +# in the below + +# --- primary git annex + +[lib/annex] +checkout = git clone athenag:annex.git annex +post_checkout = + cd annex + git annex init + git annex enableremote athena rsyncurl=athena:local/rsync/annex +skip = lazy + +update = git annex sync --no-content origin +# disabled because required yubikey +# sync = git annex sync --no-content origin +push = git annex sync --content origin athena +fixups = + git config push.default matching + git config remote.origin.gcrypt-publish-participants true + git config remote.origin.gcrypt-participants 0x0F56D0553B6D411B + # git config gcrypt.publish-participants true + # git config gcrypt.participants 0x0F56D0553B6D411B + git config annex.startupscan false + git config annex.autocommit true # needed for `git annex sync` + git config remote.origin.annex-ignore true + git config unpushed-tags.ignore true + +[annex] +checkout = git clone athenag:annex19.git annex +update = git annex sync --no-content origin +push = git annex sync --content cloud origin +skip = lazy + +post_checkout = + cd annex + git annex init + git annex enableremote cloud + +fixups = + git config push.default nothing + git config remote.origin.gcrypt-publish-participants true + git config remote.origin.gcrypt-participants 0x0F56D0553B6D411B + git config annex.startupscan false + git config annex.autocommit true # needed for `git annex sync` + git config remote.origin.annex-ignore true + git config unpushed-tags.ignore true + +# --- personal website big files annex + +[lib/wikiannex] +checkout = git clone demeter:wikiannex.git +post_checkout = + cd wikiannex + git annex init + git config remote.origin.annex-ignore false + # ^ the git-annex-init sets this wrong + + # if workstation; then + # git remote add bkupsd /media/${USER}/bkupsd/git/demeter/wikiannex.git + # git remote add m3 /media/${USER}/m3/git/demeter/wikiannex.git + # fi +update = git annex sync --no-content +push = git annex sync --content +skip = lazy +fixups = + git config unpushed-tags.ignore true + if [ "$(hostname -s)" = "demeter" ]; then + git annex adjust --hide-missing --unlock + fi + +# --- git annex for podcasts + +[lib/podcasts] +checkout = git clone demeterp:podcasts +post_checkout = + cd podcasts + git annex init +update = ./update-and-sync +push = git annex --no-content sync +# origin remote is just for keeping a backup copy of metadata. We don't sync +# annexed content between repos at all, just run update-and-sync and download +# episodes as want to listen to them. For archival, for podcasts for which +# that's wanted, annex-to-annex the files into ~/annex instead of 'git rm'. +fixups = + git config push.default matching + git config annex.startupscan false + git config annex.autocommit true # needed for ga sync + git config remote.origin.annex-ignore true + git config annex.genmetadata true +skip = lazy + +# --- git annex for use with rtorrent + +# [lib/rt] +# checkout = git clone athenag:rt.git rt +# post_checkout = +# cd rt +# git annex init +# if [ -d "$(hostname -s)" ]; then +# mkdir -p $HOME/local/rt +# cd $HOME/local/rt +# touch .duplicity-ignore +# mkdir -p session incomplete +# if ! [ -e "complete" ]; then +# ln -s $HOME/lib/rt/complete complete +# fi +# if ! [ -e "watch" ]; then +# ln -s $HOME/lib/rt/$(hostname -s) watch +# fi +# fi +# status = git annex status --fast +# update = git annex sync --no-content origin +# push = git annex sync --no-content origin +# autoci = (git annex add . && git commit -m "auto commit on $(hostname -s)") || true +# fixups = +# git config push.default matching +# # git config gcrypt.publish-participants true +# git config remote.origin.gcrypt-publish-participants true +# git config remote.origin.gcrypt-participants 0x0F56D0553B6D411B +# git config annex.startupscan false +# git config annex.autocommit true # needed for `git annex sync` +# git config remote.origin.annex-ignore true +# git config unpushed-tags.ignore true + +# skip = lazy +# pre_update = mr autoci + +# --- git annex for athena's apt repository + +[lib/athena-apt] +checkout = git clone demeter:athena-apt athena-apt +post_checkout = + cd athena-apt + git annex init --version=7 + git annex enableremote demeter rsyncurl=demeter:/srv/www/debian + git annex get . +skip = lazy + +update = git annex sync --no-content +push = + git annex add + git annex unlock db + git annex sync --content demeter + git annex sync origin + ssh demeter find /srv/www/debian -type f -exec chmod 644 '{}' + + ssh demeter find /srv/www/debian -type d -exec chmod 755 '{}' + +fixups = + git config push.default matching + git config annex.startupscan false + git config annex.autocommit true # needed for `git annex sync` + git config remote.origin.annex-ignore true + git config annex.thin true + git config annex.addunlocked true + git config mrrepo.review-unused false + git config remote.demeter.annex-tracking-branch master + git config unpushed-tags.ignore true + +# The git-diff-files(1) call in ~/bin/git-is-clean fails in v7 +# git-annex repos with unlocked empty files, which this repo often +# has: empty Packages files. So can't use that script in this repo +isclean = + output="$(git annex status)" + test -z "$output" || ( echo $output && exit 1 ) + +[lib/realloc] +checkout = git clone demeterp:realloc realloc +skip = ! mine + +# --- my personal documents. Override my global update command back +# --- to the myrepos default so that git automatically pulls and +# --- merges. Skipped on non-local hosts + +[doc] +checkout = git clone demeterp:doc doc +update = git pull --no-edit "$@" +skip = ! mine + +# Set mtimes to last commit, for Howm; doing so only in post_checkout, and not +# fixups, should be sufficient for summary buffer ordering purposes. +post_checkout = git utime + +# before pulling, automatically commit in the same way that my cron job does +pre_update = win32 || doccheckin +# ... and let me do it manually +autoci = doccheckin || true + +# quick syncs +sync = doccheckin && git pull --no-edit && git push + +# --- static websites on web host boxes + +[public_html] +clone = git clone https://git.spwhitton.name/sageweb public_html +skip = ! on spwhitton@sage + +[html] +clone = git clone https://git.spwhitton.name/sdfweb html +skip = ! [ "$(domainname)" = "SDF" ] + +# --- my offline e-mail (& machine's postfix queue) + +[.fmail] +checkout = + mkdir ~/.fmail + movemymail +sync = movemymail +update = movemymail +push = movemymail +status = : +clean = : +commit = : +record = : +fetch = : +diff = : +log = : +grep = : +autoci = : +isclean = : +skip = ! [ -e "$HOME/local/auth/fmailsyncpass" ] + +# this is slower than other repos for which sync is defined, so have +# it go last +order = 12 |