]> Git — Sourcephile - julm/worksheets.git/blob - flake.nix
update
[julm/worksheets.git] / flake.nix
1 # SPDX-FileCopyrightText: 2025 Julien Moutinho <julm+worksheets@sourcephile.fr>
2 # SPDX-License-Identifier: CC0-1.0
3 {
4 description = "Worksheet";
5 inputs = {
6 nixpkgs.url = "flake:nixpkgs";
7 git-hooks.url = "github:cachix/git-hooks.nix";
8 git-hooks.inputs.nixpkgs.follows = "nixpkgs";
9 };
10 outputs =
11 inputs:
12 let
13 pkg = "worksheets";
14 lib = inputs.nixpkgs.lib;
15 fileInputs = with lib.fileset; toSource {
16 root = ./.;
17 fileset = unions [
18 ./worksheets.cabal
19 #./ChangeLog.md
20 #./Readme.md
21 ./LICENSES
22 (fileFilter (file: lib.any file.hasExt [ "hs" ]) ./src)
23 (fileFilter (file: lib.any file.hasExt [ "css" ]) ./data/styles)
24 (fileFilter (file: lib.any file.hasExt [ "hs" "html" "txt" ]) ./tests)
25 #(fileFilter (file: lib.any file.hasExt [ "hs" ]) ./app)
26 ];
27 };
28 # Helper to build for each system in `lib.systems.flakeExposed`.
29 perSystem =
30 f:
31 lib.genAttrs lib.systems.flakeExposed (
32 system:
33 f rec {
34 inherit system;
35 #pkgs = import inputs.nixpkgs { inherit system; };
36 pkgs = inputs.nixpkgs.legacyPackages.${system};
37 haskellPackages = pkgs.haskellPackages.extend (with pkgs.haskell.lib; finalHaskellPkgs: previousHaskellPkgs: {
38 anki-tools = null;
39 ${pkg} = buildFromSdist (finalHaskellPkgs.callCabal2nix pkg fileInputs { });
40 ipa = doJailbreak (unmarkBroken previousHaskellPkgs.ipa);
41 });
42 }
43 );
44 in
45 {
46 # `nix -L build`
47 packages = perSystem ({ haskellPackages, pkgs, ... }: pkgs // {
48 default = haskellPackages.${pkg};
49 });
50 # `nix -L develop` or `direnv allow`
51 devShells = perSystem ({ pkgs, haskellPackages, system, ... }: {
52 default =
53 haskellPackages.shellFor {
54 packages = ps: [ ps.${pkg} ];
55 nativeBuildInputs = [
56 haskellPackages.cabal-fmt
57 haskellPackages.cabal-install
58 haskellPackages.ghcid
59 haskellPackages.haskell-language-server
60 haskellPackages.hlint
61 #pkgs.git-chglog
62 pkgs.reuse
63 ];
64 withHoogle = false;
65 inherit (inputs.self.checks.${system}.git-hooks-check) shellHook;
66 };
67 });
68 # `nix flake check`
69 checks = perSystem (args: with args; {
70 git-hooks-check = inputs.git-hooks.lib.${system}.run {
71 src = ./.;
72 hooks = {
73 cabal-fmt.enable = true;
74 fourmolu.enable = true;
75 hlint.enable = true;
76 nixpkgs-fmt.enable = true;
77 ormolu.settings.cabalDefaultExtensions = true;
78 ormolu.settings.defaultExtensions = [
79 "ImportQualifiedPost"
80 "TypeApplications"
81 ];
82 reuse = {
83 enable = true;
84 entry = "${pkgs.reuse}/bin/reuse lint";
85 pass_filenames = false;
86 };
87 };
88 };
89 });
90 };
91 }