1 # SPDX-FileCopyrightText: 2025 Julien Moutinho <julm+literate-business@sourcephile.fr>
2 # SPDX-License-Identifier: CC0-1.0
4 description = "Literate Business";
6 allow-import-from-derivation = true;
9 nixpkgs.url = "flake:nixpkgs";
10 git-hooks.url = "github:cachix/git-hooks.nix";
11 git-hooks.inputs.nixpkgs.follows = "nixpkgs";
16 pkg = "literate-business";
17 inherit (inputs.nixpkgs) lib;
23 ./literate-business.cabal
27 (fileFilter (file: lib.any file.hasExt [ "hs" ]) ./src)
28 (fileFilter (file: lib.any file.hasExt [ "css" ]) ./data/styles)
37 #(fileFilter (file: lib.any file.hasExt [ "hs" ]) ./app)
40 # Helper to build for each system in `lib.systems.flakeExposed`.
43 lib.genAttrs lib.systems.flakeExposed (
47 #pkgs = inputs.nixpkgs.legacyPackages.${system};
48 pkgs = import inputs.nixpkgs {
51 (finalPkgs: previousPkgs: {
52 haskellPackages = previousPkgs.haskellPackages.extend (
53 with finalPkgs.haskell.lib;
54 finalHaskellPkgs: previousHaskellPkgs: {
55 ${pkg} = buildFromSdist (finalHaskellPkgs.callCabal2nix pkg fileInputs { });
67 packages = forallSystems (
71 default = pkgs.haskellPackages.${pkg};
74 # `nix -L develop` or `direnv allow`
75 devShells = forallSystems (
82 default = pkgs.haskellPackages.shellFor {
83 packages = ps: [ ps.${pkg} ];
85 pkgs.haskellPackages.cabal-fmt
86 pkgs.haskellPackages.cabal-install
87 pkgs.haskellPackages.eventlog2html
88 pkgs.haskellPackages.ghc-gc-tune
89 pkgs.haskellPackages.ghcid
90 pkgs.haskellPackages.haskell-language-server
91 pkgs.haskellPackages.hlint
92 #pkgs.haskellPackages.hs-speedscope
98 ++ inputs.self.checks.${system}.git-hooks-check.enabledPackages;
101 ${inputs.self.checks.${system}.git-hooks-check.shellHook}
107 checks = forallSystems (
109 git-hooks-check = inputs.git-hooks.lib.${system}.run {
112 cabal-fmt.enable = true;
113 fourmolu.enable = true;
115 nixfmt-rfc-style.enable = true;
116 ormolu.settings.cabalDefaultExtensions = true;
117 ormolu.settings.defaultExtensions = [
118 "ImportQualifiedPost"
123 entry = "${pkgs.reuse}/bin/reuse lint";
124 pass_filenames = false;
131 formatter = forallSystems (
135 config = inputs.self.checks.${system}.git-hooks-check.config;
136 inherit (config) package configFile;
138 ${lib.getExe package} run --all-files --config ${configFile}
141 pkgs.writeShellScriptBin "pre-commit-run" script