2 description = "Demo Haskell app using Miso";
3 # UsageNote: to run the app inside an Android emulator:
4 # nix -L run .#android-emulator-x86_64
8 # ResourceWarning: this flake is not cached
9 "https://haskell-miso-cachix.cachix.org"
11 extra-trusted-public-keys = [
12 "haskell-miso-cachix.cachix.org-1:m8hN1cvFMJtYib4tj+06xkKt5ABMSGfe8W7s40x1kQ0="
14 #allow-import-from-derivation = "true";
18 ghcjs-base.flake = false;
19 ghcjs-base.url = "github:ghcjs/ghcjs-base";
20 git-hooks.inputs.nixpkgs.follows = "nixpkgs";
21 git-hooks.url = "github:cachix/git-hooks.nix";
22 miso-lynx.flake = false;
23 miso-lynx.url = "github:dmjio/miso-lynx";
24 miso.inputs.nixpkgs.follows = "nixpkgs";
25 miso.url = "github:dmjio/miso";
26 nixpkgs.url = "flake:nixpkgs";
38 lib = inputs.nixpkgs.lib;
41 lib.genAttrs lib.systems.flakeExposed (
45 pkgs = import inputs.nixpkgs {
48 android_sdk.accept_license = true;
49 allowUnfreePredicate = android.allowUnfreePredicate;
56 haskell = pkgs.callPackage haskell/default.nix {
58 miso-lynx = inputs.miso-lynx;
60 ghcPackages = pkgs.haskell.packages.${ghc}.extend (
61 with pkgs.haskell.lib;
62 finalHaskellPkgs: previousHaskellPkgs: {
63 ${pkg} = buildFromSdist (finalHaskellPkgs.callCabal2nix pkg haskell.src { });
64 miso = finalHaskellPkgs.callCabal2nix "miso" inputs.miso { };
65 miso-lynx = finalHaskellPkgs.callCabal2nix "miso-lynx" inputs.miso-lynx { };
68 android = pkgs.callPackage android/default.nix {
69 inherit inputs system;
70 inherit (haskell) mainLynxBundle;
77 packages = perSystem (
79 default = android.packages.default;
80 android = android.packages.default;
81 android-emulator-x86_64 = android.packages.android-emulator-x86_64;
86 devShells = perSystem (
88 default = ghcPackages.shellFor {
89 packages = haskellPackages: [ haskellPackages.${pkg} ];
90 nativeBuildInputs = android.devShells.default.nativeBuildInputs ++ [
91 # CompatibilityNote: pull haskell-language-server from ghcPackages
92 # to ensure its compatibility with the selected GHC.
93 ghcPackages.haskell-language-server
96 pkgs.haskellPackages.cabal-install
97 pkgs.haskellPackages.ghcid
98 pkgs.haskellPackages.hlint
104 ${android.devShells.default.shellHook}
105 ${checks.${system}.git-hooks-check}
114 git-hooks-check = inputs.git-hooks.lib.${system}.run {
117 cabal-fmt.enable = true;
118 fourmolu.enable = true;
120 nixfmt-rfc-style.enable = true;
121 ormolu.settings.cabalDefaultExtensions = true;
124 entry = "${pkgs.reuse}/bin/reuse lint";
125 pass_filenames = false;