1
0
Fork 0
dotfiles/programs/nvim/update-plugins.sh

103 lines
3 KiB
Bash
Raw Normal View History

2021-12-06 22:35:29 +00:00
#!/usr/bin/env nix-shell
#!nix-shell update-shell.nix -i bash
2021-12-15 23:27:07 +00:00
set -eEuo pipefail
current_command='none'
trap 'last_command=$current_command; current_command=$BASH_COMMAND' DEBUG
trap 'code=$?; if [ "$code" -ne "0" ]; then echo "\"${last_command}\" command ended with exit code $code."; fi' EXIT
2021-12-15 19:43:52 +00:00
2021-12-06 22:35:29 +00:00
script_dir="$(dirname "$(realpath "$0")")"
2022-02-14 14:22:40 +00:00
plugins="${script_dir}/plugins.yaml"
2021-12-06 22:35:29 +00:00
nix_new_file="${script_dir}/plugins_new.nix"
nix_file="${script_dir}/plugins.nix"
2021-12-15 19:43:52 +00:00
github_auth="$(cat "${script_dir}/github.auth")"
if [ -z "$github_auth" ]; then
echo "Please supply GitHub API credentials"
exit 1
fi
2022-02-14 14:22:40 +00:00
plugins_json="$(dasel -r yaml -w json . <"$plugins")"
readarray -t plugin_array <<<"$(echo "$plugins_json" | jq -c '.[]')"
2022-02-13 20:58:18 +00:00
2021-12-15 19:43:52 +00:00
rm -f "$nix_new_file"
2021-12-07 08:05:54 +00:00
echo '# This file has been auto-generated' >"$nix_new_file"
echo '{ pkgs, ... }:' >>"$nix_new_file"
2021-12-06 22:35:29 +00:00
2021-12-07 08:05:54 +00:00
echo "{" >>"$nix_new_file"
2022-02-13 20:58:18 +00:00
for plugin in "${plugin_array[@]}"; do
2022-02-14 14:22:40 +00:00
raw_src="$(echo "$plugin" | dasel -r json --plain '.src')"
2022-02-13 20:58:18 +00:00
owner="$(echo "$raw_src" | cut -d'/' -f1)"
repo="$(echo "$raw_src" | cut -d'/' -f2)"
2021-12-15 19:43:52 +00:00
echo "Updating ${owner}/${repo} ..."
2022-02-13 20:58:18 +00:00
branch="$(echo "$plugin" | jq -r '.branch // empty')"
2021-12-06 22:35:29 +00:00
name="$(echo "$repo" | tr [.] '-')"
2022-01-05 21:28:17 +00:00
if [ -z "$branch" ]; then
src="$(nix-prefetch-github --nix --fetch-submodules --no-deep-clone "$owner" "$repo" 2>/dev/null | tail -n +4)"
2022-01-05 21:28:17 +00:00
else
src="$(nix-prefetch-github --nix --fetch-submodules --no-deep-clone --rev "$branch" "$owner" "$repo" 2>/dev/null | tail -n +4)"
2022-01-05 21:28:17 +00:00
fi
2021-12-06 22:35:29 +00:00
rev="$(echo "$src" | grep rev | cut -d '"' -f 2)"
2021-12-15 19:43:52 +00:00
commit_info="$(curl -u "$github_auth" --silent "https://api.github.com/repos/${owner}/${repo}/commits/${rev}")"
2022-02-14 14:22:40 +00:00
commit_date="$(echo "$commit_info" | dasel -r json --plain '.commit.committer.date')"
2021-12-06 22:35:29 +00:00
2021-12-15 19:43:52 +00:00
if [[ "$commit_date" == "null" ]]; then
2022-02-14 14:22:40 +00:00
commit_date="$(echo "$commit_info" | dasel -r json --plain '.commit.author.date')"
2021-12-15 19:43:52 +00:00
fi
version="$(date -d "$commit_date" "+%s")"
2021-12-06 22:35:29 +00:00
{
echo "${name} = pkgs.vimUtils.buildVimPluginFrom2Nix {"
echo "pname = \"${repo}\";"
echo "version = \"${version}\";"
echo "src = ${src};"
} >>"$nix_new_file"
2021-12-06 22:35:29 +00:00
2022-02-13 20:58:18 +00:00
build_inputs="$(echo "$plugin" | jq -r '.nativeBuildInputs // empty' | jq -r @sh)"
if [ -n "$build_inputs" ]; then
{
echo -n "nativeBuildInputs = with pkgs; ["
echo -n "$build_inputs" | tr -d "'"
echo '];'
} >>"$nix_new_file"
2022-02-13 20:58:18 +00:00
fi
build_phase="$(echo "$plugin" | jq -r '.buildPhase // empty')"
if [ -n "$build_phase" ]; then
printf "buildPhase = ''\n%s\n'';\n" "$build_phase" >>"$nix_new_file"
2021-12-06 22:35:29 +00:00
fi
{
echo "meta.homepage = \"https://github.com/${owner}/${repo}\";"
echo '};'
} >>"$nix_new_file"
2022-02-13 20:58:18 +00:00
done
2021-12-07 08:05:54 +00:00
echo "}" >>"$nix_new_file"
2021-12-06 22:35:29 +00:00
nixpkgs-fmt "$nix_new_file"
if test -f "$nix_file"; then
2021-12-15 23:27:07 +00:00
set +eo pipefail
if [ "$TERM" = "xterm-kitty" ]; then
kitty +kitten diff "$nix_file" "$nix_new_file"
else
diff -U 2 "$nix_file" "$nix_new_file" | bat --paging=never -ldiff
fi
2021-12-15 23:27:07 +00:00
set -eo pipefail
2021-12-06 22:35:29 +00:00
mv "$nix_new_file" "$nix_file"
else
mv "$nix_new_file" "$nix_file"
2021-12-15 23:27:07 +00:00
set +eo pipefail
2021-12-06 22:35:29 +00:00
bat --paging=never "$nix_file"
2021-12-15 23:27:07 +00:00
set -eo pipefail
2021-12-06 22:35:29 +00:00
fi