diff --git a/hwdb.d/README b/hwdb.d/README
new file mode 100644
index 00000000000..594f5bfe0d3
--- /dev/null
+++ b/hwdb.d/README
@@ -0,0 +1,11 @@
+Files in this directory specify a description of hardware devices, in the form
+of mappings from modalias-like keys (which identify specific hardware devices)
+to udev properties.
+
+Files in this directory are not read by udev directly. Instead,
+man:systemd-hwdb(8) compiles them into a binary database.
+
+See man:hwdb(7) for an overview of the configuration file format, and
+man:systemd-udevd.service(8) for a description of the udev daemon.
+
+Use 'systemd-analyze cat-config udev/hwdb.d' to display the effective config.
diff --git a/hwdb.d/meson.build b/hwdb.d/meson.build
index 54c6f4d5e2d..7221a1ae9f6 100644
--- a/hwdb.d/meson.build
+++ b/hwdb.d/meson.build
@@ -4,6 +4,7 @@
 # they are very long but quite repetitive and the parser is not very fast.
 # So we don't "test" them.
 hwdb_files_notest = files('''
+        README
         20-dmi-id.hwdb
         20-pci-vendor-model.hwdb
         20-pci-classes.hwdb
diff --git a/meson.build b/meson.build
index 4d876e83fce..f41a811e2e1 100644
--- a/meson.build
+++ b/meson.build
@@ -3472,7 +3472,8 @@ if install_sysconfdir
         install_data('xorg/50-systemd-user.sh',
                      install_dir : xinitrcdir)
 endif
-install_data('modprobe.d/systemd.conf',
+install_data('README',
+             'modprobe.d/systemd.conf',
              install_dir : modprobedir)
 install_data('LICENSE.GPL2',
              'LICENSE.LGPL2.1',
diff --git a/modprobe.d/README b/modprobe.d/README
new file mode 100644
index 00000000000..4c11e46df14
--- /dev/null
+++ b/modprobe.d/README
@@ -0,0 +1,7 @@
+Files in this directory contain configuration for modprobe, a program to load
+kernel modules.
+
+See man:modprobe.d(5) for explanation of the configuration file format, and
+man:modprobe(8) for a description of the program itself.
+
+Use 'systemd-analyze cat-config modprobe.d' to display the effective config.
diff --git a/rules.d/README b/rules.d/README
new file mode 100644
index 00000000000..294d6eeb5db
--- /dev/null
+++ b/rules.d/README
@@ -0,0 +1,8 @@
+Files in this directory contain configuration for systemd-udev.service, a
+daemon that manages symlinks to device nodes, permissions of devices nodes,
+emits device events for userspace, and renames network interfaces.
+
+See man:udev(7) for an overview of the configuration file format, and
+man:systemd-udevd.service(8) for a description of service itself.
+
+Use 'systemd-analyze cat-config udev/rules.d' to display the effective config.
diff --git a/rules.d/meson.build b/rules.d/meson.build
index d29564513da..42fa451c6ba 100644
--- a/rules.d/meson.build
+++ b/rules.d/meson.build
@@ -1,5 +1,9 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
+install_data(
+        'README',
+        install_dir : udevrulesdir)
+
 rules = files('''
         60-autosuspend.rules
         60-block.rules
diff --git a/sysctl.d/README b/sysctl.d/README
new file mode 100644
index 00000000000..ab216b108e5
--- /dev/null
+++ b/sysctl.d/README
@@ -0,0 +1,8 @@
+Files in this directory contain configuration for systemd-sysctl.service, a
+service to configure sysctl kernel parameters.
+
+See man:sysctl.d(5) for explanation of the configuration file format, and
+man:sysctl(8) and man:systemd-sysctl.service(8) for a description of when and
+how this configuration is applied.
+
+Use 'systemd-analyze cat-config sysctl.d' to display the effective config.
diff --git a/sysctl.d/meson.build b/sysctl.d/meson.build
index e8d8fc8c53b..7e3482af62a 100644
--- a/sysctl.d/meson.build
+++ b/sysctl.d/meson.build
@@ -1,6 +1,7 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
 install_data(
+        'README',
         '50-default.conf',
         install_dir : sysctldir)
 
diff --git a/sysusers.d/README b/sysusers.d/README
new file mode 100644
index 00000000000..df3049cc535
--- /dev/null
+++ b/sysusers.d/README
@@ -0,0 +1,8 @@
+Files in this directory contain configuration for systemd-sysusers, a program
+to allocate system users and groups.
+
+See man:sysusers.d(5) for explanation of the configuration file format, and
+man:systemd-sysusers(8) for a description of when and how this configuration is
+applied.
+
+Use 'systemd-analyze cat-config sysusers.d' to display the effective config.
diff --git a/sysusers.d/meson.build b/sysusers.d/meson.build
index 93a61f0d9a8..ef809a4f448 100644
--- a/sysusers.d/meson.build
+++ b/sysusers.d/meson.build
@@ -1,5 +1,9 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
+if enable_sysusers
+        install_data('README', install_dir : sysusersdir)
+endif
+
 in_files = ['basic.conf']
 
 foreach file : in_files
diff --git a/tmpfiles.d/README b/tmpfiles.d/README
new file mode 100644
index 00000000000..b42cec27456
--- /dev/null
+++ b/tmpfiles.d/README
@@ -0,0 +1,8 @@
+Files in this directory contain configuration for systemd-tmpfiles, a program
+to create, delete, and clean up volatile and temporary files and directories.
+
+See man:tmpfiles.d(5) for explanation of the configuration file format, and
+man:systemd-tmpfiles(8) for a description of when and how this configuration is
+applied.
+
+Use 'systemd-analyze cat-config tmpfiles.d' to display the effective config.
diff --git a/tmpfiles.d/meson.build b/tmpfiles.d/meson.build
index 7322460dbae..d5d4bbc9ea4 100644
--- a/tmpfiles.d/meson.build
+++ b/tmpfiles.d/meson.build
@@ -2,19 +2,20 @@
 
 enable_tmpfiles = conf.get('ENABLE_TMPFILES') == 1
 
-tmpfiles = [['home.conf',            ''],
-            ['journal-nocow.conf',   ''],
-            ['systemd-nologin.conf', 'HAVE_PAM'],
-            ['systemd-nspawn.conf',  'ENABLE_MACHINED'],
-            ['systemd-tmp.conf',     ''],
-            ['portables.conf',       'ENABLE_PORTABLED'],
-            ['systemd-pstore.conf',  'ENABLE_PSTORE'],
-            ['tmp.conf',             ''],
-            ['x11.conf',             ''],
-            ['legacy.conf',          'HAVE_SYSV_COMPAT'],
-           ]
+files = [['README',               ''],
+         ['home.conf',            ''],
+         ['journal-nocow.conf',   ''],
+         ['systemd-nologin.conf', 'HAVE_PAM'],
+         ['systemd-nspawn.conf',  'ENABLE_MACHINED'],
+         ['systemd-tmp.conf',     ''],
+         ['portables.conf',       'ENABLE_PORTABLED'],
+         ['systemd-pstore.conf',  'ENABLE_PSTORE'],
+         ['tmp.conf',             ''],
+         ['x11.conf',             ''],
+         ['legacy.conf',          'HAVE_SYSV_COMPAT'],
+        ]
 
-foreach pair : tmpfiles
+foreach pair : files
         if not enable_tmpfiles
                 # do nothing
         elif pair[1] == '' or conf.get(pair[1]) == 1