1 # SPDX-FileCopyrightText: 2025 Julien Moutinho <julm+literate-invoice@sourcephile.fr>
2 # SPDX-License-Identifier: CC0-1.0
4 description = "Literate Invoice";
6 nixpkgs.url = "github:NixOS/nixpkgs/9cb344e96d5b6918e94e1bca2d9f3ea1e9615545";
7 git-hooks.url = "github:cachix/git-hooks.nix";
8 git-hooks.inputs.nixpkgs.follows = "nixpkgs";
10 url = "github:NorfairKing/really-safe-money";
17 pkg = "literate-invoice";
18 lib = inputs.nixpkgs.lib;
24 ./literate-invoice.cabal
28 (fileFilter (file: lib.any file.hasExt [ "hs" ]) ./src)
29 (fileFilter (file: lib.any file.hasExt [ "css" ]) ./data/styles)
38 #(fileFilter (file: lib.any file.hasExt [ "hs" ]) ./app)
41 # Helper to build for each system in `lib.systems.flakeExposed`.
44 lib.genAttrs lib.systems.flakeExposed (
48 #pkgs = inputs.nixpkgs.legacyPackages.${system};
49 pkgs = import inputs.nixpkgs {
51 config.allowUnfreePredicate =
53 builtins.elem (lib.getName pkg) [
57 (finalPkgs: previousPkgs: {
58 haskellPackages = previousPkgs.haskellPackages.extend (
59 with finalPkgs.haskell.lib;
60 finalHaskellPkgs: previousHaskellPkgs: {
61 ${pkg} = buildFromSdist (finalHaskellPkgs.callCabal2nix pkg fileInputs { });
63 finalHaskellPkgs.callCabal2nix "really-safe-money" "${inputs.really-safe-money}/really-safe-money"
76 packages = forallSystems (
80 default = pkgs.haskellPackages.${pkg};
83 # `nix -L develop` or `direnv allow`
84 devShells = forallSystems (
91 default = pkgs.haskellPackages.shellFor {
92 packages = ps: [ ps.${pkg} ];
94 pkgs.haskellPackages.cabal-fmt
95 pkgs.haskellPackages.cabal-install
96 pkgs.haskellPackages.eventlog2html
97 pkgs.haskellPackages.ghc-gc-tune
98 pkgs.haskellPackages.ghcid
99 pkgs.haskellPackages.haskell-language-server
100 pkgs.haskellPackages.hlint
101 #pkgs.haskellPackages.hs-speedscope
108 ++ inputs.self.checks.${system}.git-hooks-check.enabledPackages;
111 ${inputs.self.checks.${system}.git-hooks-check.shellHook}
117 checks = forallSystems (
119 git-hooks-check = inputs.git-hooks.lib.${system}.run {
122 cabal-fmt.enable = true;
123 fourmolu.enable = true;
125 nixfmt-rfc-style.enable = true;
126 ormolu.settings.cabalDefaultExtensions = true;
127 ormolu.settings.defaultExtensions = [
128 "ImportQualifiedPost"
133 entry = "${pkgs.reuse}/bin/reuse lint";
134 pass_filenames = false;
141 formatter = forallSystems (
145 config = inputs.self.checks.${system}.git-hooks-check.config;
146 inherit (config) package configFile;
148 ${lib.getExe package} run --all-files --config ${configFile}
151 pkgs.writeShellScriptBin "pre-commit-run" script