]> Git — Sourcephile - tmp/julm/android.git/blob - flake.nix
reproducibility(android): build and run an APK in the emulator
[tmp/julm/android.git] / flake.nix
1 {
2 description = "Nix flake to develop for Android";
3
4 nixConfig = {
5 extra-substituters = [
6 #"https://haskell-miso-cachix.cachix.org"
7 ];
8 extra-trusted-public-keys = [
9 #"haskell-miso-cachix.cachix.org-1:m8hN1cvFMJtYib4tj+06xkKt5ABMSGfe8W7s40x1kQ0="
10 ];
11 #allow-import-from-derivation = "true";
12 };
13
14 inputs = {
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;
22
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.
26 android-nixpkgs = {
27 url = "github:tadfisher/android-nixpkgs";
28
29 # ExplanationNote:
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.
33 #
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";
38
39 # ExplanationNote: replace the "nixpkgs" input for the "android-nixpkgs" flake.
40 inputs.nixpkgs.follows = "nixpkgs";
41 };
42 };
43
44 outputs =
45 inputs:
46 let
47 systems = [
48 "x86_64-linux"
49 "x86_64-darwin"
50 "aarch64-linux"
51 "aarch64-darwin"
52 ];
53 lib = inputs.nixpkgs.lib;
54 perSystem =
55 f:
56 lib.genAttrs lib.systems.flakeExposed (
57 system:
58 f rec {
59 inherit system;
60 #pkgs = inputs.nixpkgs.legacyPackages.${system};
61 pkgs = import inputs.nixpkgs {
62 inherit system;
63 config = {
64 android_sdk.accept_license = true;
65 allowUnfreePredicate =
66 pkg:
67 builtins.elem (pkgs.lib.getName pkg) [
68 "android-sdk-build-tools"
69 "android-sdk-cmdline-tools"
70 "android-sdk-ndk"
71 "android-sdk-platform-tools"
72 "android-sdk-platforms"
73 "emulator"
74 "android-sdk-tools"
75 "android-studio-stable"
76 "android-emulate-app"
77 "build-tools"
78 "cmake"
79 "cmdline-tools"
80 "ndk"
81 "platform-tools"
82 "platforms"
83 "tools"
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"
89 ];
90 };
91 overlays = [
92 (import nix/overlays/ghc.nix inputs)
93 ];
94 };
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;
101 };
102 };
103 }
104 );
105 in
106 {
107 # nix -L build .#pkgsCross.ghcjs.haskell.packages.ghcNative.miso-lynx-examples
108 packages = perSystem (
109 args: with args; {
110 default = android.packages.default;
111 android = android.packages.default;
112 android-emulator-x86_64 = android.packages.android-emulator-x86_64;
113
114 /*
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;
120
121 miso-ghcjs-9122-2 = pkgs.pkgsCross.ghcjs.haskell.packages.ghc9122.miso;
122 miso-ghc-9122-2 = pkgs.pkgsCross.ghcjs.haskell.packages.ghcNative.miso;
123
124 android-sdk = inputs.android-nixpkgs.sdk (
125 sdkPkgs: with sdkPkgs; [
126 cmdline-tools-latest
127 build-tools-35-0-0
128 platform-tools
129 platforms-android-36
130 emulator
131 ]
132 );
133 */
134 }
135 );
136
137 devShells = perSystem (
138 args: with args; {
139 default = pkgs.mkShell {
140 buildInputs = android.devShells.default.buildInputs ++ [
141 pkgs.http-server
142 #pkgs.emscripten
143 ];
144 shellHook = ''
145 ${android.devShells.default.shellHook}
146 '';
147 };
148 }
149 );
150 };
151
152 }