/ flake.nix
flake.nix
1 { 2 inputs = { 3 flake-utils.url = "github:numtide/flake-utils"; 4 nixpkgs.url = "github:NixOS/nixpkgs"; 5 }; 6 7 outputs = { 8 self, 9 nixpkgs, 10 flake-utils, 11 }: 12 flake-utils.lib.eachDefaultSystem ( 13 system: let 14 pkgs = nixpkgs.legacyPackages.${system}; 15 16 haskellPackages = pkgs.haskell.packages.ghc963.extend (hfinal: hprev: { 17 ormolu = 18 if pkgs.stdenv.isDarwin 19 then 20 pkgs.haskell.lib.overrideCabal hprev.ormolu (_: { 21 enableSeparateBinOutput = false; 22 }) 23 else hprev.ormolu; 24 }); 25 26 ignoreFiles = pkgs.nix-gitignore.gitignoreSourcePure ["hie.yaml" "*.nix" ./.gitignore]; 27 in { 28 packages = { 29 default = self.packages.${system}.backend; 30 31 backend = pkgs.haskell.lib.justStaticExecutables ( 32 haskellPackages.callCabal2nix "breakdown" 33 (ignoreFiles (self + /backend)) 34 {} 35 ); 36 37 frontend-deps = pkgs.mkYarnPackage { 38 src = ignoreFiles (self + /frontend); 39 40 buildPhase = '' 41 yarn --offline build 42 ''; 43 }; 44 45 frontend = pkgs.stdenvNoCC.mkDerivation { 46 pname = "breakdown-frontend"; 47 inherit (self.packages.${system}.frontend-deps) version; 48 49 src = "${self.packages.${system}.frontend-deps}/libexec/breakdown/deps/breakdown"; 50 51 installPhase = '' 52 mkdir -p $out 53 cp $src/static/index.html $src/dist/bundle.* $out 54 ''; 55 }; 56 }; 57 58 apps = {}; 59 60 devShell = pkgs.mkShell { 61 name = "breakdown"; 62 63 packages = [ 64 (haskellPackages.ghcWithPackages ( 65 _: let 66 breakdown = self.packages.${system}.backend; 67 in 68 breakdown.propagatedBuildInputs ++ breakdown.buildInputs 69 )) 70 haskellPackages.cabal-install 71 haskellPackages.haskell-language-server 72 haskellPackages.hlint 73 haskellPackages.fourmolu 74 pkgs.yarn 75 pkgs.nodePackages.typescript-language-server 76 ]; 77 }; 78 } 79 ); 80 }