aboutsummaryrefslogtreecommitdiff
path: root/updatedots
diff options
context:
space:
mode:
authorJakob Odersky <jodersky@gmail.com>2015-06-11 16:05:56 +0200
committerJakob Odersky <jodersky@gmail.com>2015-06-11 16:05:56 +0200
commit1e85bee8473bb4d7610d703fa0c8b2f95ffa6805 (patch)
tree14e3e1bb5eb5c5c85abcc27081c12aef6eefaf8f /updatedots
parent35366264b395b1e7032c145093ef5043729aaaad (diff)
downloaddotfiles-1e85bee8473bb4d7610d703fa0c8b2f95ffa6805.tar.gz
dotfiles-1e85bee8473bb4d7610d703fa0c8b2f95ffa6805.tar.bz2
dotfiles-1e85bee8473bb4d7610d703fa0c8b2f95ffa6805.zip
move updatescript to base directory
Diffstat (limited to 'updatedots')
-rwxr-xr-xupdatedots70
1 files changed, 70 insertions, 0 deletions
diff --git a/updatedots b/updatedots
new file mode 100755
index 0000000..ab7a168
--- /dev/null
+++ b/updatedots
@@ -0,0 +1,70 @@
+#!/bin/bash
+# Simple dotfile linking script.
+# Partly inspired by dotsync (https://github.com/dotphiles/dotsync).
+#
+# This script takes files in a version-controllable "dotdir" directory
+# and creates corresponding symlinks in the user's home directory.
+# Any existing files in the home directory are backed up before being
+# replaced with a symlink.
+
+# Root directory of dotfiles project
+BASEDIR=$(dirname "$(readlink -f "$0")")
+
+# Directory containing all dotfiles that will be linked to $HOMEDIR
+DOTDIR=${BASEDIR}/home
+
+# Directory into which files will be linked
+HOMEDIR=${HOME}
+
+# Directory into which any pre-existing dotfiles will be copied
+BACKUPDIR=${HOMEDIR}/.updatedots-backup
+
+# Dotfiles relative to $DOTDIR
+RDOTFILES=$(find ${DOTDIR} -type f -print | sed "s|^${DOTDIR}/||g")
+
+# Command used to create symbolic links
+LINK="ln --symbolic --relative"
+
+# Publish dotfiles to home directory, backing up any collisions
+create_links() {
+ if [ ! -e "$BACKUPDIR" ]; then
+ mkdir "$BACKUPDIR"
+ fi
+ if [ -n "$(ls -A $BACKUPDIR)" ]; then
+ echo "Backup directory $BACKUPDIR is not empty. Local files could be lost. Aborting." >&2
+ exit 1
+ fi
+
+ local moved=0
+
+ echo "*** Linking dotfiles from $(realpath $DOTDIR) to $HOMEDIR ***"
+ for relative in $RDOTFILES; do
+ local src=$DOTDIR/$relative
+ local dest=$HOMEDIR/$relative
+
+ echo -n "$dest: "
+
+ mkdir -p $(dirname "$dest")
+
+ if [ -e "$dest" ] && [ $(readlink -f "$dest") = $(readlink -f "$src") ]; then
+ echo "nothing to be done"
+ else
+ if [ -e "$dest" ]; then
+ mv "$dest" "$BACKUPDIR/$file"
+ moved=1
+ echo -n "saved original, "
+ fi
+
+ $LINK "$src" "$dest"
+ echo "linked"
+ fi
+ done
+
+ echo "*** Finished linking dotfiles ***"
+ echo
+ if [ "$moved" -gt 0 ]; then
+ echo "WARNING: some local files were moved to $BACKUPDIR" >&2
+ fi
+}
+
+create_links