From 892fa79371c14bc4e476a832e49075de21248ea1 Mon Sep 17 00:00:00 2001 From: c4605 Date: Wed, 26 May 2021 09:59:01 +0800 Subject: [PATCH] asdf-vm: init at 0.8.1 --- pkgs/tools/misc/asdf-vm/default.nix | 85 +++++++++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 1 + 2 files changed, 86 insertions(+) create mode 100644 pkgs/tools/misc/asdf-vm/default.nix diff --git a/pkgs/tools/misc/asdf-vm/default.nix b/pkgs/tools/misc/asdf-vm/default.nix new file mode 100644 index 00000000000..1ba5c750f38 --- /dev/null +++ b/pkgs/tools/misc/asdf-vm/default.nix @@ -0,0 +1,85 @@ +{ stdenv, lib, fetchFromGitHub, makeWrapper, installShellFiles, bash, coreutils, curl, git, writeScript }: + +let + asdfReshimFile = writeScript "asdf-reshim" '' +#!/usr/bin/env bash + +# asdf-vm create "shim" file like this: +# +# exec $ASDF_DIR/bin/asdf exec "node" "$@" +# +# So we should reshim all installed versions every time shell initialized, +# because $out always change + +asdfDir="''${ASDF_DIR:-$HOME/.asdf}" +asdfDataDir="''${ASDF_DATA_DIR:-$HOME/.asdf}" + +prevAsdfDirFilePath="$asdfDataDir/.nix-prev-asdf-dir-path" + +if [ -r "$prevAsdfDirFilePath" ]; then + prevAsdfDir="$(cat "$prevAsdfDirFilePath")" +else + prevAsdfDir="" +fi + +if [ "$prevAsdfDir" != "$asdfDir" ]; then + rm -rf "$asdfDataDir"/shims + "$asdfDir"/bin/asdf reshim + echo "$asdfDir" > "$prevAsdfDirFilePath" +fi + ''; + + asdfPrepareFile = writeScript "asdf-prepare" '' +ASDF_DIR="@asdfDir@" + +source "$ASDF_DIR/asdf.sh" +${asdfReshimFile} + ''; +in stdenv.mkDerivation rec { + pname = "asdf-vm"; + version = "0.8.1"; + + src = fetchFromGitHub { + owner = "asdf-vm"; + repo = "asdf"; + rev = "v${version}"; + sha256 = "07lh5k1krzm7fbkv0jlwbzz5ycn2jg7s12dnqwmy82qqic0sl6fl"; + }; + + nativeBuildInputs = [ + makeWrapper + installShellFiles + ]; + + buildInputs = [ + bash + curl + git + ]; + + installPhase = '' + mkdir -p $out/share/asdf-vm + cp -r . $out/share/asdf-vm + + mkdir -p $out/etc/profile.d + substitute ${asdfPrepareFile} $out/etc/profile.d/asdf-prepare.sh \ + --replace "@asdfDir@" "$out/share/asdf-vm" + + mkdir -p $out/bin + makeWrapper $out/share/asdf-vm/bin/asdf $out/bin/asdf \ + --set ASDF_DIR $out/share/asdf-vm + + installShellCompletion --cmd asdf \ + --zsh completions/_asdf \ + --fish completions/asdf.fish \ + --bash completions/asdf.bash + ''; + + meta = with lib; { + description = "Extendable version manager with support for Ruby, Node.js, Erlang & more"; + homepage = "https://asdf-vm.com/"; + license = licenses.mit; + maintainers = [ maintainers.c4605 ]; + platforms = platforms.unix; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 470034df6d2..81b9fe0e6de 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -12593,6 +12593,7 @@ in xidel = callPackage ../tools/text/xidel { }; + asdf-vm = callPackage ../tools/misc/asdf-vm { }; ### DEVELOPMENT / TOOLS