1 # SPDX-FileCopyrightText: 2025 Julien Moutinho <julm+literate-invoice@sourcephile.fr>
2 # SPDX-License-Identifier: CC0-1.0
4 description = "Literate Invoice";
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";
12 # really-safe-money = {
13 # url = "github:NorfairKing/really-safe-money";
20 pkg = "literate-invoice";
21 lib = inputs.nixpkgs.lib;
27 ./literate-invoice.cabal
31 (fileFilter (file: lib.any file.hasExt [ "hs" ]) ./src)
32 (fileFilter (file: lib.any file.hasExt [ "css" ]) ./data/styles)
41 #(fileFilter (file: lib.any file.hasExt [ "hs" ]) ./app)
44 # Helper to build for each system in `lib.systems.flakeExposed`.
47 lib.genAttrs lib.systems.flakeExposed (
51 #pkgs = inputs.nixpkgs.legacyPackages.${system};
52 pkgs = import inputs.nixpkgs {
54 config.allowUnfreePredicate =
56 builtins.elem (lib.getName pkg) [
60 (finalPkgs: previousPkgs: {
61 haskellPackages = previousPkgs.haskellPackages.extend (
62 with finalPkgs.haskell.lib;
63 finalHaskellPkgs: previousHaskellPkgs: {
64 ${pkg} = buildFromSdist (finalHaskellPkgs.callCabal2nix pkg fileInputs { });
66 # finalHaskellPkgs.callCabal2nix "really-safe-money" "${inputs.really-safe-money}/really-safe-money"
79 packages = forallSystems (
83 default = pkgs.haskellPackages.${pkg};
86 # `nix -L develop` or `direnv allow`
87 devShells = forallSystems (
94 default = pkgs.haskellPackages.shellFor {
95 packages = ps: [ ps.${pkg} ];
97 pkgs.haskellPackages.cabal-fmt
98 pkgs.haskellPackages.cabal-install
99 pkgs.haskellPackages.eventlog2html
100 pkgs.haskellPackages.ghc-gc-tune
101 pkgs.haskellPackages.ghcid
102 pkgs.haskellPackages.haskell-language-server
103 pkgs.haskellPackages.hlint
104 #pkgs.haskellPackages.hs-speedscope
111 ++ inputs.self.checks.${system}.git-hooks-check.enabledPackages;
114 ${inputs.self.checks.${system}.git-hooks-check.shellHook}
120 checks = forallSystems (
122 git-hooks-check = inputs.git-hooks.lib.${system}.run {
125 cabal-fmt.enable = true;
126 fourmolu.enable = true;
128 nixfmt-rfc-style.enable = true;
129 ormolu.settings.cabalDefaultExtensions = true;
130 ormolu.settings.defaultExtensions = [
131 "ImportQualifiedPost"
136 entry = "${pkgs.reuse}/bin/reuse lint";
137 pass_filenames = false;
144 formatter = forallSystems (
148 config = inputs.self.checks.${system}.git-hooks-check.config;
149 inherit (config) package configFile;
151 ${lib.getExe package} run --all-files --config ${configFile}
154 pkgs.writeShellScriptBin "pre-commit-run" script