summary refs log tree commit diff
path: root/pkgs/tools/misc/asdf-vm
diff options
context:
space:
mode:
authorc4605 <bolasblack@gmail.com>2021-05-26 09:59:01 +0800
committerc4605 <bolasblack@gmail.com>2021-06-18 22:19:53 +0800
commit892fa79371c14bc4e476a832e49075de21248ea1 (patch)
tree8ec4859c1589a6a195b271de055436844da21fe4 /pkgs/tools/misc/asdf-vm
parentb2f86e66629d1d05a7da7dfff5bf18353bf7968e (diff)
downloadnixpkgs-892fa79371c14bc4e476a832e49075de21248ea1.tar
nixpkgs-892fa79371c14bc4e476a832e49075de21248ea1.tar.gz
nixpkgs-892fa79371c14bc4e476a832e49075de21248ea1.tar.bz2
nixpkgs-892fa79371c14bc4e476a832e49075de21248ea1.tar.lz
nixpkgs-892fa79371c14bc4e476a832e49075de21248ea1.tar.xz
nixpkgs-892fa79371c14bc4e476a832e49075de21248ea1.tar.zst
nixpkgs-892fa79371c14bc4e476a832e49075de21248ea1.zip
asdf-vm: init at 0.8.1
Diffstat (limited to 'pkgs/tools/misc/asdf-vm')
-rw-r--r--pkgs/tools/misc/asdf-vm/default.nix85
1 files changed, 85 insertions, 0 deletions
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;
+  };
+}