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";
 
   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; };
 
  16       lib = inputs.nixpkgs.lib;
 
  17       fileInputs = with lib.fileset; toSource {
 
  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)
 
  30       # Helper to build for each system in `lib.systems.flakeExposed`.
 
  33         lib.genAttrs lib.systems.flakeExposed (
 
  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 { });
 
  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);
 
  53       packages = perSystem ({ haskellPackages, pkgs, ... }: pkgs // {
 
  54         default = haskellPackages.${pkg};
 
  56       # `nix -L develop`  or  `direnv allow`
 
  57       devShells = perSystem ({ pkgs, haskellPackages, system, ... }: {
 
  59           haskellPackages.shellFor {
 
  60             packages = ps: [ ps.${pkg} ];
 
  62               haskellPackages.cabal-fmt
 
  63               haskellPackages.cabal-install
 
  64               haskellPackages.eventlog2html
 
  65               haskellPackages.ghc-gc-tune
 
  67               haskellPackages.haskell-language-server
 
  69               #haskellPackages.hs-speedscope
 
  76             inherit (inputs.self.checks.${system}.git-hooks-check) shellHook;
 
  80       checks = perSystem (args: with args; {
 
  81         git-hooks-check = inputs.git-hooks.lib.${system}.run {
 
  84             cabal-fmt.enable = true;
 
  85             fourmolu.enable = true;
 
  87             nixpkgs-fmt.enable = true;
 
  88             ormolu.settings.cabalDefaultExtensions = true;
 
  89             ormolu.settings.defaultExtensions = [
 
  95               entry = "${pkgs.reuse}/bin/reuse lint";
 
  96               pass_filenames = false;