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