diff --git a/.gitignore b/.gitignore
index fb831051..85a8ccc7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -24,6 +24,7 @@ docs/src/man1/*.1
docs/src/man7/*.7
docs/src/man7/cdist-type__*.rst
docs/src/cdist-reference.rst
+docs/src/cdist-types.rst
docs/src/cdist.cfg.skeleton
# Ignore cdist cache for version control
diff --git a/Makefile b/Makefile
index e6a2a28e..f89ac1e7 100644
--- a/Makefile
+++ b/Makefile
@@ -63,6 +63,13 @@ DOCSREFSH=$(DOCS_SRC_DIR)/cdist-reference.rst.sh
$(DOCSREF): $(DOCSREFSH)
$(DOCSREFSH)
+# Html types list with references
+DOCSTYPESREF=$(MAN7DSTDIR)/cdist-types.rst
+DOCSTYPESREFSH=$(DOCS_SRC_DIR)/cdist-types.rst.sh
+
+$(DOCSTYPESREF): $(DOCSTYPESREFSH)
+ $(DOCSTYPESREFSH)
+
DOCSCFGSKEL=./configuration/cdist.cfg.skeleton
configskel: $(DOCSCFGSKEL)
@@ -77,7 +84,7 @@ version:
man: version $(MANTYPES) $(DOCSREF)
$(SPHINXM)
-html: version configskel $(MANTYPES) $(DOCSREF)
+html: version configskel $(MANTYPES) $(DOCSREF) $(DOCSTYPESREF)
$(SPHINXH)
docs: man html
@@ -119,6 +126,7 @@ speeches: $(SPEECHES)
#
clean: docs-clean
rm -f $(DOCS_SRC_DIR)/cdist-reference.rst
+ rm -f $(DOCS_SRC_DIR)/cdist-types.rst
rm -f $(DOCS_SRC_DIR)/cdist.cfg.skeleton
find "$(DOCS_SRC_DIR)" -mindepth 2 -type l \
diff --git a/docs/src/cdist-types.rst b/docs/src/cdist-types.rst
deleted file mode 100644
index d5104667..00000000
--- a/docs/src/cdist-types.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-cdist types
-===========
-
-.. toctree::
- :titlesonly:
- :glob:
-
- man7/*
diff --git a/docs/src/cdist-types.rst.sh b/docs/src/cdist-types.rst.sh
new file mode 100755
index 00000000..2eb66009
--- /dev/null
+++ b/docs/src/cdist-types.rst.sh
@@ -0,0 +1,55 @@
+#!/bin/sh
+#
+# 2019 Darko Poljak (darko.poljak at gmail.com)
+#
+# This file is part of cdist.
+#
+# cdist is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# cdist is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with cdist. If not, see .
+#
+#
+# Generate cdist-types.rst that lists available types.
+#
+
+__cdist_pwd="$(pwd -P)"
+__cdist_mydir="${0%/*}";
+__cdist_abs_mydir="$(cd "$__cdist_mydir" && pwd -P)"
+__cdist_myname=${0##*/};
+__cdist_abs_myname="$__cdist_abs_mydir/$__cdist_myname"
+
+filename="${__cdist_myname%.sh}"
+dest="$__cdist_abs_mydir/$filename"
+
+cd "$__cdist_abs_mydir"
+
+exec > "$dest"
+cat << eof
+cdist types
+===========
+
+.. toctree::
+ :titlesonly:
+
+eof
+
+# If there is no such file then ls prints error to stderr,
+# so redirect stderr to /dev/null.
+for type in $(ls man7/cdist-type__*.rst 2>/dev/null | LC_ALL=C sort); do
+ no_dir="${type#man7/}";
+ no_type="${no_dir#cdist-type}";
+ name="${no_type%.rst}";
+ manref="${no_dir%.rst}"
+ man="${manref}(7)"
+
+ echo " $name" ""
+done