]> 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 = "github:NixOS/nixpkgs/9cb344e96d5b6918e94e1bca2d9f3ea1e9615545";
7 git-hooks.url = "github:cachix/git-hooks.nix";
8 git-hooks.inputs.nixpkgs.follows = "nixpkgs";
9 symantic-base = { url = "git://git.sourcephile.fr/haskell/symantic-base.git"; flake = false; };
10 ipa-hs = { url = "git+file:///home/julm/work/sourcephile/haskell/worksheets/libs/ipa-hs"; flake = false; };
11 };
12 outputs =
13 inputs:
14 let
15 pkg = "worksheets";
16 lib = inputs.nixpkgs.lib;
17 fileInputs = with lib.fileset; toSource {
18 root = ./.;
19 fileset = unions [
20 ./worksheets.cabal
21 #./ChangeLog.md
22 #./Readme.md
23 ./LICENSES
24 (fileFilter (file: lib.any file.hasExt [ "hs" ]) ./src)
25 (fileFilter (file: lib.any file.hasExt [ "css" ]) ./data/styles)
26 (fileFilter (file: lib.any file.hasExt [ "hs" "html" "txt" ]) ./tests)
27 #(fileFilter (file: lib.any file.hasExt [ "hs" ]) ./app)
28 ];
29 };
30 # Helper to build for each system in `lib.systems.flakeExposed`.
31 perSystem =
32 f:
33 lib.genAttrs lib.systems.flakeExposed (
34 system:
35 f rec {
36 inherit system;
37 #pkgs = import inputs.nixpkgs { inherit system; };
38 pkgs = inputs.nixpkgs.legacyPackages.${system};
39 haskellPackages = pkgs.haskellPackages.extend (with pkgs.haskell.lib; finalHaskellPkgs: previousHaskellPkgs: {
40 ${pkg} = buildFromSdist (finalHaskellPkgs.callCabal2nix pkg fileInputs { });
41 anki-tools = null;
42 symantic-base = finalHaskellPkgs.callCabal2nix "symantic-base" inputs.symantic-base { };
43 #ipa = doJailbreak (unmarkBroken previousHaskellPkgs.ipa);
44 ipa = doJailbreak (finalHaskellPkgs.callCabal2nix "ipa-hs" inputs.ipa-hs { });
45 python-pickle = dontCheck (doJailbreak (unmarkBroken previousHaskellPkgs.python-pickle));
46 hs-speedscope = doJailbreak (unmarkBroken previousHaskellPkgs.hs-speedscope);
47 });
48 }
49 );
50 in
51 {
52 # `nix -L build`
53 packages = perSystem ({ haskellPackages, pkgs, ... }: pkgs // {
54 default = haskellPackages.${pkg};
55 });
56 # `nix -L develop` or `direnv allow`
57 devShells = perSystem ({ pkgs, haskellPackages, system, ... }: {
58 default =
59 haskellPackages.shellFor {
60 packages = ps: [ ps.${pkg} ];
61 nativeBuildInputs = [
62 haskellPackages.cabal-fmt
63 haskellPackages.cabal-install
64 haskellPackages.eventlog2html
65 haskellPackages.ghc-gc-tune
66 haskellPackages.ghcid
67 haskellPackages.haskell-language-server
68 haskellPackages.hlint
69 #haskellPackages.hs-speedscope
70 #pkgs.git-chglog
71 pkgs.reuse
72 pkgs.xdot
73 pkgs.gnuplot
74 ];
75 withHoogle = false;
76 inherit (inputs.self.checks.${system}.git-hooks-check) shellHook;
77 };
78 });
79 # `nix flake check`
80 checks = perSystem (args: with args; {
81 git-hooks-check = inputs.git-hooks.lib.${system}.run {
82 src = ./.;
83 hooks = {
84 cabal-fmt.enable = true;
85 fourmolu.enable = true;
86 hlint.enable = true;
87 nixpkgs-fmt.enable = true;
88 ormolu.settings.cabalDefaultExtensions = true;
89 ormolu.settings.defaultExtensions = [
90 "ImportQualifiedPost"
91 "TypeApplications"
92 ];
93 reuse = {
94 enable = true;
95 entry = "${pkgs.reuse}/bin/reuse lint";
96 pass_filenames = false;
97 };
98 };
99 };
100 });
101 };
102 }