bluebook - nicely render man-pages to html, with cross-linking
bluebook [option]... [target]...
Bluebook converts man-pages to html. In so doing, it applies styles and conversions to make the pages useful for browsing. This includes cross-linking references to other man-pages it knows about.
Bluebook comprises a small set of Shake rules for producing its artifacts. As such, the bluebook executable’s option parser is provided by Shake.
To see all available options, run bluebook –help. The following lists commonly-needed and/or overridden options only.
-C, --directory=DIRECTORY
Change into DIRECTORY before producing artifacts. DIRECTORY must exist already.
The following options represent bluebook’s default behavior:
--color
Colorize output. Use --no-color to disable.
--digest-and-input
Consider files changed based on their modtime and digest for inputs. Use another --digest option to override.
-j, --jobs[=N]
Process N targets concurrently (defaulted to number of CPUs). Use --jobs again to override (with value 1 to disable).
--verbose
Increase verbosity. Use --quiet to override, or pass it again to increase further.
HTML_ROOT
Prefix for all internal links. Default is /. The value must end in a slash and one will be appended automatically if necessary.
MANPATH
:-separated list of directories to search for man-pages. Default is,
${XDG_DATA_DIR:-$HOME/.local/share}/man:/usr/local/share/man:/usr/share/man
Why not use die.net, kernel.org, or man7.org?
At work, we write a handful of CLI tools that are thoroughly documented through man-pages that get installed with the tool. It is super useful to have these also be online-browsable, particularly with references to other pages linked and traversable. Unfortunately, this rules out sites such as above as they’d never contain our man-pages.
Why not use [existing tool]?
I could not find a tool that did the minimal things I need:
Convert local man-pages to HTML
Turn headers into linkable anchors
Turn text like foo(1) into links to man1/foo.1.html
If you know of such a tool, do let me know!
The files Bluebook creates are meant to be served by a web-server, not browsed directly on the file-system. For example, we render links to directory/ and expect directory/index.html to be served. See EXAMPLES for an easy way to achieve this behavior in a local context.
Convert all your system’s man-pages into the ./dist directory, serve them, and browse them:
bluebook -C dist --color -j -p -V
docker run -d -p 8080:80 -v "$PWD"/dist:/usr/share/nginx/html:ro nginx
$BROWSER http://localhost:8080
Convert a single man-page and view its HTML in a Browser (navigation links won’t work, but the single page will):
MANPATH=/path/to/man bluebook -C /tmp man1/page.1.html
$BROWSER /tmp/man1/page.1.html
Use Bluebook in a GitHub Action to build a static site of man-pages for deploy:
- uses: pbrisbin/setup-tool-action@v1
with:
name: bluebook
version: 1.1.0.0
url: "https://github.com/pbrisbin/{name}/releases/download/v{version}/{name}-{os}-{arch}"
no-extract: "true"
- uses: actions/cache@v3
with:
path: _site
key: ${{ runner.os }}-site
- name: Generate HTML
run: bluebook -C _site
- name: Deploy
run: ...