#_preseed_V1
#### Contents of the preconfiguration file (for bookworm)
### Localization
# Preseeding only locale sets language, country and locale.
d-i debian-installer/locale string en_US.UTF-8

# Keyboard selection.
d-i keyboard-configuration/xkb-keymap select us
# d-i keyboard-configuration/toggle select No toggling

# netcfg will choose an interface that has link if possible. This makes it
# skip displaying a list if there is more than one interface.
d-i netcfg/choose_interface select auto

# Any hostname and domain names assigned from dhcp take precedence over
# values set here. However, setting the values still prevents the questions
# from being shown, even if values come from dhcp.
d-i netcfg/get_hostname string debian-1
d-i netcfg/get_domain string

# Mirror protocol:
d-i mirror/country string manual
d-i mirror/http/hostname string deb.debian.org
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string

# Skip creation of a root account (normal user account will be able to
# use sudo).
d-i passwd/root-login boolean false

# To create a normal user account.
d-i passwd/user-fullname string vsoc 01
d-i passwd/username string vsoc-01
# Normal user's password, either in clear text
d-i passwd/user-password password cuttlefish
d-i passwd/user-password-again password cuttlefish

# Controls whether or not the hardware clock is set to UTC.
d-i clock-setup/utc boolean true

# You may set this to any valid setting for $TZ; see the contents of
# /usr/share/zoneinfo/ for valid values.
d-i time/zone string US/Eastern

# Controls whether to use NTP to set the clock during the install
d-i clock-setup/ntp boolean true

# Choose disk
d-i partman/early_command string \
  NUMOFDEVICES=$(list-devices disk | wc -l); \
  COUNTER=0; \
  while [ "$COUNTER" -lt "$NUMOFDEVICES" ]; do \
    COUNTER=$((COUNTER+1)); \
    if [ "$COUNTER" -eq 1 ]; then \
      DEVICE1=$(list-devices disk|head -n1); \
    else \
      DEVICE1=$(list-devices disk|head -n$COUNTER|tail -1); \
    fi; \
    if [ "$DEVICE1" = "/dev/nvme0n1" ]; then \
      DEVICE_FINAL="$DEVICE1"; \
      break; \
    elif [ "$DEVICE1" = "/dev/sda" ]; then \
      DEVICE_FINAL="$DEVICE1"; \
      break; \
    elif [ "$DEVICE1" = "/dev/vda" ]; then \
      DEVICE_FINAL="$DEVICE1"; \
      break; \
    fi; \
  done; \
  if [ x"$DEVICE_FINAL" != x ]; then \
    debconf-set partman-auto/disk "$DEVICE_FINAL"; \
  fi; \
  if [ x"$DEVICE_FINAL" != x ]; then \
    NUMOFPARTS=$(list-devices partition | grep -E ^"$DEVICE_FINAL" | wc -l); \
    if [ "$NUMOFPARTS" -lt 3 ]; then \
      debconf-set partman-auto/expert_recipe "$(debconf-get partman-auto/expert_recipe_linaro_home_format)"; \
    else \
      debconf-set partman-auto/expert_recipe "$(debconf-get partman-auto/expert_recipe_linaro_home)"; \
    fi; \
  fi;

# Set the disk to install. If not set, select Guided -> select device.
#d-i partman-auto/disk string /dev/vda
d-i partman-auto/method string regular

d-i partman-auto/expert_recipe_linaro_home_format string      \
      efiroot ::                                              \
              128 256 512 fat32                               \
                      $iflabel{ gpt }                         \
                      $reusemethod{ }                         \
                      method{ efi } format{ }                 \
              .                                               \
              8192 71680 143360 ext4                          \
                      method{ format } format{ }              \
                      use_filesystem{ }                       \
                      filesystem{ ext4 }                      \
                      mountpoint{ / }                         \
              .                                               \
              4096 71680 1000000000 ext4                      \
                      method{ format } format{ }              \
                      use_filesystem{ }                       \
                      filesystem{ ext4 }                      \
                      mountpoint{ /home }                     \
              .

d-i partman-auto/expert_recipe_linaro_home string             \
      efiroot ::                                              \
              128 256 512 fat32                               \
                      $iflabel{ gpt }                         \
                      $reusemethod{ }                         \
                      method{ efi } format{ }                 \
              .                                               \
              8192 71680 143360 ext4                          \
                      method{ format } format{ }              \
                      use_filesystem{ }                       \
                      filesystem{ ext4 }                      \
                      mountpoint{ / }                         \
              .                                               \
              4096 71680 1000000000 ext4                      \
                      method{ keep }                          \
                      use_filesystem{ }                       \
                      filesystem{ ext4 }                      \
                      mountpoint{ /home }                     \
              .

#
d-i partman-auto/choose_recipe select efiroot
d-i partman-basicfilesystems/no_swap boolean false

# Don't punt for no-method filesystems.  Another undocumented option.
d-i partman-basicmethods/method_only boolean false

# This makes partman automatically partition without confirmation, provided
# that you told it what to do using one of the methods above.
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true

# Force UEFI booting ('BIOS compatibility' will be lost). Default: false.
d-i partman-efi/non_efi_system boolean true

# Ensure the partition table is GPT - this is required for EFI
d-i partman-partitioning/choose_label select gpt
d-i partman-partitioning/default_label string gpt

# Choose, if you want to scan additional installation media
# (default: false).
d-i apt-setup/cdrom/set-first boolean false
# You can choose to install non-free firmware.
d-i apt-setup/non-free-firmware boolean true
# You can choose to install non-free and contrib software.
d-i apt-setup/non-free boolean true
d-i apt-setup/contrib boolean true

tasksel tasksel/first multiselect standard, web-server, ssh-server

popularity-contest popularity-contest/participate boolean false

grub-efi-arm64 grub2/linux_cmdline_default string quiet amdgpu.runpm=0 amdgpu.dc=0

# This is fairly safe to set, it makes grub install automatically to the UEFI
# partition/boot record if no other operating system is detected on the machine.
d-i grub-installer/only_debian boolean true
d-i grub-installer/force-efi-extra-removable boolean true
d-i grub-installer/update-nvram boolean false

# Avoid that last message about the install being complete.
d-i finish-install/reboot_in_progress note

d-i preseed/late_command string \
  cp -f /after_install_1.sh /target/root; \
  in-target /bin/sh /root/after_install_1.sh;

