{ 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; programs.alejandra.enable = true; # We use fourmolu programs.ormolu.package = pkgs.haskellPackages.fourmolu; settings.formatter.ormolu = { options = [ "--ghc-opt" "-XImportQualifiedPost" ]; }; programs.prettier = { enable = true; settings = { printWidth = 80; proseWrap = "always"; }; }; }; # 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 tailwind deploy ]; tailwind = pkgs.writeShellScriptBin "tailwind" '' tailwindcss -i ./content/css/main.css -o ./assets/css/mini.css --minify ''; build = pkgs.writeShellScriptBin "build" '' ${tailwind}/bin/tailwind cabal run site -- build ''; watch = pkgs.writeShellScriptBin "watch" '' ${tailwind}/bin/tailwind 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. }; }; }