Subject: [bug#54539] [PATCH v2 30/30] gnu: Autoload more.

From: Maxime Devos <[email-masked]>
Date: Sat, 3 Sep 2022 18:43:32 +0200

TODO: check that pulling still works and that
"./pre-inst-env guix lint --checker=derivation" doesn't report porblems.

* Various number comparisons

(All the performance numbers below are for a SSD, on a HDD I would expect
the differences to be more pronounced.)

The number of modules indirectly used by the Guix package is reduced from

$ guix graph --type=module guix | grep -F 'label' | wc --lines
> 347

to

$ ./pre-inst-envguix graph --type=module guix | grep -F 'label' | wc --lines
> 172

(Note: you will have to patch source-module-closure first to ignore #:autoload.)

I.e., it is reduced by about half!

Memory usage and time spent in GC, before and after the patch (run thrice).
Before:

$ GUIX_PROFILING=gc guix build -d -e '(@ (gnu packages package-management) guix)' --no-grafts
Garbage collection statistics:
  heap size:        72.46 MiB
  allocated:        184.59 MiB
  GC times:         15
  time spent in GC: 1.04 seconds (56% of user time)
Garbage collection statistics:
  heap size:        72.52 MiB
  allocated:        184.60 MiB
  GC times:         15
  time spent in GC: 1.11 seconds (58% of user time)
Garbage collection statistics:
  heap size:        72.46 MiB
  allocated:        184.59 MiB
  GC times:         15
  time spent in GC: 1.05 seconds (57% of user time)

After:
$ GUIX_PROFILING=gc ./pre-inst-env guix build -d -e '(@ (gnu packages package-management) guix)' --no-grafts
Garbage collection statistics:
  heap size:        46.95 MiB
  allocated:        174.24 MiB
  GC times:         17
  time spent in GC: 0.88 seconds (55% of user time)
Garbage collection statistics:
  heap size:        46.95 MiB
  allocated:        174.24 MiB
  GC times:         17
  time spent in GC: 0.88 seconds (54% of user time)
Garbage collection statistics:
  heap size:        46.95 MiB
  allocated:        174.23 MiB
  GC times:         17
  time spent in GC: 0.88 seconds (55% of user time)

The heap size is lower: 72.50 MiB -> 45.95 MiB.
Don't know what's up with the GC here, but the percentage didn't increase,
so doesn't seem bad to me.

Now, start-up latency.
First, do

$ echo powersave | sudo tee /sys/devices/system/cpu/cpufreq/policy*/scaling_governor

to avoid the OS from interfering by making the CPU faster.

Before:

$ guix shell hyperfine -- hyperfine -w2 -- "guix build -d -e '(@ (gnu packages package-management) guix)' --no-grafts"
  Time (mean ± σ):      4.137 s ±  0.017 s    [User: 5.516 s, System: 0.270 s]
  Range (min … max):    4.108 s …  4.160 s    10 runs

After:

$ guix shell hyperfine -- hyperfine -w2 -- "./pre-inst-env guix build -d -e '(@ (gnu packages package-management) guix)' --no-grafts"
  Time (mean ± σ):      3.830 s ±  0.038 s    [User: 4.976 s, System: 0.241 s]
  Range (min … max):    3.794 s …  3.922 s    10 runs

-- a small but measurable improvement.  This was with warm disk caches, what about cold
disk caches?  As the number of loaded modules is reduced, the number of 'read from disk<->Guile determines
what to read next' roundtrips decreases, which should make things faster (especially on spinning disks).

Before:
$ guix shell hyperfine -- hyperfine --prepare='sync; echo 3 |sudo tee /proc/sys/vm/drop_caches' -w2 -- "guix build -d -e '(@ (gnu packages package-management) guix)' --no-grafts"
Benchmark #1: guix build -d -e '(@ (gnu packages package-management) guix)' --no-grafts
  Time (mean ± σ):      5.146 s ±  0.072 s    [User: 5.647 s, System: 0.442 s]
  Range (min … max):    5.072 s …  5.274 s    10 runs

After:
guix shell hyperfine -- hyperfine --prepare='sync; echo 3 |sudo tee /proc/sys/vm/drop_caches' -w2 -- "./pre-inst-env guix build -d -e '(@ (gnu packages package-management) guix)' --no-grafts"
Benchmark #1: ./pre-inst-env guix build -d -e '(@ (gnu packages package-management) guix)' --no-grafts
  Time (mean ± σ):      4.536 s ±  0.032 s    [User: 4.924 s, System: 0.329 s]
  Range (min … max):    4.480 s …  4.577 s    10 runs

Again, an improvement.

Let's look at the number of syscalls this time.  I don't know what's up with the symlinks.

Before:
$ guix shell strace -- strace -c guix build -e '(@ (gnu packages package-management) guix)' -d --no-grafts

% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ------------------
 26,39    0,015695           2      6350      5754 readlink
 18,64    0,011083           1      6808           read
 16,97    0,010092          26       377        87 futex
 12,87    0,007654           2      2768       268 newfstatat
  8,57    0,005099           1      2576           write
  5,13    0,003053           2      1024       212 openat
  3,74    0,002222           2       774           mmap
  2,17    0,001288           2       568           mprotect
  2,15    0,001280           1       815           close
  1,64    0,000976           1       770         3 lseek
  0,77    0,000456           2       197           getcwd
------ ----------- ----------- --------- --------- ------------------
100,00    0,059467           2     23217      6327 total

After:
./pre-inst-env guix shell strace -- strace -c guix build -e '(@ (gnu packages package-management) guix)' -d --no-grafts

% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ------------------
 32,70    0,014266           1      7820      5684 newfstatat
 19,25    0,008398           1      6808           read
 11,25    0,004907          12       391        90 futex
 10,25    0,004470           1      2580           write
  7,67    0,003345           2      1622      1621 readlink
  7,33    0,003198           3       847       212 openat
  3,84    0,001676           2       561           mmap
  2,27    0,000992           2       391           mprotect
  2,27    0,000991           1       638           close
  1,66    0,000726           1       592         3 lseek
  0,83    0,000361           1       197           getcwd
  0,28    0,000123           5        21           pread64
  [ other syscalls removed for brevity ]
------ ----------- ----------- --------- --------- ------------------
100,00    0,043627           1     22643      7613 total

'mmap' is called less, I don't know how much of that can be attributed
to less .go files being mmapped and how much to the lower memory usage.
I'd assume that the reduction in 'openat' uses (1024->847) is due to
less modules (and maybe as a consequence, less patch files?).

* Other information

There were a few things unclear with the performance numbers above, but I
think I can state that this patch series does, in fact, reduce memory usage
(CPU time and heap size for computing "guix build -d guix --no-grafts"),
albeit less than I hoped for.

The same methods can be applied for other packages as well -- maybe in the
future, we could simply do an #:autoload for _every_ imported package module.

The latest commit was a bit ad-hoc, to save time making this patch series.
I would expcet that, with some additional work, more modules can be removed
from the graph.
---
 gnu/packages/audio.scm              |  29 ++++---
 gnu/packages/build-tools.scm        |  14 ++--
 gnu/packages/c.scm                  |   2 +-
 gnu/packages/cdrom.scm              |   2 +-
 gnu/packages/code.scm               |   6 +-
 gnu/packages/cpp.scm                |  10 +--
 gnu/packages/cups.scm               |   6 +-
 gnu/packages/dns.scm                |   2 +-
 gnu/packages/freedesktop.scm        |  22 +++---
 gnu/packages/gdb.scm                |   2 +-
 gnu/packages/gl.scm                 |   6 +-
 gnu/packages/glib.scm               |   2 +-
 gnu/packages/gnome.scm              | 117 ++++++++++++++++------------
 gnu/packages/graphics.scm           |  44 +++++------
 gnu/packages/gstreamer.scm          |  25 +++---
 gnu/packages/gtk.scm                |  13 ++--
 gnu/packages/image-processing.scm   |   6 +-
 gnu/packages/image.scm              |  12 +--
 gnu/packages/inkscape.scm           |   3 +-
 gnu/packages/libusb.scm             |   5 +-
 gnu/packages/llvm.scm               |   7 +-
 gnu/packages/logging.scm            |   2 +-
 gnu/packages/maths.scm              |  31 ++++----
 gnu/packages/mpi.scm                |   6 +-
 gnu/packages/music.scm              |  39 ++++++----
 gnu/packages/networking.scm         |  24 ++++--
 gnu/packages/openldap.scm           |   2 +-
 gnu/packages/password-utils.scm     |   2 +-
 gnu/packages/pdf.scm                |  24 +++---
 gnu/packages/photo.scm              |   8 +-
 gnu/packages/polkit.scm             |   4 +-
 gnu/packages/python-check.scm       |   6 +-
 gnu/packages/python-compression.scm |   2 +-
 gnu/packages/python-web.scm         |  19 +++--
 gnu/packages/qt.scm                 |  15 ++--
 gnu/packages/samba.scm              |   4 +-
 gnu/packages/sdl.scm                |   6 +-
 gnu/packages/search.scm             |   4 +-
 gnu/packages/serialization.scm      |   4 +-
 gnu/packages/shells.scm             |  37 +++++++--
 gnu/packages/sphinx.scm             |   8 +-
 gnu/packages/ssh.scm                |   7 +-
 gnu/packages/tex.scm                |   8 +-
 gnu/packages/textutils.scm          |  12 ++-
 gnu/packages/time.scm               |   5 +-
 gnu/packages/tls.scm                |   9 ++-
 gnu/packages/video.scm              |  62 +++++++++------
 gnu/packages/wget.scm               |   2 +-
 gnu/packages/xdisorg.scm            |   5 +-
 gnu/packages/xorg.scm               |  19 +++--
 50 files changed, 397 insertions(+), 314 deletions(-)

diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index 8795caef71..6b0f7d8c9e 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -71,17 +71,17 @@ (define-module (gnu packages audio)
   #:use-module (gnu packages dbm)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages elf)
-  #:use-module (gnu packages emacs)
+  #:autoload (gnu packages emacs) (emacs-minimal)
   #:use-module (gnu packages file)
   #:use-module (gnu packages flex)
-  #:use-module (gnu packages fltk)
+  #:autoload (gnu packages fltk) (fltk ntk)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
-  #:use-module (gnu packages gnunet) ; libmicrohttpd
+  #:autoload (gnu packages gnunet) (libmicrohttpd)
   #:use-module (gnu packages gperf)
   #:use-module (gnu packages groff)
   #:use-module (gnu packages gstreamer)
@@ -91,23 +91,24 @@ (define-module (gnu packages audio)
   #:use-module (gnu packages image)
   #:use-module (gnu packages libbsd)
   #:use-module (gnu packages libffi)
-  #:use-module (gnu packages libusb)
+  #:autoload (gnu packages libusb) (libusb)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages llvm)
-  #:use-module (gnu packages machine-learning)
+  #:autoload (gnu packages machine-learning) (python-scikit-learn)
   #:use-module (gnu packages man)
   #:use-module (gnu packages maths)
-  #:use-module (gnu packages mp3) ;taglib
+  #:autoload (gnu packages mp3)
+  (lame libid3tag libmad mpg123 python-audioread taglib)
   #:use-module (gnu packages multiprecision)
-  #:use-module (gnu packages music)
+  #:autoload (gnu packages music) (portmidi)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages networking)
   #:use-module (gnu packages onc-rpc)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
-  #:use-module (gnu packages pulseaudio)  ;libsndfile, libsamplerate
+  #:autoload (gnu packages pulseaudio) (libsndfile libsamplerate pulseaudio)
   #:use-module (gnu packages python)
-  #:use-module (gnu packages python-science)
+  #:autoload (gnu packages python-science) (python-scipy)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages rdf)
@@ -116,16 +117,14 @@ (define-module (gnu packages audio)
   #:use-module (gnu packages sdl)
   #:use-module (gnu packages serialization)
   #:use-module (gnu packages sqlite)
-  #:use-module (gnu packages telephony)
-  #:use-module (gnu packages linphone)
+  #:autoload (gnu packages linphone) (ortp)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages valgrind)
-  #:use-module (gnu packages video)
-  #:use-module (gnu packages vim) ;xxd
+  #:autoload (gnu packages video) (ffmpeg)
+  #:autoload (gnu packages vim) (xxd)
   #:use-module (gnu packages web)
-  #:use-module (gnu packages webkit)
-  #:use-module (gnu packages wxwidgets)
+  #:autoload (gnu packages wxwidgets) (wxwidgets-3.1)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xiph)
   #:use-module (gnu packages xml)
diff --git a/gnu/packages/build-tools.scm b/gnu/packages/build-tools.scm
index 5c9d5409cb..983f3f7195 100644
--- a/gnu/packages/build-tools.scm
+++ b/gnu/packages/build-tools.scm
@@ -46,16 +46,16 @@ (define-module (gnu packages build-tools)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cpp)
   #:use-module (gnu packages linux)
-  #:use-module (gnu packages logging)
-  #:use-module (gnu packages lua)
-  #:use-module (gnu packages package-management)
+  #:autoload (gnu packages logging) (spdlog)
+  #:autoload (gnu packages lua) (lua)
+  #:autoload (gnu packages package-management) (rpm)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages pkg-config)
-  #:use-module (gnu packages pretty-print)
-  #:use-module (gnu packages protobuf)
+  #:autoload (gnu packages pretty-print) (fmt)
+  #:autoload (gnu packages protobuf) (protobuf)
   #:use-module (gnu packages python)
-  #:use-module (gnu packages python-build)
-  #:use-module (gnu packages python-crypto)
+  #:autoload (gnu packages python-build) (python-wheel)
+  #:autoload (gnu packages python-crypto) (python-m2crypto)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages regex)
diff --git a/gnu/packages/c.scm b/gnu/packages/c.scm
index d7d649488b..16fc109ff3 100644
--- a/gnu/packages/c.scm
+++ b/gnu/packages/c.scm
@@ -55,7 +55,7 @@ (define-module (gnu packages c)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages guile)
-  #:use-module (gnu packages lua)
+  #:autoload (gnu packages lua) (lua)
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages python)
diff --git a/gnu/packages/cdrom.scm b/gnu/packages/cdrom.scm
index 6391bd6fec..5c9729581f 100644
--- a/gnu/packages/cdrom.scm
+++ b/gnu/packages/cdrom.scm
@@ -59,7 +59,7 @@ (define-module (gnu packages cdrom)
   #:use-module (gnu packages music)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages elf)
-  #:use-module (gnu packages wxwidgets)
+  #:autoload (gnu packages wxwidgets) (wxsvg wxwidgets-3.1)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages readline)
diff --git a/gnu/packages/code.scm b/gnu/packages/code.scm
index f4855e12e9..48018a53af 100644
--- a/gnu/packages/code.scm
+++ b/gnu/packages/code.scm
@@ -54,13 +54,13 @@ (define-module (gnu packages code)
   #:use-module (gnu packages cpp)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages elf)
-  #:use-module (gnu packages emacs)
+  #:autoload (gnu packages emacs) (emacs-minimal)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages llvm)
   #:use-module (gnu packages linux)
-  #:use-module (gnu packages lua)
+  #:autoload (gnu packages lua) (lua selene)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages perl)
@@ -70,7 +70,7 @@ (define-module (gnu packages code)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages readline)
-  #:use-module (gnu packages serialization)
+  #:autoload (gnu packages serialization) (libyaml)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages tls)
diff --git a/gnu/packages/cpp.scm b/gnu/packages/cpp.scm
index e6d734010d..f8ca0039f3 100644
--- a/gnu/packages/cpp.scm
+++ b/gnu/packages/cpp.scm
@@ -74,19 +74,19 @@ (define-module (gnu packages cpp)
   #:use-module (gnu packages libunwind)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages llvm)
-  #:use-module (gnu packages logging)
+  #:autoload (gnu packages logging) (glog)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages onc-rpc)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages python)
-  #:use-module (gnu packages python-check)
+  #:autoload (gnu packages python-check) (python-testfixtures)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages popt)
-  #:use-module (gnu packages pretty-print)
-  #:use-module (gnu packages pulseaudio)
+  #:autoload (gnu packages pretty-print) (fmt)
+  #:autoload (gnu packages pulseaudio) (pulseaudio)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages web)
-  #:use-module (gnu packages xml)
+  #:autoload (gnu packages xml) (expat xerces-c)
   #:use-module (ice-9 match))
 
 (define-public argagg
diff --git a/gnu/packages/cups.scm b/gnu/packages/cups.scm
index 3de9ddbf22..0d3819c917 100644
--- a/gnu/packages/cups.scm
+++ b/gnu/packages/cups.scm
@@ -37,12 +37,12 @@ (define-module (gnu packages cups)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages groff)
   #:use-module (gnu packages image)
-  #:use-module (gnu packages libusb)
-  #:use-module (gnu packages pdf)
+  #:autoload (gnu packages libusb) (libusb)
+  #:autoload (gnu packages pdf) (poppler qpdf)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages polkit)
-  #:use-module (gnu packages pretty-print)
+  #:autoload (gnu packages pretty-print) (a2ps)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
diff --git a/gnu/packages/dns.scm b/gnu/packages/dns.scm
index e4dd8365f8..cf35d457fd 100644
--- a/gnu/packages/dns.scm
+++ b/gnu/packages/dns.scm
@@ -59,7 +59,7 @@ (define-module (gnu packages dns)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages libidn)
   #:use-module (gnu packages linux)
-  #:use-module (gnu packages lua)
+  #:autoload (gnu packages lua) (luajit lua5.1-bitop)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages nettle)
   #:use-module (gnu packages networking)
diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm
index 037a247243..e1c62a44d0 100644
--- a/gnu/packages/freedesktop.scm
+++ b/gnu/packages/freedesktop.scm
@@ -71,9 +71,9 @@ (define-module (gnu packages freedesktop)
   #:use-module (gnu packages check)
   #:use-module (gnu packages cmake)
   #:use-module (gnu packages compression)
-  #:use-module (gnu packages cryptsetup)
+  #:autoload (gnu packages cryptsetup) (cryptsetup)
   #:use-module (gnu packages databases)
-  #:use-module (gnu packages disk)
+  #:autoload (gnu packages disk) (libblockdev)
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages file)
@@ -81,19 +81,19 @@ (define-module (gnu packages freedesktop)
   #:use-module (gnu packages gawk)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages ghostscript)
-  #:use-module (gnu packages gl)
+  #:autoload (gnu packages gl) (mesa)
   #:use-module (gnu packages glib)                ;intltool
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gperf)
-  #:use-module (gnu packages graph)
+  #:autoload (gnu packages graph) (mscgen)
   #:use-module (gnu packages graphviz)
-  #:use-module (gnu packages gstreamer)
+  #:autoload (gnu packages gstreamer)
+  (gstreamer gst-plugins-bad gst-plugins-base gst-plugins-good)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
-  #:use-module (gnu packages language)
+  #:autoload (gnu packages language) (libstemmer)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages libunwind)
-  #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages man)
   #:use-module (gnu packages m4)
@@ -105,17 +105,17 @@ (define-module (gnu packages freedesktop)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages polkit)
   #:use-module (gnu packages python)
-  #:use-module (gnu packages python-crypto)
+  #:autoload (gnu packages python-crypto) (python-keyutils)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages rdesktop)
   #:use-module (gnu packages rsync)
   #:use-module (gnu packages samba)
-  #:use-module (gnu packages serialization)
+  #:autoload (gnu packages serialization) (libyaml)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages valgrind)
-  #:use-module (gnu packages video)
-  #:use-module (gnu packages w3m)
+  #:autoload (gnu packages video) (libva)
+  #:autoload (gnu packages w3m) (w3m)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xml)
diff --git a/gnu/packages/gdb.scm b/gnu/packages/gdb.scm
index 7d8416c7c5..2b96a35c5c 100644
--- a/gnu/packages/gdb.scm
+++ b/gnu/packages/gdb.scm
@@ -33,7 +33,7 @@ (define-module (gnu packages gdb)
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages guile)
-  #:use-module (gnu packages pretty-print)
+  #:autoload (gnu packages pretty-print) (source-highlight)
   #:use-module (gnu packages python)
   #:use-module (gnu packages pkg-config)
   #:use-module (guix download)
diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm
index c740c087dd..89627fd268 100644
--- a/gnu/packages/gl.scm
+++ b/gnu/packages/gl.scm
@@ -48,13 +48,13 @@ (define-module (gnu packages gl)
   #:use-module (gnu packages image)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages llvm)
-  #:use-module (gnu packages mono)
+  #:autoload (gnu packages mono) (mono)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages tls)
-  #:use-module (gnu packages video)
-  #:use-module (gnu packages vulkan)
+  #:autoload (gnu packages video) (libva libvdpau)
+  #:autoload (gnu packages vulkan) (glslang)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
index 820a44cbde..c904ee7def 100644
--- a/gnu/packages/glib.scm
+++ b/gnu/packages/glib.scm
@@ -45,7 +45,7 @@ (define-module (gnu packages glib)
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages elf)
-  #:use-module (gnu packages enlightenment)
+  #:autoload (gnu packages enlightenment) (efl)
   #:use-module (gnu packages file)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages gettext)
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 251d08ae01..3a95a3fcf1 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -90,10 +90,11 @@
 
 (define-module (gnu packages gnome)
   #:use-module (gnu packages)
-  #:use-module (gnu packages admin)
-  #:use-module (gnu packages aidc)
-  #:use-module (gnu packages aspell)
-  #:use-module (gnu packages autotools)
+  #:autoload (gnu packages admin) (audit isc-dhcp)
+  #:autoload (gnu packages aidc) (zbar)
+  #:autoload (gnu packages aspell) (aspell-dict-en)
+  #:autoload (gnu packages autotools)
+  (autoconf autoconf-archive automake config libtool)
   #:use-module (gnu packages avahi)
   #:use-module (gnu packages backup)
   #:use-module (gnu packages base)
@@ -101,120 +102,136 @@ (define-module (gnu packages gnome)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages build-tools)
-  #:use-module (gnu packages calendar)
-  #:use-module (gnu packages cdrom)
+  #:autoload (gnu packages calendar) (libical)
+  #:autoload (gnu packages cdrom) (dvd+rw-tools libcdio-paranoia libcue)
   #:use-module (gnu packages check)
   #:use-module (gnu packages cmake)
   #:use-module (gnu packages compression)
-  #:use-module (gnu packages crates-io)
-  #:use-module (gnu packages crates-graphics)
-  #:use-module (gnu packages crates-gtk)
+  #:autoload (gnu packages crates-io)
+  (rust-bitflags-1
+   rust-assert-cmd-1 rust-cast-0.2 rust-chrono-0.4 rust-criterion-0.3
+   rust-cssparser-0.27 rust-data-url-0.1 rust-encoding-0.2 rust-float-cmp-0.8
+   rust-itertools-0.9 rust-language-tags-0.2 rust-libc-0.2
+   rust-locale-config-0.3 rust-lopdf-0.26 rust-markup5ever-0.10
+   rust-nalgebra-0.21 rust-num-traits-0.2 rust-once-cell-1 rust-pkg-config-0.3
+   rust-predicates-1 rust-rayon-1 rust-rctree-0.3 rust-regex-1
+   rust-selectors-0.22 rust-string-cache-0.8 rust-tempfile-3 rust-tinyvec-0.3
+   rust-url-2 rust-xml5ever-0.16)
+  #:autoload (gnu packages crates-graphics) (rust-png-0.16 rust-rgb-0.8)
+  #:autoload (gnu packages crates-gtk)
+  (rust-cairo-rs-0.8
+   rust-cairo-sys-rs-0.9 rust-gdk-pixbuf-0.8 rust-gdk-pixbuf-sys-0.9
+   rust-gio-0.8 rust-gio-sys-0.9 rust-glib-0.9 rust-glib-sys-0.9
+   rust-gobject-sys-0.9 rust-pango-0.8 rust-pango-sys-0.9 rust-pangocairo-0.9)
   #:use-module (gnu packages cups)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages cyrus-sasl)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages dbm)
-  #:use-module (gnu packages djvu)
+  #:autoload (gnu packages djvu) (djvulibre)
   #:use-module (gnu packages dns)
   #:use-module (gnu packages docbook)
-  #:use-module (gnu packages docker)
+  #:autoload (gnu packages docker) (tini)
   #:use-module (gnu packages documentation)
-  #:use-module (gnu packages enchant)
+  #:autoload (gnu packages enchant) (enchant python-pyenchant)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages fonts)
-  #:use-module (gnu packages file-systems)
+  #:autoload (gnu packages file-systems) (libnfs)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
-  #:use-module (gnu packages game-development)
+  #:autoload (gnu packages game-development) (qqwing)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages ghostscript)
-  #:use-module (gnu packages gimp)
-  #:use-module (gnu packages gl)
+  #:autoload (gnu packages gimp) (babl gegl)
+  #:autoload (gnu packages gl) (libepoxy mesa mesa-headers glu)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnupg)
-  #:use-module (gnu packages gnuzilla)
-  #:use-module (gnu packages geo)
+  #:autoload (gnu packages gnuzilla) (mozjs)
+  #:autoload (gnu packages geo) (gnome-maps)
   #:use-module (gnu packages gperf)
   #:use-module (gnu packages graphviz)
-  #:use-module (gnu packages gstreamer)
+  #:autoload (gnu packages gstreamer)
+  (gstreamer gst-editing-services gst-plugins-bad gst-plugins-base
+             gst-plugins-good gst-plugins-good gst-plugins-ugly python-gst)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages guile)
-  #:use-module (gnu packages haskell-xyz)
+  #:autoload (gnu packages haskell-xyz) (pandoc)
   #:use-module (gnu packages ibus)
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
   #:use-module (gnu packages imagemagick)
-  #:use-module (gnu packages inkscape)
   #:use-module (gnu packages iso-codes)
   #:use-module (gnu packages kerberos)
-  #:use-module (gnu packages language)
+  #:autoload (gnu packages language) (libstemmer)
   #:use-module (gnu packages libcanberra)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages libunistring)
   #:use-module (gnu packages libunwind)
-  #:use-module (gnu packages libusb)
+  #:autoload (gnu packages libusb) (libimobiledevice libmtp libusb)
   #:use-module (gnu packages linux)
-  #:use-module (gnu packages lirc)
+  #:autoload (gnu packages lirc) (lirc)
   #:use-module (gnu packages llvm)
-  #:use-module (gnu packages lua)
-  #:use-module (gnu packages mail)
+  #:autoload (gnu packages lua) (lua-5.2)
+  #:autoload (gnu packages mail) (gmime ytnef)
   #:use-module (gnu packages man)
   #:use-module (gnu packages markup)
-  #:use-module (gnu packages messaging)
-  #:use-module (gnu packages mp3)
+  #:autoload (gnu packages messaging) (libphonenumber)
+  #:autoload (gnu packages mp3) (taglib)
   #:use-module (gnu packages multiprecision)
-  #:use-module (gnu packages music)
+  #:autoload (gnu packages music)
+  (libdiscid libmusicbrainz python-pylast)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages nettle)
   #:use-module (gnu packages networking)
   #:use-module (gnu packages ninja)
-  #:use-module (gnu packages node)
+  #:autoload (gnu packages node) (node)
   #:use-module (gnu packages nss)
-  #:use-module (gnu packages ocr)
-  #:use-module (gnu packages openldap)
-  #:use-module (gnu packages package-management)
-  #:use-module (gnu packages password-utils)
+  #:autoload (gnu packages ocr) (ocrad tesseract-ocr)
+  #:autoload (gnu packages openldap) (openldap)
+  #:autoload (gnu packages package-management) (guix-icons)
+  #:autoload (gnu packages password-utils) (libpwquality)
   #:use-module (gnu packages pcre)
-  #:use-module (gnu packages pdf)
+  #:autoload (gnu packages pdf) (poppler python-reportlab)
   #:use-module (gnu packages perl)
-  #:use-module (gnu packages photo)
+  #:autoload (gnu packages photo) (libexif libgphoto2 libraw)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages polkit)
   #:use-module (gnu packages popt)
-  #:use-module (gnu packages pretty-print)
-  #:use-module (gnu packages protobuf)
+  #:autoload (gnu packages pretty-print) (highlight)
+  #:autoload (gnu packages protobuf) (protobuf python-pure-protobuf)
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages python)
-  #:use-module (gnu packages python-crypto)
+  #:autoload (gnu packages python-crypto)
+  (python-keyring python-pycrypto python-pykeepass python-pyotp)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
-  #:use-module (gnu packages rdesktop)
+  #:autoload (gnu packages rdesktop) (freerdp)
   #:use-module (gnu packages rdf)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages ruby)
-  #:use-module (gnu packages rust)
   #:use-module (gnu packages samba)
   #:use-module (gnu packages scanner)
-  #:use-module (gnu packages sdl)
-  #:use-module (gnu packages search)
+  #:autoload (gnu packages search) (xapian)
   #:use-module (gnu packages selinux)
   #:use-module (gnu packages slang)
-  #:use-module (gnu packages speech)
-  #:use-module (gnu packages spice)
+  #:autoload (gnu packages speech)
+  (pocketsphinx speech-dispatcher sphinxbase)
+  #:autoload (gnu packages spice) (spice spice-gtk)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages ssh)
   #:use-module (gnu packages swig)
   #:use-module (gnu packages tex)
   #:use-module (gnu packages time)
   #:use-module (gnu packages tls)
-  #:use-module (gnu packages valgrind)
+  #:autoload (gnu packages valgrind) (valgrind)
   #:use-module (gnu packages version-control)
-  #:use-module (gnu packages video)
-  #:use-module (gnu packages virtualization)
-  #:use-module (gnu packages vpn)
+  #:autoload (gnu packages video) (libbluray libdvdread ffmpeg)
+  #:autoload (gnu packages virtualization)
+  (bubblewrap libosinfo libvirt libvirt-glib)
+  #:autoload (gnu packages vpn) (openconnect openvpn vpnc)
   #:use-module (gnu packages web)
-  #:use-module (gnu packages webkit)
+  #:autoload (gnu packages webkit) (webkitgtk webkitgtk-with-libsoup2)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xiph)
   #:use-module (gnu packages xml)
diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm
index 9a378e76a6..bef3d23771 100644
--- a/gnu/packages/graphics.scm
+++ b/gnu/packages/graphics.scm
@@ -58,7 +58,7 @@ (define-module (gnu packages graphics)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages build-tools)
-  #:use-module (gnu packages cdrom)
+  #:autoload (gnu packages cdrom) (libcddb)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages crypto)
@@ -73,52 +73,52 @@ (define-module (gnu packages graphics)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
-  #:use-module (gnu packages gnunet)
+  #:autoload (gnu packages gnunet) (libmicrohttpd)
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages gtk)
-  #:use-module (gnu packages haskell-xyz)
   #:use-module (gnu packages image)
   #:use-module (gnu packages image-processing)
   #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages jemalloc)
-  #:use-module (gnu packages kde-frameworks)
-  #:use-module (gnu packages libusb)
+  #:autoload (gnu packages kde-frameworks)
+  (extra-cmake-modules karchive kdnssd)
+  #:autoload (gnu packages libusb) (libusb)
   #:use-module (gnu packages linux)
-  #:use-module (gnu packages logging)
+  #:autoload (gnu packages logging) (spdlog)
   #:use-module (gnu packages llvm)
-  #:use-module (gnu packages lua)
+  #:autoload (gnu packages lua) (luajit)
   #:use-module (gnu packages maths)
-  #:use-module (gnu packages mp3)
+  #:autoload (gnu packages mp3) (libmad)
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages ninja)
   #:use-module (gnu packages pciutils)
-  #:use-module (gnu packages pdf)
+  #:autoload (gnu packages pdf) (fbida)
   #:use-module (gnu packages perl)
-  #:use-module (gnu packages photo)
+  #:autoload (gnu packages photo) (perl-image-exiftool)
   #:use-module (gnu packages pkg-config)
-  #:use-module (gnu packages plotutils)
-  #:use-module (gnu packages pretty-print)
+  #:autoload (gnu packages plotutils) (plotutils)
+  #:autoload (gnu packages pretty-print) (fmt)
   #:use-module (gnu packages pth)
   #:use-module (gnu packages pulseaudio)  ; libsndfile, libsamplerate
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-xyz)
-  #:use-module (gnu packages qt)
+  #:autoload (gnu packages qt)
+  (qtbase-5 qtsvg-5 qtkeychain qtmultimedia-5 qttools-5 qtx11extras)
   #:use-module (gnu packages readline)
-  #:use-module (gnu packages sdl)
+  #:autoload (gnu packages sdl) (sdl sdl2)
   #:use-module (gnu packages serialization)
-  #:use-module (gnu packages stb)
   #:use-module (gnu packages swig)
-  #:use-module (gnu packages tbb)
-  #:use-module (gnu packages toolkits)
-  #:use-module (gnu packages upnp)
+  #:autoload (gnu packages tbb) (tbb)
+  #:autoload (gnu packages toolkits) (imgui-1.86)
   #:use-module (gnu packages video)
-  #:use-module (gnu packages vulkan)
-  #:use-module (gnu packages xiph)
-  #:use-module (gnu packages xml)
+  #:autoload (gnu packages vulkan)
+  (glslang vulkan-headers vulkan-loader shaderc)
+  #:autoload (gnu packages xiph) (libvorbis)
+  #:autoload (gnu packages xml) (expat pugixml)
   #:use-module (gnu packages xorg)
-  #:use-module (gnu packages xdisorg)
+  #:autoload (gnu packages xdisorg) (libdrm pixman)
   #:use-module (guix build-system copy)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
diff --git a/gnu/packages/gstreamer.scm b/gnu/packages/gstreamer.scm
index a1503602ad..623afca302 100644
--- a/gnu/packages/gstreamer.scm
+++ b/gnu/packages/gstreamer.scm
@@ -37,13 +37,13 @@ (define-module (gnu packages gstreamer)
   #:use-module (guix build-system trivial)
   #:use-module (guix utils)
   #:use-module (gnu packages)
-  #:use-module (gnu packages aidc)
+  #:autoload (gnu packages aidc) (zbar zxing-cpp-1.2)
   #:use-module (gnu packages audio)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
-  #:use-module (gnu packages cdrom)
+  #:autoload (gnu packages cdrom) (cdparanoia libcdio)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages documentation)
@@ -60,22 +60,21 @@ (define-module (gnu packages gstreamer)
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
-  #:use-module (gnu packages image-processing)
+  ;#:use-module (gnu packages image-processing)
   #:use-module (gnu packages iso-codes)
-  #:use-module (gnu packages java)
+  #:autoload (gnu packages java) (openjdk14)
   #:use-module (gnu packages libunwind)
-  #:use-module (gnu packages libusb)
+  #:autoload (gnu packages libusb) (libusb)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages maths)
-  #:use-module (gnu packages mp3)
+  #:autoload (gnu packages mp3) (chromaprint lame libmpcdec mpg123 taglib)
   #:use-module (gnu packages multiprecision)
-  #:use-module (gnu packages music)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages nettle)
   #:use-module (gnu packages networking)
-  #:use-module (gnu packages ocr)
+  #:autoload (gnu packages ocr) (tesseract-ocr)
   #:use-module (gnu packages perl)
-  #:use-module (gnu packages photo)
+  #:autoload (gnu packages photo) (libexif)
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages rdf)
@@ -87,14 +86,14 @@ (define-module (gnu packages gstreamer)
   #:use-module (gnu packages xiph)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages ruby)
-  #:use-module (gnu packages speech)
+  #:autoload (gnu packages speech) (flite)
   #:use-module (gnu packages python)
   #:use-module (gnu packages ssh)
-  #:use-module (gnu packages telephony)
+  #:autoload (gnu packages telephony) (libsrtp spandsp)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
-  #:use-module (gnu packages vulkan)
-  #:use-module (gnu packages webkit)
+  #:autoload (gnu packages vulkan) (vulkan-headers vulkan-loader)
+  #:autoload (gnu packages webkit) (wpebackend-fdo)
   #:use-module (gnu packages assembly)
   #:use-module (gnu packages xml))
 
diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index 5e6e6892aa..b99d118b64 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -74,13 +74,13 @@ (define-module (gnu packages gtk)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages documentation)
-  #:use-module (gnu packages enchant)
+  #:autoload (gnu packages enchant) (enchant)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages fribidi)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages ghostscript)
-  #:use-module (gnu packages gl)
+  #:autoload (gnu packages gl) (libepoxy mesa)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages graphviz)
@@ -95,17 +95,18 @@ (define-module (gnu packages gtk)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages perl-check)
   #:use-module (gnu packages pkg-config)
-  #:use-module (gnu packages pretty-print)
+  #:autoload (gnu packages pretty-print) (source-highlight)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-xyz)
-  #:use-module (gnu packages gstreamer)
+  #:autoload (gnu packages gstreamer)
+  (gstreamer gst-plugins-bad gst-plugins-base)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages guile-xyz)
   #:use-module (gnu packages cups)
   #:use-module (gnu packages version-control)
-  #:use-module (gnu packages video)
-  #:use-module (gnu packages vulkan)
+  #:autoload (gnu packages video) (ffmpeg)
+  #:autoload (gnu packages vulkan) (vulkan-headers vulkan-loader)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
diff --git a/gnu/packages/image-processing.scm b/gnu/packages/image-processing.scm
index 3dfe086af8..c41c7c1b86 100644
--- a/gnu/packages/image-processing.scm
+++ b/gnu/packages/image-processing.scm
@@ -58,9 +58,9 @@ (define-module (gnu packages image-processing)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages fontutils)
-  #:use-module (gnu packages geo)
+  #:autoload (gnu packages geo) (proj libgeotiff)
   #:use-module (gnu packages ghostscript)
-  #:use-module (gnu packages gimp)
+  #:autoload (gnu packages gimp) (gegl gimp)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
@@ -75,7 +75,7 @@ (define-module (gnu packages image-processing)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages pdf)
   #:use-module (gnu packages perl)
-  #:use-module (gnu packages photo)
+  #:autoload (gnu packages photo) (libexif libgphoto2)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages python)
diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm
index e679a73f9d..1b1fba03f4 100644
--- a/gnu/packages/image.scm
+++ b/gnu/packages/image.scm
@@ -69,20 +69,20 @@ (define-module (gnu packages image)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages ghostscript)
-  #:use-module (gnu packages gimp)
-  #:use-module (gnu packages gl)
+  #:autoload (gnu packages gimp) (libmypaint mypaint-brushes)
+  #:autoload (gnu packages gl) (freeglut)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages graphics)
   #:use-module (gnu packages gtk)
-  #:use-module (gnu packages lua)
+  ;#:use-module (gnu packages lua) (lua-5.2)
   #:use-module (gnu packages man)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages mcrypt)
-  #:use-module (gnu packages mp3)
+  #:autoload (gnu packages mp3) (libid3tag)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages perl)
-  #:use-module (gnu packages photo)
+  #:autoload (gnu packages photo) (libraw perl-image-exiftool)
   #:use-module (gnu packages popt)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
@@ -92,7 +92,7 @@ (define-module (gnu packages image)
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages swig)
   #:use-module (gnu packages textutils)
-  #:use-module (gnu packages video)
+  #:autoload (gnu packages video) (dav1d libaom libde265 rav1e x265)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xml)
diff --git a/gnu/packages/inkscape.scm b/gnu/packages/inkscape.scm
index 2e43835e4f..87c4850bf7 100644
--- a/gnu/packages/inkscape.scm
+++ b/gnu/packages/inkscape.scm
@@ -40,7 +40,8 @@ (define-module (gnu packages inkscape)
   #:use-module (gnu packages graphics)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages imagemagick)
-  #:use-module (gnu packages libreoffice)
+  #:autoload (gnu packages libreoffice)
+  (libcdr libvisio libwpd libwpg)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pdf)
diff --git a/gnu/packages/libusb.scm b/gnu/packages/libusb.scm
index 8a5967f7b4..1d4b4305fd 100644
--- a/gnu/packages/libusb.scm
+++ b/gnu/packages/libusb.scm
@@ -43,9 +43,10 @@ (define-module (gnu packages libusb)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages gnupg)
   #:use-module (gnu packages gtk)
-  #:use-module (gnu packages java)
+  #:autoload (gnu packages java)
+  (icedtea java-commons-lang3 java-hamcrest-core java-junit)
   #:use-module (gnu packages linux)
-  #:use-module (gnu packages mp3)
+  #:autoload (gnu packages mp3) (libid3tag)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index 2d3ee79339..80f2980003 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -60,13 +60,14 @@ (define-module (gnu packages llvm)
   #:use-module (gnu packages bootstrap)           ;glibc-dynamic-linker
   #:use-module (gnu packages check)               ;python-lit
   #:use-module (gnu packages compression)
-  #:use-module (gnu packages julia)               ;julia-patch
+  #:autoload (gnu packages julia) (julia-patch)
   #:use-module (gnu packages libedit)
   #:use-module (gnu packages libffi)
-  #:use-module (gnu packages lua)
+  #:autoload (gnu packages lua) (lua)
   #:use-module (gnu packages mpi)
   #:use-module (gnu packages ncurses)
-  #:use-module (gnu packages ocaml)
+  #:autoload (gnu packages ocaml)
+  (ocaml ocaml-ctypes ocaml-findlib ocaml-integers ocaml-ounit)
   #:use-module (gnu packages onc-rpc)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
diff --git a/gnu/packages/logging.scm b/gnu/packages/logging.scm
index 099b6a9509..615cde2ce3 100644
--- a/gnu/packages/logging.scm
+++ b/gnu/packages/logging.scm
@@ -42,7 +42,7 @@ (define-module (gnu packages logging)
   #:use-module (gnu packages cyrus-sasl)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages flex)
-  #:use-module (gnu packages geo)
+  #:autoload (gnu packages geo) (libmaxminddb)
   #:use-module (gnu packages gnupg)
   #:use-module (gnu packages kerberos)
   #:use-module (gnu packages linux)
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 72d5e9a83a..4e9ceed460 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -92,7 +92,7 @@ (define-module (gnu packages maths)
   #:use-module (guix build-system python)
   #:use-module (guix build-system ruby)
   #:use-module (gnu packages algebra)
-  #:use-module (gnu packages audio)
+  #:autoload (gnu packages audio) (portaudio)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
@@ -101,17 +101,17 @@ (define-module (gnu packages maths)
   #:use-module (gnu packages check)
   #:use-module (gnu packages cmake)
   #:use-module (gnu packages compression)
-  #:use-module (gnu packages coq)
+  #:autoload (gnu packages coq) (coq coq-flocq)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages cyrus-sasl)
-  #:use-module (gnu packages datamash)
+  #:autoload (gnu packages datamash) (vnlog)
   #:use-module (gnu packages dbm)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages elf)
-  #:use-module (gnu packages emacs)
+  #:autoload (gnu packages emacs) (emacs-minimal)
   #:use-module (gnu packages file)
   #:use-module (gnu packages flex)
-  #:use-module (gnu packages fltk)
+  #:autoload (gnu packages fltk) (fltk)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gcc)
@@ -122,26 +122,29 @@ (define-module (gnu packages maths)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
-  #:use-module (gnu packages java)
+  #:autoload (gnu packages java)
+  (icedtea java-hamcrest-core java-junit java-slf4j-api java-slf4j-simple)
   #:use-module (gnu packages less)
-  #:use-module (gnu packages lisp)
+  #:autoload (gnu packages lisp) (sbcl)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages llvm)
-  #:use-module (gnu packages logging)
-  #:use-module (gnu packages lua)
+  #:autoload (gnu packages logging) (glog)
+  #:autoload (gnu packages lua) (lua)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages xorg)
-  #:use-module (gnu packages gl)
+  #:autoload (gnu packages gl) (glu gl2ps mesa)
   #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages m4)
   #:use-module (gnu packages mpi)
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages netpbm)
-  #:use-module (gnu packages ocaml)
+  #:autoload (gnu packages ocaml)
+  (camlzip lablgtk3 ocaml ocaml-biniou ocaml-easy-format ocaml-findlib
+           ocaml-graph ocaml-menhir ocaml-num ocaml-yojson ocaml-zarith)
   #:use-module (gnu packages onc-rpc)
-  #:use-module (gnu packages parallel)
+  #:autoload (gnu packages parallel) (psimd)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages popt)
   #:use-module (gnu packages perl)
@@ -154,7 +157,7 @@ (define-module (gnu packages maths)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages ruby)
   #:use-module (gnu packages tbb)
-  #:use-module (gnu packages scheme)
+  #:autoload (gnu packages scheme) (scm)
   #:use-module (gnu packages serialization)
   #:use-module (gnu packages shells)
   #:use-module (gnu packages sphinx)
@@ -164,7 +167,7 @@ (define-module (gnu packages maths)
   #:use-module (gnu packages tex)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
-  #:use-module (gnu packages wxwidgets)
+  #:autoload (gnu packages wxwidgets) (wxwidgets)
   #:use-module (gnu packages xml)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26))
diff --git a/gnu/packages/mpi.scm b/gnu/packages/mpi.scm
index ebf9238906..0bc71b1cc7 100644
--- a/gnu/packages/mpi.scm
+++ b/gnu/packages/mpi.scm
@@ -35,9 +35,9 @@ (define-module (gnu packages mpi)
   #:use-module (gnu packages)
   #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
-  #:use-module (gnu packages fabric-management)
+  #:autoload (gnu packages fabric-management) (opensm ucx)
   #:use-module (gnu packages gcc)
-  #:use-module (gnu packages java)
+  #:autoload (gnu packages java) (openjdk11)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages pciutils)
@@ -46,7 +46,7 @@ (define-module (gnu packages mpi)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages ncurses)
-  #:use-module (gnu packages parallel)
+  #:autoload (gnu packages parallel) (slurm)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages valgrind)
   #:use-module (srfi srfi-1)
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index e1de632dda..2c1e8dbfa4 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -96,7 +96,7 @@ (define-module (gnu packages music)
   #:use-module (gnu packages backup)
   #:use-module (gnu packages base) ;libbdf
   #:use-module (gnu packages bash)
-  #:use-module (gnu packages benchmark)
+  #:autoload (gnu packages benchmark) (benchmark)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages build-tools)
@@ -112,40 +112,39 @@ (define-module (gnu packages music)
   #:use-module (gnu packages datastructures)
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages documentation)
-  #:use-module (gnu packages emacs)
+  #:autoload (gnu packages emacs) (emacs-no-x)
   #:use-module (gnu packages file)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages fltk)
   #:use-module (gnu packages fonts)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
-  #:use-module (gnu packages game-development)
-  #:use-module (gnu packages gnupg)
+  #:autoload (gnu packages game-development) (allegro-4)
+  #:autoload (gnu packages gnupg) (libgcrypt)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
-  #:use-module (gnu packages gnunet)
-  #:use-module (gnu packages gpodder)
+  #:autoload (gnu packages gnunet) (libmicrohttpd)
+  #:autoload (gnu packages gpodder) (libmygpo-qt)
   #:use-module (gnu packages graphics)
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages guile)
-  #:use-module (gnu packages haskell)
   #:use-module (gnu packages image)
   #:use-module (gnu packages imagemagick)
-  #:use-module (gnu packages java)
+  #:autoload (gnu packages java) (icedtea-8 java-swt)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages libevent)
-  #:use-module (gnu packages libusb)
+  #:autoload (gnu packages libusb) (hidapi libmtp libusb)
   #:use-module (gnu packages linux) ; for alsa-utils
-  #:use-module (gnu packages lirc)
+  #:autoload (gnu packages lirc) (lirc)
   #:use-module (gnu packages llvm)
   #:use-module (gnu packages man)
   #:use-module (gnu packages mp3)
-  #:use-module (gnu packages mpd)
+  #:autoload (gnu packages mpd) (python-mpd2)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages netpbm)
   #:use-module (gnu packages pcre)
@@ -178,17 +177,23 @@ (define-module (gnu packages music)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages video)
-  #:use-module (gnu packages vim)       ;for 'xxd'
+  #:autoload (gnu packages vim) (xxd)
   #:use-module (gnu packages web)
-  #:use-module (gnu packages webkit)
-  #:use-module (gnu packages wm)
-  #:use-module (gnu packages wxwidgets)
+  #:autoload (gnu packages webkit) (webkitgtk)
+  #:autoload (gnu packages wm) (keybinder-3.0)
+  #:autoload (gnu packages wxwidgets) (wxwidgets wxwidgets-gtk2)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages xiph)
-  #:use-module (gnu packages golang)
-  #:use-module (gnu packages lua)
+  #:autoload (gnu packages golang)
+  (go-github-com-aarzilli-golua
+   go-github-com-mattn-go-colorable go-github-com-mattn-go-isatty
+   go-github-com-mgutz-ansi go-github-com-michiwend-gomusicbrainz
+   go-github-com-stevedonovan-luar go-github-com-wtolson-go-taglib
+   go-github-com-yookoala-realpath go-gitlab-com-ambrevar-damerau
+   go-gitlab-com-ambrevar-golua-unicode)
+  #:autoload (gnu packages lua) (lua)
   #:use-module ((srfi srfi-1) #:select (last)))
 
 (define-public audacious
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index 2fea1b2b59..974ef4e883 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -110,33 +110,41 @@ (define-module (gnu packages networking)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gnupg)
-  #:use-module (gnu packages golang)
+  #:autoload (gnu packages golang)
+  (go-github-com-arceliar-ironwood
+   go-github-com-arceliar-phony go-github-com-cheggaaa-pb-v3
+   go-github-com-fatih-color go-github-com-gologme-log
+   go-github-com-hashicorp-go-syslog go-github-com-hjson-hjson-go
+   go-github-com-kardianos-minwinsvc go-github-com-mattn-go-isatty
+   go-github-com-mattn-go-runewidth go-github-com-mitchellh-mapstructure
+   go-github-com-vividcortex-ewma go-golang-org-x-crypto go-golang-org-x-net
+   go-golang-org-x-sys go-golang-org-x-text go-golang-zx2c4-com-wireguard)
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages libidn)
-  #:use-module (gnu packages libusb)
+  #:autoload (gnu packages libusb) (libusb)
   #:use-module (gnu packages linux)
-  #:use-module (gnu packages lua)
+  #:autoload (gnu packages lua) (lua lua-5.2)
   #:use-module (gnu packages kerberos)
   #:use-module (gnu packages mpi)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages nettle)
-  #:use-module (gnu packages openldap)
+  #:autoload (gnu packages openldap) (openldap)
   #:use-module (gnu packages onc-rpc)
-  #:use-module (gnu packages password-utils)
+  #:autoload (gnu packages password-utils) (argon2)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages perl-check)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages polkit)
-  #:use-module (gnu packages pretty-print)
+  #:autoload (gnu packages pretty-print) (fmt)
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages python)
-  #:use-module (gnu packages python-crypto)
+  #:autoload (gnu packages python-crypto) (python-pycryptodome)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
@@ -153,7 +161,7 @@ (define-module (gnu packages networking)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages valgrind)
   #:use-module (gnu packages web)
-  #:use-module (gnu packages wxwidgets)
+  #:autoload (gnu packages wxwidgets) (wxwidgets-gtk2)
   #:use-module (gnu packages xml)
   #:use-module (ice-9 match))
 
diff --git a/gnu/packages/openldap.scm b/gnu/packages/openldap.scm
index c8a47e45d5..1cbf138e4c 100644
--- a/gnu/packages/openldap.scm
+++ b/gnu/packages/openldap.scm
@@ -41,7 +41,7 @@ (define-module (gnu packages openldap)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages networking)
   #:use-module (gnu packages nss)
-  #:use-module (gnu packages password-utils)
+  #:autoload (gnu packages password-utils) (cracklib)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
diff --git a/gnu/packages/password-utils.scm b/gnu/packages/password-utils.scm
index 0069fdd74c..cbeaa457ee 100644
--- a/gnu/packages/password-utils.scm
+++ b/gnu/packages/password-utils.scm
@@ -63,7 +63,7 @@ (define-module (gnu packages password-utils)
   #:use-module (guix packages)
   #:use-module (gnu packages)
   #:use-module (gnu packages admin)
-  #:use-module (gnu packages aidc)
+  #:autoload (gnu packages aidc) (qrencode)
   #:use-module (gnu packages authentication)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm
index 39266a2822..acca5ac096 100644
--- a/gnu/packages/pdf.scm
+++ b/gnu/packages/pdf.scm
@@ -52,7 +52,7 @@ (define-module (gnu packages pdf)
   #:use-module (guix build-system qt)
   #:use-module (guix build-system trivial)
   #:use-module (gnu packages)
-  #:use-module (gnu packages audio)
+  #:autoload (gnu packages audio) (portaudio)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages backup)
   #:use-module (gnu packages base)
@@ -62,38 +62,38 @@ (define-module (gnu packages pdf)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cups)
   #:use-module (gnu packages curl)
-  #:use-module (gnu packages djvu)
+  #:autoload (gnu packages djvu) (djvulibre)
   #:use-module (gnu packages fonts)
   #:use-module (gnu packages fontutils)
-  #:use-module (gnu packages game-development)
+  #:autoload (gnu packages game-development) (python-pygame)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages ghostscript)
-  #:use-module (gnu packages gl)
+  #:autoload (gnu packages gl) (freeglut mesa libepoxy)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gnupg)
-  #:use-module (gnu packages gstreamer)
+  #:autoload (gnu packages gstreamer) (gstreamer gst-plugins-base)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
-  #:use-module (gnu packages javascript)
+  #:autoload (gnu packages javascript) (mujs)
   #:use-module (gnu packages lesstif)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages linux)
-  #:use-module (gnu packages lua)
+  #:autoload (gnu packages lua) (lua lua-5.1)
   #:use-module (gnu packages man)
-  #:use-module (gnu packages markup)
+  #:autoload (gnu packages markup) (discount)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages perl)
-  #:use-module (gnu packages photo)
+  #:autoload (gnu packages photo) (libexif)
   #:use-module (gnu packages pkg-config)
-  #:use-module (gnu packages pulseaudio)
+  #:autoload (gnu packages pulseaudio) (libsndfile)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
-  #:use-module (gnu packages sdl)
+  #:autoload (gnu packages sdl) (sdl)
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages tex)
@@ -101,7 +101,7 @@ (define-module (gnu packages pdf)
   #:use-module (gnu packages tcl)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages web)
-  #:use-module (gnu packages webkit)
+  #:autoload (gnu packages webkit) (webkitgtk-with-libsoup2)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
diff --git a/gnu/packages/photo.scm b/gnu/packages/photo.scm
index 19c171a9bb..eec96127bc 100644
--- a/gnu/packages/photo.scm
+++ b/gnu/packages/photo.scm
@@ -51,7 +51,7 @@ (define-module (gnu packages photo)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages file)
   #:use-module (gnu packages freedesktop)
-  #:use-module (gnu packages geo)
+  #:autoload (gnu packages geo) (osm-gps-map)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages gl)
@@ -65,9 +65,9 @@ (define-module (gnu packages photo)
   #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages iso-codes)
   #:use-module (gnu packages libcanberra)
-  #:use-module (gnu packages libusb)
+  #:autoload (gnu packages libusb) (libusb)
   #:use-module (gnu packages llvm)
-  #:use-module (gnu packages lua)
+  #:autoload (gnu packages lua) (lua-5.4)
   #:use-module (gnu packages man)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages opencl)
@@ -85,7 +85,7 @@ (define-module (gnu packages photo)
   #:use-module (gnu packages time)
   #:use-module (gnu packages video)
   #:use-module (gnu packages web)
-  #:use-module (gnu packages wxwidgets)
+  #:autoload (gnu packages wxwidgets) (wxwidgets)
   #:use-module (gnu packages xfig)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages xml)
diff --git a/gnu/packages/polkit.scm b/gnu/packages/polkit.scm
index a75608cd43..d8907862d1 100644
--- a/gnu/packages/polkit.scm
+++ b/gnu/packages/polkit.scm
@@ -40,8 +40,8 @@ (define-module (gnu packages polkit)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages docbook)
-  #:use-module (gnu packages gnuzilla)
-  #:use-module (gnu packages javascript)
+  #:autoload (gnu packages gnuzilla) (mozjs)
+  #:autoload (gnu packages javascript) (duktape)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages nss)
   #:use-module (gnu packages perl)
diff --git a/gnu/packages/python-check.scm b/gnu/packages/python-check.scm
index 7cc266fbce..15965fcc0a 100644
--- a/gnu/packages/python-check.scm
+++ b/gnu/packages/python-check.scm
@@ -37,14 +37,12 @@ (define-module (gnu packages python-check)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages check)
-  #:use-module (gnu packages docker)
-  #:use-module (gnu packages django)
-  #:use-module (gnu packages openstack)
+  #:autoload (gnu packages openstack) (python-cliff)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
-  #:use-module (gnu packages qt)
+  #:autoload (gnu packages qt) (python-pyqt-without-qtwebkit)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
diff --git a/gnu/packages/python-compression.scm b/gnu/packages/python-compression.scm
index 0504dd0b2a..d1c1345835 100644
--- a/gnu/packages/python-compression.scm
+++ b/gnu/packages/python-compression.scm
@@ -40,7 +40,7 @@ (define-module (gnu packages python-compression)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-check)
-  #:use-module (gnu packages python-crypto)
+  #:autoload (gnu packages python-crypto) (python-pycryptodome)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages sphinx))
 
diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index d060d5b27c..c8eefe59ec 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -85,28 +85,33 @@ (define-module (gnu packages python-web)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages databases)
-  #:use-module (gnu packages django)
+  #:autoload (gnu packages django) (python-django)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gnupg)
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages groff)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages libffi)
-  #:use-module (gnu packages node)
-  #:use-module (gnu packages openstack)
+  #:autoload (gnu packages node) (node)
+  #:autoload (gnu packages openstack) (python-bandit)
   #:use-module (gnu packages pcre)
-  #:use-module (gnu packages protobuf)
+  #:autoload (gnu packages protobuf) (python-proto-plus python-protobuf)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-check)
-  #:use-module (gnu packages python-crypto)
-  #:use-module (gnu packages python-science)
+  #:autoload (gnu packages python-crypto)
+  (python-certauth
+   python-certifi python-cryptography python-ecdsa python-keyring
+   python-ntlm-auth python-paramiko python-passlib python-pycrypto
+   python-pyopenssl python-pyu2f python-service-identity python-starkbank-ecdsa
+   python-trustme)
+  #:autoload (gnu packages python-science) (python-pandas)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages rdf)
   #:use-module (gnu packages rpc)
-  #:use-module (gnu packages serialization)
+  #:autoload (gnu packages serialization) (python-ruamel.yaml)
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages tls)
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index 53166980e8..d442d0a246 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -64,7 +64,7 @@ (define-module (gnu packages qt)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages documentation)
-  #:use-module (gnu packages enchant)
+  #:autoload (gnu packages enchant) (enchant)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages freedesktop)
@@ -80,15 +80,15 @@ (define-module (gnu packages qt)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
-  #:use-module (gnu packages kde-frameworks)
+  #:autoload (gnu packages kde-frameworks) (extra-cmake-modules)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages llvm)
   #:use-module (gnu packages maths)
-  #:use-module (gnu packages markup)
+  #:autoload (gnu packages markup) (md4c)
   #:use-module (gnu packages networking)
   #:use-module (gnu packages ninja)
-  #:use-module (gnu packages node)
+  #:autoload (gnu packages node) (node-lts)
   #:use-module (gnu packages nss)
   #:use-module (gnu packages pciutils)
   #:use-module (gnu packages pcre)
@@ -102,14 +102,13 @@ (define-module (gnu packages qt)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages regex)
   #:use-module (gnu packages ruby)
-  #:use-module (gnu packages sdl)
+  #:autoload (gnu packages sdl) (sdl2)
   #:use-module (gnu packages serialization)
   #:use-module (gnu packages sqlite)
-  #:use-module (gnu packages telephony)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages valgrind)
-  #:use-module (gnu packages video)
-  #:use-module (gnu packages vulkan)
+  #:autoload (gnu packages video) (ffmpeg libvpx openh264)
+  #:autoload (gnu packages vulkan) (glslang vulkan-headers)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xiph)
   #:use-module (gnu packages xorg)
diff --git a/gnu/packages/samba.scm b/gnu/packages/samba.scm
index 360c06d216..de8b8a4f29 100644
--- a/gnu/packages/samba.scm
+++ b/gnu/packages/samba.scm
@@ -54,12 +54,12 @@ (define-module (gnu packages samba)
   #:use-module (gnu packages kerberos)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages onc-rpc)
-  #:use-module (gnu packages openldap)
+  #:autoload (gnu packages openldap) (openldap)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages popt)
   #:use-module (gnu packages python)
-  #:use-module (gnu packages python-crypto)
+  #:autoload (gnu packages python-crypto) (python-cryptography)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages time)
diff --git a/gnu/packages/sdl.scm b/gnu/packages/sdl.scm
index 4c38e2f055..1d48a9e2a0 100644
--- a/gnu/packages/sdl.scm
+++ b/gnu/packages/sdl.scm
@@ -44,7 +44,7 @@ (define-module (gnu packages sdl)
   #:use-module (gnu packages audio)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages compression)
-  #:use-module (gnu packages fcitx)
+  #:autoload (gnu packages fcitx) (fcitx)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages glib)
@@ -53,8 +53,8 @@ (define-module (gnu packages sdl)
   #:use-module (gnu packages ibus)
   #:use-module (gnu packages image)
   #:use-module (gnu packages linux)
-  #:use-module (gnu packages mono)
-  #:use-module (gnu packages mp3)
+  #:autoload (gnu packages mono) (mono)
+  #:autoload (gnu packages mp3) (libmad)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages gl)
diff --git a/gnu/packages/search.scm b/gnu/packages/search.scm
index 84c4af68a3..6551c5fe11 100644
--- a/gnu/packages/search.scm
+++ b/gnu/packages/search.scm
@@ -45,7 +45,7 @@ (define-module (gnu packages search)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages check)
   #:use-module (gnu packages databases)
-  #:use-module (gnu packages ebook)
+  #:autoload (gnu packages ebook) (chmlib)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gawk)
   #:use-module (gnu packages gettext)
@@ -60,7 +60,7 @@ (define-module (gnu packages search)
   #:use-module (gnu packages pdf)
   #:use-module (gnu packages photo)
   #:use-module (gnu packages python)
-  #:use-module (gnu packages python-crypto)
+  #:autoload (gnu packages python-crypto) (python-certifi)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
diff --git a/gnu/packages/serialization.scm b/gnu/packages/serialization.scm
index 79c55e2b2f..4c2a82e62b 100644
--- a/gnu/packages/serialization.scm
+++ b/gnu/packages/serialization.scm
@@ -53,10 +53,10 @@ (define-module (gnu packages serialization)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages llvm)
-  #:use-module (gnu packages lua)
+  #:autoload (gnu packages lua) (lua lua-5.1 lua-5.2)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
-  #:use-module (gnu packages python-science)
+  #:autoload (gnu packages python-science) (python-pandas)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages perl))
 
diff --git a/gnu/packages/shells.scm b/gnu/packages/shells.scm
index 4d0dd92007..b789cdb462 100644
--- a/gnu/packages/shells.scm
+++ b/gnu/packages/shells.scm
@@ -43,8 +43,37 @@ (define-module (gnu packages shells)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages compression)
-  #:use-module (gnu packages crates-graphics)
-  #:use-module (gnu packages crates-io)
+  #:autoload (gnu packages crates-graphics) (rust-ical-0.7 rust-image-0.23)
+  #:autoload (gnu packages crates-io)
+  (rust-atty-0.2
+   rust-base64-0.13 rust-bat-0.18 rust-bigdecimal-0.3 rust-bson-2
+   rust-byte-unit-4 rust-bytes-1 rust-calamine-0.18 rust-chrono-0.4
+   rust-chrono-humanize-0.2 rust-chrono-tz-0.5 rust-codespan-reporting-0.11
+   rust-common-path-1 rust-crossterm-0.19 rust-csv-1 rust-ctrlc-3
+   rust-derive-new-0.5 rust-digest-0.9 rust-directories-next-2 rust-dirs-next-2
+   rust-doc-comment-0.3 rust-dtparse-1 rust-dunce-1 rust-eml-parser-0.1
+   rust-encoding-rs-0.8 rust-filesize-0.2 rust-fs-extra-1 rust-futures-0.3
+   rust-getset-0.1 rust-gjson-0.8 rust-glob-0.3 rust-hamcrest2-0.3
+   rust-heapless-0.7 rust-heck-0.4 rust-hex-0.4 rust-htmlescape-0.3
+   rust-indexmap-1 rust-insta-1 rust-is-executable-1 rust-itertools-0.10
+   rust-lazy-static-1 rust-linked-hash-map-0.5 rust-log-0.4 rust-md-5-0.9
+   rust-meval-0.2 rust-mime-0.3 rust-mp4-0.9 rust-neso-0.5 rust-num-bigint-0.4
+   rust-num-format-0.4 rust-num-integer-0.1 rust-num-traits-0.2 rust-open-1
+   rust-overload-0.1 rust-parking-lot-0.11 rust-polars-0.17 rust-pretty-0.5
+   rust-pretty-env-logger-0.4 rust-ptree-0.4 rust-quick-xml-0.22
+   rust-quickcheck-macros-1 rust-rand-0.8 rust-rawkey-0.1 rust-rayon-1
+   rust-regex-1 rust-reqwest-0.11 rust-roxmltree-0.14 rust-rstest-0.10
+   rust-rusqlite-0.26 rust-rust-embed-5 rust-rustyline-9 rust-s3handler-0.7
+   rust-scraper-0.12 rust-semver-0.11 rust-serde-1 rust-serde-bytes-0.11
+   rust-serde-ini-0.2 rust-serde-json-1 rust-serde-urlencoded-0.7
+   rust-serde-yaml-0.8 rust-serial-test-0.5 rust-sha2-0.9 rust-shadow-rs-0.8
+   rust-smart-default-0.6 rust-strip-ansi-escapes-0.1 rust-sxd-document-0.3
+   rust-sxd-xpath-0.4 rust-sys-locale-0.1 rust-sysinfo-0.23 rust-tempfile-3
+   rust-term-0.7 rust-term-size-0.3 rust-termcolor-1 rust-thiserror-1
+   rust-titlecase-1 rust-tokio-1 rust-toml-0.5 rust-trash-2 rust-tui-0.15
+   rust-umask-1 rust-unicode-segmentation-1 rust-unicode-width-0.1 rust-url-2
+   rust-users-0.11 rust-uuid-0.8 rust-webbrowser-0.5 rust-which-4 rust-winapi-0.3
+   rust-zip-0.5)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages groff)
@@ -60,9 +89,7 @@ (define-module (gnu packages shells)
   #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages readline)
-  #:use-module (gnu packages rust)
-  #:use-module (gnu packages rust-apps)
-  #:use-module (gnu packages scheme)
+  #:autoload (gnu packages scheme) (scheme48 scheme48-rx)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages xdisorg)
diff --git a/gnu/packages/sphinx.scm b/gnu/packages/sphinx.scm
index bbb070ddf6..b90613a9e4 100644
--- a/gnu/packages/sphinx.scm
+++ b/gnu/packages/sphinx.scm
@@ -45,18 +45,14 @@ (define-module (gnu packages sphinx)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (gnu packages)
   #:use-module (gnu packages check)
-  #:use-module (gnu packages graphviz)
   #:use-module (gnu packages image)
-  #:use-module (gnu packages imagemagick)
+  #:autoload (gnu packages imagemagick) (imagemagick)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-check)
-  #:use-module (gnu packages python-crypto)
+  #:autoload (gnu packages python-crypto) (python-certifi)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
-  #:use-module (gnu packages time)
-  #:use-module (gnu packages python-science)
-  #:use-module (gnu packages graph)
   #:use-module (gnu packages tex))
 
 (define-public python-sphinx
diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm
index aa540c1012..e63b409b34 100644
--- a/gnu/packages/ssh.scm
+++ b/gnu/packages/ssh.scm
@@ -59,13 +59,14 @@ (define-module (gnu packages ssh)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages popt)
-  #:use-module (gnu packages protobuf)
+  #:autoload (gnu packages protobuf) (protobuf)
   #:use-module (gnu packages python)
-  #:use-module (gnu packages python-crypto)
+  #:autoload (gnu packages python-crypto)
+  (python-bcrypt python-cryptography python-paramiko python-pyopenssl)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages readline)
-  #:use-module (gnu packages security-token)
+  #:autoload (gnu packages security-token) (libfido2 python-fido2)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages xorg)
diff --git a/gnu/packages/tex.scm b/gnu/packages/tex.scm
index 6d3572cf25..af2028d6ab 100644
--- a/gnu/packages/tex.scm
+++ b/gnu/packages/tex.scm
@@ -62,7 +62,7 @@ (define-module (gnu packages tex)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages compression)
-  #:use-module (gnu packages lisp)
+  #:autoload (gnu packages lisp) (clisp)
   #:use-module (gnu packages fonts)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages gd)
@@ -71,10 +71,10 @@ (define-module (gnu packages tex)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
-  #:use-module (gnu packages libreoffice)
-  #:use-module (gnu packages lua)
+  #:autoload (gnu packages libreoffice) (mythes hunspell)
+  #:autoload (gnu packages lua) (lua)
   #:use-module (gnu packages multiprecision)
-  #:use-module (gnu packages pdf)
+  #:autoload (gnu packages pdf) (poppler-qt5)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages perl-check)
   #:use-module (gnu packages pkg-config)
diff --git a/gnu/packages/textutils.scm b/gnu/packages/textutils.scm
index 7898d520f0..7d75aff60a 100644
--- a/gnu/packages/textutils.scm
+++ b/gnu/packages/textutils.scm
@@ -59,9 +59,15 @@ (define-module (gnu packages textutils)
   #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages gcc)
-  #:use-module (gnu packages golang)
+  #:autoload (gnu packages golang)
+  (go-github-com-fatih-color
+   go-github-com-mattn-go-colorable go-github-com-mitchellh-mapstructure
+   go-github-com-olekukonko-tablewriter go-github-com-oneofone-xxhash
+   go-github-com-spaolacci-murmur3 go-github-com-spf13-afero
+   go-github-com-spf13-cobra go-github-com-stretchr-testify
+   go-github-com-urfave-cli go-golang-org-x-sys)
   #:use-module (gnu packages gettext)
-  #:use-module (gnu packages java)
+  #:autoload (gnu packages java) (java-hamcrest-core java-junit)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages perl)
@@ -72,7 +78,7 @@ (define-module (gnu packages textutils)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages ruby)
   #:use-module (gnu packages slang)
-  #:use-module (gnu packages syncthing)
+  #:autoload (gnu packages syncthing) (go-github-com-cespare-xxhash)
   #:use-module (gnu packages web))
 
 (define-public dos2unix
diff --git a/gnu/packages/time.scm b/gnu/packages/time.scm
index fea9ff25f7..5709414828 100644
--- a/gnu/packages/time.scm
+++ b/gnu/packages/time.scm
@@ -40,12 +40,13 @@
 (define-module (gnu packages time)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
-  #:use-module (gnu packages golang)
+  #:autoload (gnu packages golang)
+  (go-1.17 go-github-com-charmbracelet-bubbletea go-github-com-muesli-termenv)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-xyz)
-  #:use-module (gnu packages terminals)
+  #:autoload (gnu packages terminals) (go-github.com-nsf-termbox-go)
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages)
   #:use-module (guix build-system gnu)
diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index 4ee75ace3d..b3d4aae797 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -58,7 +58,7 @@ (define-module (gnu packages tls)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages check)
   #:use-module (gnu packages curl)
-  #:use-module (gnu packages dns)
+  #:autoload (gnu packages dns) (unbound)
   #:use-module (gnu packages gawk)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages guile)
@@ -73,8 +73,11 @@ (define-module (gnu packages tls)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
-  #:use-module (gnu packages python-crypto)
-  #:use-module (gnu packages python-web)
+  #:autoload (gnu packages python-crypto)
+  (python-cryptography python-josepy python-pyopenssl)
+  #:autoload (gnu packages python-web)
+  (python-requests python-requests-toolbelt python-zope-component
+                   python-zope-interface)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages texinfo)
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 556eb46df4..200ce3fcd6 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -113,13 +113,27 @@ (define-module (gnu packages video)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages build-tools)
-  #:use-module (gnu packages cdrom)
+  #:autoload (gnu packages cdrom) (libcddb libcdio-paranoia cdparanoia)
   #:use-module (gnu packages check)
   #:use-module (gnu packages cmake)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cpp)
-  #:use-module (gnu packages crates-io)
-  #:use-module (gnu packages crates-graphics)
+  #:autoload (gnu packages crates-io)
+  (rust-arbitrary-0.4
+   rust-arg-enum-proc-macro-0.3 rust-arrayvec-0.7 rust-assert-cmd-2
+   rust-av-metrics-0.7 rust-backtrace-0.3 rust-bindgen-0.54 rust-bitstream-io-1
+   rust-byteorder-1 rust-cc-1 rust-cfg-if-1 rust-clap-2 rust-console-0.14
+   rust-criterion-0.3 rust-crossbeam-0.8 rust-fern-0.6 rust-interpolate-name-0.2
+   rust-itertools-0.10 rust-ivf-0.1 rust-libc-0.2 rust-libfuzzer-sys-0.3
+   rust-log-0.4 rust-metadeps-1 rust-nasm-rs-0.2 rust-noop-proc-macro-0.3
+   rust-num-derive-0.3 rust-num-traits-0.2 rust-paste-1
+   rust-pretty-assertions-0.7 rust-rand-0.8 rust-rand-chacha-0.3 rust-rayon-1
+   rust-regex-1 rust-rust-hawktracer-0.7 rust-rustc-version-0.4
+   rust-scan-fmt-0.2 rust-semver-1 rust-serde-1 rust-signal-hook-0.3
+   rust-simd-helpers-0.1 rust-thiserror-1 rust-toml-0.5 rust-v-frame-0.2
+   rust-vergen-3 rust-wasm-bindgen-0.2)
+  #:autoload (gnu packages crates-graphics)
+  (rust-aom-sys-0.3 rust-dav1d-sys-0.3 rust-image-0.23 rust-y4m-0.7)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages dbm)
   #:use-module (gnu packages dejagnu)
@@ -139,49 +153,50 @@ (define-module (gnu packages video)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages gnome)
-  #:use-module (gnu packages gnunet)
+  #:autoload (gnu packages gnunet) (libmicrohttpd)
   #:use-module (gnu packages gnupg)
   #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages gtk)
-  #:use-module (gnu packages haskell-xyz)
+  #:autoload (gnu packages haskell-xyz) (pandoc)
   #:use-module (gnu packages image)
   #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages iso-codes)
   #:use-module (gnu packages libidn)
-  #:use-module (gnu packages libreoffice)
-  #:use-module (gnu packages libusb)
+  #:autoload (gnu packages libreoffice) (hunspell)
+  #:autoload (gnu packages libusb) (libusb)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages llvm)
-  #:use-module (gnu packages lua)
+  #:autoload (gnu packages lua) (luajit lua-5.2)
   #:use-module (gnu packages m4)
   #:use-module (gnu packages man)
-  #:use-module (gnu packages markup)
+  #:autoload (gnu packages markup) (cmark)
   #:use-module (gnu packages maths)
-  #:use-module (gnu packages music)
-  #:use-module (gnu packages mp3)
+  #:autoload (gnu packages music) (python-mutagen)
+  #:autoload (gnu packages mp3) (lame libmad mpg123 taglib)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages networking)
-  #:use-module (gnu packages ocr)
+  #:autoload (gnu packages ocr) (tesseract-ocr)
   #:use-module (gnu packages pcre)
-  #:use-module (gnu packages pciutils)
+  #:autoload (gnu packages pciutils) (pciutils)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages perl-check)
   #:use-module (gnu packages perl-web)
-  #:use-module (gnu packages photo)
+  #:autoload (gnu packages photo) (libexif)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages popt)
-  #:use-module (gnu packages pretty-print)
-  #:use-module (gnu packages protobuf)
-  #:use-module (gnu packages pulseaudio)
+  #:autoload (gnu packages pretty-print) (fmt)
+  #:autoload (gnu packages protobuf) (protobuf)
+  #:autoload (gnu packages pulseaudio) (libsamplerate pulseaudio)
   #:use-module (gnu packages python)
-  #:use-module (gnu packages python-crypto)
+  #:autoload (gnu packages python-crypto)
+  (python-certifi python-pycryptodome python-pycryptodomex)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages rdesktop)
   #:use-module (gnu packages re2c)
   #:use-module (gnu packages ruby)
-  #:use-module (gnu packages rust-apps)
+  #:autoload (gnu packages rust-apps) (rust-cargo-c)
   #:use-module (gnu packages samba)
   #:use-module (gnu packages sdl)
   #:use-module (gnu packages serialization)
@@ -193,12 +208,11 @@ (define-module (gnu packages video)
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages time)
-  #:use-module (gnu packages upnp)
-  #:use-module (gnu packages vulkan)
+  #:autoload (gnu packages upnp) (libupnp)
+  #:autoload (gnu packages vulkan) (vulkan-headers vulkan-loader shaderc)
   #:use-module (gnu packages web)
-  #:use-module (gnu packages webkit)
-  #:use-module (gnu packages wget)
-  #:use-module (gnu packages wxwidgets)
+  #:autoload (gnu packages wget) (wget)
+  #:autoload (gnu packages wxwidgets) (wxwidgets-gtk2)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xiph)
   #:use-module (gnu packages xml)
diff --git a/gnu/packages/wget.scm b/gnu/packages/wget.scm
index 73338c73b3..352ef5c64b 100644
--- a/gnu/packages/wget.scm
+++ b/gnu/packages/wget.scm
@@ -28,7 +28,7 @@ (define-module (gnu packages wget)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages documentation)
-  #:use-module (gnu packages gnunet)
+  #:autoload (gnu packages gnunet) (libmicrohttpd)
   #:use-module (gnu packages gnupg)
   #:use-module (gnu packages libidn)
   #:use-module (gnu packages pcre)
diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm
index 7be995a438..40bc09776a 100644
--- a/gnu/packages/xdisorg.scm
+++ b/gnu/packages/xdisorg.scm
@@ -103,12 +103,11 @@ (define-module (gnu packages xdisorg)
   #:use-module (gnu packages gawk)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gl)
-  #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages guile)
-  #:use-module (gnu packages haskell-xyz)
+  #:autoload (gnu packages haskell-xyz) (pandoc)
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
   #:use-module (gnu packages libbsd)
@@ -125,7 +124,7 @@ (define-module (gnu packages xdisorg)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages tcl)
-  #:use-module (gnu packages terminals)
+  #:autoload (gnu packages terminals) (libptytty)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages)
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index ed06cb3925..70fb8442b3 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -63,27 +63,26 @@ (define-module (gnu packages xorg)
   #:use-module (guix build-system python)
   #:use-module (guix utils)
   #:use-module (gnu packages)
-  #:use-module (gnu packages aidc)
-  #:use-module (gnu packages anthy)
+  #:autoload (gnu packages anthy) (anthy)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
-  #:use-module (gnu packages emacs)
+  #:autoload (gnu packages emacs) (emacs-minimal m17n-lib)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages fonts)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gettext)
-  #:use-module (gnu packages gl)
+  #:autoload (gnu packages gl) (libepoxy libglvnd mesa mesa-headers)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnupg)
   #:use-module (gnu packages gperf)
   #:use-module (gnu packages gtk)
-  #:use-module (gnu packages haskell-xyz)
-  #:use-module (gnu packages inkscape)
+  #:autoload (gnu packages haskell-xyz) (pandoc)
+  #:autoload (gnu packages inkscape) (inkscape/stable)
   #:use-module (gnu packages image)
   #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages libbsd)
@@ -99,11 +98,11 @@ (define-module (gnu packages xorg)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-compression)
-  #:use-module (gnu packages python-crypto)
+  #:autoload (gnu packages python-crypto) (python-paramiko)
   #:use-module (gnu packages python-xyz)
-  #:use-module (gnu packages qt)
-  #:use-module (gnu packages spice)
-  #:use-module (gnu packages video)
+  #:autoload (gnu packages qt) (qtbase-5 qtx11extras)
+  #:autoload (gnu packages spice) (spice-protocol)
+  #:autoload (gnu packages video) (ffmpeg libvpx libx264 x265)
   #:use-module (gnu packages xiph)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xdisorg))
-- 
2.37.2