{ description = "Description for the project"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; devshell.url = "github:numtide/devshell"; treefmt-nix.url = "github:numtide/treefmt-nix"; haskell-flake.url = "github:srid/haskell-flake"; flake-root.url = "github:srid/flake-root"; }; outputs = inputs@{ flake-parts, ... }: flake-parts.lib.mkFlake { inherit inputs; } { imports = [ # To import a flake module # 1. Add foo to inputs # 2. Add foo as a parameter to the outputs function # 3. Add here: foo.flakeModule inputs.devshell.flakeModule inputs.treefmt-nix.flakeModule inputs.haskell-flake.flakeModule inputs.flake-root.flakeModule ]; systems = [ "x86_64-linux" "aarch64-darwin" ]; perSystem = { config, self', inputs', pkgs, system, ... }: { # Per-system attributes can be defined here. The self' and inputs' # module parameters provide easy access to attributes of the same # system. haskellProjects.default = { devShell = { tools = hp: { fourmolu = hp.fourmolu; hoogle = hp.hoogle; haskell-language-server = hp.haskell-language-server; treefmt = config.treefmt.build.wrapper; } // config.treefmt.build.programs; hlsCheck.enable = false; }; autoWire = [ "packages" "apps" "checks" ]; # Wire all but the devShell }; packages.default = self'.packages.kompact-site; treefmt.config = { inherit (config.flake-root) projectRootFile; package = pkgs.treefmt; flakeFormatter = false; # For https://github.com/numtide/treefmt-nix/issues/55 programs.ormolu.enable = true; programs.nixpkgs-fmt.enable = true; programs.cabal-fmt.enable = true; programs.hlint.enable = true; # We use fourmolu programs.ormolu.package = pkgs.haskellPackages.fourmolu; settings.formatter.ormolu = { options = [ "--ghc-opt" "-XImportQualifiedPost" ]; }; programs.prettier.enable = true; }; # Equivalent to inputs'.nixpkgs.legacyPackages.hello; devShells.default = let menu = pkgs.writeShellScriptBin "menu" '' echo -e "\nCommands available: \n${ builtins.foldl' (x: y: x + " -> " + (pkgs.lib.getName y) + "\n") "" my-packages }" ''; my-packages = [ menu build watch deploy ]; build = pkgs.writeShellScriptBin "build" '' tailwindcss -i ./content/css/main.css -o ./content/css/mini.css --minify cabal run site -- build ''; watch = pkgs.writeShellScriptBin "watch" '' tailwindcss -i ./content/css/main.css -o ./content/css/mini.css --minify cabal run site -- watch ''; deploy = pkgs.writeShellScriptBin "deploy" '' rsync -r --delete ./docs/* genesis:/var/www/kompactio-landing/ ''; in pkgs.mkShell { inputsFrom = [ config.haskellProjects.default.outputs.devShell config.flake-root.devShell ]; packages = with pkgs; [ caddy nil nodePackages_latest.vscode-langservers-extracted nodePackages_latest.tailwindcss nodePackages_latest.typescript-language-server haskellPackages.hakyll zlib ] ++ my-packages; }; }; flake = { # The usual flake attributes can be defined here, including system- # agnostic ones like nixosModule and system-enumerating ones, although # those are more easily expressed in perSystem. }; }; }