local/bin/homeinit: Run guix pull automatically

master
Pierre Neidhardt 2019-01-22 13:39:04 +01:00
parent f35e99105c
commit 23008a1480
1 changed files with 29 additions and 2 deletions

View File

@ -1,7 +1,5 @@
#!/bin/sh
# TODO: Run guix pull if OPT_UPDATE and if guix chekout is more than some days old, as specified by an environment variable.
# TODO: Guix pull on commit specified in package-lists/guix-version?
# TODO: On foreign distro, use local package manager to install Guix. (Start with pacman.)
# TODO: Make functions to make it easier to re-order calls?
@ -158,6 +156,35 @@ popd
section "System packages"
if inpath guix; then
if [ ! -e ~/.cache/guix/pull ]; then
message "Update Guix to yesterday's version"
git clone https://git.savannah.gnu.org/git/guix.git /tmp/guix
YESTERDAY_COMMIT=$(git -C /tmp/guix log --until=yesterday -n 1 --format=%H)
guix pull --commit=$YESTERDAY_COMMIT
unset YESTERDAY_COMMIT
rm -rv /tmp/guix
elif $OPT_UPDATE
CURRENT_COMMIT=$(guix --version 2>/dev/null | awk '{print $4; exit}')
REPO=$HOME/.cache/guix/pull/"$(ls -1 ~/.cache/guix/pull)"
CURRENT_COMMIT_DATE=git -C "$REPO" log -n 1 --format=%ct $CURRENT_COMMIT
git -C $REPO pull
LATEST_COMMIT_DATE=git -C "$REPO" log -n 1 --format=%ct
[ -z "$GUIX_DISTRO_AGE_WARNING" ] && GUIX_DISTRO_AGE_WARNING=$((7 * 24 * 60 * 60))
if [ $(($LATEST_COMMIT_DATE - $CURRENT_COMMIT)) -gt $GUIX_DISTRO_AGE_WARNING ]; then
message "Update Guix since it's older than a week."
YESTERDAY_COMMIT=$(git -C "$REPO" log --until=yesterday -n 1 --format=%H)
guix pull --commit=$YESTERDAY_COMMIT
unset YESTERDAY_COMMIT
fi
unset LATEST_COMMIT_DATE
unset CURRENT_COMMIT_DATE
unset REPO
unset CURRENT_COMMIT
fi
## TODO: The manifest will uninstall other unspecified packages. Is this
## really what we want?
export GUIX_PACKAGE_PATH=$HOME/.guix-packages