add fish
[webi-installers/.git] / fish / install.sh
diff --git a/fish/install.sh b/fish/install.sh
new file mode 100644 (file)
index 0000000..097477d
--- /dev/null
@@ -0,0 +1,84 @@
+set -e
+set -u
+
+if ! (uname -a | grep -i "darwin" > /dev/null); then
+    echo "No fish installer for Linux yet. Try this instead:"
+    echo "    sudo apt install -y fish"
+    exit 1
+fi
+
+################
+# Install fish #
+################
+
+# Every package should define these 6 variables
+pkg_cmd_name="fish"
+
+pkg_dst_cmd="$HOME/.local/bin/fish"
+pkg_dst="$pkg_dst_cmd"
+
+pkg_src_cmd="$HOME/.local/opt/fish-v$WEBI_VERSION/bin/fish"
+pkg_src_dir="$HOME/.local/opt/fish-v$WEBI_VERSION"
+pkg_src="$pkg_src_cmd"
+
+# pkg_install must be defined by every package
+
+function _macos_post_install() {
+    if ! [ -e "$HOME/.local/bin/fish" ]; then
+        return 0
+    fi
+
+    echo ""
+    echo "Trying to set fish as the default shell..."
+    echo ""
+    # stop the caching of preferences
+    killall cfprefsd
+
+    # Set default Terminal.app shell to fish
+    defaults write com.apple.Terminal "Shell" -string "$HOME/.local/bin/fish"
+    echo "To set 'fish' as the default Terminal.app shell:"
+    echo "    Terminal > Preferences > General > Shells open with:"
+    echo "    $HOME/.local/bin/fish"
+    echo ""
+
+    # Set default iTerm2 shell to fish
+    if [ -e "$HOME/Library/Preferences/com.googlecode.iterm2.plist" ]; then
+        /usr/libexec/PlistBuddy \
+            -c "SET ':New Bookmarks:0:Custom Command' 'Custom Shell'" \
+            $HOME/Library/Preferences/com.googlecode.iterm2.plist
+        /usr/libexec/PlistBuddy \
+            -c "SET ':New Bookmarks:0:Command' $HOME/.local/bin/fish" \
+            $HOME/Library/Preferences/com.googlecode.iterm2.plist
+        echo "To set 'fish' as the default iTerm2 shell:"
+        echo "    iTerm2 > Preferences > Profiles > General > Command >"
+        echo "    Custom Shell: $HOME/.local/bin/fish"
+        echo ""
+    fi
+
+    killall cfprefsd
+}
+
+# always try to reset the default shells
+_macos_post_install
+
+function pkg_install() {
+    mv fish.app/Contents/Resources/base/usr/local "$HOME/.local/opt/fish-v${WEBI_VERSION}"
+
+}
+
+function pkg_post_install() {
+    # don't skip what webi would do automatically
+    webi_post_install
+
+    # try again to update default shells, now that all files should exist
+    _macos_post_install
+}
+
+# pkg_get_current_version is recommended, but (soon) not required
+function pkg_get_current_version() {
+    # 'fish --version' has output in this format:
+    #       fish, version 3.1.2
+    # This trims it down to just the version number:
+    #       3.1.2
+    echo $(fish --version 2>/dev/null | head -n 1 | cut -d ' ' -f 3)
+}