biome: 1.9.2 -> 1.9.3
[NixPkgs.git] / pkgs / tools / misc / asdf-vm / default.nix
blob024d70d5c7cbf8979646ed36ee1f21d2c35608f8
1 { stdenv, lib, fetchFromGitHub, makeWrapper, installShellFiles, bash, curl, git, writeScript }:
3 let
4   asdfReshimFile = writeScript "asdf-reshim" ''
5 #!/usr/bin/env bash
7 # asdf-vm create "shim" file like this:
9 #    exec $ASDF_DIR/bin/asdf exec "node" "$@"
11 # So we should reshim all installed versions every time shell initialized,
12 # because $out always change
14 asdfDir="''${ASDF_DIR:-$HOME/.asdf}"
15 asdfDataDir="''${ASDF_DATA_DIR:-$HOME/.asdf}"
17 prevAsdfDirFilePath="$asdfDataDir/.nix-prev-asdf-dir-path"
19 if [ -r "$prevAsdfDirFilePath" ]; then
20   prevAsdfDir="$(cat "$prevAsdfDirFilePath")"
21 else
22   prevAsdfDir=""
25 if [ "$prevAsdfDir" != "$asdfDir" ]; then
26   rm -rf "$asdfDataDir"/shims
27   "$asdfDir"/bin/asdf reshim
28   echo "$asdfDir" > "$prevAsdfDirFilePath"
30   '';
32   asdfPrepareFile = writeScript "asdf-prepare" ''
33 ASDF_DIR="@asdfDir@"
35 source "$ASDF_DIR/asdf.sh"
36 ${asdfReshimFile}
37   '';
38 in stdenv.mkDerivation rec {
39   pname = "asdf-vm";
40   version = "0.14.1";
42   src = fetchFromGitHub {
43     owner = "asdf-vm";
44     repo = "asdf";
45     rev = "v${version}";
46     sha256 = "sha256-1dacsAoZVwoQv8+V4FrjRLa7awLIZchlhkuET0wTO7w=";
47   };
49   nativeBuildInputs = [
50     makeWrapper
51     installShellFiles
52   ];
54   buildInputs = [
55     bash
56     curl
57     git
58   ];
60   installPhase = ''
61     mkdir -p $out/share/asdf-vm
62     cp -r . $out/share/asdf-vm
64     mkdir -p $out/etc/profile.d
65     substitute ${asdfPrepareFile} $out/etc/profile.d/asdf-prepare.sh \
66       --replace "@asdfDir@" "$out/share/asdf-vm"
68     mkdir -p $out/bin
69     makeWrapper $out/share/asdf-vm/bin/asdf $out/bin/asdf \
70       --set ASDF_DIR $out/share/asdf-vm
72     installShellCompletion --cmd asdf \
73       --zsh completions/_asdf \
74       --fish completions/asdf.fish \
75       --bash completions/asdf.bash
76   '';
78   meta = with lib; {
79     description = "Extendable version manager with support for Ruby, Node.js, Erlang & more";
80     homepage = "https://asdf-vm.com/";
81     license = licenses.mit;
82     maintainers = [ maintainers.c4605 ];
83     mainProgram = "asdf";
84     platforms = platforms.unix;
85   };