summary refs log tree commit diff
path: root/pkgs/applications/editors/emacs/elisp-packages/manual-packages/tsc/default.nix
blob: 3fa9f1b4f974abc67190fe04c9c0e323c070ade6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
{ lib
, symlinkJoin
, melpaBuild
, fetchFromGitHub
, rustPlatform
, writeText
, clang
, llvmPackages

, runtimeShell
, writeScript
, python3
, nix-prefetch-github
, nix
}:

let

  srcMeta = lib.importJSON ./src.json;
  inherit (srcMeta) version;

  src = fetchFromGitHub srcMeta.src;

  tsc = melpaBuild {
    inherit src;
    inherit version;

    pname = "tsc";
    commit = version;

    sourceRoot = "source/core";

    recipe = writeText "recipe" ''
      (tsc
      :repo "emacs-tree-sitter/elisp-tree-sitter"
      :fetcher github)
    '';
  };

  tsc-dyn = rustPlatform.buildRustPackage {
    inherit version;
    inherit src;

    pname = "tsc-dyn";

    nativeBuildInputs = [ rustPlatform.bindgenHook ];
    sourceRoot = "source/core";

    postInstall = ''
      LIB=($out/lib/libtsc_dyn.*)
      TSC_PATH=$out/share/emacs/site-lisp/elpa/tsc-${version}
      install -d $TSC_PATH
      install -m444 $out/lib/libtsc_dyn.* $TSC_PATH/''${LIB/*libtsc_/tsc-}
      echo -n $version > $TSC_PATH/DYN-VERSION
      rm -r $out/lib
    '';

    inherit (srcMeta) cargoHash;
  };

in symlinkJoin {
  name = "tsc-${version}";
  paths = [ tsc tsc-dyn ];

  passthru = {
    updateScript = let
      pythonEnv = python3.withPackages(ps: [ ps.requests ]);
    in writeScript "tsc-update" ''
      #!${runtimeShell}
      set -euo pipefail
      export PATH=${lib.makeBinPath [
        nix-prefetch-github
        nix
        pythonEnv
      ]}:$PATH
      exec python3 ${builtins.toString ./update.py} ${builtins.toString ./.}
    '';
  };

  meta = {
    description = "The core APIs of the Emacs binding for tree-sitter.";
    license = lib.licenses.mit;
    maintainers = with lib.maintainers; [ pimeys ];
  };
}