{
	description = "FMP Android dev environment.";

	inputs = {
		nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
	};

	outputs = { self, nixpkgs } @inputs:
	let
		system = "x86_64-linux";
		lib    = nixpkgs.lib;
		pkgs = import nixpkgs {
			system = system;
			config = {
				allowUnfree                = true;
				android_sdk.accept_license = true;
			};
		};
		jdk        = pkgs.jdk11;
		buildTools = "31.0.0";
		androidComposition = pkgs.androidenv.composeAndroidPackages {
			abiVersions          = [ "armeabi-v7a" "arm64-v8a" ];
			buildToolsVersions   = [ buildTools ];
			cmdLineToolsVersion  = "8.0";
			includeEmulator      = false;
			includeNDK           = false;
			includeSources       = false;
			includeSystemImages  = false;
			platformToolsVersion = "34.0.5";
			platformVersions     = [ "31" ];
			toolsVersion         = "26.1.1";
			useGoogleAPIs        = false;
			useGoogleTVAddOns    = false;
			# cmakeVersions        = [ "3.10.2" ];
			# emulatorVersion      = "30.3.4";
			# includeExtras        = [ "extras;google;gcm" ];
			# ndkVersions          = ["22.0.7026061"];
			# systemImageTypes     = [ "google_apis_playstore" ];
		};
		androidSdk = androidComposition.androidsdk;
		tex = (pkgs.texlive.combine {
			inherit (pkgs.texlive) scheme-basic
				amsmath
				babel
				capt-of
				catchfile
				collection-fontsextra
				cyrillic
				dvipng
				dvisvgm
				environ
				etoolbox
				fancyhdr
				fontspec
				geometry
				hyperref
				luacode
				luatexbase
				montserrat
				parskip
				pgf
				tcolorbox
				tocloft
				ulem
				wrapfig
				xcolor;

				#(setq org-latex-compiler "lualatex")
				#(setq org-preview-latex-default-process 'dvisvgm)
		});
	in {
		devShells.${system} = {
			default = pkgs.mkShell {
				inputsFrom = with self.devShells.${system}; [ dev doc ];
			};

			dev = pkgs.mkShell rec {
				nativeBuildInputs = with pkgs; [
					android-tools
					androidSdk
					glibc
					gnumake
					jdk
				];
				buildInputs = with pkgs; [];

				GRADLE_OPTS      = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${androidSdk}/libexec/android-sdk/build-tools/${buildTools}/aapt2";
				JAVA_HOME        = "${jdk}";
				LD_LIBRARY_PATH  = "${lib.makeLibraryPath buildInputs}";
				ANDROID_SDK_ROOT = "${androidSdk}/libexec/android-sdk/";
			};

			doc = pkgs.mkShell rec {
				nativeBuildInputs = with pkgs; [
					gnumake
					jdk
					tex
				];
				buildInputs = with pkgs; [];

				JAVA_HOME = "${jdk}";
			};
		};
	};
}