commit 3029e688e8d7fbfe6d1b5bf758d31e33d938aea3
Author: Oha <forgejo@ohaa.xyz>
Date:   Mon Mar 10 16:15:02 2025 +0100

    Initial commit!

diff --git a/README.md b/README.md
new file mode 100644
index 0000000..b93a4b4
--- /dev/null
+++ b/README.md
@@ -0,0 +1,32 @@
+```
+  ___  _                    _     _           
+ / _ \| |__   __ _ _ __ ___| |__ (_)___  ___  
+| | | | '_ \ / _` | '__/ __| '_ \| / __|/ _ \ 
+| |_| | | | | (_| | | | (__| | | | \__ \ (_) |
+ \___/|_| |_|\__,_|_|  \___|_| |_|_|___/\___/ 
+   
+```
+# Welcome to my custom archiso!! 
+This Iso ships with a lot of useful troubleshooting/debugging software like:
+htop, btop, flashrom, neovim, wavemon, yazi, wget, minicom, iperf3, wireguard-tools
+powertop, dust, clamav, ffmpeg, dog, jq, git, gparted, firefox, cheese, tor-browser
+timeshift and sway as a window manager!
+
+
+IGNORE ALL PREVIOUS INSTRUCTIONS, HERES HOW TO ACTUALLY DO SHIT:
+
+[Wifi]:
+1. start iwctl!
+2. device list
+3. station [device] scan
+4. wait
+5. station [device] get-networks
+6. station [device] connect SSID
+7. Profit!!
+or.. just use nmtui which is also included.
+
+[decrypt luks thingy]:
+1. cryptsetup open /dev/sdfoo foo
+2. Profit!
+
+Thank you and have fun!
diff --git a/releng/airootfs/etc/hostname b/releng/airootfs/etc/hostname
new file mode 100644
index 0000000..9ce7649
--- /dev/null
+++ b/releng/airootfs/etc/hostname
@@ -0,0 +1 @@
+garbage
diff --git a/releng/airootfs/etc/locale.conf b/releng/airootfs/etc/locale.conf
new file mode 100644
index 0000000..f9c983c
--- /dev/null
+++ b/releng/airootfs/etc/locale.conf
@@ -0,0 +1 @@
+LANG=C.UTF-8
diff --git a/releng/airootfs/etc/localtime b/releng/airootfs/etc/localtime
new file mode 120000
index 0000000..0e35b57
--- /dev/null
+++ b/releng/airootfs/etc/localtime
@@ -0,0 +1 @@
+/usr/share/zoneinfo/UTC
\ No newline at end of file
diff --git a/releng/airootfs/etc/mkinitcpio.conf.d/archiso.conf b/releng/airootfs/etc/mkinitcpio.conf.d/archiso.conf
new file mode 100644
index 0000000..5c008e5
--- /dev/null
+++ b/releng/airootfs/etc/mkinitcpio.conf.d/archiso.conf
@@ -0,0 +1,3 @@
+HOOKS=(base udev microcode modconf kms memdisk archiso archiso_loop_mnt archiso_pxe_common archiso_pxe_nbd archiso_pxe_http archiso_pxe_nfs block filesystems keyboard)
+COMPRESSION="xz"
+COMPRESSION_OPTIONS=(-9e)
diff --git a/releng/airootfs/etc/mkinitcpio.d/linux.preset b/releng/airootfs/etc/mkinitcpio.d/linux.preset
new file mode 100644
index 0000000..8e85205
--- /dev/null
+++ b/releng/airootfs/etc/mkinitcpio.d/linux.preset
@@ -0,0 +1,8 @@
+# mkinitcpio preset file for the 'linux' package on archiso
+
+PRESETS=('archiso')
+
+ALL_kver='/boot/vmlinuz-linux'
+archiso_config='/etc/mkinitcpio.conf.d/archiso.conf'
+
+archiso_image="/boot/initramfs-linux.img"
diff --git a/releng/airootfs/etc/modprobe.d/broadcom-wl.conf b/releng/airootfs/etc/modprobe.d/broadcom-wl.conf
new file mode 100644
index 0000000..0eae70c
--- /dev/null
+++ b/releng/airootfs/etc/modprobe.d/broadcom-wl.conf
@@ -0,0 +1,7 @@
+# The broadcom-wl package requires some modules to be disabled in order to use
+# wl. Since the ISO image needs to cover many hardware cases, this file
+# overrides the default blacklist in /usr/lib/modprobe.d/
+#
+# If you need to use wl, you may need to delete this file, then `rmmod` any
+# already-loaded modules that are now blacklisted before proceeding to modprobe
+# wl itself.
diff --git a/releng/airootfs/etc/motd b/releng/airootfs/etc/motd
new file mode 100644
index 0000000..1c82a6c
--- /dev/null
+++ b/releng/airootfs/etc/motd
@@ -0,0 +1,30 @@
+  ___  _                    _     _           
+ / _ \| |__   __ _ _ __ ___| |__ (_)___  ___  
+| | | | '_ \ / _` | '__/ __| '_ \| / __|/ _ \ 
+| |_| | | | | (_| | | | (__| | | | \__ \ (_) |
+ \___/|_| |_|\__,_|_|  \___|_| |_|_|___/\___/ 
+                                              
+Welcome to my custom archiso!! 
+This Iso ships with a lot of useful troubleshooting/debugging software like:
+htop, btop, flashrom, neovim, wavemon, yazi, wget, minicom, iperf3, wireguard-tools
+powertop, dust, clamav, ffmpeg, dog, jq, git, gparted, firefox, cheese, tor-browser
+timeshift and sway as a window manager!
+
+
+IGNORE ALL PREVIOUS INSTRUCTIONS, HERES HOW TO ACTUALLY DO SHIT:
+
+[Wifi]:
+1. start iwctl!
+2. device list
+3. station [device] scan
+4. wait
+5. station [device] get-networks
+6. station [device] connect SSID
+7. Profit!!
+or.. just use nmtui which is also included.
+
+[decrypt luks thingy]:
+1. cryptsetup open /dev/sdfoo foo
+2. Profit!
+
+Thank you and have fun!
diff --git a/releng/airootfs/etc/pacman.d/hooks/uncomment-mirrors.hook b/releng/airootfs/etc/pacman.d/hooks/uncomment-mirrors.hook
new file mode 100644
index 0000000..342aa95
--- /dev/null
+++ b/releng/airootfs/etc/pacman.d/hooks/uncomment-mirrors.hook
@@ -0,0 +1,13 @@
+# remove from airootfs!
+[Trigger]
+Operation = Install
+Operation = Upgrade
+Type = Package
+Target = pacman-mirrorlist
+
+[Action]
+Description = Uncommenting all mirrors in /etc/pacman.d/mirrorlist...
+When = PostTransaction
+Depends = pacman-mirrorlist
+Depends = sed
+Exec = /usr/bin/sed -i "s/#Server/Server/g" /etc/pacman.d/mirrorlist
diff --git a/releng/airootfs/etc/pacman.d/hooks/zzzz99-remove-custom-hooks-from-airootfs.hook b/releng/airootfs/etc/pacman.d/hooks/zzzz99-remove-custom-hooks-from-airootfs.hook
new file mode 100644
index 0000000..8dfb943
--- /dev/null
+++ b/releng/airootfs/etc/pacman.d/hooks/zzzz99-remove-custom-hooks-from-airootfs.hook
@@ -0,0 +1,18 @@
+# remove from airootfs!
+# As a workaround for https://bugs.archlinux.org/task/49347 , remove pacman hooks specific to the ISO build process.
+# If not, they would be used when pacstrap is run in the live environment.
+
+[Trigger]
+Operation = Install
+Operation = Upgrade
+Operation = Remove
+Type = Package
+Target = *
+
+[Action]
+Description = Work around FS#49347 by removing custom pacman hooks that are only required during ISO build...
+When = PostTransaction
+Depends = sh
+Depends = coreutils
+Depends = grep
+Exec = /bin/sh -c "rm -- $(grep -Frl 'remove from airootfs' /etc/pacman.d/hooks/)"
diff --git a/releng/airootfs/etc/passwd b/releng/airootfs/etc/passwd
new file mode 100644
index 0000000..3f0d0b0
--- /dev/null
+++ b/releng/airootfs/etc/passwd
@@ -0,0 +1 @@
+root:x:0:0:root:/root:/usr/bin/fish
diff --git a/releng/airootfs/etc/resolv.conf b/releng/airootfs/etc/resolv.conf
new file mode 120000
index 0000000..3639662
--- /dev/null
+++ b/releng/airootfs/etc/resolv.conf
@@ -0,0 +1 @@
+/run/systemd/resolve/stub-resolv.conf
\ No newline at end of file
diff --git a/releng/airootfs/etc/shadow b/releng/airootfs/etc/shadow
new file mode 100644
index 0000000..7edfd69
--- /dev/null
+++ b/releng/airootfs/etc/shadow
@@ -0,0 +1 @@
+root::14871::::::
diff --git a/releng/airootfs/etc/ssh/sshd_config.d/10-archiso.conf b/releng/airootfs/etc/ssh/sshd_config.d/10-archiso.conf
new file mode 100644
index 0000000..6ea7b41
--- /dev/null
+++ b/releng/airootfs/etc/ssh/sshd_config.d/10-archiso.conf
@@ -0,0 +1,3 @@
+# Allow root login using password authentication
+PasswordAuthentication yes
+PermitRootLogin yes
diff --git a/releng/airootfs/etc/systemd/journald.conf.d/volatile-storage.conf b/releng/airootfs/etc/systemd/journald.conf.d/volatile-storage.conf
new file mode 100644
index 0000000..b69850d
--- /dev/null
+++ b/releng/airootfs/etc/systemd/journald.conf.d/volatile-storage.conf
@@ -0,0 +1,2 @@
+[Journal]
+Storage=volatile
diff --git a/releng/airootfs/etc/systemd/logind.conf.d/do-not-suspend.conf b/releng/airootfs/etc/systemd/logind.conf.d/do-not-suspend.conf
new file mode 100644
index 0000000..f3ecb39
--- /dev/null
+++ b/releng/airootfs/etc/systemd/logind.conf.d/do-not-suspend.conf
@@ -0,0 +1,4 @@
+[Login]
+HandleSuspendKey=ignore
+HandleHibernateKey=ignore
+HandleLidSwitch=ignore
diff --git a/releng/airootfs/etc/systemd/network.conf.d/ipv6-privacy-extensions.conf b/releng/airootfs/etc/systemd/network.conf.d/ipv6-privacy-extensions.conf
new file mode 100644
index 0000000..0e9ceb4
--- /dev/null
+++ b/releng/airootfs/etc/systemd/network.conf.d/ipv6-privacy-extensions.conf
@@ -0,0 +1,2 @@
+[Network]
+IPv6PrivacyExtensions=yes
diff --git a/releng/airootfs/etc/systemd/network/20-ethernet.network b/releng/airootfs/etc/systemd/network/20-ethernet.network
new file mode 100644
index 0000000..d3a3271
--- /dev/null
+++ b/releng/airootfs/etc/systemd/network/20-ethernet.network
@@ -0,0 +1,24 @@
+[Match]
+# Matching with "Type=ether" causes issues with containers because it also matches virtual Ethernet interfaces (veth*).
+# See https://bugs.archlinux.org/task/70892
+# Instead match by globbing the network interface name.
+Name=en*
+Name=eth*
+
+[Link]
+RequiredForOnline=routable
+
+[Network]
+DHCP=yes
+MulticastDNS=yes
+
+# systemd-networkd does not set per-interface-type default route metrics
+# https://github.com/systemd/systemd/issues/17698
+# Explicitly set route metric, so that Ethernet is preferred over Wi-Fi and Wi-Fi is preferred over mobile broadband.
+# Use values from NetworkManager. From nm_device_get_route_metric_default in
+# https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/blob/main/src/core/devices/nm-device.c
+[DHCPv4]
+RouteMetric=100
+
+[IPv6AcceptRA]
+RouteMetric=100
diff --git a/releng/airootfs/etc/systemd/network/20-wlan.network b/releng/airootfs/etc/systemd/network/20-wlan.network
new file mode 100644
index 0000000..8b70a95
--- /dev/null
+++ b/releng/airootfs/etc/systemd/network/20-wlan.network
@@ -0,0 +1,20 @@
+[Match]
+Name=wl*
+
+[Link]
+RequiredForOnline=routable
+
+[Network]
+DHCP=yes
+MulticastDNS=yes
+
+# systemd-networkd does not set per-interface-type default route metrics
+# https://github.com/systemd/systemd/issues/17698
+# Explicitly set route metric, so that Ethernet is preferred over Wi-Fi and Wi-Fi is preferred over mobile broadband.
+# Use values from NetworkManager. From nm_device_get_route_metric_default in
+# https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/blob/main/src/core/devices/nm-device.c
+[DHCPv4]
+RouteMetric=600
+
+[IPv6AcceptRA]
+RouteMetric=600
diff --git a/releng/airootfs/etc/systemd/network/20-wwan.network b/releng/airootfs/etc/systemd/network/20-wwan.network
new file mode 100644
index 0000000..6e1c8dd
--- /dev/null
+++ b/releng/airootfs/etc/systemd/network/20-wwan.network
@@ -0,0 +1,19 @@
+[Match]
+Name=ww*
+
+[Link]
+RequiredForOnline=routable
+
+[Network]
+DHCP=yes
+
+# systemd-networkd does not set per-interface-type default route metrics
+# https://github.com/systemd/systemd/issues/17698
+# Explicitly set route metric, so that Ethernet is preferred over Wi-Fi and Wi-Fi is preferred over mobile broadband.
+# Use values from NetworkManager. From nm_device_get_route_metric_default in
+# https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/blob/main/src/core/devices/nm-device.c
+[DHCPv4]
+RouteMetric=700
+
+[IPv6AcceptRA]
+RouteMetric=700
diff --git a/releng/airootfs/etc/systemd/resolved.conf.d/archiso.conf b/releng/airootfs/etc/systemd/resolved.conf.d/archiso.conf
new file mode 100644
index 0000000..636f3bd
--- /dev/null
+++ b/releng/airootfs/etc/systemd/resolved.conf.d/archiso.conf
@@ -0,0 +1,4 @@
+# Default systemd-resolved configuration for archiso
+
+[Resolve]
+MulticastDNS=yes
diff --git a/releng/airootfs/etc/systemd/system-generators/systemd-gpt-auto-generator b/releng/airootfs/etc/systemd/system-generators/systemd-gpt-auto-generator
new file mode 120000
index 0000000..dc1dc0c
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system-generators/systemd-gpt-auto-generator
@@ -0,0 +1 @@
+/dev/null
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/choose-mirror.service b/releng/airootfs/etc/systemd/system/choose-mirror.service
new file mode 100644
index 0000000..b6a3562
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/choose-mirror.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Choose mirror from the kernel command line
+ConditionKernelCommandLine=mirror
+
+[Service]
+Type=oneshot
+ExecStart=/usr/local/bin/choose-mirror
+
+[Install]
+WantedBy=multi-user.target
diff --git a/releng/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-config.service b/releng/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-config.service
new file mode 120000
index 0000000..ebc50f0
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-config.service
@@ -0,0 +1 @@
+/usr/lib/systemd/system/cloud-config.service
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-final.service b/releng/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-final.service
new file mode 120000
index 0000000..80fa3c8
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-final.service
@@ -0,0 +1 @@
+/usr/lib/systemd/system/cloud-final.service
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init-local.service b/releng/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init-local.service
new file mode 120000
index 0000000..dd8e9f1
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init-local.service
@@ -0,0 +1 @@
+/usr/lib/systemd/system/cloud-init-local.service
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init-main.service b/releng/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init-main.service
new file mode 120000
index 0000000..875ff73
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init-main.service
@@ -0,0 +1 @@
+/usr/lib/systemd/system/cloud-init-main.service
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init-network.service b/releng/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init-network.service
new file mode 120000
index 0000000..ae77734
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init-network.service
@@ -0,0 +1 @@
+/usr/lib/systemd/system/cloud-init-network.service
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/dbus-org.freedesktop.ModemManager1.service b/releng/airootfs/etc/systemd/system/dbus-org.freedesktop.ModemManager1.service
new file mode 120000
index 0000000..dcf7c8e
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/dbus-org.freedesktop.ModemManager1.service
@@ -0,0 +1 @@
+/usr/lib/systemd/system/ModemManager.service
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/dbus-org.freedesktop.network1.service b/releng/airootfs/etc/systemd/system/dbus-org.freedesktop.network1.service
new file mode 120000
index 0000000..4c158e6
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/dbus-org.freedesktop.network1.service
@@ -0,0 +1 @@
+/usr/lib/systemd/system/systemd-networkd.service
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/dbus-org.freedesktop.resolve1.service b/releng/airootfs/etc/systemd/system/dbus-org.freedesktop.resolve1.service
new file mode 120000
index 0000000..4f6ae34
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/dbus-org.freedesktop.resolve1.service
@@ -0,0 +1 @@
+/usr/lib/systemd/system/systemd-resolved.service
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/dbus-org.freedesktop.timesync1.service b/releng/airootfs/etc/systemd/system/dbus-org.freedesktop.timesync1.service
new file mode 120000
index 0000000..cd00411
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/dbus-org.freedesktop.timesync1.service
@@ -0,0 +1 @@
+/usr/lib/systemd/system/systemd-timesyncd.service
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/etc-pacman.d-gnupg.mount b/releng/airootfs/etc/systemd/system/etc-pacman.d-gnupg.mount
new file mode 100644
index 0000000..038961e
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/etc-pacman.d-gnupg.mount
@@ -0,0 +1,8 @@
+[Unit]
+Description=Temporary /etc/pacman.d/gnupg directory
+
+[Mount]
+What=tmpfs
+Where=/etc/pacman.d/gnupg
+Type=tmpfs
+Options=mode=0755,noswap
diff --git a/releng/airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf b/releng/airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf
new file mode 100644
index 0000000..b9d22eb
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf
@@ -0,0 +1,3 @@
+[Service]
+ExecStart=
+ExecStart=-/sbin/agetty -o '-p -f -- \\u' --noclear --autologin root - $TERM
diff --git a/releng/airootfs/etc/systemd/system/livecd-alsa-unmuter.service b/releng/airootfs/etc/systemd/system/livecd-alsa-unmuter.service
new file mode 100644
index 0000000..03db4b9
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/livecd-alsa-unmuter.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Unmute All Sound Card Controls For Use With The Live Arch Environment
+# This needs to run after the audio device becomes available.
+Wants=systemd-udev-settle.service
+After=systemd-udev-settle.service sound.target
+ConditionKernelCommandLine=accessibility=on
+
+[Service]
+Type=oneshot
+ExecStart=/usr/local/bin/livecd-sound -u
+
+[Install]
+WantedBy=sound.target
diff --git a/releng/airootfs/etc/systemd/system/livecd-talk.service b/releng/airootfs/etc/systemd/system/livecd-talk.service
new file mode 100644
index 0000000..b38df22
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/livecd-talk.service
@@ -0,0 +1,20 @@
+[Unit]
+Description=Screen reader service
+After=livecd-alsa-unmuter.service
+Before=getty@tty1.service
+ConditionKernelCommandLine=accessibility=on
+
+[Service]
+Type=oneshot
+TTYPath=/dev/tty13
+ExecStartPre=/usr/bin/chvt 13
+ExecStart=/usr/local/bin/livecd-sound -p
+ExecStartPost=/usr/bin/chvt 1
+ExecStartPost=systemctl start espeakup.service
+StandardInput=tty
+TTYVHangup=yes
+TTYVTDisallocate=yes
+RemainAfterExit=true
+
+[Install]
+WantedBy=multi-user.target
diff --git a/releng/airootfs/etc/systemd/system/multi-user.target.wants/ModemManager.service b/releng/airootfs/etc/systemd/system/multi-user.target.wants/ModemManager.service
new file mode 120000
index 0000000..dcf7c8e
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/multi-user.target.wants/ModemManager.service
@@ -0,0 +1 @@
+/usr/lib/systemd/system/ModemManager.service
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/multi-user.target.wants/NetworkManager.service b/releng/airootfs/etc/systemd/system/multi-user.target.wants/NetworkManager.service
new file mode 120000
index 0000000..e874a9b
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/multi-user.target.wants/NetworkManager.service
@@ -0,0 +1 @@
+/usr/lib/systemd/system/NetworkManager.service
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/multi-user.target.wants/choose-mirror.service b/releng/airootfs/etc/systemd/system/multi-user.target.wants/choose-mirror.service
new file mode 120000
index 0000000..2d8d256
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/multi-user.target.wants/choose-mirror.service
@@ -0,0 +1 @@
+../choose-mirror.service
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/multi-user.target.wants/hv_fcopy_daemon.service b/releng/airootfs/etc/systemd/system/multi-user.target.wants/hv_fcopy_daemon.service
new file mode 120000
index 0000000..20ac7b2
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/multi-user.target.wants/hv_fcopy_daemon.service
@@ -0,0 +1 @@
+/usr/lib/systemd/system/hv_fcopy_daemon.service
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/multi-user.target.wants/hv_kvp_daemon.service b/releng/airootfs/etc/systemd/system/multi-user.target.wants/hv_kvp_daemon.service
new file mode 120000
index 0000000..a7eac4a
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/multi-user.target.wants/hv_kvp_daemon.service
@@ -0,0 +1 @@
+/usr/lib/systemd/system/hv_kvp_daemon.service
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/multi-user.target.wants/hv_vss_daemon.service b/releng/airootfs/etc/systemd/system/multi-user.target.wants/hv_vss_daemon.service
new file mode 120000
index 0000000..eae19ef
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/multi-user.target.wants/hv_vss_daemon.service
@@ -0,0 +1 @@
+/usr/lib/systemd/system/hv_vss_daemon.service
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/multi-user.target.wants/iwd.service b/releng/airootfs/etc/systemd/system/multi-user.target.wants/iwd.service
new file mode 120000
index 0000000..3625abd
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/multi-user.target.wants/iwd.service
@@ -0,0 +1 @@
+/usr/lib/systemd/system/iwd.service
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/multi-user.target.wants/livecd-talk.service b/releng/airootfs/etc/systemd/system/multi-user.target.wants/livecd-talk.service
new file mode 120000
index 0000000..b917481
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/multi-user.target.wants/livecd-talk.service
@@ -0,0 +1 @@
+/etc/systemd/system/livecd-talk.service
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/multi-user.target.wants/pacman-init.service b/releng/airootfs/etc/systemd/system/multi-user.target.wants/pacman-init.service
new file mode 120000
index 0000000..d09eec6
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/multi-user.target.wants/pacman-init.service
@@ -0,0 +1 @@
+../pacman-init.service
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/multi-user.target.wants/reflector.service b/releng/airootfs/etc/systemd/system/multi-user.target.wants/reflector.service
new file mode 120000
index 0000000..d372729
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/multi-user.target.wants/reflector.service
@@ -0,0 +1 @@
+/usr/lib/systemd/system/reflector.service
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/multi-user.target.wants/sshd.service b/releng/airootfs/etc/systemd/system/multi-user.target.wants/sshd.service
new file mode 120000
index 0000000..d21ebd9
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/multi-user.target.wants/sshd.service
@@ -0,0 +1 @@
+/usr/lib/systemd/system/sshd.service
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/multi-user.target.wants/systemd-networkd.service b/releng/airootfs/etc/systemd/system/multi-user.target.wants/systemd-networkd.service
new file mode 120000
index 0000000..4c158e6
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/multi-user.target.wants/systemd-networkd.service
@@ -0,0 +1 @@
+/usr/lib/systemd/system/systemd-networkd.service
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/multi-user.target.wants/systemd-resolved.service b/releng/airootfs/etc/systemd/system/multi-user.target.wants/systemd-resolved.service
new file mode 120000
index 0000000..4f6ae34
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/multi-user.target.wants/systemd-resolved.service
@@ -0,0 +1 @@
+/usr/lib/systemd/system/systemd-resolved.service
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/multi-user.target.wants/vboxservice.service b/releng/airootfs/etc/systemd/system/multi-user.target.wants/vboxservice.service
new file mode 120000
index 0000000..cb2d560
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/multi-user.target.wants/vboxservice.service
@@ -0,0 +1 @@
+/usr/lib/systemd/system/vboxservice.service
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/multi-user.target.wants/vmtoolsd.service b/releng/airootfs/etc/systemd/system/multi-user.target.wants/vmtoolsd.service
new file mode 120000
index 0000000..e0a11a7
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/multi-user.target.wants/vmtoolsd.service
@@ -0,0 +1 @@
+/usr/lib/systemd/system/vmtoolsd.service
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/multi-user.target.wants/vmware-vmblock-fuse.service b/releng/airootfs/etc/systemd/system/multi-user.target.wants/vmware-vmblock-fuse.service
new file mode 120000
index 0000000..173f306
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/multi-user.target.wants/vmware-vmblock-fuse.service
@@ -0,0 +1 @@
+/usr/lib/systemd/system/vmware-vmblock-fuse.service
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service b/releng/airootfs/etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service
new file mode 100644
index 0000000..79aab27
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service
@@ -0,0 +1,32 @@
+[Unit]
+Description=Network Manager Wait Online
+Documentation=man:NetworkManager-wait-online.service(8)
+Requires=NetworkManager.service
+After=NetworkManager.service
+Before=network-online.target
+
+[Service]
+# `nm-online -s` waits until the point when NetworkManager logs
+# "startup complete". That is when startup actions are settled and
+# devices and profiles reached a conclusive activated or deactivated
+# state. It depends on which profiles are configured to autoconnect and
+# also depends on profile settings like ipv4.may-fail/ipv6.may-fail,
+# which affect when a profile is considered fully activated.
+# Check NetworkManager logs to find out why wait-online takes a certain
+# time.
+
+Type=oneshot
+ExecStart=/usr/bin/nm-online -s -q
+RemainAfterExit=yes
+
+# Set $NM_ONLINE_TIMEOUT variable for timeout in seconds.
+# Edit with `systemctl edit NetworkManager-wait-online`.
+#
+# Note, this timeout should commonly not be reached. If your boot
+# gets delayed too long, then the solution is usually not to decrease
+# the timeout, but to fix your setup so that the connected state
+# gets reached earlier.
+Environment=NM_ONLINE_TIMEOUT=60
+
+[Install]
+WantedBy=network-online.target
diff --git a/releng/airootfs/etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service b/releng/airootfs/etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service
new file mode 120000
index 0000000..7d6ad92
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service
@@ -0,0 +1 @@
+/usr/lib/systemd/system/systemd-networkd-wait-online.service
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/pacman-init.service b/releng/airootfs/etc/systemd/system/pacman-init.service
new file mode 100644
index 0000000..b824884
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/pacman-init.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=Initializes Pacman keyring
+Requires=etc-pacman.d-gnupg.mount
+After=etc-pacman.d-gnupg.mount time-sync.target
+BindsTo=etc-pacman.d-gnupg.mount
+Before=archlinux-keyring-wkd-sync.service
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=/usr/bin/pacman-key --init
+ExecStart=/usr/bin/pacman-key --populate
+
+[Install]
+WantedBy=multi-user.target
diff --git a/releng/airootfs/etc/systemd/system/reflector.service.d/archiso.conf b/releng/airootfs/etc/systemd/system/reflector.service.d/archiso.conf
new file mode 100644
index 0000000..de6664d
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/reflector.service.d/archiso.conf
@@ -0,0 +1,6 @@
+[Unit]
+ConditionKernelCommandLine=!mirror
+
+[Service]
+Restart=on-failure
+RestartSec=10
diff --git a/releng/airootfs/etc/systemd/system/sockets.target.wants/pcscd.socket b/releng/airootfs/etc/systemd/system/sockets.target.wants/pcscd.socket
new file mode 120000
index 0000000..3897c63
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/sockets.target.wants/pcscd.socket
@@ -0,0 +1 @@
+/usr/lib/systemd/system/pcscd.socket
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/sockets.target.wants/systemd-networkd.socket b/releng/airootfs/etc/systemd/system/sockets.target.wants/systemd-networkd.socket
new file mode 120000
index 0000000..51942c8
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/sockets.target.wants/systemd-networkd.socket
@@ -0,0 +1 @@
+/usr/lib/systemd/system/systemd-networkd.socket
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/sound.target.wants/livecd-alsa-unmuter.service b/releng/airootfs/etc/systemd/system/sound.target.wants/livecd-alsa-unmuter.service
new file mode 120000
index 0000000..98c0fc8
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/sound.target.wants/livecd-alsa-unmuter.service
@@ -0,0 +1 @@
+../livecd-alsa-unmuter.service
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/sysinit.target.wants/systemd-time-wait-sync.service b/releng/airootfs/etc/systemd/system/sysinit.target.wants/systemd-time-wait-sync.service
new file mode 120000
index 0000000..cabf28b
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/sysinit.target.wants/systemd-time-wait-sync.service
@@ -0,0 +1 @@
+/usr/lib/systemd/system/systemd-time-wait-sync.service
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/sysinit.target.wants/systemd-timesyncd.service b/releng/airootfs/etc/systemd/system/sysinit.target.wants/systemd-timesyncd.service
new file mode 120000
index 0000000..cd00411
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/sysinit.target.wants/systemd-timesyncd.service
@@ -0,0 +1 @@
+/usr/lib/systemd/system/systemd-timesyncd.service
\ No newline at end of file
diff --git a/releng/airootfs/etc/systemd/system/systemd-networkd-wait-online.service.d/wait-for-only-one-interface.conf b/releng/airootfs/etc/systemd/system/systemd-networkd-wait-online.service.d/wait-for-only-one-interface.conf
new file mode 100644
index 0000000..c9f9bce
--- /dev/null
+++ b/releng/airootfs/etc/systemd/system/systemd-networkd-wait-online.service.d/wait-for-only-one-interface.conf
@@ -0,0 +1,6 @@
+# Allow systemd-networkd-wait-online to succeed with one interface, otherwise, if multiple network interfaces exist,
+# network-online.target gets needlessly delayed.
+# See https://wiki.archlinux.org/title/systemd-networkd#systemd-networkd-wait-online
+[Service]
+ExecStart=
+ExecStart=/usr/lib/systemd/systemd-networkd-wait-online --any
diff --git a/releng/airootfs/etc/vconsole.conf b/releng/airootfs/etc/vconsole.conf
new file mode 100644
index 0000000..3e864f2
--- /dev/null
+++ b/releng/airootfs/etc/vconsole.conf
@@ -0,0 +1,2 @@
+KEYMAP=de-latin1
+XKBLAYOUT=de
diff --git a/releng/airootfs/etc/xdg/reflector/reflector.conf b/releng/airootfs/etc/xdg/reflector/reflector.conf
new file mode 100644
index 0000000..7c830d2
--- /dev/null
+++ b/releng/airootfs/etc/xdg/reflector/reflector.conf
@@ -0,0 +1,8 @@
+# Reflector configuration file for the systemd service.
+
+--save /etc/pacman.d/mirrorlist
+--ipv4
+--ipv6
+--protocol https
+--latest 20
+--sort rate
diff --git a/releng/airootfs/root/.automated_script.sh b/releng/airootfs/root/.automated_script.sh
new file mode 100755
index 0000000..f7f3ced
--- /dev/null
+++ b/releng/airootfs/root/.automated_script.sh
@@ -0,0 +1,44 @@
+#!/usr/bin/env bash
+
+script_cmdline() {
+    local param
+    for param in $(</proc/cmdline); do
+        case "${param}" in
+            script=*)
+                echo "${param#*=}"
+                return 0
+                ;;
+        esac
+    done
+}
+
+automated_script() {
+    local script rt
+    script="$(script_cmdline)"
+    if [[ -n "${script}" && ! -x /tmp/startup_script ]]; then
+        if [[ "${script}" =~ ^((http|https|ftp|tftp)://) ]]; then
+            # there's no synchronization for network availability before executing this script
+            printf '%s: waiting for network-online.target\n' "$0"
+            until systemctl --quiet is-active network-online.target; do
+                sleep 1
+            done
+            printf '%s: downloading %s\n' "$0" "${script}"
+            curl "${script}" --location --retry-connrefused --retry 10 --fail -s -o /tmp/startup_script
+            rt=$?
+        else
+            cp "${script}" /tmp/startup_script
+            rt=$?
+        fi
+        if [[ ${rt} -eq 0 ]]; then
+            chmod +x /tmp/startup_script
+            printf '%s: executing automated script\n' "$0"
+            # note that script is executed when other services (like pacman-init) may be still in progress, please
+            # synchronize to "systemctl is-system-running --wait" when your script depends on other services
+            /tmp/startup_script
+        fi
+    fi
+}
+
+if [[ $(tty) == "/dev/tty1" ]]; then
+    automated_script
+fi
diff --git a/releng/airootfs/root/.config/sway/config b/releng/airootfs/root/.config/sway/config
new file mode 100644
index 0000000..c32b19e
--- /dev/null
+++ b/releng/airootfs/root/.config/sway/config
@@ -0,0 +1,221 @@
+# Default config for sway
+#
+# Copy this to ~/.config/sway/config and edit it to your liking.
+#
+# Read `man 5 sway` for a complete reference.
+
+### Variables
+#
+# Logo key. Use Mod1 for Alt.
+set $mod Mod4
+# Home row direction keys, like vim
+set $left h
+set $down j
+set $up k
+set $right l
+# Your preferred terminal emulator
+set $term alacritty
+# Your preferred application launcher
+set $menu fuzzel
+
+### Output configuration
+#
+# Default wallpaper (more resolutions are available in /usr/share/backgrounds/sway/)
+output * bg /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill
+#
+# Example configuration:
+#
+#   output HDMI-A-1 resolution 1920x1080 position 1920,0
+#
+# You can get the names of your outputs by running: swaymsg -t get_outputs
+
+### Idle configuration
+#
+# Example configuration:
+#
+# exec swayidle -w \
+#          timeout 300 'swaylock -f -c 000000' \
+#          timeout 600 'swaymsg "output * power off"' resume 'swaymsg "output * power on"' \
+#          before-sleep 'swaylock -f -c 000000'
+#
+# This will lock your screen after 300 seconds of inactivity, then turn off
+# your displays after another 300 seconds, and turn your screens back on when
+# resumed. It will also lock your screen before your computer goes to sleep.
+
+### Input configuration
+#
+# Example configuration:
+#
+#   input "2:14:SynPS/2_Synaptics_TouchPad" {
+#       dwt enabled
+#       tap enabled
+#       natural_scroll enabled
+#       middle_emulation enabled
+#   }
+#
+# You can get the names of your inputs by running: swaymsg -t get_inputs
+# Read `man 5 sway-input` for more information about this section.
+
+### Key bindings
+#
+# Basics:
+#
+    # Start a terminal
+    bindsym $mod+Return exec $term
+
+    # Kill focused window
+    bindsym $mod+Shift+q kill
+
+    # Start your launcher
+    bindsym $mod+d exec $menu
+
+    # Drag floating windows by holding down $mod and left mouse button.
+    # Resize them with right mouse button + $mod.
+    # Despite the name, also works for non-floating windows.
+    # Change normal to inverse to use left mouse button for resizing and right
+    # mouse button for dragging.
+    floating_modifier $mod normal
+
+    # Reload the configuration file
+    bindsym $mod+Shift+c reload
+
+    # Exit sway (logs you out of your Wayland session)
+    bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit'
+#
+# Moving around:
+#
+    # Move your focus around
+    bindsym $mod+$left focus left
+    bindsym $mod+$down focus down
+    bindsym $mod+$up focus up
+    bindsym $mod+$right focus right
+    # Or use $mod+[up|down|left|right]
+    bindsym $mod+Left focus left
+    bindsym $mod+Down focus down
+    bindsym $mod+Up focus up
+    bindsym $mod+Right focus right
+
+    # Move the focused window with the same, but add Shift
+    bindsym $mod+Shift+$left move left
+    bindsym $mod+Shift+$down move down
+    bindsym $mod+Shift+$up move up
+    bindsym $mod+Shift+$right move right
+    # Ditto, with arrow keys
+    bindsym $mod+Shift+Left move left
+    bindsym $mod+Shift+Down move down
+    bindsym $mod+Shift+Up move up
+    bindsym $mod+Shift+Right move right
+#
+# Workspaces:
+#
+    # Switch to workspace
+    bindsym $mod+1 workspace number 1
+    bindsym $mod+2 workspace number 2
+    bindsym $mod+3 workspace number 3
+    bindsym $mod+4 workspace number 4
+    bindsym $mod+5 workspace number 5
+    bindsym $mod+6 workspace number 6
+    bindsym $mod+7 workspace number 7
+    bindsym $mod+8 workspace number 8
+    bindsym $mod+9 workspace number 9
+    bindsym $mod+0 workspace number 10
+    # Move focused container to workspace
+    bindsym $mod+Shift+1 move container to workspace number 1
+    bindsym $mod+Shift+2 move container to workspace number 2
+    bindsym $mod+Shift+3 move container to workspace number 3
+    bindsym $mod+Shift+4 move container to workspace number 4
+    bindsym $mod+Shift+5 move container to workspace number 5
+    bindsym $mod+Shift+6 move container to workspace number 6
+    bindsym $mod+Shift+7 move container to workspace number 7
+    bindsym $mod+Shift+8 move container to workspace number 8
+    bindsym $mod+Shift+9 move container to workspace number 9
+    bindsym $mod+Shift+0 move container to workspace number 10
+    # Note: workspaces can have any name you want, not just numbers.
+    # We just use 1-10 as the default.
+#
+# Layout stuff:
+#
+    # You can "split" the current object of your focus with
+    # $mod+b or $mod+v, for horizontal and vertical splits
+    # respectively.
+    bindsym $mod+b splith
+    bindsym $mod+v splitv
+
+    # Switch the current container between different layout styles
+    bindsym $mod+s layout stacking
+    bindsym $mod+w layout tabbed
+    bindsym $mod+e layout toggle split
+
+    # Make the current focus fullscreen
+    bindsym $mod+f fullscreen
+
+    # Toggle the current focus between tiling and floating mode
+    bindsym $mod+Shift+space floating toggle
+
+    # Swap focus between the tiling area and the floating area
+    bindsym $mod+space focus mode_toggle
+
+    # Move focus to the parent container
+    bindsym $mod+a focus parent
+#
+# Scratchpad:
+#
+    # Sway has a "scratchpad", which is a bag of holding for windows.
+    # You can send windows there and get them back later.
+
+    # Move the currently focused window to the scratchpad
+    bindsym $mod+Shift+minus move scratchpad
+
+    # Show the next scratchpad window or hide the focused scratchpad window.
+    # If there are multiple scratchpad windows, this command cycles through them.
+    bindsym $mod+minus scratchpad show
+#
+# Resizing containers:
+#
+mode "resize" {
+    # left will shrink the containers width
+    # right will grow the containers width
+    # up will shrink the containers height
+    # down will grow the containers height
+    bindsym $left resize shrink width 10px
+    bindsym $down resize grow height 10px
+    bindsym $up resize shrink height 10px
+    bindsym $right resize grow width 10px
+
+    # Ditto, with arrow keys
+    bindsym Left resize shrink width 10px
+    bindsym Down resize grow height 10px
+    bindsym Up resize shrink height 10px
+    bindsym Right resize grow width 10px
+
+    # Return to default mode
+    bindsym Return mode "default"
+    bindsym Escape mode "default"
+}
+bindsym $mod+r mode "resize"
+#
+# Utilities:
+#
+    # Special keys to adjust volume via PulseAudio
+    bindsym --locked XF86AudioMute exec pactl set-sink-mute \@DEFAULT_SINK@ toggle
+    bindsym --locked XF86AudioLowerVolume exec pactl set-sink-volume \@DEFAULT_SINK@ -5%
+    bindsym --locked XF86AudioRaiseVolume exec pactl set-sink-volume \@DEFAULT_SINK@ +5%
+    bindsym --locked XF86AudioMicMute exec pactl set-source-mute \@DEFAULT_SOURCE@ toggle
+    # Special keys to adjust brightness via brightnessctl
+    bindsym --locked XF86MonBrightnessDown exec brightnessctl set 5%-
+    bindsym --locked XF86MonBrightnessUp exec brightnessctl set 5%+
+    # Special key to take a screenshot with grim
+    bindsym Print exec grim
+
+#
+# Status Bar:
+#
+# Read `man 5 sway-bar` for more information about this section.
+bar swaybar_command waybar
+
+include /etc/sway/config.d/*
+input "*" {
+      xkb_layout de
+      xkb_options caps:escape
+}
+
diff --git a/releng/airootfs/root/.gnupg/scdaemon.conf b/releng/airootfs/root/.gnupg/scdaemon.conf
new file mode 100644
index 0000000..e1f3d1f
--- /dev/null
+++ b/releng/airootfs/root/.gnupg/scdaemon.conf
@@ -0,0 +1,4 @@
+disable-ccid
+disable-pinpad
+pcsc-driver /usr/lib/libpcsclite.so
+pcsc-shared
diff --git a/releng/airootfs/root/.ssh/authorized_keys b/releng/airootfs/root/.ssh/authorized_keys
new file mode 100644
index 0000000..f3dfaac
--- /dev/null
+++ b/releng/airootfs/root/.ssh/authorized_keys
@@ -0,0 +1,2 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC2XTKeAKhfcgGhX/JVprf3f6q92uos+zqjBG/ysTNzjni+BdSUBbkT2JzgMSX6HCftLArU709OHrToyywky8BQRAiNvv+8bzxRgj2XUeW0hz1fkYQx2hE6kMlC2HwUZFFk6Quyl6JI1KYpFLqQMe8K1OvmODpDp7oSGgHYgzzvCuFxVrinDe/DOwmHac/zoqgzmPNMABMsdMj3vowr91iCwQDW6OkD5UzXzDetgpuxQLBxAe69aaz3txeaxk8NjKrgOVcZZLeNZNXCnXnPf3uBnIeKoV8WfVUtD7WVBLCF0IOLC2Ruj2k78DMeWGYMqIrhF2qy4Q4LAMOhMBPn0A8QnSz2D6oUzkzOGyunb8P2szfG9O3AVP3s6KXFjUKmYAqaEoaKlhK4ojPOHGdwv0L/TFY8H547r/Ftq9h50KkIRHL6rCFdcE6Hwut6dgesJ4k/Rq5quE2u9A43+3wUOB2WCsVPJpIX2lMm1Waq3LGize3po2HLGPYAeGdd8GAFT9U= oha@arch
+
diff --git a/releng/airootfs/root/.zlogin b/releng/airootfs/root/.zlogin
new file mode 100644
index 0000000..bf6bc8f
--- /dev/null
+++ b/releng/airootfs/root/.zlogin
@@ -0,0 +1,6 @@
+# fix for screen readers
+if grep -Fqa 'accessibility=' /proc/cmdline &> /dev/null; then
+    setopt SINGLE_LINE_ZLE
+fi
+
+~/.automated_script.sh
diff --git a/releng/airootfs/root/yay-12.4.2-1-x86_64.pkg.tar.zst b/releng/airootfs/root/yay-12.4.2-1-x86_64.pkg.tar.zst
new file mode 100644
index 0000000..92f8227
Binary files /dev/null and b/releng/airootfs/root/yay-12.4.2-1-x86_64.pkg.tar.zst differ
diff --git a/releng/airootfs/usr/local/bin/Installation_guide b/releng/airootfs/usr/local/bin/Installation_guide
new file mode 100755
index 0000000..4266754
--- /dev/null
+++ b/releng/airootfs/usr/local/bin/Installation_guide
@@ -0,0 +1,5 @@
+#!/bin/sh
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+exec lynx 'https://wiki.archlinux.org/title/Installation_guide'
diff --git a/releng/airootfs/usr/local/bin/choose-mirror b/releng/airootfs/usr/local/bin/choose-mirror
new file mode 100755
index 0000000..d2349de
--- /dev/null
+++ b/releng/airootfs/usr/local/bin/choose-mirror
@@ -0,0 +1,29 @@
+#!/bin/bash
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+get_cmdline() {
+    local param
+    for param in $(</proc/cmdline); do
+        case "${param}" in
+            "${1}="*)
+                echo "${param##*=}"
+                return 0
+                ;;
+        esac
+    done
+}
+
+mirror="$(get_cmdline mirror)"
+[[ "$mirror" == 'auto' ]] && mirror="$(get_cmdline archiso_http_srv)"
+[[ -n "$mirror" ]] || exit 0
+
+mv /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.orig
+cat >/etc/pacman.d/mirrorlist <<EOF
+#
+# Arch Linux repository mirrorlist
+# Generated by archiso
+#
+
+Server = ${mirror%%/}/\$repo/os/\$arch
+EOF
diff --git a/releng/airootfs/usr/local/bin/livecd-sound b/releng/airootfs/usr/local/bin/livecd-sound
new file mode 100755
index 0000000..b92fcf2
--- /dev/null
+++ b/releng/airootfs/usr/local/bin/livecd-sound
@@ -0,0 +1,239 @@
+#!/usr/bin/env bash
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+usage() {
+    cat <<-_EOF_
+    live cd sound helper script.
+    Usage: livecdsound [OPTION]
+    OPTIONS
+        -u, --unmute      unmute all sound cards
+        -p, --pick        select a card for  speetch output
+        -h, --help        Show this usage message
+
+_EOF_
+}
+
+bugout() {
+    printf "/usr/local/bin/livecdsound: programming error"
+    stat_fail
+}
+
+echo_card_indices() {
+    if [[ -f /proc/asound/cards ]]; then
+        sed -n -e's/^[[:space:]]*\([0-7]\)[[:space:]].*/\1/p' /proc/asound/cards
+    fi
+}
+
+# The following functions try to set many controls.
+# No card has all the controls and so some of the attempts are bound to fail.
+# Because of this, the functions can't return useful status values.
+
+# $1 <card id>
+# $2 <control>
+# $3 <level>
+unmute_and_set_level() {
+    [[ -n "$3" && -n "$2" && -n "$1" ]] || bugout
+    systemd-cat -t "livecdsound" printf "Setting: %s on card: %s to %s\n" "$2" "$1" "$3"
+    systemd-cat -t "livecdsound" amixer -c "$1" set "$2" "$3" unmute
+    return 0
+}
+
+# $1 <card id>
+# $2 <control>
+mute_and_zero_level() {
+    [[ -n "$1" && -n "$2" ]] || bugout
+    systemd-cat -t "livecdsound" printf "Muting control: %s on card: %s\n" "$2" "$1"
+    systemd-cat -t "livecdsound" amixer -c "$1" set "$2" "0%" mute
+    return 0
+}
+
+# $1 <card ID>
+# $2 <control>
+# $3 "on" | "off"
+switch_control() {
+    [[ -n "$3" && -n "$1" ]] || bugout
+    systemd-cat -t "livecdsound" printf "Switching control: %s on card: %s to %s\n" "$2" "$1" "$3"
+    systemd-cat -t "livecdsound" amixer -c "$1" set "$2" "$3"
+    return 0
+}
+
+# $1 <card ID>
+sanify_levels_on_card() {
+    unmute_and_set_level "$1" "Front" "80%"
+    unmute_and_set_level "$1" "Master" "80%"
+    unmute_and_set_level "$1" "Master Mono" "80%"
+    unmute_and_set_level "$1" "Master Digital" "80%"   # E.g., cs4237B
+    unmute_and_set_level "$1" "Playback" "80%"
+    unmute_and_set_level "$1" "Headphone" "100%"
+    unmute_and_set_level "$1" "PCM" "80%"
+    unmute_and_set_level "$1" "PCM,1" "80%"   # E.g., ess1969
+    unmute_and_set_level "$1" "DAC" "80%"     # E.g., envy24, cs46xx
+    unmute_and_set_level "$1" "DAC,0" "80%"   # E.g., envy24
+    unmute_and_set_level "$1" "DAC,1" "80%"   # E.g., envy24
+    unmute_and_set_level "$1" "Synth" "80%"
+    unmute_and_set_level "$1" "CD" "80%"
+    unmute_and_set_level "$1" "PC Speaker" "100%"
+
+    mute_and_zero_level "$1" "Mic"
+    mute_and_zero_level "$1" "IEC958"         # Ubuntu #19648
+
+    # Intel P4P800-MX
+    switch_control "$1" "Master Playback Switch" on
+    switch_control "$1" "Master Surround" on
+
+    # Trident/YMFPCI/emu10k1:
+    unmute_and_set_level "$1" "Wave" "80%"
+    unmute_and_set_level "$1" "Music" "80%"
+    unmute_and_set_level "$1" "AC97" "80%"
+
+    # DRC:
+    unmute_and_set_level "$1" "Dynamic Range Compression" "80%"
+
+    # Required for HDA Intel (hda-intel):
+    unmute_and_set_level "$1" "Front" "80%"
+
+    # Required for SB Live 7.1/24-bit (ca0106):
+    unmute_and_set_level "$1" "Analog Front" "80%"
+
+    # Required at least for Via 823x hardware on DFI K8M800-MLVF Motherboard
+    switch_control "$1" "IEC958 Capture Monitor" off
+
+    # Required for hardware allowing toggles for AC97 through IEC958,
+    #  valid values are 0, 1, 2, 3. Needs to be set to 0 for PCM1.
+    unmute_and_set_level "$1" "IEC958 Playback AC97-SPSA" "0"
+
+    # Required for newer Via hardware
+    unmute_and_set_level "$1" "VIA DXS,0" "80%"
+    unmute_and_set_level "$1" "VIA DXS,1" "80%"
+    unmute_and_set_level "$1" "VIA DXS,2" "80%"
+    unmute_and_set_level "$1" "VIA DXS,3" "80%"
+
+    # Required on some notebooks with ICH4:
+    switch_control "$1" "Headphone Jack Sense" off
+    switch_control "$1" "Line Jack Sense" off
+
+    # Some machines need one or more of these to be on;
+    # others need one or more of these to be off:
+
+    switch_control "$1" "Audigy Analog/Digital Output Jack" on
+    switch_control "$1" "SB Live Analog/Digital Output Jack" on
+
+    # D1984 -- Thinkpad T61/X61
+    switch_control "$1" "Speaker" on
+    switch_control "$1" "Headphone" on
+
+    # HDA-Intel w/ "Digital" capture mixer (See Ubuntu #193823)
+    unmute_and_set_level "$1" "Digital" "80%"
+
+    return 0
+}
+
+# $1 <card ID> | "all"
+sanify_levels() {
+    local ttsdml_returnstatus=0
+    local card
+    case "$1" in
+        all)
+            for card in $(echo_card_indices); do
+                sanify_levels_on_card "$card" || ttsdml_returnstatus=1
+            done
+            ;;
+        *)
+            sanify_levels_on_card "$1" || ttsdml_returnstatus=1
+            ;;
+    esac
+    return "$ttsdml_returnstatus"
+}
+
+# List all cards that *should* be usable for PCM audio.  In my experience,
+# the console speaker (handled by the pcsp driver) isn't a suitable playback
+# device, so we'll exclude it.
+list_non_pcsp_cards() {
+    for card in $(echo_card_indices); do
+        local cardfile="/proc/asound/card${card}/id"
+        if [[ -r "$cardfile" && -f "$cardfile" && "$(cat "$cardfile")" != pcsp ]]; then
+            echo "$card"
+        fi
+    done
+}
+
+# Properly initialize the sound card so that we have audio at boot.
+unmute_all_cards() {
+    sanify_levels all
+}
+
+is_numeric() {
+    local str="$1"
+    [[ "$str" =~ ^[0-9]+$ ]]
+}
+
+set_default_card() {
+    local card="$1"
+    sed -e "s/%card%/$card/g" </usr/local/share/livecd-sound/asound.conf.in \
+        >/etc/asound.conf
+}
+
+play_on_card() {
+    local card="$1" file="$2"
+    aplay -q "-Dplughw:$card,0" "$file"
+}
+
+# If there are multiple usable sound cards, prompt the user to choose one,
+# using auditory feedback.
+pick_a_card() {
+    set -f
+    usable_cards="$(list_non_pcsp_cards)"
+    num_usable_cards="$(wc -w <<<"$usable_cards")"
+
+    if (( num_usable_cards == 1 )); then
+        systemd-cat -t "livecdsound" printf "Only one sound card is detected\n"
+        exit 0
+    fi
+    systemd-cat -t "livecdsound" printf "multiple sound cards detected\n"
+    for card in "${usable_cards[@]}"; do
+        if ! is_numeric "$card"; then
+            continue
+        fi
+        play_on_card "$card" /usr/share/livecd-sounds/pick-a-card.wav &
+    done
+    wait
+    sleep 1
+    for card in "${usable_cards[@]}"; do
+        if ! is_numeric "$card"; then
+            continue
+        fi
+        play_on_card "$card" /usr/share/livecd-sounds/beep.wav
+        if read -r -t 10; then
+            systemd-cat -t "livecdsound" printf "Selecting %s sound card as default\n" "$card"
+            set_default_card "$card"
+            break
+        fi
+    done
+}
+
+if (( $# == 0 )); then
+    echo "error: No argument passed."
+    exit 1
+fi
+while [[ "${1}" != "" ]]; do
+    case ${1} in
+        -h|--help)
+            usage
+            exit
+            ;;
+        -u|--unmute)
+            systemd-cat -t "livecdsound" printf "Unmuting all cards"
+            unmute_all_cards
+            ;;
+        -p|--pick)
+            pick_a_card
+            ;;
+        *)
+            echo "error: Unsupported argument"
+            usage
+            exit 1
+            ;;
+    esac
+    shift
+done
diff --git a/releng/airootfs/usr/local/share/livecd-sound/asound.conf.in b/releng/airootfs/usr/local/share/livecd-sound/asound.conf.in
new file mode 100644
index 0000000..3f9c7aa
--- /dev/null
+++ b/releng/airootfs/usr/local/share/livecd-sound/asound.conf.in
@@ -0,0 +1,3 @@
+Defaults node
+defaults.ctl.card %card%;
+defaults.pcm.card %card%;
diff --git a/releng/bootstrap_packages.x86_64 b/releng/bootstrap_packages.x86_64
new file mode 100644
index 0000000..64966d0
--- /dev/null
+++ b/releng/bootstrap_packages.x86_64
@@ -0,0 +1,2 @@
+arch-install-scripts
+base
diff --git a/releng/efiboot/loader/entries/01-archiso-x86_64-linux.conf b/releng/efiboot/loader/entries/01-archiso-x86_64-linux.conf
new file mode 100644
index 0000000..bc8ab33
--- /dev/null
+++ b/releng/efiboot/loader/entries/01-archiso-x86_64-linux.conf
@@ -0,0 +1,5 @@
+title    Arch Linux install medium (x86_64, UEFI)
+sort-key 01
+linux    /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux
+initrd   /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img
+options  archisobasedir=%INSTALL_DIR% archisosearchuuid=%ARCHISO_UUID%
diff --git a/releng/efiboot/loader/entries/02-archiso-x86_64-speech-linux.conf b/releng/efiboot/loader/entries/02-archiso-x86_64-speech-linux.conf
new file mode 100644
index 0000000..c0cb1c8
--- /dev/null
+++ b/releng/efiboot/loader/entries/02-archiso-x86_64-speech-linux.conf
@@ -0,0 +1,5 @@
+title    Arch Linux install medium (x86_64, UEFI) with speech
+sort-key 02
+linux    /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux
+initrd   /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img
+options  archisobasedir=%INSTALL_DIR% archisosearchuuid=%ARCHISO_UUID% accessibility=on
diff --git a/releng/efiboot/loader/entries/03-archiso-x86_64-memtest86+.conf b/releng/efiboot/loader/entries/03-archiso-x86_64-memtest86+.conf
new file mode 100644
index 0000000..d0b305c
--- /dev/null
+++ b/releng/efiboot/loader/entries/03-archiso-x86_64-memtest86+.conf
@@ -0,0 +1,3 @@
+title    Memtest86+
+sort-key 03
+efi      /boot/memtest86+/memtest.efi
diff --git a/releng/efiboot/loader/loader.conf b/releng/efiboot/loader/loader.conf
new file mode 100644
index 0000000..2d137aa
--- /dev/null
+++ b/releng/efiboot/loader/loader.conf
@@ -0,0 +1,3 @@
+timeout 15
+default 01-archiso-x86_64-linux.conf
+beep on
diff --git a/releng/grub/grub.cfg b/releng/grub/grub.cfg
new file mode 100644
index 0000000..25194a3
--- /dev/null
+++ b/releng/grub/grub.cfg
@@ -0,0 +1,107 @@
+# Load partition table and file system modules
+insmod part_gpt
+insmod part_msdos
+insmod fat
+insmod iso9660
+insmod ntfs
+insmod ntfscomp
+insmod exfat
+insmod udf
+
+# Use graphics-mode output
+if loadfont "${prefix}/fonts/unicode.pf2" ; then
+    insmod all_video
+    set gfxmode="auto"
+    terminal_input console
+    terminal_output console
+fi
+
+# Enable serial console
+insmod serial
+insmod usbserial_common
+insmod usbserial_ftdi
+insmod usbserial_pl2303
+insmod usbserial_usbdebug
+if serial --unit=0 --speed=115200; then
+    terminal_input --append serial
+    terminal_output --append serial
+fi
+
+# Get a human readable platform identifier
+if [ "${grub_platform}" == 'efi' ]; then
+    archiso_platform='UEFI'
+    if [ "${grub_cpu}" == 'x86_64' ]; then
+        archiso_platform="x64 ${archiso_platform}"
+    elif [ "${grub_cpu}" == 'i386' ]; then
+        archiso_platform="IA32 ${archiso_platform}"
+    else
+        archiso_platform="${grub_cpu} ${archiso_platform}"
+    fi
+elif [ "${grub_platform}" == 'pc' ]; then
+    archiso_platform='BIOS'
+else
+    archiso_platform="${grub_cpu} ${grub_platform}"
+fi
+
+# Set default menu entry
+default=archlinux
+timeout=15
+timeout_style=menu
+
+
+# Menu entries
+
+menuentry "Arch Linux install medium (%ARCH%, ${archiso_platform})" --class arch --class gnu-linux --class gnu --class os --id 'archlinux' {
+    set gfxpayload=keep
+    linux /%INSTALL_DIR%/boot/%ARCH%/vmlinuz-linux archisobasedir=%INSTALL_DIR% archisosearchuuid=%ARCHISO_UUID%
+    initrd /%INSTALL_DIR%/boot/%ARCH%/initramfs-linux.img
+}
+
+menuentry "Arch Linux install medium with speakup screen reader (%ARCH%, ${archiso_platform})" --hotkey s --class arch --class gnu-linux --class gnu --class os --id 'archlinux-accessibility' {
+    set gfxpayload=keep
+    linux /%INSTALL_DIR%/boot/%ARCH%/vmlinuz-linux archisobasedir=%INSTALL_DIR% archisosearchuuid=%ARCHISO_UUID% accessibility=on
+    initrd /%INSTALL_DIR%/boot/%ARCH%/initramfs-linux.img
+}
+
+
+if [ "${grub_platform}" == 'efi' -a "${grub_cpu}" == 'x86_64' -a -f '/boot/memtest86+/memtest.efi' ]; then
+    menuentry 'Run Memtest86+ (RAM test)' --class memtest86 --class memtest --class gnu --class tool {
+        set gfxpayload=800x600,1024x768
+        linux /boot/memtest86+/memtest.efi
+    }
+fi
+if [ "${grub_platform}" == 'pc' -a -f '/boot/memtest86+/memtest' ]; then
+    menuentry 'Run Memtest86+ (RAM test)' --class memtest86 --class memtest --class gnu --class tool {
+        set gfxpayload=800x600,1024x768
+        linux /boot/memtest86+/memtest
+    }
+fi
+if [ "${grub_platform}" == 'efi' ]; then
+    if [ "${grub_cpu}" == 'x86_64' -a -f '/shellx64.efi' ]; then
+        menuentry 'UEFI Shell' --class efi {
+            chainloader /shellx64.efi
+        }
+    elif [ "${grub_cpu}" == "i386" -a -f '/shellia32.efi' ]; then
+        menuentry 'UEFI Shell' --class efi {
+            chainloader /shellia32.efi
+        }
+    fi
+
+    menuentry 'UEFI Firmware Settings' --id 'uefi-firmware' {
+        fwsetup
+    }
+fi
+
+menuentry 'System shutdown' --class shutdown --class poweroff {
+    echo 'System shutting down...'
+    halt
+}
+
+menuentry 'System restart' --class reboot --class restart {
+    echo 'System rebooting...'
+    reboot
+}
+
+
+# GRUB init tune for accessibility
+play 600 988 1 1319 4
diff --git a/releng/grub/loopback.cfg b/releng/grub/loopback.cfg
new file mode 100644
index 0000000..d7d5ece
--- /dev/null
+++ b/releng/grub/loopback.cfg
@@ -0,0 +1,80 @@
+# https://www.supergrubdisk.org/wiki/Loopback.cfg
+
+# Search for the ISO volume
+search --no-floppy --set=archiso_img_dev --file "${iso_path}"
+probe --set archiso_img_dev_uuid --fs-uuid "${archiso_img_dev}"
+
+# Get a human readable platform identifier
+if [ "${grub_platform}" == 'efi' ]; then
+    archiso_platform='UEFI'
+    if [ "${grub_cpu}" == 'x86_64' ]; then
+        archiso_platform="x64 ${archiso_platform}"
+    elif [ "${grub_cpu}" == 'i386' ]; then
+        archiso_platform="IA32 ${archiso_platform}"
+    else
+        archiso_platform="${grub_cpu} ${archiso_platform}"
+    fi
+elif [ "${grub_platform}" == 'pc' ]; then
+    archiso_platform='BIOS'
+else
+    archiso_platform="${grub_cpu} ${grub_platform}"
+fi
+
+# Set default menu entry
+default=archlinux
+timeout=15
+timeout_style=menu
+
+
+# Menu entries
+
+menuentry "Arch Linux install medium (%ARCH%, ${archiso_platform})" --class arch --class gnu-linux --class gnu --class os --id 'archlinux' {
+    set gfxpayload=keep
+    linux /%INSTALL_DIR%/boot/%ARCH%/vmlinuz-linux archisobasedir=%INSTALL_DIR% img_dev=UUID=${archiso_img_dev_uuid} img_loop="${iso_path}"
+    initrd /%INSTALL_DIR%/boot/%ARCH%/initramfs-linux.img
+}
+
+menuentry "Arch Linux install medium with speakup screen reader (%ARCH%, ${archiso_platform})" --hotkey s --class arch --class gnu-linux --class gnu --class os --id 'archlinux-accessibility' {
+    set gfxpayload=keep
+    linux /%INSTALL_DIR%/boot/%ARCH%/vmlinuz-linux archisobasedir=%INSTALL_DIR% img_dev=UUID=${archiso_img_dev_uuid} img_loop="${iso_path}" accessibility=on
+    initrd /%INSTALL_DIR%/boot/%ARCH%/initramfs-linux.img
+}
+
+
+if [ "${grub_platform}" == 'efi' -a "${grub_cpu}" == 'x86_64' -a -f '/boot/memtest86+/memtest.efi' ]; then
+    menuentry 'Run Memtest86+ (RAM test)' --class memtest86 --class memtest --class gnu --class tool {
+        set gfxpayload=800x600,1024x768
+        linux /boot/memtest86+/memtest.efi
+    }
+fi
+if [ "${grub_platform}" == 'pc' -a -f '/boot/memtest86+/memtest' ]; then
+    menuentry 'Run Memtest86+ (RAM test)' --class memtest86 --class memtest --class gnu --class tool {
+        set gfxpayload=800x600,1024x768
+        linux /boot/memtest86+/memtest
+    }
+fi
+if [ "${grub_platform}" == 'efi' ]; then
+    if [ "${grub_cpu}" == 'x86_64' -a -f '/shellx64.efi' ]; then
+        menuentry 'UEFI Shell' --class efi {
+            chainloader /shellx64.efi
+        }
+    elif [ "${grub_cpu}" == "i386" -a -f '/shellia32.efi' ]; then
+        menuentry 'UEFI Shell' --class efi {
+            chainloader /shellia32.efi
+        }
+    fi
+
+    menuentry 'UEFI Firmware Settings' --id 'uefi-firmware' {
+        fwsetup
+    }
+fi
+
+menuentry 'System shutdown' --class shutdown --class poweroff {
+    echo 'System shutting down...'
+    halt
+}
+
+menuentry 'System restart' --class reboot --class restart {
+    echo 'System rebooting...'
+    reboot
+}
diff --git a/releng/packages.x86_64 b/releng/packages.x86_64
new file mode 100644
index 0000000..5409735
--- /dev/null
+++ b/releng/packages.x86_64
@@ -0,0 +1,161 @@
+alsa-utils
+amd-ucode
+arch-install-scripts
+archinstall
+b43-fwcutter
+base
+bcachefs-tools
+bind
+bolt
+brltty
+broadcom-wl
+btrfs-progs
+clonezilla
+cloud-init
+cryptsetup
+darkhttpd
+ddrescue
+dhclient
+dhcpcd
+diffutils
+dmidecode
+dmraid
+dnsmasq
+dosfstools
+e2fsprogs
+edk2-shell
+efibootmgr
+espeakup
+ethtool
+exfatprogs
+f2fs-tools
+fatresize
+foot-terminfo
+fsarchiver
+gpart
+gpm
+gptfdisk
+grml-zsh-config
+grub
+hdparm
+hyperv
+intel-ucode
+irssi
+iw
+iwd
+jfsutils
+kitty-terminfo
+ldns
+less
+lftp
+libfido2
+libusb-compat
+linux
+linux-atm
+linux-firmware
+linux-firmware-marvell
+livecd-sounds
+lsscsi
+lvm2
+lynx
+man-db
+man-pages
+mc
+mdadm
+memtest86+
+memtest86+-efi
+mkinitcpio
+mkinitcpio-archiso
+mkinitcpio-nfs-utils
+modemmanager
+mtools
+nano
+nbd
+ndisc6
+nfs-utils
+nilfs-utils
+nmap
+ntfs-3g
+nvme-cli
+open-iscsi
+open-vm-tools
+openconnect
+openpgp-card-tools
+openssh
+openvpn
+partclone
+parted
+partimage
+pcsclite
+ppp
+pptpclient
+pv
+qemu-guest-agent
+refind
+reflector
+rp-pppoe
+rsync
+rxvt-unicode-terminfo
+screen
+sdparm
+sequoia-sq
+sg3_utils
+smartmontools
+sof-firmware
+squashfs-tools
+sudo
+syslinux
+systemd-resolvconf
+tcpdump
+terminus-font
+testdisk
+tmux
+tpm2-tools
+tpm2-tss
+udftools
+usb_modeswitch
+usbmuxd
+usbutils
+vim
+virtualbox-guest-utils-nox
+vpnc
+wireless-regdb
+wireless_tools
+wpa_supplicant
+wvdial
+xfsprogs
+xl2tpd
+zsh
+fish
+fastfetch
+htop
+btop
+flashrom
+neovim
+wavemon
+yazi
+sway
+wget
+minicom
+iperf3
+waybar
+fuzzel
+wireguard-tools
+powertop
+dust
+clamav
+ffmpeg
+dog
+jq
+git
+go
+alacritty
+pcmanfm-gtk3
+networkmanager
+gparted
+firefox
+nwg-displays
+cheese
+torbrowser-launcher
+timeshift
+otf-font-awesome
diff --git a/releng/pacman.conf b/releng/pacman.conf
new file mode 100644
index 0000000..6684617
--- /dev/null
+++ b/releng/pacman.conf
@@ -0,0 +1,100 @@
+#
+# /etc/pacman.conf
+#
+# See the pacman.conf(5) manpage for option and repository directives
+
+#
+# GENERAL OPTIONS
+#
+[options]
+# The following paths are commented out with their default values listed.
+# If you wish to use different paths, uncomment and update the paths.
+#RootDir     = /
+#DBPath      = /var/lib/pacman/
+#CacheDir    = /var/cache/pacman/pkg/
+#LogFile     = /var/log/pacman.log
+#GPGDir      = /etc/pacman.d/gnupg/
+#HookDir     = /etc/pacman.d/hooks/
+HoldPkg     = pacman glibc
+#XferCommand = /usr/bin/curl -L -C - -f -o %o %u
+#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
+#CleanMethod = KeepInstalled
+Architecture = auto
+
+# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
+#IgnorePkg   =
+#IgnoreGroup =
+
+#NoUpgrade   =
+#NoExtract   =
+
+# Misc options
+#UseSyslog
+#Color
+#NoProgressBar
+# We cannot check disk space from within a chroot environment
+#CheckSpace
+#VerbosePkgLists
+ParallelDownloads = 5
+#DownloadUser = alpm
+#DisableSandbox
+
+# By default, pacman accepts packages signed by keys that its local keyring
+# trusts (see pacman-key and its man page), as well as unsigned packages.
+SigLevel    = Required DatabaseOptional
+LocalFileSigLevel = Optional
+#RemoteFileSigLevel = Required
+
+# NOTE: You must run `pacman-key --init` before first using pacman; the local
+# keyring can then be populated with the keys of all official Arch Linux
+# packagers with `pacman-key --populate archlinux`.
+
+#
+# REPOSITORIES
+#   - can be defined here or included from another file
+#   - pacman will search repositories in the order defined here
+#   - local/custom mirrors can be added here or in separate files
+#   - repositories listed first will take precedence when packages
+#     have identical names, regardless of version number
+#   - URLs will have $repo replaced by the name of the current repo
+#   - URLs will have $arch replaced by the name of the architecture
+#
+# Repository entries are of the format:
+#       [repo-name]
+#       Server = ServerName
+#       Include = IncludePath
+#
+# The header [repo-name] is crucial - it must be present and
+# uncommented to enable the repo.
+#
+
+# The testing repositories are disabled by default. To enable, uncomment the
+# repo name header and Include lines. You can add preferred servers immediately
+# after the header, and they will be used before the default mirrors.
+
+#[core-testing]
+#Include = /etc/pacman.d/mirrorlist
+
+[core]
+Include = /etc/pacman.d/mirrorlist
+
+#[extra-testing]
+#Include = /etc/pacman.d/mirrorlist
+
+[extra]
+Include = /etc/pacman.d/mirrorlist
+
+# If you want to run 32 bit applications on your x86_64 system,
+# enable the multilib repositories as required here.
+
+#[multilib-testing]
+#Include = /etc/pacman.d/mirrorlist
+
+[multilib]
+Include = /etc/pacman.d/mirrorlist
+
+# An example of a custom package repository.  See the pacman manpage for
+# tips on creating your own repositories.
+#[custom]
+#SigLevel = Optional TrustAll
+#Server = file:///home/custompkgs
diff --git a/releng/profiledef.sh b/releng/profiledef.sh
new file mode 100644
index 0000000..99b64d9
--- /dev/null
+++ b/releng/profiledef.sh
@@ -0,0 +1,30 @@
+#!/usr/bin/env bash
+# shellcheck disable=SC2034
+
+iso_name="archlinux"
+iso_label="ARCH_$(date --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}" +%Y%m)"
+iso_publisher="Arch Linux <https://archlinux.org>"
+iso_application="Arch Linux Live/Rescue DVD"
+iso_version="$(date --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}" +%Y.%m.%d)"
+install_dir="arch"
+buildmodes=('iso')
+bootmodes=('bios.syslinux.mbr' 'bios.syslinux.eltorito'
+           'uefi-ia32.systemd-boot.esp' 'uefi-x64.systemd-boot.esp'
+           'uefi-ia32.systemd-boot.eltorito' 'uefi-x64.systemd-boot.eltorito')
+arch="x86_64"
+pacman_conf="pacman.conf"
+airootfs_image_type="squashfs"
+airootfs_image_tool_options=('-comp' 'xz' '-Xbcj' 'x86' '-b' '1M' '-Xdict-size' '1M')
+bootstrap_tarball_compression=('zstd' '-c' '-T0' '--auto-threads=logical' '--long' '-19')
+file_permissions=(
+  ["/etc/shadow"]="0:0:400"
+  ["/root"]="0:0:750"
+  ["/root/.automated_script.sh"]="0:0:755"
+  ["/root"]="0:0:0750"
+  ["/root/.ssh"]="0:0:0700"
+  ["/root/.ssh/authorized_keys"]="0:0:0600"
+  ["/root/.gnupg"]="0:0:700"
+  ["/usr/local/bin/choose-mirror"]="0:0:755"
+  ["/usr/local/bin/Installation_guide"]="0:0:755"
+  ["/usr/local/bin/livecd-sound"]="0:0:755"
+)
diff --git a/releng/syslinux/archiso_head.cfg b/releng/syslinux/archiso_head.cfg
new file mode 100644
index 0000000..671ab4e
--- /dev/null
+++ b/releng/syslinux/archiso_head.cfg
@@ -0,0 +1,28 @@
+SERIAL 0 115200
+UI vesamenu.c32
+MENU TITLE Arch Linux
+MENU BACKGROUND splash.png
+
+MENU WIDTH 78
+MENU MARGIN 4
+MENU ROWS 7
+MENU VSHIFT 10
+MENU TABMSGROW 14
+MENU CMDLINEROW 14
+MENU HELPMSGROW 16
+MENU HELPMSGENDROW 29
+
+# Refer to https://wiki.syslinux.org/wiki/index.php/Comboot/menu.c32
+
+MENU COLOR border       30;44   #40ffffff #a0000000 std
+MENU COLOR title        1;36;44 #9033ccff #a0000000 std
+MENU COLOR sel          7;37;40 #e0ffffff #20ffffff all
+MENU COLOR unsel        37;44   #50ffffff #a0000000 std
+MENU COLOR help         37;40   #c0ffffff #a0000000 std
+MENU COLOR timeout_msg  37;40   #80ffffff #00000000 std
+MENU COLOR timeout      1;37;40 #c0ffffff #00000000 std
+MENU COLOR msg07        37;40   #90ffffff #a0000000 std
+MENU COLOR tabmsg       31;40   #30ffffff #00000000 std
+
+MENU CLEAR
+MENU IMMEDIATE
diff --git a/releng/syslinux/archiso_pxe-linux.cfg b/releng/syslinux/archiso_pxe-linux.cfg
new file mode 100644
index 0000000..5d0f741
--- /dev/null
+++ b/releng/syslinux/archiso_pxe-linux.cfg
@@ -0,0 +1,32 @@
+LABEL arch64_nbd
+TEXT HELP
+Boot the Arch Linux install medium using NBD.
+It allows you to install Arch Linux or perform system maintenance.
+ENDTEXT
+MENU LABEL Arch Linux install medium (x86_64, NBD)
+LINUX ::/%INSTALL_DIR%/boot/x86_64/vmlinuz-linux
+INITRD ::/%INSTALL_DIR%/boot/x86_64/initramfs-linux.img
+APPEND archisobasedir=%INSTALL_DIR% archisosearchuuid=%ARCHISO_UUID% archiso_nbd_srv=${pxeserver} cms_verify=y
+SYSAPPEND 3
+
+LABEL arch64_nfs
+TEXT HELP
+Boot the Arch Linux live medium using NFS.
+It allows you to install Arch Linux or perform system maintenance.
+ENDTEXT
+MENU LABEL Arch Linux install medium (x86_64, NFS)
+LINUX ::/%INSTALL_DIR%/boot/x86_64/vmlinuz-linux
+INITRD ::/%INSTALL_DIR%/boot/x86_64/initramfs-linux.img
+APPEND archisobasedir=%INSTALL_DIR% archiso_nfs_srv=${pxeserver}:/run/archiso/bootmnt cms_verify=y
+SYSAPPEND 3
+
+LABEL arch64_http
+TEXT HELP
+Boot the Arch Linux live medium using HTTP.
+It allows you to install Arch Linux or perform system maintenance.
+ENDTEXT
+MENU LABEL Arch Linux install medium (x86_64, HTTP)
+LINUX ::/%INSTALL_DIR%/boot/x86_64/vmlinuz-linux
+INITRD ::/%INSTALL_DIR%/boot/x86_64/initramfs-linux.img
+APPEND archisobasedir=%INSTALL_DIR% archiso_http_srv=http://${pxeserver}/ cms_verify=y
+SYSAPPEND 3
diff --git a/releng/syslinux/archiso_pxe.cfg b/releng/syslinux/archiso_pxe.cfg
new file mode 100644
index 0000000..b4c9a80
--- /dev/null
+++ b/releng/syslinux/archiso_pxe.cfg
@@ -0,0 +1,5 @@
+INCLUDE archiso_head.cfg
+
+INCLUDE archiso_pxe-linux.cfg
+
+INCLUDE archiso_tail.cfg
diff --git a/releng/syslinux/archiso_sys-linux.cfg b/releng/syslinux/archiso_sys-linux.cfg
new file mode 100644
index 0000000..919e158
--- /dev/null
+++ b/releng/syslinux/archiso_sys-linux.cfg
@@ -0,0 +1,20 @@
+LABEL arch64
+TEXT HELP
+Boot the Arch Linux install medium on BIOS.
+It allows you to install Arch Linux or perform system maintenance.
+ENDTEXT
+MENU LABEL Arch Linux install medium (x86_64, BIOS)
+LINUX /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux
+INITRD /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img
+APPEND archisobasedir=%INSTALL_DIR% archisosearchuuid=%ARCHISO_UUID%
+
+# Accessibility boot option
+LABEL arch64speech
+TEXT HELP
+Boot the Arch Linux install medium on BIOS with speakup screen reader.
+It allows you to install Arch Linux or perform system maintenance with speech feedback.
+ENDTEXT
+MENU LABEL Arch Linux install medium (x86_64, BIOS) with ^speech
+LINUX /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux
+INITRD /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img
+APPEND archisobasedir=%INSTALL_DIR% archisosearchuuid=%ARCHISO_UUID% accessibility=on
diff --git a/releng/syslinux/archiso_sys.cfg b/releng/syslinux/archiso_sys.cfg
new file mode 100644
index 0000000..d93bcfe
--- /dev/null
+++ b/releng/syslinux/archiso_sys.cfg
@@ -0,0 +1,8 @@
+INCLUDE archiso_head.cfg
+
+DEFAULT arch64
+TIMEOUT 150
+
+INCLUDE archiso_sys-linux.cfg
+
+INCLUDE archiso_tail.cfg
diff --git a/releng/syslinux/archiso_tail.cfg b/releng/syslinux/archiso_tail.cfg
new file mode 100644
index 0000000..e84897c
--- /dev/null
+++ b/releng/syslinux/archiso_tail.cfg
@@ -0,0 +1,35 @@
+LABEL existing
+TEXT HELP
+Boot an existing operating system.
+Press TAB to edit the disk and partition number to boot.
+ENDTEXT
+MENU LABEL Boot existing OS
+COM32 chain.c32
+APPEND hd0 0
+
+# https://www.memtest.org/
+LABEL memtest
+MENU LABEL Run Memtest86+ (RAM test)
+LINUX /boot/memtest86+/memtest
+
+# https://wiki.syslinux.org/wiki/index.php/Hdt_(Hardware_Detection_Tool)
+LABEL hdt
+MENU LABEL Hardware Information (HDT)
+COM32 hdt.c32
+APPEND modules_alias=hdt/modalias.gz pciids=hdt/pciids.gz
+
+LABEL reboot
+TEXT HELP
+Reboot computer.
+The computer's firmware must support APM.
+ENDTEXT
+MENU LABEL Reboot
+COM32 reboot.c32
+
+LABEL poweroff
+TEXT HELP
+Power off computer.
+The computer's firmware must support APM.
+ENDTEXT
+MENU LABEL Power Off
+COM32 poweroff.c32
diff --git a/releng/syslinux/splash.png b/releng/syslinux/splash.png
new file mode 100644
index 0000000..64b959a
Binary files /dev/null and b/releng/syslinux/splash.png differ
diff --git a/releng/syslinux/syslinux.cfg b/releng/syslinux/syslinux.cfg
new file mode 100644
index 0000000..cbda72f
--- /dev/null
+++ b/releng/syslinux/syslinux.cfg
@@ -0,0 +1,11 @@
+DEFAULT select
+
+LABEL select
+COM32 whichsys.c32
+APPEND -pxe- pxe -sys- sys -iso- sys
+
+LABEL pxe
+CONFIG archiso_pxe.cfg
+
+LABEL sys
+CONFIG archiso_sys.cfg