feat: add files module, text helper, and update readme generation

This commit is contained in:
Mohammad Rafiq 2025-07-03 02:08:54 +08:00
parent a19ede01a2
commit 295f5daba9
No known key found for this signature in database
7 changed files with 79 additions and 25 deletions

View file

@ -1 +1,4 @@
test README
This flake uses the [files flake-parts module](https://flake.parts/options/files.html) to generate documentation.
The list of generated files are:
The option `text.<name> supports either a string or a submodule with attributes order and parts. The parts attribute can either be a string, which will get concatenated in the order laid out in `text.<name>.order`, or can itself have the attributes order and parts, in which case it will be evaluated recursively.

View file

@ -1,21 +1,20 @@
{ config, ... }:
{ config, lib, ... }:
let
inherit (lib) singleton;
in
{
# text.readme = {
#
# };
text.readme.order = [
"generated-files"
"helpers"
];
text.readme.parts.helpers.order = [ "text-helper" ];
perSystem =
{ pkgs, ... }:
{
files.files = [
{
path_ = "README.md";
drv =
pkgs.writeText "README.md" # config.text.readme
''
test README
'';
}
];
files.files = singleton {
path_ = "README.md";
drv = pkgs.writeText "README.md" config.text.readme;
};
};
}

View file

@ -0,0 +1,11 @@
{ inputs, ... }:
{
imports = [ inputs.files.flakeModules.default ];
perSystem = psArgs: {
make-shells.default.packages = [ psArgs.config.files.writer.drv ];
};
text.readme.parts.generated-files = ''
This flake uses the [files flake-parts module](https://flake.parts/options/files.html) to generate documentation.
The list of generated files are:
'';
}

View file

@ -1,4 +1,5 @@
{ inputs, ... }:
{
#TODO: add to readme
imports = [ inputs.make-shell.flakeModules.default ];
}

49
modules/helpers/text.nix Normal file
View file

@ -0,0 +1,49 @@
{ lib, ... }:
let
inherit (lib)
mkOption
mapAttrs
isString
pipe
flip
getAttr
concatStringsSep
;
inherit (lib.types)
lazyAttrsOf
oneOf
submodule
str
listOf
;
textType = oneOf [
str
(submodule {
options = {
order = mkOption { type = listOf str; };
parts = mkOption { type = lazyAttrsOf textType; };
};
})
];
recurseAttrs =
value:
if isString value then
value
else
# TODO: handle order being empty
# TODO: add headings for each part with possible option to disable
pipe value.order [
(map (flip getAttr value.parts))
(map recurseAttrs)
(concatStringsSep "\n")
];
in
{
options.text = mkOption {
default = { };
type = lazyAttrsOf textType;
apply = mapAttrs (_: recurseAttrs);
};
config.text.readme.parts.helpers.parts.text-helper =
"The option `text.<name> supports either a string or a submodule with attributes order and parts. The parts attribute can either be a string, which will get concatenated in the order laid out in `text.<name>.order`, or can itself have the attributes order and parts, in which case it will be evaluated recursively.";
}

View file

@ -1,7 +0,0 @@
{ inputs, ... }:
{
imports = [ inputs.files.flakeModules.default ];
perSystem = psArgs: {
make-shells.default.packages = [ psArgs.config.files.writer.drv ];
};
}

View file

@ -1,5 +1,3 @@
{
systems = [
"x86_64-linux"
];
systems = [ "x86_64-linux" ];
}