From 1b52918de0d7695bd9055d1a36c058a0b3e4fd10 Mon Sep 17 00:00:00 2001 From: mrjk Date: Tue, 18 Apr 2023 17:59:59 -0400 Subject: [PATCH] add: install script --- .gitignore | 2 + README.md | 12 +++++ ellipsis.sh | 128 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 142 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 ellipsis.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..62d22b4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +glab +glab.tar.gz diff --git a/README.md b/README.md new file mode 100644 index 0000000..3ea46fa --- /dev/null +++ b/README.md @@ -0,0 +1,12 @@ +# user/id-mrjk +Just a bunch of dotfiles. + +## Install +Clone and symlink or install with [ellipsis][ellipsis]: + +``` +$ ellipsis install ellipsis-glab +``` + +[ellipsis]: http://ellipsis.sh + diff --git a/ellipsis.sh b/ellipsis.sh new file mode 100644 index 0000000..0b74625 --- /dev/null +++ b/ellipsis.sh @@ -0,0 +1,128 @@ +#!/usr/bin/env bash +# +# glab ellipsis package + + +ELLIPSIS_SHELL_BIN="$HOME/.local/bin" +ELLIPSIS_SHELL_HOME="$HOME/.local/shell" + +detect_platform() { + + local kernel= machine= + + kernel=$(uname -s | tr "[:upper:]" "[:lower:]") + case "${kernel}" in + linux) + kernel=Linux + ;; + Darwin) + kernel=macOS + ;; + esac + case "$(uname -m)" in + x86_64) + machine=x86_64 + ;; + i686 | i386) + machine=i386 + ;; + aarch64 | arm64) + machine=arm64 + ;; + *) + >&2 echo "Machine $(uname -m) not supported by the installer.\n" \ + "Go to https://direnv for alternate installation methods." + return 1 + ;; + esac + + echo "machine='$machine'; kernel='$kernel';" +} + +get_gitlab_release () { + local repo=$1 + local pattern=$2 + local version=${3:-latest} + + if [[ -n "${version:-}" ]]; then + gh_url_suffix="tags/${version}" + else + gh_url_suffix="latest" + fi + + download_url=$( + curl -fL "https://gitlab.com/api/v4/projects/$repo/releases?order_by=released_at" \ + | sed 's/,/,\n/g' \ + | grep -w url \ + | cut -d '"' -f 4 \ + | grep "$pattern" + ) + + if [[ "$version" == 'latest' ]]; then + echo "$download_url" | head -n 1 + else + echo "$download_url" | grep "$version" | head -n 1 + fi +} + + +# The following hooks can be defined to customize behavior of your package: +pkg.install() { + + local bin=glab + local archive=glab.tar.gz + + # Fetch archive + if ! fs.file_exists $PKG_PATH/$archive; then + + local download_url= kernel= machine= + eval "$(detect_platform)" + download_url=$(get_gitlab_release 34675721 "${kernel}_${machine}.tar.gz" latest) + curl -o "$PKG_PATH/$archive" -fL "$download_url" + fi + + # Extract binary + local binary=$(tar -tf "$PKG_PATH/glab.tar.gz" | grep bin/glab) + local components="${binary//[^\/]}" + components=${#components} + tar --extract \ + --file="$PKG_PATH/$archive" \ + --directory "$PKG_PATH" \ + --strip-components=$components \ + $binary + chmod +x glab + +} + +pkg.uninstall() { + local bin=glab + if fs.file_exists $PKG_PATH/$bin; then + rm $PKG_PATH/$bin +# rm $ELLIPSIS_SHELL_BIN/$bin + fi +} + +pkg.link() { + local bin=glab + if ! fs.file_exists $PKG_PATH/$bin; then + pkg.install + fi + fs.link_rfile $bin $ELLIPSIS_SHELL_BIN/$bin +} + +# pkg.push() { +# git.push +# } + +# pkg.pull() { +# git.pull +# } + +# pkg.installed() { +# git.status +# } +# +# pkg.status() { +# git.diffstat +# } +