From c7d82e274391a4aa4c6daa0196bc3076973317b0 Mon Sep 17 00:00:00 2001 From: "Kenneth Benzie (Benie)" Date: Sat, 13 Apr 2024 15:46:28 +0100 Subject: [PATCH] Add install.zsh for standalone installs --- install.zsh | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++ zshrc | 8 ++++-- 2 files changed, 77 insertions(+), 2 deletions(-) create mode 100755 install.zsh diff --git a/install.zsh b/install.zsh new file mode 100755 index 0000000..9adab06 --- /dev/null +++ b/install.zsh @@ -0,0 +1,71 @@ +#!/usr/bin/env zsh + +error() { + echo "error: $*" + exit 1 +} + +directories=( + ~/.cache/zsh + ~/.local/bin + ~/.local/share/zsh/plugins + ~/.local/share/zsh/site-functions +) +for directory in $directories; do + mkdir -p $directory +done + +plugins=( + zsh-users/zsh-autosuggestions + zsh-users/zsh-history-substring-search + zsh-users/zsh-syntax-highlighting + zsh-users/zsh-completions +) +for plugin in $plugins; do + plugin_directory=~/.local/share/zsh/plugins/${plugin/*\//} + if [ -d $plugin_directory ]; then + if ! git -C $plugin_directory diff-index --quiet HEAD --; then + error $plugin_directory contains unstaged changes + fi + pull=`git -C $plugin_directory pull` + if [ "$pull" != "Already up-to-date." ]; then + echo changed + fi + else + git clone https://github.com/$plugin.git $plugin_directory > /dev/null + echo changed + fi +done + +declare -A symlinks +symlinks=( + ~/.config/zsh/zlogin ~/.zlogin + ~/.config/zsh/zlogout ~/.zlogout + ~/.config/zsh/zprofile ~/.zprofile + ~/.config/zsh/zshenv ~/.zshenv + ~/.config/zsh/zshrc ~/.zshrc + ~/.config/zsh/prompt_fresh_setup + ~/.local/share/zsh/site-functions/prompt_fresh_setup + ~/.config/zsh/build/_build-dir ~/.local/share/zsh/site-functions/_build-dir + ~/.config/zsh/sandbox/_sandbox ~/.local/share/zsh/site-functions/_sandbox + ~/.config/zsh/layout/_layout ~/.local/share/zsh/site-functions/_layout + ~/.config/zsh/notes/_note ~/.local/share/zsh/site-functions/_note + ~/.config/zsh/cmake-uninstall ~/.local/bin/cmake-uninstall + ~/.config/zsh/$ ~/.local/bin/$ + ~/.config/zsh/url/url ~/.local/bin/url + ~/.config/zsh/url/_url ~/.local/share/zsh/site-functions/_url +) +for source in ${(k)symlinks}; do + dest=$symlinks[$source] + if [ -L $dest ]; then + target=`readlink $dest` + if [ "$target" != "$source" ]; then + error symlink failed $dest exists but links to $target not $source + fi + elif [ -f $dest ]; then + error symlink failed $dest exists but is a regular file + else + ln -s $source $dest + echo changed + fi +done diff --git a/zshrc b/zshrc index 02f9ddf..adec31d 100644 --- a/zshrc +++ b/zshrc @@ -3,8 +3,12 @@ # Load plugin scripts source-plugin() { - if [ -d ~/.config/zsh/$1 ]; then - source ~/.config/zsh/$1/$1.plugin.zsh + local shared_plugin=~/.local/share/zsh/plugins/$1/$1.plugin.zsh + local local_plugin=~/.config/zsh/$1/$1.plugin.zsh + if [ -f $shared_plugin ]; then + source $shared_plugin + elif [ -f $local_plugin ]; then + source $local_plugin else echo "zsh plugin not found: $1" fi