summary refs log tree commit diff
path: root/home.zsh
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xhome.zsh42
1 files changed, 42 insertions, 0 deletions
diff --git a/home.zsh b/home.zsh
new file mode 100755
index 00000000..8490a3b5
--- /dev/null
+++ b/home.zsh
@@ -0,0 +1,42 @@
+#!/usr/bin/env zsh
+set -o errexit -o nounset -o pipefail
+
+fail() {
+    echo "$@"
+    exit 1
+}
+
+link() {
+    local relPath srcPath dstPath
+    < home.txt while read relPath; do
+        srcPath="$PWD/home/$relPath"
+        dstPath="$HOME/$relPath"
+        [ -L "$dstPath" ] && continue
+        mkdir -p "$(dirname "$dstPath")"
+        ln -s "$srcPath" "$dstPath"
+        echo "$relPath"
+    done
+}
+
+import() {
+    local relPath srcPath dstPath
+    relPath="$1"
+    srcPath="$HOME/$relPath"
+    dstPath="$PWD/home/$relPath"
+    [ -f "$dstPath" ] && fail "$dstPath exists"
+    mkdir -p "$(dirname "$dstPath")"
+    mv "$srcPath" "$dstPath"
+    ln -s "$dstPath" "$srcPath"
+    echo "$relPath" >> home.txt
+    sort -o home.txt home.txt
+}
+
+prune() {
+    local linkPath
+    find -L ~ -type l -lname "$PWD/*" | while read linkPath; do
+        rm "$linkPath"
+        echo "$linkPath"
+    done
+}
+
+$@