summary refs log tree commit diff
path: root/pkgs/applications/editors/kodestudio/default.nix
blob: a106c316674709cf5bb9805ea0bf36ae48c2f5dc (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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
{ stdenv, lib, fetchurl, makeDesktopItem, makeWrapper
, # Patchelf dependencies:
  alsaLib, atomEnv, boehmgc, flac, libogg, libvorbis, libXScrnSaver, libGLU_combined
, openssl, xorg, zlib
}:

let

  version = "17.1";

  sha256 = if stdenv.hostPlatform.system == "x86_64-linux"  then "1kddisnvlk48jip6k59mw3wlkrl7rkck2lxpaghn0gfx02cvms5f"
      else if stdenv.hostPlatform.system == "i686-cygwin"   then "1izp42afrlh4yd322ax9w85ki388gnkqfqbw8dwnn4k3j7r5487z"
      else throw "Unsupported system: ${stdenv.hostPlatform.system}";

  urlBase = "https://github.com/Kode/KodeStudio/releases/download/v${version}/KodeStudio-";

  urlStr = if stdenv.hostPlatform.system == "x86_64-linux"  then urlBase + "linux64.tar.gz"
      else if stdenv.hostPlatform.system == "i686-cygwin"   then urlBase + "win32.zip"
      else throw "Unsupported system: ${stdenv.hostPlatform.system}";

in

  stdenv.mkDerivation {
    pname = "kodestudio";
    inherit version;

    src = fetchurl {
        url = urlStr;
        inherit sha256;
    };

    buildInputs = [ makeWrapper libXScrnSaver ];

    desktopItem = makeDesktopItem {
      name = "kodestudio";
      exec = "kodestudio";
      icon = "kodestudio";
      comment = "Kode Studio is an IDE for Kha based on Visual Studio Code";
      desktopName = "Kode Studio";
      genericName = "Text Editor";
      categories = "GNOME;GTK;Utility;TextEditor;Development;";
    };

    sourceRoot = ".";

    installPhase = ''
      mkdir -p $out
      cp -r ./* $out
    '';

    postFixup = lib.optionalString (stdenv.hostPlatform.system == "i686-linux" || stdenv.hostPlatform.system == "x86_64-linux") ''
      # Patch Binaries
      patchelf \
          --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
          --set-rpath "$out:${atomEnv.libPath}" \
          $out/kodestudio
      patchelf \
          --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
          --set-rpath ".:${stdenv.cc.libc}/lib:${xorg.libXinerama}/lib:${xorg.libX11}/lib:${alsaLib}/lib:${libGLU_combined}/lib:${openssl.out}/lib" \
          $out/resources/app/extensions/krom/Krom/linux/Krom
      patchelf \
          --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
          --set-rpath ".:${stdenv.cc.libc}/lib" \
          $out/resources/app/extensions/kha/Kha/Kore/Tools/krafix/krafix-linux64
      patchelf \
          --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
          --set-rpath ".:${stdenv.cc.libc}/lib" \
          $out/resources/app/extensions/kha/Kha/Kore/Tools/kraffiti/kraffiti-linux64
      patchelf \
          --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
          --set-rpath ".:${stdenv.cc.libc}/lib:${stdenv.cc.cc.lib}/lib" \
          $out/resources/app/extensions/kha/Kha/Tools/kravur/kravur-linux64
      patchelf \
          --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
          --set-rpath ".:${stdenv.cc.libc}/lib:${zlib}/lib" \
          $out/resources/app/extensions/kha/Kha/Tools/haxe/haxe-linux64
      patchelf \
          --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
          --set-rpath ".:${stdenv.cc.libc}/lib:${libvorbis}/lib:${libogg}/lib:${flac.out}/lib" \
          $out/resources/app/extensions/kha/Kha/Tools/oggenc/oggenc-linux64

      # Patch Shared Objects
      patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${stdenv.cc.cc.lib}/lib" $out/libnode.so
      patchelf --set-rpath ".:${stdenv.cc.libc}/lib" $out/libffmpeg.so
      patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${stdenv.cc.cc.lib}/lib" $out/resources/app/extensions/krom/Krom/linux/libv8_libplatform.so
      patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${stdenv.cc.cc.lib}/lib" $out/resources/app/extensions/krom/Krom/linux/libicuuc.so
      patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${stdenv.cc.cc.lib}/lib" $out/resources/app/extensions/krom/Krom/linux/libv8_libbase.so
      patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${stdenv.cc.cc.lib}/lib" $out/resources/app/extensions/krom/Krom/linux/libv8.so
      patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${stdenv.cc.cc.lib}/lib" $out/resources/app/extensions/krom/Krom/linux/libicui18n.so
      patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${boehmgc}/lib" $out/resources/app/extensions/kha/Kha/Backends/Kore/khacpp/project/libs/nekoapi/bin/RPi/libneko.so
      patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${boehmgc}/lib" $out/resources/app/extensions/kha/Kha/Backends/Kore/khacpp/project/libs/nekoapi/bin/Linux64/libneko.so
      patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${boehmgc}/lib" $out/resources/app/extensions/kha/Kha/Backends/Kore/khacpp/project/libs/nekoapi/bin/Linux/libneko.so
      patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${stdenv.cc.cc.lib}/lib" $out/resources/app/node_modules/pty.js/build/Release/pty.node
      patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${stdenv.cc.cc.lib}/lib" $out/resources/app/node_modules/gc-signals/build/Release/gcsignals.node
      patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${stdenv.cc.cc.lib}/lib" $out/resources/app/node_modules/gc-signals/build/Release/obj.target/gcsignals.node
      patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${stdenv.cc.cc.lib}/lib" $out/resources/app/node_modules/oniguruma/build/Release/onig_scanner.node
      patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${stdenv.cc.cc.lib}/lib" $out/resources/app/node_modules/oniguruma/build/Release/obj.target/onig_scanner.node
      patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${stdenv.cc.cc.lib}/lib:${xorg.libX11}/lib" $out/resources/app/node_modules/native-keymap/build/Release/keymapping.node
      patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${stdenv.cc.cc.lib}/lib:${xorg.libX11}/lib" $out/resources/app/node_modules/native-keymap/build/Release/obj.target/keymapping.node

      # Rewrite VSCODE_PATH inside bin/kodestudio to $out
      substituteInPlace $out/bin/kodestudio --replace "/usr/share/kodestudio" $out

      # Patch library calls that expects nix store files to be mode 644:
      #   A stat is made on srcFile (in the nix store), and its mode used
      #   for destFile, but it expects the mode to be read write, whereas
      #   all regular files in the nix store are made read only.
      #   (33188 is 100644 octal, the required mode)
      substituteInPlace $out/resources/app/extensions/kha/Kha/Tools/khamake/node_modules/fs-extra/lib/copy-sync/copy-file-sync.js --replace "stat.mode" "33188"
      substituteInPlace $out/resources/app/extensions/kha/Kha/Kore/Tools/koremake/node_modules/fs-extra/lib/copy-sync/copy-file-sync.js --replace "stat.mode" "33188"

      # Wrap preload libXss
      wrapProgram $out/bin/kodestudio \
          --prefix LD_PRELOAD : ${stdenv.lib.makeLibraryPath [ libXScrnSaver ]}/libXss.so.1
    '';

    meta = with stdenv.lib; {
      description = ''
        An IDE for Kha based on Visual Studio Code
      '';
      longDescription = ''
        Kode Studio is an IDE for Kha based on Visual Studio Code.

        Kha and Kore are multimedia frameworks for Haxe and C++ respectively
        (with JavaScript coming soon). Using Kha or Kore you can access all
        hardware at the lowest possible level in a completely portable way.
      '';
      homepage = http://kode.tech/;
      downloadPage = https://github.com/Kode/KodeStudio/releases;
      license = licenses.mit;
      maintainers = [ maintainers.patternspandemic ];
      platforms = [ "x86_64-linux" "i686-cygwin" ];
    };
  }