From dc923dbac263ffad20e7baa138561726891d87c8 Mon Sep 17 00:00:00 2001 From: Daiderd Jordan Date: Sat, 4 May 2019 14:43:11 +0200 Subject: [PATCH 1/7] ofborg: fix option descriptions --- modules/services/ofborg/default.nix | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/services/ofborg/default.nix b/modules/services/ofborg/default.nix index eedb625d..d71992e0 100644 --- a/modules/services/ofborg/default.nix +++ b/modules/services/ofborg/default.nix @@ -21,7 +21,7 @@ in description = '' This option specifies the ofborg package to use. eg. - (import {}).ofborg.rs + (import <ofborg> {}).ofborg.rs $ nix-channel --add https://github.com/NixOS/ofborg/archive/released.tar.gz ofborg $ nix-channel --update @@ -30,7 +30,6 @@ in services.ofborg.configFile = mkOption { type = types.path; - default = "${user.home}/config.json"; description = '' Configuration file to use for ofborg. @@ -57,6 +56,8 @@ in "services.ofborg.configFile is a derivation, credentials will be world readable" ]; + services.ofborg.configFile = mkDefault "${user.home}/config.json"; + launchd.daemons.ofborg = { script = '' git config --global user.email "ofborg@example.com" From 66495818a3797616d14f2c54845bf5265cf4a5e7 Mon Sep 17 00:00:00 2001 From: Daiderd Jordan Date: Sat, 4 May 2019 14:46:24 +0200 Subject: [PATCH 2/7] sandbox: add missing option descriptions --- modules/security/sandbox/default.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/security/sandbox/default.nix b/modules/security/sandbox/default.nix index bd8050f9..6f477205 100644 --- a/modules/security/sandbox/default.nix +++ b/modules/security/sandbox/default.nix @@ -11,6 +11,7 @@ let options = { profile = mkOption { type = types.lines; + internal = true; apply = text: pkgs.runCommandNoCC "sandbox.sb" {} '' for f in $(< ${config.closure}/store-paths); do storePaths+="(subpath \"$f\")" @@ -44,6 +45,7 @@ let allowSystemPaths = mkOption { type = types.bool; default = false; + description = "Whether to allow read access to FHS paths like /etc and /var."; }; allowLocalNetworking = mkOption { From 631fd857aa2bbceaa5376f84a837db5e4cf0990d Mon Sep 17 00:00:00 2001 From: Daiderd Jordan Date: Sat, 4 May 2019 14:50:22 +0200 Subject: [PATCH 3/7] modules: add modules-list.nix and baseModules argument --- default.nix | 68 +++-------------------------------------- modules/module-list.nix | 62 +++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 64 deletions(-) create mode 100644 modules/module-list.nix diff --git a/default.nix b/default.nix index b7c564f8..3d99b143 100644 --- a/default.nix +++ b/default.nix @@ -3,6 +3,8 @@ }: let + baseModules = import ./modules/module-list.nix; + modules = [ configuration packages ] ++ baseModules; packages = { config, lib, pkgs, ... }: { _file = ./default.nix; @@ -13,73 +15,11 @@ let }; eval = pkgs.lib.evalModules { + inherit modules; + args = { inherit baseModules modules; }; specialArgs = { modulesPath = ./modules; }; check = true; - modules = - [ configuration - packages - ./modules/alias.nix - ./modules/security/pki - ./modules/security/sandbox - ./modules/system - ./modules/system/checks.nix - ./modules/system/activation-scripts.nix - ./modules/system/applications.nix - ./modules/system/defaults-write.nix - ./modules/system/defaults/LaunchServices.nix - ./modules/system/defaults/NSGlobalDomain.nix - ./modules/system/defaults/dock.nix - ./modules/system/defaults/finder.nix - ./modules/system/defaults/screencapture.nix - ./modules/system/defaults/smb.nix - ./modules/system/defaults/trackpad.nix - ./modules/system/etc.nix - ./modules/system/keyboard.nix - ./modules/system/launchd.nix - ./modules/system/shells.nix - ./modules/system/version.nix - ./modules/time - ./modules/networking - ./modules/nix - ./modules/nix/nix-darwin.nix - ./modules/nix/nix-info.nix - ./modules/nix/nixpkgs.nix - ./modules/environment - ./modules/fonts - ./modules/launchd - ./modules/services/activate-system - ./modules/services/buildkite-agent.nix - ./modules/services/chunkwm.nix - ./modules/services/emacs.nix - ./modules/services/khd - ./modules/services/kwm - ./modules/services/mail/offlineimap.nix - ./modules/services/mopidy.nix - ./modules/services/nix-daemon.nix - ./modules/services/nix-gc - ./modules/services/ofborg - ./modules/services/postgresql - ./modules/services/privoxy - ./modules/services/redis - ./modules/services/skhd - ./modules/services/synapse-bt.nix - ./modules/services/synergy - ./modules/programs/bash - ./modules/programs/fish.nix - ./modules/programs/gnupg.nix - ./modules/programs/man.nix - ./modules/programs/info - ./modules/programs/nix-index - ./modules/programs/nix-script.nix - ./modules/programs/ssh - ./modules/programs/tmux.nix - ./modules/programs/vim.nix - ./modules/programs/zsh - ./modules/users - ./modules/users/nixbld - ]; }; - in { diff --git a/modules/module-list.nix b/modules/module-list.nix new file mode 100644 index 00000000..d46ffc97 --- /dev/null +++ b/modules/module-list.nix @@ -0,0 +1,62 @@ +[ + ./alias.nix + ./documentation + ./security/pki + ./security/sandbox + ./system + ./system/checks.nix + ./system/activation-scripts.nix + ./system/applications.nix + ./system/defaults-write.nix + ./system/defaults/LaunchServices.nix + ./system/defaults/NSGlobalDomain.nix + ./system/defaults/dock.nix + ./system/defaults/finder.nix + ./system/defaults/screencapture.nix + ./system/defaults/smb.nix + ./system/defaults/trackpad.nix + ./system/etc.nix + ./system/keyboard.nix + ./system/launchd.nix + ./system/shells.nix + ./system/version.nix + ./time + ./networking + ./nix + ./nix/nix-darwin.nix + ./nix/nix-info.nix + ./nix/nixpkgs.nix + ./environment + ./fonts + ./launchd + ./services/activate-system + ./services/buildkite-agent.nix + ./services/chunkwm.nix + ./services/emacs.nix + ./services/khd + ./services/kwm + ./services/mail/offlineimap.nix + ./services/mopidy.nix + ./services/nix-daemon.nix + ./services/nix-gc + ./services/ofborg + ./services/postgresql + ./services/privoxy + ./services/redis + ./services/skhd + ./services/synapse-bt.nix + ./services/synergy + ./programs/bash + ./programs/fish.nix + ./programs/gnupg.nix + ./programs/man.nix + ./programs/info + ./programs/nix-index + ./programs/nix-script.nix + ./programs/ssh + ./programs/tmux.nix + ./programs/vim.nix + ./programs/zsh + ./users + ./users/nixbld +] From b85b9a4206a1d556d1d12babb35dc3887a6bdc58 Mon Sep 17 00:00:00 2001 From: Daiderd Jordan Date: Sat, 4 May 2019 15:36:05 +0200 Subject: [PATCH 4/7] doc: add manual build for module options --- doc/manual/default.nix | 344 ++++++++++++++++++ doc/manual/man-pages.xml | 42 +++ doc/manual/manual.xml | 21 ++ doc/manual/options-to-docbook.xsl | 229 ++++++++++++ doc/manual/overrides.css | 9 + .../postprocess-option-descriptions.xsl | 115 ++++++ doc/manual/style.css | 291 +++++++++++++++ 7 files changed, 1051 insertions(+) create mode 100644 doc/manual/default.nix create mode 100644 doc/manual/man-pages.xml create mode 100644 doc/manual/manual.xml create mode 100644 doc/manual/options-to-docbook.xsl create mode 100644 doc/manual/overrides.css create mode 100644 doc/manual/postprocess-option-descriptions.xsl create mode 100644 doc/manual/style.css diff --git a/doc/manual/default.nix b/doc/manual/default.nix new file mode 100644 index 00000000..b5bdf6f1 --- /dev/null +++ b/doc/manual/default.nix @@ -0,0 +1,344 @@ +{ pkgs, options, config, version, revision, extraSources ? [] }: + +with pkgs; + +let + lib = pkgs.lib; + + # Remove invisible and internal options. + optionsListVisible = lib.filter (opt: opt.visible && !opt.internal) (lib.optionAttrSetToDocList options); + + # Replace functions by the string + substFunction = x: + if builtins.isAttrs x then lib.mapAttrs (name: substFunction) x + else if builtins.isList x then map substFunction x + else if lib.isFunction x then "" + else x; + + # Generate DocBook documentation for a list of packages. This is + # what `relatedPackages` option of `mkOption` from + # ../../../lib/options.nix influences. + # + # Each element of `relatedPackages` can be either + # - a string: that will be interpreted as an attribute name from `pkgs`, + # - a list: that will be interpreted as an attribute path from `pkgs`, + # - an attrset: that can specify `name`, `path`, `package`, `comment` + # (either of `name`, `path` is required, the rest are optional). + genRelatedPackages = packages: + let + unpack = p: if lib.isString p then { name = p; } + else if lib.isList p then { path = p; } + else p; + describe = args: + let + title = args.title or null; + name = args.name or (lib.concatStringsSep "." args.path); + path = args.path or [ args.name ]; + package = args.package or (lib.attrByPath path (throw "Invalid package attribute path `${toString path}'") pkgs); + in "" + + "${lib.optionalString (title != null) "${title} aka "}pkgs.${name} (${package.meta.name})" + + lib.optionalString (!package.meta.available) " [UNAVAILABLE]" + + ": ${package.meta.description or "???"}." + + lib.optionalString (args ? comment) "\n${args.comment}" + # Lots of `longDescription's break DocBook, so we just wrap them into + + lib.optionalString (package.meta ? longDescription) "\n${package.meta.longDescription}" + + ""; + in "${lib.concatStringsSep "\n" (map (p: describe (unpack p)) packages)}"; + + optionsListDesc = lib.flip map optionsListVisible (opt: opt // { + # Clean up declaration sites to not refer to the NixOS source tree. + declarations = map stripAnyPrefixes opt.declarations; + } + // lib.optionalAttrs (opt ? example) { example = substFunction opt.example; } + // lib.optionalAttrs (opt ? default) { default = substFunction opt.default; } + // lib.optionalAttrs (opt ? type) { type = substFunction opt.type; } + // lib.optionalAttrs (opt ? relatedPackages && opt.relatedPackages != []) { relatedPackages = genRelatedPackages opt.relatedPackages; }); + + # We need to strip references to /nix/store/* from options, + # including any `extraSources` if some modules came from elsewhere, + # or else the build will fail. + # + # E.g. if some `options` came from modules in ${pkgs.customModules}/nix, + # you'd need to include `extraSources = [ pkgs.customModules ]` + prefixesToStrip = map (p: "${toString p}/") ([ ../../.. ] ++ extraSources); + stripAnyPrefixes = lib.flip (lib.fold lib.removePrefix) prefixesToStrip; + + # Custom "less" that pushes up all the things ending in ".enable*" + # and ".package*" + optionLess = a: b: + let + ise = lib.hasPrefix "enable"; + isp = lib.hasPrefix "package"; + cmp = lib.splitByAndCompare ise lib.compare + (lib.splitByAndCompare isp lib.compare lib.compare); + in lib.compareLists cmp a.loc b.loc < 0; + + # Customly sort option list for the man page. + optionsList = lib.sort optionLess optionsListDesc; + + # Convert the list of options into an XML file. + optionsXML = builtins.toFile "options.xml" (builtins.toXML optionsList); + + optionsDocBook = runCommand "options-db.xml" {} '' + optionsXML=${optionsXML} + if grep /darwin/modules $optionsXML; then + echo "The manual appears to depend on the location of Darwin, which is bad" + echo "since this prevents sharing via a channel. This is typically" + echo "caused by an option default that refers to a relative path (see above" + echo "for hints about the offending path)." + exit 1 + fi + ${buildPackages.libxslt.bin}/bin/xsltproc \ + --stringparam revision '${revision}' \ + -o intermediate.xml ${./options-to-docbook.xsl} $optionsXML + ${buildPackages.libxslt.bin}/bin/xsltproc \ + -o "$out" ${./postprocess-option-descriptions.xsl} intermediate.xml + ''; + + sources = lib.sourceFilesBySuffices ./. [".xml"]; + + modulesDoc = builtins.toFile "modules.xml" '' +
+ ${(lib.concatMapStrings (path: '' + + '') (lib.catAttrs "value" (config.meta.doc or [])))} +
+ ''; + + generatedSources = runCommand "generated-docbook" {} '' + mkdir $out + ln -s ${modulesDoc} $out/modules.xml + ln -s ${optionsDocBook} $out/options-db.xml + printf "%s" "${version}" > $out/version + ''; + + copySources = + '' + cp -prd $sources/* . || true + ln -s ${generatedSources} ./generated + chmod -R u+w . + ''; + + toc = builtins.toFile "toc.xml" + '' + + + + + + + ''; + + manualXsltprocOptions = toString [ + "--param section.autolabel 1" + "--param section.label.includes.component.label 1" + "--stringparam html.stylesheet 'style.css overrides.css highlightjs/mono-blue.css'" + "--stringparam html.script './highlightjs/highlight.pack.js ./highlightjs/loader.js'" + "--param xref.with.number.and.title 1" + "--param toc.section.depth 3" + "--stringparam admon.style ''" + "--stringparam callout.graphics.extension .svg" + "--stringparam current.docid manual" + "--param chunk.section.depth 0" + "--param chunk.first.sections 1" + "--param use.id.as.filename 1" + "--stringparam generate.toc 'book toc appendix toc'" + "--stringparam chunk.toc ${toc}" + ]; + + manual-combined = runCommand "darwin-manual-combined" + { inherit sources; + nativeBuildInputs = [ buildPackages.libxml2.bin buildPackages.libxslt.bin ]; + meta.description = "The NixOS manual as plain docbook XML"; + } + '' + ${copySources} + + xmllint --xinclude --output ./manual-combined.xml ./manual.xml + xmllint --xinclude --noxincludenode \ + --output ./man-pages-combined.xml ./man-pages.xml + + # outputs the context of an xmllint error output + # LEN lines around the failing line are printed + function context { + # length of context + local LEN=6 + # lines to print before error line + local BEFORE=4 + + # xmllint output lines are: + # file.xml:1234: there was an error on line 1234 + while IFS=':' read -r file line rest; do + echo + if [[ -n "$rest" ]]; then + echo "$file:$line:$rest" + local FROM=$(($line>$BEFORE ? $line - $BEFORE : 1)) + # number lines & filter context + nl --body-numbering=a "$file" | sed -n "$FROM,+$LEN p" + else + if [[ -n "$line" ]]; then + echo "$file:$line" + else + echo "$file" + fi + fi + done + } + + function lintrng { + xmllint --debug --noout --nonet \ + --relaxng ${docbook5}/xml/rng/docbook/docbook.rng \ + "$1" \ + 2>&1 | context 1>&2 + # ^ redirect assumes xmllint doesn’t print to stdout + } + + lintrng manual-combined.xml + lintrng man-pages-combined.xml + + mkdir $out + cp manual-combined.xml $out/ + cp man-pages-combined.xml $out/ + ''; + + olinkDB = runCommand "manual-olinkdb" + { inherit sources; + nativeBuildInputs = [ buildPackages.libxml2.bin buildPackages.libxslt.bin ]; + } + '' + xsltproc \ + ${manualXsltprocOptions} \ + --stringparam collect.xref.targets only \ + --stringparam targets.filename "$out/manual.db" \ + --nonet \ + ${docbook_xsl_ns}/xml/xsl/docbook/xhtml/chunktoc.xsl \ + ${manual-combined}/manual-combined.xml + + cat > "$out/olinkdb.xml" < + + ]> + + + Allows for cross-referencing olinks between the manpages + and manual. + + + &manualtargets; + + EOF + ''; + +in rec { + inherit generatedSources; + + # The NixOS options in JSON format. + optionsJSON = runCommand "options-json" + { meta.description = "List of NixOS options in JSON format"; + } + '' + # Export list of options in different format. + dst=$out/share/doc/darwin + mkdir -p $dst + + cp ${builtins.toFile "options.json" (builtins.unsafeDiscardStringContext (builtins.toJSON + (builtins.listToAttrs (map (o: { name = o.name; value = removeAttrs o ["name" "visible" "internal"]; }) optionsList)))) + } $dst/options.json + + mkdir -p $out/nix-support + echo "file json $dst/options.json" >> $out/nix-support/hydra-build-products + ''; # */ + + # Generate the NixOS manual. + manualHTML = runCommand "darwin-manual-html" + { inherit sources; + nativeBuildInputs = [ buildPackages.libxml2.bin buildPackages.libxslt.bin ]; + meta.description = "The Darwin manual in HTML format"; + allowedReferences = ["out"]; + } + '' + # Generate the HTML manual. + dst=$out/share/doc/darwin + mkdir -p $dst + xsltproc \ + ${manualXsltprocOptions} \ + --stringparam target.database.document "${olinkDB}/olinkdb.xml" \ + --stringparam id.warnings "1" \ + --nonet --output $dst/ \ + ${docbook_xsl_ns}/xml/xsl/docbook/xhtml/chunktoc.xsl \ + ${manual-combined}/manual-combined.xml \ + |& tee xsltproc.out + grep "^ID recommended on" xsltproc.out &>/dev/null && echo "error: some IDs are missing" && false + rm xsltproc.out + + mkdir -p $dst/images/callouts + cp ${docbook_xsl_ns}/xml/xsl/docbook/images/callouts/*.svg $dst/images/callouts/ + + cp ${./style.css} $dst/style.css + cp ${./overrides.css} $dst/overrides.css + cp -r ${pkgs.documentation-highlighter} $dst/highlightjs + + mkdir -p $out/nix-support + echo "nix-build out $out" >> $out/nix-support/hydra-build-products + echo "doc manual $dst" >> $out/nix-support/hydra-build-products + ''; # */ + + # Alias for backward compatibility. TODO(@oxij): remove eventually. + manual = manualHTML; + + # Index page of the NixOS manual. + manualHTMLIndex = "${manualHTML}/share/doc/darwin/index.html"; + + manualEpub = runCommand "darwin-manual-epub" + { inherit sources; + buildInputs = [ libxml2.bin libxslt.bin zip ]; + } + '' + # Generate the epub manual. + dst=$out/share/doc/darwin + + xsltproc \ + ${manualXsltprocOptions} \ + --stringparam target.database.document "${olinkDB}/olinkdb.xml" \ + --nonet --xinclude --output $dst/epub/ \ + ${docbook_xsl_ns}/xml/xsl/docbook/epub/docbook.xsl \ + ${manual-combined}/manual-combined.xml + + mkdir -p $dst/epub/OEBPS/images/callouts + cp -r ${docbook_xsl_ns}/xml/xsl/docbook/images/callouts/*.svg $dst/epub/OEBPS/images/callouts # */ + echo "application/epub+zip" > mimetype + manual="$dst/darwin-manual.epub" + zip -0Xq "$manual" mimetype + cd $dst/epub && zip -Xr9D "$manual" * + + rm -rf $dst/epub + + mkdir -p $out/nix-support + echo "doc-epub manual $manual" >> $out/nix-support/hydra-build-products + ''; + + + # Generate the NixOS manpages. + manpages = runCommand "darwin-manpages" + { inherit sources; + nativeBuildInputs = [ buildPackages.libxml2.bin buildPackages.libxslt.bin ]; + allowedReferences = ["out"]; + } + '' + # Generate manpages. + mkdir -p $out/share/man + xsltproc --nonet \ + --maxdepth 6000 \ + --param man.output.in.separate.dir 1 \ + --param man.output.base.dir "'$out/share/man/'" \ + --param man.endnotes.are.numbered 0 \ + --param man.break.after.slash 1 \ + --stringparam target.database.document "${olinkDB}/olinkdb.xml" \ + ${docbook_xsl_ns}/xml/xsl/docbook/manpages/docbook.xsl \ + ${manual-combined}/man-pages-combined.xml + ''; + +} + diff --git a/doc/manual/man-pages.xml b/doc/manual/man-pages.xml new file mode 100644 index 00000000..2490f639 --- /dev/null +++ b/doc/manual/man-pages.xml @@ -0,0 +1,42 @@ + + Darwin Reference Pages + + DaiderdJordan + Author + + 2016-2019Daiderd Jordan + + + + + + configuration.nix + 5 + Darwin + + + + configuration.nix + Darwin system configuration specification + + + Description + + The file configuration.nix contains the + declarative specification of your Darwin system configuration. The command + darwin-rebuild takes this file and realises the system + configuration specified therein. + + + + Options + + You can use the following options in configuration.nix. + + + + + diff --git a/doc/manual/manual.xml b/doc/manual/manual.xml new file mode 100644 index 00000000..a334342d --- /dev/null +++ b/doc/manual/manual.xml @@ -0,0 +1,21 @@ + + + Darwin Manual + Version + + + + Preface + Nix modules for darwin. + + + Configuration Options + + + + diff --git a/doc/manual/options-to-docbook.xsl b/doc/manual/options-to-docbook.xsl new file mode 100644 index 00000000..09f5e081 --- /dev/null +++ b/doc/manual/options-to-docbook.xsl @@ -0,0 +1,229 @@ + + + + + + + + + + + + Configuration Options + + + + + + + + + + + + + + + + + + + + Type: + + + + + (read only) + + + + + + + Default: + + + + + + + + Example: + + + + + + + + + + + + + + + Related packages: + + + + + + + + Declared by: + + + + + + + Defined by: + + + + + + + + + + + + + + + + + + + +'' +'' + + + + + + + + + + null + + + + + + + '''' + + + "" + + + + + + + + + + + + true + + + + + false + + + + + [ + + + + + ] + + + + + + + + + + { + + + = + ; + + } + + + + + (build of ) + + + + + + + + + + + + https://github.com/LnL7/nix-darwin/blob/master/ + + + https://github.com/LnL7/nix-darwin/blob// + + + + + file:// + + + + + + <> + + + + + + + + + + + + + λ + + + + diff --git a/doc/manual/overrides.css b/doc/manual/overrides.css new file mode 100644 index 00000000..4c7d4a31 --- /dev/null +++ b/doc/manual/overrides.css @@ -0,0 +1,9 @@ +.docbook .xref img[src^=images\/callouts\/], +.screen img, +.programlisting img { + width: 1em; +} + +.calloutlist img { + width: 1.5em; +} diff --git a/doc/manual/postprocess-option-descriptions.xsl b/doc/manual/postprocess-option-descriptions.xsl new file mode 100644 index 00000000..1201c761 --- /dev/null +++ b/doc/manual/postprocess-option-descriptions.xsl @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/manual/style.css b/doc/manual/style.css new file mode 100644 index 00000000..474dd32e --- /dev/null +++ b/doc/manual/style.css @@ -0,0 +1,291 @@ +/* Copied from http://bakefile.sourceforge.net/, which appears + licensed under the GNU GPL. */ + + +/*************************************************************************** + Basic headers and text: + ***************************************************************************/ + +body +{ + font-family: "Nimbus Sans L", sans-serif; + font-size: 1em; + background: white; + margin: 2em 1em 2em 1em; +} + +h1, h2, h3, h4 +{ + color: #005aa0; +} + +h1 /* title */ +{ + font-size: 200%; +} + +h2 /* chapters, appendices, subtitle */ +{ + font-size: 180%; +} + +div.book +{ + text-align: center; +} + +div.book > div +{ + /* + * based on https://medium.com/@zkareemz/golden-ratio-62b3b6d4282a + * we do 70 characters per line to fit code listings better + * 70 * (font-size / 1.618) + * expression for emacs: + * (* 70 (/ 1 1.618)) + */ + max-width: 43.2em; + text-align: left; + margin: auto; +} + +/* Extra space between chapters, appendices. */ +div.chapter > div.titlepage h2, div.appendix > div.titlepage h2 +{ + margin-top: 1.5em; +} + +div.section > div.titlepage h2 /* sections */ +{ + font-size: 150%; + margin-top: 1.5em; +} + +h3 /* subsections */ +{ + font-size: 125%; +} + +div.simplesect h2 +{ + font-size: 110%; +} + +div.appendix h3 +{ + font-size: 150%; + margin-top: 1.5em; +} + +div.refnamediv h2, div.refsynopsisdiv h2, div.refsection h2 /* refentry parts */ +{ + margin-top: 1.4em; + font-size: 125%; +} + +div.refsection h3 +{ + font-size: 110%; +} + + +/*************************************************************************** + Examples: + ***************************************************************************/ + +div.example +{ + border: 1px solid #b0b0b0; + padding: 6px 6px; + margin-left: 1.5em; + margin-right: 1.5em; + background: #f4f4f8; + border-radius: 0.4em; + box-shadow: 0.4em 0.4em 0.5em #e0e0e0; +} + +div.example p.title +{ + margin-top: 0em; +} + +div.example pre +{ + box-shadow: none; +} + + +/*************************************************************************** + Screen dumps: + ***************************************************************************/ + +pre.screen, pre.programlisting +{ + border: 1px solid #b0b0b0; + padding: 3px 3px; + margin-left: 0.5em; + margin-right: 0.5em; + + background: #f4f4f8; + font-family: monospace; + border-radius: 0.4em; + box-shadow: 0.4em 0.4em 0.5em #e0e0e0; +} + +div.example pre.programlisting +{ + border: 0px; + padding: 0 0; + margin: 0 0 0 0; +} + +/*************************************************************************** + Notes, warnings etc: + ***************************************************************************/ + +.note, .warning +{ + border: 1px solid #b0b0b0; + padding: 3px 3px; + margin-left: 1.5em; + margin-right: 1.5em; + margin-bottom: 1em; + padding: 0.3em 0.3em 0.3em 0.3em; + background: #fffff5; + border-radius: 0.4em; + box-shadow: 0.4em 0.4em 0.5em #e0e0e0; +} + +div.note, div.warning +{ + font-style: italic; +} + +div.note h3, div.warning h3 +{ + color: red; + font-size: 100%; + padding-right: 0.5em; + display: inline; +} + +div.note p, div.warning p +{ + margin-bottom: 0em; +} + +div.note h3 + p, div.warning h3 + p +{ + display: inline; +} + +div.note h3 +{ + color: blue; + font-size: 100%; +} + +div.navfooter * +{ + font-size: 90%; +} + + +/*************************************************************************** + Links colors and highlighting: + ***************************************************************************/ + +a { text-decoration: none; } +a:hover { text-decoration: underline; } +a:link { color: #0048b3; } +a:visited { color: #002a6a; } + + +/*************************************************************************** + Table of contents: + ***************************************************************************/ + +div.toc +{ + font-size: 90%; +} + +div.toc dl +{ + margin-top: 0em; + margin-bottom: 0em; +} + + +/*************************************************************************** + Special elements: + ***************************************************************************/ + +tt, code +{ + color: #400000; +} + +.term +{ + font-weight: bold; + +} + +div.variablelist dd p, div.glosslist dd p +{ + margin-top: 0em; +} + +div.variablelist dd, div.glosslist dd +{ + margin-left: 1.5em; +} + +div.glosslist dt +{ + font-style: italic; +} + +.varname +{ + color: #400000; +} + +span.command strong +{ + font-weight: normal; + color: #400000; +} + +div.calloutlist table +{ + box-shadow: none; +} + +table +{ + border-collapse: collapse; + box-shadow: 0.4em 0.4em 0.5em #e0e0e0; +} + +table.simplelist +{ + text-align: left; + color: #005aa0; + border: 0; + padding: 5px; + background: #fffff5; + font-weight: normal; + font-style: italic; + box-shadow: none; + margin-bottom: 1em; +} + +div.navheader table, div.navfooter table { + box-shadow: none; +} + +div.affiliation +{ + font-style: italic; +} From 23d8c6ca3d163f278540e8d2b4fa97f311585e6b Mon Sep 17 00:00:00 2001 From: Daiderd Jordan Date: Sat, 4 May 2019 15:38:17 +0200 Subject: [PATCH 5/7] documentation: add module for darwin manual Fixes #72 --- modules/documentation/default.nix | 99 +++++++++++++++++++++++++++++++ modules/system/default.nix | 2 +- 2 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 modules/documentation/default.nix diff --git a/modules/documentation/default.nix b/modules/documentation/default.nix new file mode 100644 index 00000000..a78cc04a --- /dev/null +++ b/modules/documentation/default.nix @@ -0,0 +1,99 @@ +{ config, lib, pkgs, baseModules, modules, ... }: + +with lib; + +let + cfg = config.documentation; + + /* For the purpose of generating docs, evaluate options with each derivation + in `pkgs` (recursively) replaced by a fake with path "\${pkgs.attribute.path}". + It isn't perfect, but it seems to cover a vast majority of use cases. + Caveat: even if the package is reached by a different means, + the path above will be shown and not e.g. `${config.services.foo.package}`. */ + manual = import ../../doc/manual rec { + inherit pkgs config; + version = "0.0.1"; + revision = "release-${version}"; + options = + let + scrubbedEval = evalModules { + modules = [ { nixpkgs.localSystem = config.nixpkgs.localSystem; } ] ++ baseModules; + args = (config._module.args) // { modules = [ ]; }; + specialArgs = { pkgs = scrubDerivations "pkgs" pkgs; }; + }; + scrubDerivations = namePrefix: pkgSet: mapAttrs + (name: value: + let wholeName = "${namePrefix}.${name}"; in + if isAttrs value then + scrubDerivations wholeName value + // (optionalAttrs (isDerivation value) { outPath = "\${${wholeName}}"; }) + else value + ) + pkgSet; + in scrubbedEval.options; + }; + + helpScript = pkgs.writeScriptBin "darwin-help" + '' + #! ${pkgs.stdenv.shell} -e + open ${manual.manualHTMLIndex} + ''; +in + +{ + options = { + documentation.enable = mkOption { + type = types.bool; + default = true; + description = '' + Whether to install documentation of packages from + into the generated system path. + + See "Multiple-output packages" chapter in the nixpkgs manual for more info. + ''; + # which is at ../../../doc/multiple-output.xml + }; + + documentation.man.enable = mkOption { + type = types.bool; + default = true; + description = '' + Whether to install manual pages and the man command. + This also includes "man" outputs. + ''; + }; + + documentation.info.enable = mkOption { + type = types.bool; + default = true; + description = '' + Whether to install info pages and the info command. + This also includes "info" outputs. + ''; + }; + + documentation.doc.enable = mkOption { + type = types.bool; + default = true; + description = '' + Whether to install documentation distributed in packages' /share/doc. + Usually plain text and/or HTML. + This also includes "doc" outputs. + ''; + }; + }; + + config = mkIf cfg.enable { + + programs.man.enable = cfg.man.enable; + programs.info.enable = cfg.info.enable; + + environment.systemPackages = mkMerge [ + (mkIf cfg.man.enable [ manual.manpages ]) + (mkIf cfg.doc.enable [ manual.manualHTML helpScript ]) + ]; + + system.build.manual = manual; + + }; +} diff --git a/modules/system/default.nix b/modules/system/default.nix index f5077502..d272a187 100644 --- a/modules/system/default.nix +++ b/modules/system/default.nix @@ -20,7 +20,7 @@ in system.build = mkOption { internal = true; - type = types.attrsOf types.package; + type = types.attrsOf types.unspecified; default = {}; description = '' Attribute set of derivation used to setup the system. From da88e60bca7f3247a5e40d8cee9b6e7c9c4b99aa Mon Sep 17 00:00:00 2001 From: Daiderd Jordan Date: Sat, 4 May 2019 15:39:32 +0200 Subject: [PATCH 6/7] release.nix: add manual builds --- release.nix | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/release.nix b/release.nix index ae282cd4..4bccefa7 100644 --- a/release.nix +++ b/release.nix @@ -6,10 +6,15 @@ let inherit (release) mapTestOn packagePlatforms pkgs all linux darwin; + system = "x86_64-darwin"; + mapPlatforms = systems: pkgs.lib.mapAttrs (n: v: systems); - genExample = configuration: pkgs.lib.genAttrs [ "x86_64-darwin" ] (system: - (import ./. { inherit nixpkgs configuration system; }).system + buildFromConfig = configuration: sel: sel + (import ./. { inherit nixpkgs configuration system; }).config; + + makeSystem = configuration: pkgs.lib.genAttrs [ system ] (system: + buildFromConfig configuration (config: config.system.build.toplevel) ); makeTest = test: @@ -47,10 +52,8 @@ let out = config.system.build.toplevel; }; }; - - system = "x86_64-darwin"; in - (import ./. { inherit nixpkgs configuration system; }).config.system.build.run-test; + buildFromConfig configuration (config: config.system.build.run-test); release = import { inherit supportedSystems scrubJobs; @@ -85,9 +88,14 @@ let meta.description = "Release-critical builds for the darwin channel"; }; - examples.hydra = genExample ./modules/examples/hydra.nix; - examples.lnl = genExample ./modules/examples/lnl.nix; - examples.simple = genExample ./modules/examples/simple.nix; + manualHTML = buildFromConfig ({ ... }: { }) (config: config.system.build.manual.manualHTML); + manualEpub = buildFromConfig ({ ... }: { }) (config: config.system.build.manual.manualEpub); + manpages = buildFromConfig ({ ... }: { }) (config: config.system.build.manual.manpages); + options = buildFromConfig ({ ... }: { }) (config: config.system.build.manual.optionsJSON); + + examples.hydra = makeSystem ./modules/examples/hydra.nix; + examples.lnl = makeSystem ./modules/examples/lnl.nix; + examples.simple = makeSystem ./modules/examples/simple.nix; tests.activation-scripts = makeTest ./tests/activation-scripts.nix; tests.checks-nix-gc = makeTest ./tests/checks-nix-gc.nix; From 9bb40a50be702d70a831a1c441a98835f6c06269 Mon Sep 17 00:00:00 2001 From: Daiderd Jordan Date: Sat, 4 May 2019 15:46:30 +0200 Subject: [PATCH 7/7] travis: build manpages --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 2ab1a44f..a1990fbc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,6 +4,7 @@ matrix: - os: osx osx_image: xcode8.3 # 10.12 script: + - nix-build ./release.nix -I darwin=. -A manpages - nix-build ./release.nix -I darwin=. -A tests - nix-build ./release.nix -I darwin=. -A examples.simple - yes | nix-shell -A installer