98 lines
2.6 KiB
Nix
98 lines
2.6 KiB
Nix
{ inputs, self, ... }: let
|
|
mkDocsDerivation = { pkgs, doBuild ? true }: let
|
|
inherit (pkgs) lib stdenv mkdocs python314Packages;
|
|
|
|
mkOptionsDocFromModule = commandName: module: let
|
|
eval = lib.evalModules {
|
|
modules = [ module ];
|
|
args = { inherit pkgs; };
|
|
};
|
|
|
|
optionsDoc = pkgs.nixosOptionsDoc {
|
|
inherit (eval) options;
|
|
};
|
|
in pkgs.runCommand commandName {} ''
|
|
cat ${optionsDoc.optionsCommonMark} >> $out
|
|
'';
|
|
|
|
indexMd = let
|
|
rawText = ''
|
|
## Welcome!
|
|
This site is rebuilt with every generation, and holds a complete record of all options declared within this flake.
|
|
Visit [NixOS](nixos-options.md) or [Home Manager](home-options.md) to see the available options.
|
|
'';
|
|
in pkgs.runCommand "index.md" {} ''
|
|
echo "${rawText}" >> $out
|
|
'';
|
|
|
|
nixosOptionsMd = mkOptionsDocFromModule "nixos-options.md" self.nixosModules.options;
|
|
homeOptionsMd = mkOptionsDocFromModule "home-options.md" self.homeModules.options;
|
|
|
|
mkDocsConfig = ''
|
|
site_name: flake options
|
|
nav:
|
|
- Home: 'index.md'
|
|
- Options:
|
|
- NixOS: 'nixos-options.md'
|
|
- Home Manager: 'home-options.md'
|
|
theme:
|
|
name: material
|
|
palette:
|
|
scheme: slate
|
|
'';
|
|
|
|
mkDocsYml = pkgs.runCommand "mkdocs.yml" {} ''
|
|
echo "${mkDocsConfig}" >> $out
|
|
'';
|
|
in stdenv.mkDerivation {
|
|
src = self;
|
|
name = if doBuild then "docs" else "docs-md";
|
|
buildInput = [
|
|
mkDocsYml
|
|
indexMd
|
|
nixosOptionsMd
|
|
homeOptionsMd
|
|
];
|
|
nativeBuildInputs = [
|
|
mkdocs
|
|
python314Packages.mkdocs-material
|
|
python314Packages.pygments
|
|
];
|
|
buildPhase = ''
|
|
mkdir docs-build
|
|
cd docs-build
|
|
ln -s ${mkDocsYml} "./mkdocs.yml"
|
|
mkdir docs
|
|
ln -s ${indexMd} "./docs/index.md"
|
|
ln -s ${nixosOptionsMd} "./docs/nixos-options.md"
|
|
ln -s ${homeOptionsMd} "./docs/home-options.md"
|
|
# generate the site
|
|
${if doBuild then "mkdocs build" else ""}
|
|
'';
|
|
installPhase = if doBuild then ''
|
|
mv site $out
|
|
'' else ''
|
|
cp -r . $out
|
|
'';
|
|
};
|
|
in {
|
|
perSystem = { pkgs, ... }: {
|
|
packages.docs = mkDocsDerivation { inherit pkgs; };
|
|
packages.docs-md = mkDocsDerivation { inherit pkgs; doBuild = false; };
|
|
};
|
|
|
|
flake.homeModules.graphics = { pkgs, ... }: {
|
|
services.podman = {
|
|
enable = true;
|
|
containers.flake-docs-nginx = {
|
|
image = "docker.io/library/nginx:latest";
|
|
volumes = [
|
|
"${mkDocsDerivation { inherit pkgs; }}:/usr/share/nginx/html"
|
|
];
|
|
ports = [
|
|
"8080:80"
|
|
];
|
|
};
|
|
};
|
|
};
|
|
} |