modules="$@"
     initial_directory="$(pwd)"
     for module in ${modules}; do
-        mkdir -p "${source_root}/${module}"
-        cd "${source_root}/${module}"
+       module_path="${source_root}/${module}"
+       if [ ! -d "${module_path}" ]; then
+           continue
+       fi
+       cd "${module_path}"
         for path in $(find . -type f); do
             target_path="${target_root}"$(echo "${path}" | cut -c2-)
             source_path=$(realpath "${path}")
 
 setup_scripts_dir="${config_tree_prefix}/scripts"
 
 get_system_name_arg() {
-    legal_system_names="t490s"
+    thinkpad_names="x220 w530 t490s"
+    legal_system_names="${thinkpad_names} h610m"
     found=0
     for system_name_i in $legal_system_names; do
         if [ "$1" = "$system_name_i" ]; then
             found=1
             system_name="${system_name_i}"
-            continue   
+           break
         fi
     done
     if [ "$found" = 0 ]; then
         echo "Need legal system name."
         false
     fi
+    system_class_name=
+    for thinkpad_name in $thinkpad_names; do
+        if [ "${system_name}" = "${thinkpad_name}" ]; then
+           system_class_name=thinkpad
+           break
+       fi
+    done
 }
 
 
 expect_min_n_args 1 "(system name)" "$@"
 get_system_name_arg "$1"
+min_modules="all ${system_class_name} ${system_name}"
 
 # Adapt /etc/ to our needs by copying from ./etc_files. This will set
 # basic configurations affecting following steps, such as setup of APT
 # and the locale selection, so needs to be right at the beginning.
-copy_dirtree.sh "${config_tree_prefix}/${PATH_REL_ETC}" "" all
+copy_dirtree "${config_tree_prefix}/${PATH_REL_ETC}" "" ${min_modules}
 
 # Migrate to testing.
 upgrade_from_older_release
 # Ensure package installation state as defined by what packages are
 # defined as required by Debian policy and by settings in ./apt-mark/.
 mark_nonrequireds_auto
+if [ "$system_name" = "h610m" ]; then
+    # Hold kernel known to work with nvidia-drivers.
+    apt-mark hold linux-image-amd64 linux-headers-amd64
+fi
 for root in "${PATH_MANY}" '..'; do
-    install_for_modules "${root}/${PATH_REL_APTMARK}" all 
+    install_for_modules "${root}/${PATH_REL_APTMARK}" ${min_modules}
 done
 apt -y --purge autoremove
 for root in "${PATH_MANY}" '..'; do
-    copy_dirtree "${root}/${PATH_REL_ETC}" '/etc' all
+    copy_dirtree "${root}/${PATH_REL_ETC}" '/etc' ${min_modules}
 done
 
 # Ensure our desired locale is available.
 # Set Berlin localtime.
 ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime
 ntpdate-debian
+
+# Set up root environment.
+for root in "${PATH_MANY}" '..'; do
+    copy_dirtree "${root}/${PATH_REL_HOME}" '/root' ${min_modules} minimal root
+done
+
+# Set up user and their environment.
+adduser --disabled-password --gecos "" "${USERNAME}"
+usermod -a -G sudo "${USERNAME}"
+for root in "${PATH_MANY}" '..'; do
+    copy_dirtree "${root}/${PATH_REL_HOME}" "${PATH_USER_HOME}" ${min_modules} desktop
+done
+chown -R "${USERNAME}:${USERNAME}" "${PATH_USER_HOME}"
+passwd "${USERNAME}"