diff --git a/.README.md b/.README.md index ac4f138..a49216e 100644 --- a/.README.md +++ b/.README.md @@ -39,3 +39,16 @@ dotfiles checkout lazygit --git-dir=$HOME/.dotfiles --work-tree=$HOME ``` +# Install recent versions of applications + +## kitty + +- https://sw.kovidgoyal.net/kitty/binary/ + +``` +sh ~/.config/kitty/installer.sh +``` + +**Note**: +Kitty prepends its _bin_ folder to the path. +So it is more coherent/simpler to copy this behaviour into Zsh. diff --git a/.config/kitty/installer.sh b/.config/kitty/installer.sh new file mode 100644 index 0000000..8afa12c --- /dev/null +++ b/.config/kitty/installer.sh @@ -0,0 +1,176 @@ +#!/bin/sh +# Copyright (C) 2018 Kovid Goyal +# +# Distributed under terms of the GPLv3 license. + +{ \unalias command; \unset -f command; } >/dev/null 2>&1 +tdir='' +cleanup() { + [ -n "$tdir" ] && { + command rm -rf "$tdir" + tdir='' + } +} + +die() { + cleanup + printf "\033[31m%s\033[m\n\r" "$*" > /dev/stderr; + exit 1; +} + +detect_network_tool() { + if command -v curl 2> /dev/null > /dev/null; then + fetch() { + command curl -fL "$1" + } + fetch_quiet() { + command curl -fsSL "$1" + } + elif command -v wget 2> /dev/null > /dev/null; then + fetch() { + command wget -O- "$1" + } + fetch_quiet() { + command wget --quiet -O- "$1" + } + else + die "Neither curl nor wget available, cannot download kitty" + fi +} + + +detect_os() { + arch="" + case "$(command uname)" in + 'Darwin') OS="macos";; + 'Linux') + OS="linux" + case "$(command uname -m)" in + amd64|x86_64) arch="x86_64";; + aarch64*) arch="arm64";; + armv8*) arch="arm64";; + i386) arch="i686";; + i686) arch="i686";; + *) die "Unknown CPU architecture $(command uname -m)";; + esac + ;; + *) die "kitty binaries are not available for $(command uname)" + esac +} + +expand_tilde() { + tilde_less="${1#\~/}" + [ "$1" != "$tilde_less" ] && tilde_less="$HOME/$tilde_less" + printf '%s' "$tilde_less" +} + +parse_args() { + dest='~/.local' + [ "$OS" = "macos" ] && dest="/Applications" + launch='y' + installer='' + while :; do + case "$1" in + dest=*) dest="${1#*=}";; + launch=*) launch="${1#*=}";; + installer=*) installer="${1#*=}";; + "") break;; + *) die "Unrecognized command line option: $1";; + esac + shift + done + dest=$(expand_tilde "${dest}") + [ "$launch" != "y" -a "$launch" != "n" ] && die "Unrecognized command line option: launch=$launch" + dest="$dest/kitty.app" +} + + +get_file_url() { + url="https://github.com/kovidgoyal/kitty/releases/download/$1/kitty-$2" + if [ "$OS" = "macos" ]; then + url="$url.dmg" + else + url="$url-$arch.txz" + fi +} + +get_release_url() { + release_version=$(fetch_quiet "https://sw.kovidgoyal.net/kitty/current-version.txt") + [ $? -ne 0 -o -z "$release_version" ] && die "Could not get kitty latest release version" + get_file_url "v$release_version" "$release_version" +} + + +get_nightly_url() { + get_file_url "nightly" "nightly" +} + +get_download_url() { + installer_is_file="n" + case "$installer" in + "nightly") get_nightly_url ;; + "") get_release_url ;; + *) installer_is_file="y" ;; + esac +} + +download_installer() { + tdir=$(command mktemp -d "/tmp/kitty-install-XXXXXXXXXXXX") + [ "$installer_is_file" != "y" ] && { + printf '%s\n\n' "Downloading from: $url" + if [ "$OS" = "macos" ]; then + installer="$tdir/kitty.dmg" + else + installer="$tdir/kitty.txz" + fi + fetch "$url" > "$installer" || die "Failed to download: $url" + installer_is_file="y" + } +} + +linux_install() { + command mkdir "$tdir/mp" + command tar -C "$tdir/mp" "-xJof" "$installer" || die "Failed to extract kitty tarball" + printf "%s\n" "Installing to $dest" + command rm -rf "$dest" || die "Failed to delete $dest" + command mv "$tdir/mp" "$dest" || die "Failed to move kitty.app to $dest" +} + +macos_install() { + command mkdir "$tdir/mp" + command hdiutil attach "$installer" "-mountpoint" "$tdir/mp" || die "Failed to mount kitty.dmg" + printf "%s\n" "Installing to $dest" + command rm -rf "$dest" + command mkdir -p "$dest" || die "Failed to create the directory: $dest" + command ditto -v "$tdir/mp/kitty.app" "$dest" + rc="$?" + command hdiutil detach "$tdir/mp" + [ "$rc" != "0" ] && die "Failed to copy kitty.app from mounted dmg" +} + +exec_kitty() { + if [ "$OS" = "macos" ]; then + exec "open" "$dest" + else + exec "$dest/bin/kitty" "--detach" + fi + die "Failed to launch kitty" +} + +main() { + detect_os + parse_args "$@" + detect_network_tool + get_download_url + download_installer + if [ "$OS" = "macos" ]; then + macos_install + else + linux_install + fi + cleanup + [ "$launch" = "y" ] && exec_kitty + exit 0 +} + +main "$@" diff --git a/.local/share/applications/kitty.desktop b/.local/share/applications/kitty.desktop new file mode 100644 index 0000000..f1f065b --- /dev/null +++ b/.local/share/applications/kitty.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Version=1.0 +Type=Application +Name=kitty +GenericName=Terminal emulator +Comment=Fast, feature-rich, GPU based terminal +TryExec=/home/michel/.local/kitty.app/bin/kitty +Exec=/home/michel/.local/kitty.app/bin/kitty +Icon=/home/michel/.config/kitty/kitty-light.png +Categories=System;TerminalEmulator; diff --git a/.zshrc b/.zshrc index e2a0a2d..a3b0970 100644 --- a/.zshrc +++ b/.zshrc @@ -15,11 +15,14 @@ WORDCHARS="*?_-.~$" ### Path ### -path=($path $HOME/.local/bin) -path=($path $HOME/bin) -path=($path $HOME/go/bin) +path=( + $HOME/bin + $HOME/dev_local/bin + $HOME/.local/bin + $HOME/.local/*/bin + $HOME/go/bin + $path) -path=($path $HOME/dev_local/bin) #export LD_LIBRARY_PATH=$HOME/dev_local/lib fpath=($fpath /usr/share/zsh/site-functions)