2 description = "Nix flake to develop for Android";
6 #"https://haskell-miso-cachix.cachix.org"
8 extra-trusted-public-keys = [
9 #"haskell-miso-cachix.cachix.org-1:m8hN1cvFMJtYib4tj+06xkKt5ABMSGfe8W7s40x1kQ0="
11 #allow-import-from-derivation = "true";
15 nixpkgs.url = "flake:nixpkgs";
16 miso.url = "github:dmjio/miso";
17 miso.inputs.nixpkgs.follows = "nixpkgs";
18 miso-lynx.url = "github:dmjio/miso-lynx";
19 miso-lynx.flake = false;
20 ghcjs-base.url = "github:ghcjs/ghcjs-base";
21 ghcjs-base.flake = false;
23 # ExplanationNote: an alternative way to install Android tools,
24 # not sure if it's better than nixpkgs' machinery at anything.
25 # Just here for reference.
27 url = "github:tadfisher/android-nixpkgs";
30 # The main branch follows the "canary" channel of the Android SDK
31 # repository. Use another android-nixpkgs branch to explicitly
32 # track an SDK release channel.
34 # url = "github:tadfisher/android-nixpkgs/stable";
35 # url = "github:tadfisher/android-nixpkgs/beta";
36 # url = "github:tadfisher/android-nixpkgs/preview";
37 # url = "github:tadfisher/android-nixpkgs/canary";
39 # ExplanationNote: replace the "nixpkgs" input for the "android-nixpkgs" flake.
40 inputs.nixpkgs.follows = "nixpkgs";
53 lib = inputs.nixpkgs.lib;
56 lib.genAttrs lib.systems.flakeExposed (
60 #pkgs = inputs.nixpkgs.legacyPackages.${system};
61 pkgs = import inputs.nixpkgs {
64 android_sdk.accept_license = true;
65 allowUnfreePredicate =
67 builtins.elem (pkgs.lib.getName pkg) [
68 "android-sdk-build-tools"
69 "android-sdk-cmdline-tools"
71 "android-sdk-platform-tools"
72 "android-sdk-platforms"
75 "android-studio-stable"
84 "android-sdk-emulator"
85 "android-sdk-system-image-${android.config.androidPlatformVersion}-google_apis_playstore-x86_64"
86 "system-image-${android.config.androidPlatformVersion}-google_apis_playstore-x86_64"
87 "system-image-${android.config.androidPlatformVersion}-google_apis-x86_64"
88 "android-sdk-system-image-${android.config.androidPlatformVersion}-google_apis-x86_64"
92 (import nix/overlays/ghc.nix inputs)
95 android = pkgs.callPackage android/default.nix {
96 inherit inputs system;
97 mainLynxBundle = pkgs.callPackage src/default.nix {
98 miso-lynx = inputs.miso-lynx;
99 ghc = pkgs.pkgsCross.ghcjs.haskell.packages.ghc9122;
100 #ghc = pkgs.pkgsCross.ghcjs.haskell.packages.ghcNative;
107 # nix -L build .#pkgsCross.ghcjs.haskell.packages.ghcNative.miso-lynx-examples
108 packages = perSystem (
110 default = android.packages.default;
111 android = android.packages.default;
112 android-emulator-x86_64 = android.packages.android-emulator-x86_64;
115 haskell = pkgs.haskell;
116 pkgsCross = pkgs.pkgsCross;
117 androidComposition = android.config.androidComposition;
118 miso-ghc-9122 = inputs.miso.packages.${system}.miso-ghc-9122;
119 miso-ghcjs-9122 = inputs.miso.packages.${system}.miso-ghcjs-9122;
121 miso-ghcjs-9122-2 = pkgs.pkgsCross.ghcjs.haskell.packages.ghc9122.miso;
122 miso-ghc-9122-2 = pkgs.pkgsCross.ghcjs.haskell.packages.ghcNative.miso;
124 android-sdk = inputs.android-nixpkgs.sdk (
125 sdkPkgs: with sdkPkgs; [
137 devShells = perSystem (
139 default = pkgs.mkShell {
140 buildInputs = android.devShells.default.buildInputs ++ [
145 ${android.devShells.default.shellHook}