--- /dev/null
+#_preseed_V1
+
+d-i passwd/root-login boolean true
+user-setup-udeb        passwd/make-user boolean false
+
+d-i netcfg/choose_interface select auto
+d-i netcfg/link_wait_timeout string 3
+d-i netcfg/wireless_wep string
+d-i netcfg/disable_autoconfig boolean false
+d-i netcfg/get_hostname string unassigned-hostname
+d-i netcfg/get_domain string unassigned-domain
+
+# d-i partman-auto/method string crypto
+d-i partman-auto-lvm/guided_size string max
+# d-i partman-auto/choose_recipe select atomic
+d-i partman-auto-crypto/erase_disks boolean false
+# d-i partman-lvm/confirm boolean true
+
+d-i base-installer/kernel/image string linux-image-amd64
+
+d-i mirror/protocol string http
+d-i apt-setup/non-free-firmware boolean true
+d-i apt-setup/non-free boolean true
+d-i apt-setup/contrib boolean true
+
+clock-setup clock-setup/utc boolean true
+d-i finish-install/reboot_in_progress note
 
--- /dev/null
+abort() {
+    echo "$1"
+    exit 1
+}
 
--- /dev/null
+. lib/abort
+
+abort_if_not_user() {
+    if [ "$(whoami)" != "$1" ]; then
+        abort "Must be run as ${1}."
+    fi
+}
 
--- /dev/null
+. lib/abort
+
+abort_if_offline() {
+    if ! ping -c1 -W2 1.1.1.1 > /dev/null 2>&1; then
+        abort 'Must be run online.'
+    fi
+}
 
--- /dev/null
+FILENAME_PRESEED_CFG=preseed.cfg
+PATH_PRESEED_CFG="../${FILENAME_PRESEED_CFG}"
+PATH_MNT_STICK=/mnt/stick
 
--- /dev/null
+expect_min_n_args() {
+    MIN_ARGS="$1"
+    EXPLAINER="$2"
+    shift 2
+    if [ "$#" -lt "${MIN_ARGS}" ]; then
+        echo "Need at least ${MIN_ARGS} arguments … ${EXPLAINER}"
+        false
+    fi
+}
 
--- /dev/null
+. lib/abort
+
+get_mountable_device_path() {
+    PATH_DEV="/dev/$1"
+    if [ ! -b "${PATH_DEV}" ]; then
+        abort "No block device at ${PATH_DEV}."
+    elif [ $(mount | grep -E "^${PATH_DEV}" | wc -l) -gt 0 ]; then
+        abort "${PATH_DEV} already mounted."
+    fi
+    printf "${PATH_DEV}"
+}
 
--- /dev/null
+#!/bin/sh
+# based on <https://wiki.debian.org/DebianInstaller/WritableUSBStick>
+set -e
+cd $(dirname "$0")
+. lib/abort
+. lib/abort_if_not_user
+. lib/abort_if_offline
+. lib/constants_installer
+. lib/expect_min_n_args
+. lib/get_mountable_device_path
+
+INSTALLER_VERSION=12.10.0
+PATH_MNT_ISO=/mnt/iso
+
+abort_if_not_user root
+abort_if_offline root
+abort_if_command_unknown() {
+    if ! which "$1" > /dev/null; then
+        abort "expected command unavailable: ${1}."
+    fi
+}
+abort_if_command_unknown wget 
+abort_if_command_unknown rsync
+abort_if_command_unknown parted 
+abort_if_command_unknown mkfs.vfat 
+
+expect_min_n_args 1 '(device name, e.g. "sdb")' $@
+PATH_STICK="$(get_mountable_device_path $1)"
+
+FILENAME_ISO="debian-${INSTALLER_VERSION}-amd64-netinst.iso"
+echo "Retrieving ${FILENAME_ISO}."
+URL_ISO="https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/${FILENAME_ISO}"
+PATH_ISO="/tmp/${FILENAME_ISO}"
+wget --output-document "${PATH_ISO}" "${URL_ISO}"
+
+echo "Preparing partition/filesystem on ${PATH_STICK}."
+parted --script "${PATH_STICK}" mklabel msdos
+parted --script "${PATH_STICK}" mkpart primary fat32 0% 100%
+PATH_PARTITION="${PATH_STICK}1"
+mkfs.vfat "${PATH_PARTITION}" 
+
+echo "Mounting ${PATH_MNT_ISO} and ${PATH_MNT_STICK}."
+mkdir -p "${PATH_MNT_ISO}" "${PATH_MNT_STICK}"
+mount "${PATH_PARTITION}" "${PATH_MNT_STICK}"
+mount -o loop "${PATH_ISO}" "${PATH_MNT_ISO}"
+do_umounts() {
+    set +e
+    echo "Unmounting ${PATH_MNT_ISO}"
+    umount "${PATH_MNT_ISO}"
+    echo "Unmounting ${PATH_MNT_STICK}"
+    umount "${PATH_MNT_STICK}"
+    set -e
+}
+trap do_umounts EXIT INT TERM
+
+echo "Copying contents of ${PATH_MNT_ISO} to ${PATH_MNT_STICK}/."
+PATH_RSYNC_ERRORS=/tmp/rsync_errors
+set +e
+rsync -a "${PATH_MNT_ISO}/" "${PATH_MNT_STICK}/" 2> "${PATH_RSYNC_ERRORS}"
+RESULT=$?
+set -e
+if [ "${RESULT}" != "0" ]; then
+    echo 'rsync errors:'
+    cat "${PATH_RSYNC_ERRORS}"
+    echo 'rsync encountered errors, see above – continue? (Y/N)'
+    rm "${PATH_RSYNC_ERRORS}"
+    read ANSWER
+    FIRST_CHAR=$(echo "${ANSWER}" | cut -c1)
+    if ! [ "${FIRST_CHAR}" = 'y' -o "${FIRST_CHAR}" = 'Y' ]; then
+        abort 'as requested'
+    fi
+fi
+
+echo "Installing preseed file."
+cp "${PATH_PRESEED_CFG}" "${PATH_MNT_STICK}/"
+sed --in-place 's/ --- / --- preseed\/file=\/cdrom\/'"${FILENAME_PRESEED_CFG}"' /g' "${PATH_MNT_STICK}/boot/grub/grub.cfg"
+
+rm "${PATH_ISO}"
+echo "Done!"
 
--- /dev/null
+#!/bin/sh
+set -e
+set -x
+cd $(dirname "$0")
+. lib/abort_if_not_user
+. lib/constants_installer
+. lib/expect_min_n_args
+. lib/get_mountable_device_path
+
+abort_if_not_user root
+expect_min_n_args 1 '(e.g. "sdb1")' $@
+PATH_STICK="$(get_mountable_device_path $1)"
+
+mount "${PATH_STICK}" "${PATH_MNT_STICK}"
+trap "umount ${PATH_MNT_STICK}" EXIT INT TERM
+cp "${PATH_PRESEED_CFG}" "${PATH_MNT_STICK}/"
 
+++ /dev/null
-get_passphrase() {
-    stty -echo
-    read PASSPHRASE
-    stty echo
-    printf "${PASSPHRASE}"
-}
 
--- /dev/null
+../../../scripts/lib/get_passphrase
\ No newline at end of file
 
+++ /dev/null
-path_tmp_timestamped () {
-    printf "/tmp/${1}_$(date +'%s')"
-}
 
--- /dev/null
+../../../scripts/lib/path_tmp_timestamped
\ No newline at end of file
 
+++ /dev/null
-abort() {
-    echo "$1"
-    exit 1
-}
 
--- /dev/null
+../../../bookworm/scripts/lib/abort
\ No newline at end of file
 
+++ /dev/null
-. lib/abort
-
-abort_if_not_user() {
-    if [ "$(whoami)" != "$1" ]; then
-        abort "Must be run as ${1}."
-    fi
-}
 
--- /dev/null
+../../../bookworm/scripts/lib/abort_if_not_user
\ No newline at end of file
 
+++ /dev/null
-. lib/abort
-
-abort_if_offline() {
-    if ! ping -c1 -W2 1.1.1.1 > /dev/null 2>&1; then
-        abort 'Must be run online.'
-    fi
-}
 
--- /dev/null
+../../../bookworm/scripts/lib/abort_if_offline
\ No newline at end of file
 
+++ /dev/null
-expect_min_n_args() {
-    MIN_ARGS="$1"
-    EXPLAINER="$2"
-    shift 2
-    if [ "$#" -lt "${MIN_ARGS}" ]; then
-        echo "Need at least ${MIN_ARGS} arguments … ${EXPLAINER}"
-        false
-    fi
-}
 
--- /dev/null
+get_passphrase() {
+    stty -echo
+    read PASSPHRASE
+    stty echo
+    printf "${PASSPHRASE}"
+}
 
--- /dev/null
+path_tmp_timestamped () {
+    printf "/tmp/${1}_$(date +'%s')"
+}
 
 #!/bin/sh
 set -e
 cd $(dirname "$0")
-
 . lib/constants  # PATH_USER_HOME, USERNAME
 . lib/expect_min_n_args
 . lib/abort
 
 #!/bin/sh
 set -e
 cd $(dirname "$0")
-
-. lib/constants  # PATH_USER_HOME, USERNAME
-. lib/expect_min_n_args
 . lib/abort
 . lib/abort_if_exists
 . lib/abort_if_not_user
 . lib/abort_if_offline
-
-. "${PATH_USER_HOME}/.plomlib.sh/get_passphrase"
-. "${PATH_USER_HOME}/.plomlib.sh/path_tmp_timestamped"
+. lib/constants  # PATH_USER_HOME, USERNAME
+. lib/expect_min_n_args
+. lib/get_passphrase
+. lib/path_tmp_timestamped
 
 PATH_REL_SECRETS=to_usb
 export PATH_SECRETS="${PATH_USER_HOME}/${PATH_REL_SECRETS}"