1 # SPDX-FileCopyrightText: 2025 Julien Moutinho <julm+worksheets@sourcephile.fr>
2 # SPDX-License-Identifier: CC0-1.0
4 description = "Worksheet";
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 = "git://git.sourcephile.fr/haskell/symantic-base.git";
14 url = "git+file:///home/julm/work/sourcephile/haskell/worksheets/libs/ipa-hs";
22 lib = inputs.nixpkgs.lib;
32 (fileFilter (file: lib.any file.hasExt [ "hs" ]) ./src)
33 (fileFilter (file: lib.any file.hasExt [ "css" ]) ./data/styles)
42 #(fileFilter (file: lib.any file.hasExt [ "hs" ]) ./app)
45 # Helper to build for each system in `lib.systems.flakeExposed`.
48 lib.genAttrs lib.systems.flakeExposed (
52 #pkgs = import inputs.nixpkgs { inherit system; };
53 pkgs = inputs.nixpkgs.legacyPackages.${system};
54 haskellPackages = pkgs.haskellPackages.extend (
55 with pkgs.haskell.lib;
56 finalHaskellPkgs: previousHaskellPkgs: {
57 ${pkg} = buildFromSdist (finalHaskellPkgs.callCabal2nix pkg fileInputs { });
59 symantic-base = finalHaskellPkgs.callCabal2nix "symantic-base" inputs.symantic-base { };
60 #ipa = doJailbreak (unmarkBroken previousHaskellPkgs.ipa);
61 ipa = doJailbreak (finalHaskellPkgs.callCabal2nix "ipa-hs" inputs.ipa-hs { });
62 python-pickle = dontCheck (doJailbreak (unmarkBroken previousHaskellPkgs.python-pickle));
63 hs-speedscope = doJailbreak (unmarkBroken previousHaskellPkgs.hs-speedscope);
71 packages = perSystem (
72 { haskellPackages, pkgs, ... }:
75 default = haskellPackages.${pkg};
78 # `nix -L develop` or `direnv allow`
79 devShells = perSystem (
87 default = haskellPackages.shellFor {
88 packages = ps: [ ps.${pkg} ];
90 haskellPackages.cabal-fmt
91 haskellPackages.cabal-install
92 haskellPackages.eventlog2html
93 haskellPackages.ghc-gc-tune
95 haskellPackages.haskell-language-server
97 #haskellPackages.hs-speedscope
104 ++ inputs.self.checks.${system}.git-hooks-check.enabledPackages;
107 ${inputs.self.checks.${system}.git-hooks-check.shellHook}
115 git-hooks-check = inputs.git-hooks.lib.${system}.run {
118 cabal-fmt.enable = true;
119 fourmolu.enable = true;
121 nixfmt-rfc-style.enable = true;
122 ormolu.settings.cabalDefaultExtensions = true;
123 ormolu.settings.defaultExtensions = [
124 "ImportQualifiedPost"
129 entry = "${pkgs.reuse}/bin/reuse lint";
130 pass_filenames = false;
137 formatter = perSystem (
141 config = inputs.self.checks.${system}.git-hooks-check.config;
142 inherit (config) package configFile;
144 ${lib.getExe package} run --all-files --config ${configFile}
147 pkgs.writeShellScriptBin "pre-commit-run" script