move options back out to their config files, improve documentation
This commit is contained in:
30 files changed
+344
-233
No files matched your search
+85
-30
@@ -2,6 +2,15 @@
|
||||
mkDocsDerivation = { pkgs, doBuild ? true }: let
|
||||
inherit (pkgs) lib stdenv mkdocs python314Packages;
|
||||
|
||||
indexMd = let
|
||||
rawText = ''
|
||||
## Welcome!
|
||||
This site is rebuilt with every generation, and holds a complete record of all options declared within this flake.
|
||||
'';
|
||||
in pkgs.runCommand "index.md" {} ''
|
||||
echo "${rawText}" >> $out
|
||||
'';
|
||||
|
||||
mkOptionsDocFromModule = commandName: module: let
|
||||
eval = lib.evalModules {
|
||||
modules = [ module ];
|
||||
@@ -9,49 +18,63 @@
|
||||
};
|
||||
|
||||
optionsDoc = pkgs.nixosOptionsDoc {
|
||||
inherit (eval) options;
|
||||
options = builtins.removeAttrs eval.options ["_module"];
|
||||
};
|
||||
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
|
||||
'';
|
||||
nixos-global-options = mkOptionsDocFromModule "nixos-global-options.md" self.nixosModules.globalOptions;
|
||||
nixos-graphics-options = mkOptionsDocFromModule "nixos-graphics-options.md" self.nixosModules.graphicsOptions;
|
||||
nixos-gaming-options = mkOptionsDocFromModule "nixos-gaming-options.md" self.nixosModules.gamingOptions;
|
||||
|
||||
nixosOptionsMd = mkOptionsDocFromModule "nixos-options.md" self.nixosModules.options;
|
||||
homeOptionsMd = mkOptionsDocFromModule "home-options.md" self.homeModules.options;
|
||||
home-global-options = mkOptionsDocFromModule "home-global-options.md" self.homeModules.globalOptions;
|
||||
home-audio-options = mkOptionsDocFromModule "home-audio-options.md" self.homeModules.audioOptions;
|
||||
home-graphics-options = mkOptionsDocFromModule "home-graphics-options.md" self.homeModules.graphicsOptions;
|
||||
home-gaming-options = mkOptionsDocFromModule "home-gaming-options.md" self.homeModules.gamingOptions;
|
||||
|
||||
mkDocsConfig = ''
|
||||
site_name: flake options
|
||||
nav:
|
||||
- Home: 'index.md'
|
||||
- Options:
|
||||
- NixOS: 'nixos-options.md'
|
||||
- Home Manager: 'home-options.md'
|
||||
- NixOS:
|
||||
- Global: 'nixos-global-options.md'
|
||||
- Capabilities:
|
||||
- Graphics: 'nixos-graphics-options.md'
|
||||
- Gaming: 'nixos-gaming-options.md'
|
||||
- Home Manager:
|
||||
- Global: 'home-global-options.md'
|
||||
- Capabilities:
|
||||
- Audio: 'home-audio-options.md'
|
||||
- Graphics: 'home-graphics-options.md'
|
||||
- Gaming: 'home-gaming-options.md'
|
||||
theme:
|
||||
name: material
|
||||
palette:
|
||||
scheme: slate
|
||||
markdown_extensions:
|
||||
- admonition
|
||||
- pymdownx.details
|
||||
- pymdownx.superfences
|
||||
'';
|
||||
|
||||
mkDocsYml = pkgs.runCommand "mkdocs.yml" {} ''
|
||||
echo "${mkDocsConfig}" >> $out
|
||||
'';
|
||||
in stdenv.mkDerivation {
|
||||
src = self;
|
||||
unpackPhase = "true";
|
||||
name = if doBuild then "docs" else "docs-md";
|
||||
buildInput = [
|
||||
mkDocsYml
|
||||
indexMd
|
||||
nixosOptionsMd
|
||||
homeOptionsMd
|
||||
nixos-global-options
|
||||
nixos-graphics-options
|
||||
nixos-gaming-options
|
||||
home-global-options
|
||||
home-audio-options
|
||||
home-graphics-options
|
||||
home-gaming-options
|
||||
];
|
||||
nativeBuildInputs = [
|
||||
mkdocs
|
||||
@@ -64,8 +87,13 @@
|
||||
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"
|
||||
ln -s ${nixos-global-options} "./docs/nixos-global-options.md"
|
||||
ln -s ${nixos-graphics-options} "./docs/nixos-graphics-options.md"
|
||||
ln -s ${nixos-gaming-options} "./docs/nixos-gaming-options.md"
|
||||
ln -s ${home-global-options} "./docs/home-global-options.md"
|
||||
ln -s ${home-audio-options} "./docs/home-audio-options.md"
|
||||
ln -s ${home-graphics-options} "./docs/home-graphics-options.md"
|
||||
ln -s ${home-gaming-options} "./docs/home-gaming-options.md"
|
||||
# generate the site
|
||||
${if doBuild then "mkdocs build" else ""}
|
||||
'';
|
||||
@@ -75,24 +103,51 @@
|
||||
cp -r . $out
|
||||
'';
|
||||
};
|
||||
|
||||
containerAttrs = { pkgs, port }: {
|
||||
image = "docker.io/library/nginx:latest";
|
||||
volumes = [
|
||||
"${mkDocsDerivation { inherit pkgs; }}:/usr/share/nginx/html"
|
||||
];
|
||||
ports = [
|
||||
"${port}:80"
|
||||
];
|
||||
};
|
||||
in {
|
||||
imports = [ (inputs.helpers.mkMirroredModulesFlakeModule "graphicsOptions" ({ lib, ... }: {
|
||||
options.features.documentation = let
|
||||
defaultPort = "8080";
|
||||
in {
|
||||
enable = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
description = "This option enables documentation for the flake, which is generated with Material for mkDocs and hosted by nginx at localhost:${defaultPort} by default.";
|
||||
default = true;
|
||||
};
|
||||
|
||||
port = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
description = "This option sets the port used by the nginx server hosting the local documentation site.";
|
||||
default = defaultPort;
|
||||
};
|
||||
};
|
||||
})) ];
|
||||
|
||||
perSystem = { pkgs, ... }: {
|
||||
packages.docs = mkDocsDerivation { inherit pkgs; };
|
||||
packages.docs-md = mkDocsDerivation { inherit pkgs; doBuild = false; };
|
||||
};
|
||||
|
||||
flake.homeModules.graphics = { pkgs, ... }: {
|
||||
services.podman = {
|
||||
flake.nixosModules.graphics = { pkgs, config, lib, ... }: {
|
||||
virtualisation.oci-containers = lib.mkIf (config.features.documentation.enable && !config.features.nixos.home-manager.enable) {
|
||||
backend = "docker";
|
||||
containers.flake-docs-nginx = containerAttrs { inherit (config.features.documentation) port; inherit pkgs; };
|
||||
};
|
||||
};
|
||||
|
||||
flake.homeModules.graphics = { pkgs, config, lib, ... }: {
|
||||
services.podman = lib.mkIf (config.features.documentation.enable) {
|
||||
enable = true;
|
||||
containers.flake-docs-nginx = {
|
||||
image = "docker.io/library/nginx:latest";
|
||||
volumes = [
|
||||
"${mkDocsDerivation { inherit pkgs; }}:/usr/share/nginx/html"
|
||||
];
|
||||
ports = [
|
||||
"8080:80"
|
||||
];
|
||||
};
|
||||
containers.flake-docs-nginx = containerAttrs { inherit (config.features.documentation) port; inherit pkgs; };
|
||||
};
|
||||
};
|
||||
}
|
||||
Reference in new issue
Block a user