diff options
Diffstat (limited to 'pkgs/applications/editors/jetbrains/common.nix')
-rw-r--r-- | pkgs/applications/editors/jetbrains/common.nix | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/pkgs/applications/editors/jetbrains/common.nix b/pkgs/applications/editors/jetbrains/common.nix new file mode 100644 index 000000000000..a7ac367f048a --- /dev/null +++ b/pkgs/applications/editors/jetbrains/common.nix @@ -0,0 +1,78 @@ +{ stdenv, fetchurl, makeDesktopItem, makeWrapper, patchelf, p7zip +, coreutils, gnugrep, which, git, python, unzip }: + +{ name, product, version, src, wmClass, jdk, meta } @ attrs: + +with stdenv.lib; + +let loName = toLower product; + hiName = toUpper product; + execName = concatStringsSep "-" (init (splitString "-" name)); +in + +with stdenv; lib.makeOverridable mkDerivation rec { + inherit name src meta; + desktopItem = makeDesktopItem { + name = execName; + exec = execName; + comment = lib.replaceChars ["\n"] [" "] meta.longDescription; + desktopName = product; + genericName = meta.description; + categories = "Application;Development;"; + icon = execName; + extraEntries = '' + StartupWMClass=${wmClass} + ''; + }; + + buildInputs = [ makeWrapper patchelf p7zip unzip ]; + + patchPhase = '' + get_file_size() { + local fname="$1" + echo $(ls -l $fname | cut -d ' ' -f5) + } + + munge_size_hack() { + local fname="$1" + local size="$2" + strip $fname + truncate --size=$size $fname + } + + interpreter=$(echo ${stdenv.glibc.out}/lib/ld-linux*.so.2) + if [ "${stdenv.system}" == "x86_64-linux" ]; then + target_size=$(get_file_size bin/fsnotifier64) + patchelf --set-interpreter "$interpreter" bin/fsnotifier64 + munge_size_hack bin/fsnotifier64 $target_size + else + target_size=$(get_file_size bin/fsnotifier) + patchelf --set-interpreter "$interpreter" bin/fsnotifier + munge_size_hack bin/fsnotifier $target_size + fi + ''; + + installPhase = '' + mkdir -p $out/{bin,$name,share/pixmaps,libexec/${name}} + cp -a . $out/$name + ln -s $out/$name/bin/${loName}.png $out/share/pixmaps/${execName}.png + mv bin/fsnotifier* $out/libexec/${name}/. + + jdk=${jdk.home} + item=${desktopItem} + + makeWrapper "$out/$name/bin/${loName}.sh" "$out/bin/${execName}" \ + --prefix PATH : "$out/libexec/${name}:${stdenv.lib.makeBinPath [ jdk coreutils gnugrep which git ]}" \ + --prefix LD_LIBRARY_PATH : "${stdenv.lib.makeLibraryPath [ + # Some internals want libstdc++.so.6 + stdenv.cc.cc.lib + ]}" \ + --set JDK_HOME "$jdk" \ + --set ${hiName}_JDK "$jdk" \ + --set ANDROID_JAVA_HOME "$jdk" \ + --set JAVA_HOME "$jdk" + + ln -s "$item/share/applications" $out/share + ''; + +} |