Skip to main content

NixOS: Generating Module Documentation

NixOS - This article is part of a series.
Part 12: This Article

Generating Markdown documentation for NixOS modules
#

Using the nixosOptionsDoc package we can generate markdown documentation for both nixos and home-manager modules:

  perSystem =
    {
      self',
      system,
      pkgs,
      ...
    }:
    {
      packages = {
        nixos-options-doc =
          let
            eval = inputs.nixpkgs.lib.evalModules {
              modules = [
                { _module.check = false; }
                inputs.self.modules.nixos.core
                inputs.self.modules.nixos.desktop
                inputs.self.modules.nixos.server
              ];
            };
            cleanEval = inputs.nixpkgs.lib.filterAttrsRecursive (n: v: n != "_module") eval;
            optionsDoc = pkgs.nixosOptionsDoc { inherit (cleanEval) options; };
          in
          pkgs.runCommand "OPTIONS.md" { } ''
            cp ${optionsDoc.optionsCommonMark} $out
          '';

        home-manager-options-doc =
          let
            eval = inputs.nixpkgs.lib.evalModules {
              modules = [
                { _module.check = false; }
                inputs.self.modules.homeManager.secrets
                inputs.self.modules.homeManager.theme
                inputs.self.modules.homeManager.backup
                inputs.self.modules.homeManager.cosmic-manager
                inputs.self.modules.homeManager.development
                inputs.self.modules.homeManager.editing
                inputs.self.modules.homeManager.gaming
                inputs.self.modules.homeManager.plasma-manager
                inputs.self.modules.homeManager.utilities
                inputs.self.modules.homeManager.web
              ];
            };
            cleanEval = inputs.nixpkgs.lib.filterAttrsRecursive (n: v: n != "_module") eval;
            optionsDoc = pkgs.nixosOptionsDoc { inherit (cleanEval) options; };
          in
          pkgs.runCommand "OPTIONS.md" { } ''
            cp ${optionsDoc.optionsCommonMark} $out
          '';
      };
    };

NixOS - This article is part of a series.
Part 12: This Article