anvil-editor: init at 0.4
[NixPkgs.git] / pkgs / applications / editors / android-studio-for-platform / common.nix
blobb0e7e1c839a42a10b0c497cb35d14f5a6b765dc7
1 { channel, pname, version, sha256Hash }:
3 { android-tools
4 , bash
5 , buildFHSEnv
6 , coreutils
7 , dpkg
8 , e2fsprogs
9 , fetchurl
10 , findutils
11 , git
12 , gnugrep
13 , gnused
14 , gnutar
15 , gtk2, glib
16 , gzip
17 , fontsConf
18 , fontconfig
19 , freetype
20 , libX11
21 , libXext
22 , libXi
23 , libXrandr
24 , libXrender
25 , libXtst
26 , makeFontsConf
27 , makeWrapper
28 , ncurses5
29 , openssl
30 , ps
31 , python3
32 , lib
33 , stdenv
34 , unzip
35 , usbutils
36 , which
37 , runCommand
38 , xkeyboard_config
39 , zip
40 , zlib
41 , makeDesktopItem
42 , tiling_wm ? false # if we are using a tiling wm, need to set _JAVA_AWT_WM_NONREPARENTING in wrapper
45 let
46   drvName = "${pname}-${version}";
47   filename = "asfp-${version}-linux.deb";
49   androidStudioForPlatform = stdenv.mkDerivation {
50     name = "${drvName}-unwrapped";
52     src = fetchurl {
53       url = "https://dl.google.com/android/asfp/${filename}";
54       sha256 = sha256Hash;
55     };
57     nativeBuildInputs = [
58       dpkg
59       makeWrapper
60     ];
62     installPhase = ''
63       cp -r "./opt/${pname}/" $out
64       wrapProgram $out/bin/studio.sh \
65         --set-default JAVA_HOME "$out/jbr" \
66         --set QT_XKB_CONFIG_ROOT "${xkeyboard_config}/share/X11/xkb" \
67         ${lib.optionalString tiling_wm "--set _JAVA_AWT_WM_NONREPARENTING 1"} \
68         --set FONTCONFIG_FILE ${fontsConf} \
69         --prefix PATH : "${lib.makeBinPath [
71           # Checked in studio.sh
72           coreutils
73           findutils
74           gnugrep
75           which
76           gnused
78           # Used during setup wizard
79           gnutar
80           gzip
82           # Runtime stuff
83           git
84           ps
85           usbutils
86           android-tools
88           # For Soong sync
89           openssl
90           python3
91           unzip
92           zip
93           e2fsprogs
94         ]}" \
95         --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [
96           # Crash at startup without these
97           fontconfig
98           freetype
99           libXext
100           libXi
101           libXrender
102           libXtst
103           libX11
105           # Support multiple monitors
106           libXrandr
108           # For GTKLookAndFeel
109           gtk2
110           glib
112           # For Soong sync
113           e2fsprogs
114         ]}"
115     '';
116   };
118   desktopItem = makeDesktopItem {
119     name = pname;
120     exec = pname;
121     icon = pname;
122     desktopName = "Android Studio for Platform (${channel} channel)";
123     comment = "The official Android IDE for Android platform development";
124     categories = [ "Development" "IDE" ];
125     startupNotify = true;
126     startupWMClass = "jetbrains-studio";
127   };
129   # Android Studio for Platform downloads prebuilt binaries as part of the SDK. These tools
130   # (e.g. `mksdcard`) have `/lib/ld-linux.so.2` set as the interpreter. An FHS
131   # environment is used as a work around for that.
132   fhsEnv = buildFHSEnv {
133     name = "${drvName}-fhs-env";
134     multiPkgs = pkgs: [
135       zlib
136       ncurses5
137       ncurses5.dev
138     ];
139     profile = ''
140       export ALLOW_NINJA_ENV=true
141       export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib:/usr/lib32
142     '';
143   };
144 in runCommand
145   drvName
146   {
147     startScript = ''
148       #!${bash}/bin/bash
149       ${fhsEnv}/bin/${drvName}-fhs-env ${androidStudioForPlatform}/bin/studio.sh "$@"
150     '';
151     preferLocalBuild = true;
152     allowSubstitutes = false;
153     passthru = {
154       unwrapped = androidStudioForPlatform;
155     };
156     meta = with lib; {
157       description = "The Official IDE for Android platform development";
158       longDescription = ''
159         Android Studio for Platform (ASfP) is the version of the Android Studio IDE
160         for Android Open Source Project (AOSP) platform developers who build with the Soong build system.
161       '';
162       homepage = "https://developer.android.com/studio/platform.html";
163       license = with licenses; [ asl20 unfree ]; # The code is under Apache-2.0, but:
164       # If one selects Help -> Licenses in Android Studio, the dialog shows the following:
165       # "Android Studio includes proprietary code subject to separate license,
166       # including JetBrains CLion(R) (www.jetbrains.com/clion) and IntelliJ(R)
167       # IDEA Community Edition (www.jetbrains.com/idea)."
168       # Also: For actual development the Android SDK is required and the Google
169       # binaries are also distributed as proprietary software (unlike the
170       # source-code itself).
171       platforms = [ "x86_64-linux" ];
172       maintainers = with maintainers; [ robbins ];
173       mainProgram = pname;
174     };
175   }
176   ''
177     mkdir -p $out/{bin,share/pixmaps}
179     echo -n "$startScript" > $out/bin/${pname}
180     chmod +x $out/bin/${pname}
182     ln -s ${androidStudioForPlatform}/bin/studio.png $out/share/pixmaps/${pname}.png
183     ln -s ${desktopItem}/share/applications $out/share/applications
184   ''