Add haskellFlakeProjectModules option (#79)

This commit is contained in:
Sridhar Ratnakumar 2023-02-11 14:49:40 -05:00 committed by GitHub
parent 4585d422cd
commit 5d1f6d9a76
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 31 additions and 22 deletions

View File

@ -11,6 +11,7 @@
- #64: Remove hlintCheck (use [treefmt-nix](https://github.com/numtide/treefmt-nix#flake-parts) instead)
- #52: Expose the final package set as `finalPackages`. Rename `haskellPackages`, accordingly, to `basePackages`. Overlays are applied on top of `basePackage` -- using `source-overrides`, `overrides`, `packages` in that order -- to produce `finalPackages`.
- #68: You can now use `imports` inside of `haskellProjects.<name>` to modularize your Haskell project configuration.
- #79: `flake.haskellFlakeProjectModules.<name>` option can be used to set and expose your Haskell project modules to other flakes.
- #67: `overrides` will be combined using `composeManyExtensions`, however their order is arbitrary. This is an experimental feature, and a warning will be logged.
## 0.1.0

View File

@ -239,9 +239,20 @@ in
};
in
{
options.haskellProjects = mkOption {
description = "Haskell projects";
type = types.attrsOf projectSubmodule;
options = {
haskellProjects = mkOption {
description = "Haskell projects";
type = types.attrsOf projectSubmodule;
};
haskellFlakeProjectModules = mkOption {
type = types.lazyAttrsOf types.deferredModule;
default = { };
description = ''
An attrset of `haskellProjects.<name>` modules that can be imported in
other flakes.
'';
};
};
config =

View File

@ -22,29 +22,26 @@
inputs.haskell-flake.flakeModule
inputs.check-flake.flakeModule
];
flake.haskellFlakeProjectModules.default = { pkgs, ... }: {
overrides = self: super: {
# This is purposefully incorrect (pointing to ./.) because we
# expect it to be overriden in perSystem below.
foo = self.callCabal2nix "foo" ./. { };
};
devShell = {
tools = hp: {
# Setting to null should remove this tool from defaults.
ghcid = null;
};
hlsCheck.enable = true;
};
};
perSystem = { self', pkgs, ... }: {
haskellProjects.default = {
# Multiple modules should be merged correctly.
imports =
let
defaults = {
overrides = self: super: {
# This is purposefully incorrect (pointing to ./.) because we
# expect it to be overriden below.
foo = self.callCabal2nix "foo" ./. { };
};
devShell = {
tools = hp: {
# Setting to null should remove this tool from defaults.
ghcid = null;
};
hlsCheck.enable = true;
};
};
in
[ defaults ];
imports = [ self.haskellFlakeProjectModules.default ];
overrides = self: super: {
# This overrides the overlay above (in `defaults`), because the
# This overrides the overlay above (in `flake.*`), because the
# module system merges them in such order. cf. the WARNING in option
# docs.
foo = self.callCabal2nix "foo" (inputs.haskell-multi-nix + /foo) { };