{ description = "Unicode toy"; inputs.nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; outputs = { self, nixpkgs }: let overlay = import ./nix/overlay.nix; settings = import ./nix/settings.nix; haskellDeps = import ./nix/haskell-deps.nix; pkgs = nixpkgs.legacyPackages.x86_64-linux.extend overlay; haskellPackages = pkgs.haskell.packages."${settings.ghc}"; ghc = haskellPackages.ghcWithPackages haskellDeps; # Wrap stack to disable its slow Nix integration. # Instead, make it use the GHC defined above. stack = pkgs.stdenv.mkDerivation { name = "stack"; # The build is simply a call to makeWrapper, so we don't have to # do any of the typical build steps. phases = [ "installPhase" ]; nativeBuildInputs = [ pkgs.makeWrapper ]; # makeBinaryWrapper creates a stack executable for us that uses # the GHC defined in this file. installPhase = '' makeWrapper ${pkgs.stack}/bin/stack $out/bin/stack \ --prefix PATH : ${ghc}/bin \ --add-flags '--no-nix --system-ghc --no-install-ghc' ''; }; utoy = pkgs.haskell.lib.justStaticExecutables (haskellPackages.callPackage ({ mkDerivation }: mkDerivation { # Keep this in sync with package.yaml version = "0.6"; pname = "utoy"; license = pkgs.lib.licenses.mit; src = # We only need these files for building: let whitelist = [ ./LICENSE ./utoy.cabal ./Setup.hs ./app ./src ./static ./test ]; in pkgs.lib.sources.cleanSourceWith { src = ./.; filter = path: _type: pkgs.lib.any (prefix: pkgs.lib.hasPrefix (toString prefix) path) whitelist; }; libraryHaskellDepends = haskellDeps haskellPackages; }) {}); in { packages.x86_64-linux = { inherit ghc; inherit stack; docker = pkgs.dockerTools.buildImage { name = "git.pbrinkmeier.de/paul/utoy"; tag = utoy.version; config.Cmd = [ "${utoy}/bin/utoy" ]; }; default = utoy; }; devShells.x86_64-linux.default = pkgs.mkShell { packages = [ stack ghc haskellPackages.haskell-language-server haskellPackages.implicit-hie ]; shellHook = '' PS1+="(utoy) "; ''; }; }; }