{ lib, ... }: { perSystem = { inputs', pkgs, ... }: { packages = let filterVisible = toplevelOption: option: option // { visible = option.visible && builtins.elemAt option.loc 0 == toplevelOption; }; genOptionsDoc = toplevelOption: module: pkgs.nixosOptionsDoc { inherit (lib.evalModules { modules = [ module ]; }) options; transformOptions = filterVisible toplevelOption; }; mkScope = name: options: { inherit name; optionsJSON = "${options.optionsJSON}/share/doc/nixos/options.json"; urlPrefix = "https://github.com/jalil-salame/configuration.nix/blob/main/"; }; search = inputs'.nuschtosSearch.packages.mkMultiSearch { title = "Search Jalil's configuration.nix"; baseHref = "/"; scopes = [ (mkScope "NixOS" nixos) (mkScope "Home-Manager" home) (mkScope "NixVIM" nvim) ]; }; home = genOptionsDoc "jhome" ../modules/hm/options.nix; nvim = genOptionsDoc "jhome" ../modules/nixvim/options.nix; nixos = genOptionsDoc "jconfig" ../modules/nixos/options.nix; nixos-markdown = nixos.optionsCommonMark; home-markdown = home.optionsCommonMark; nvim-markdown = nvim.optionsCommonMark; in { inherit search; docs-home-markdown = home-markdown; docs-nixos-markdown = nixos-markdown; docs-nvim-markdown = nvim-markdown; # Documentation docs = pkgs.stdenvNoCC.mkDerivation { name = "nixos-configuration-book"; src = ../docs; patchPhase = '' cleanup_md() { sed \ -e 's@\[/nix/store/[^\\]*-source/\(.*\)\\.nix\](.*)@[\1\\.nix](https://github.com/jalil-salame/configuration.nix/blob/main/\1.nix)@' \ -e 's/^## /### /' \ "$@" } # copy generated options removing the declared by statement cleanup_md ${home-markdown} >> ./src/home-options.md cleanup_md ${nvim-markdown} >> ./src/nvim-options.md cleanup_md ${nixos-markdown} >> ./src/nixos-options.md # link search site ln -s "${search.override { baseHref = "/configuration.nix/search/"; }}" ./src/search ''; # FIXME: only add the `/configuration.nix/` part for GH CI nativeBuildInputs = [ pkgs.mdbook-toc ]; buildPhase = "${pkgs.mdbook}/bin/mdbook build --dest-dir \"$out\""; }; }; }; }