aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md13
-rw-r--r--awwan.env9
-rwxr-xr-xbuild-arch-gce149
-rw-r--r--gcloud-image-cleanup.aww20
-rw-r--r--gcloud-image-publish.aww33
-rw-r--r--gcloud-image-test.aww30
-rw-r--r--gcloud-test-image-official.aww17
-rw-r--r--gcloud-test-tail.aww4
-rwxr-xr-xqemu.sh10
-rw-r--r--sys/efi/loader/entries/arch.conf4
-rw-r--r--sys/efi/loader/loader.conf2
-rw-r--r--sys/etc/locale.conf1
-rw-r--r--sys/etc/locale.gen1
-rw-r--r--sys/etc/mkinitcpio.conf67
-rw-r--r--sys/etc/mkinitcpio.d/linux.preset10
-rw-r--r--sys/etc/pacman.conf108
-rw-r--r--sys/etc/pacman.d/hooks/00-systemd-boot.hook9
-rw-r--r--sys/etc/pacman.d/mirrorlist882
-rw-r--r--sys/etc/repart.d/root.conf2
-rw-r--r--sys/etc/ssh/sshd_config116
-rw-r--r--sys/etc/systemd/journald.conf.d/00-google.conf2
-rw-r--r--sys/etc/systemd/system/pacman-init.service12
-rw-r--r--sys/etc/systemd/system/systemd-repart.service.d/override.conf2
-rw-r--r--sys/etc/systemd/timesyncd.conf.d/00-google.conf2
24 files changed, 1420 insertions, 85 deletions
diff --git a/README.md b/README.md
index 13e5719..82e7f1b 100644
--- a/README.md
+++ b/README.md
@@ -17,7 +17,7 @@ Arch Linux installation are the following:
- A minimal initcpio is configured for booting on Compute Engine virtual
machines.
- Root filesystem is ext4.
-- Locale is set to en_US.UTF-8 and timezone is set to UTC.
+- Locale is set to en_GB.UTF-8 and timezone is set to UTC.
- Network is configured through dhclient.
- Systemd-timesyncd is enabled and configured to use the Compute Engine metadata
server.
@@ -39,6 +39,8 @@ Arch Linux installation are the following:
- An additional Pacman repository is used to install and keep the [Linux Guest
Environment](https://aur.archlinux.org/packages/google-compute-engine/)
packages up to date.
+- Ops-agent package installed from
+ [AUR at build.kilabit.info](https://build.kilabit.info).
## Prebuilt Images
@@ -103,6 +105,15 @@ want:
$ gsutil rm gs://BUCKET_NAME/arch-vDATE.tar.gz
```
+## Testing with qemu
+
+Change the owner of disk or tar.gz files to your own user and then run
+
+```
+$ ./qemu.sh <disk | image-name>
+```
+
+
## Contributing Changes
* See [CONTRIB.md](CONTRIB.md)
diff --git a/awwan.env b/awwan.env
new file mode 100644
index 0000000..5de47e5
--- /dev/null
+++ b/awwan.env
@@ -0,0 +1,9 @@
+[gcloud]
+config = arch-builder
+project = arch-build
+region = asia-southeast1
+zone = asia-southeast1-b
+
+[host]
+image = arch-v20220701
+name = arch-test
diff --git a/build-arch-gce b/build-arch-gce
index 0103378..e928e09 100755
--- a/build-arch-gce
+++ b/build-arch-gce
@@ -13,6 +13,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+LC_ALL=C
+
set -eEuo pipefail
trap 'echo "Error: \`$BASH_COMMAND\` exited with status $?"' ERR
@@ -59,25 +61,19 @@ mkdir -- "$mount_dir"
mount -- "$root_dev" "$mount_dir"
echo '- Mounting the boot partition.'
-mkdir -- "$mount_dir/boot"
+mkdir -p -- "$mount_dir/boot"
mount -- "$boot_dev" "$mount_dir/boot"
+echo '- Copy the host pacman database caches'
+mkdir -p $mount_dir/var/lib/pacman/sync
+rsync -r /var/lib/pacman/sync/ $mount_dir/var/lib/pacman/sync/
+
echo '- Installing Arch Linux.'
-append_gce_repo() {
- gawk -i inplace '
- /^\[gce\]$/ { found = 1 } { print }
- ENDFILE { if (!found) {
- print ""
- print "[gce]"
- print "Server = https://storage.googleapis.com/arch-linux-gce/repo"
- print "SigLevel = Optional TrustAll"
- } }' "$1"
-}
-cp /etc/pacman.conf "$work_dir"
-append_gce_repo "$work_dir/pacman.conf"
-pacstrap -G -M -C "$work_dir/pacman.conf" -- "$mount_dir" \
- base linux dosfstools e2fsprogs dhclient openssh sudo google-compute-engine
-append_gce_repo "$mount_dir/etc/pacman.conf"
+pacstrap -c -C "./sys/etc/pacman.conf" -- "$mount_dir" \
+ base linux dosfstools e2fsprogs dhclient openssh sudo google-compute-engine \
+ vim-minimal tmux mosh rsync unzip \
+ google-cloud-ops-agent-git
+cp -f ./sys/etc/pacman.conf "$mount_dir/etc/pacman.conf"
echo '- Configuring fstab.'
root_uuid=$(lsblk --noheadings --raw --output UUID -- "$root_dev")
@@ -95,97 +91,82 @@ print_fstab() {
}
echo '- Running additional setup in chroot.'
+
+echo '-- Configuring systemd-repart.'
+
+mkdir -p $mount_dir/etc/repart.d
+cp -f ./sys/etc/repart.d/root.conf \
+ $mount_dir/etc/repart.d/
+
+mkdir -p $mount_dir/etc/systemd/system/systemd-repart.service.d
+cp -f ./sys/etc/systemd/system/systemd-repart.service.d/override.conf \
+ $mount_dir/etc/systemd/system/systemd-repart.service.d/
+
+echo '-- Configuring NTP.'
+mkdir -p $mount_dir/etc/systemd/timesyncd.conf.d/
+cp ./sys/etc/systemd/timesyncd.conf.d/00-google.conf $mount_dir/etc/systemd/timesyncd.conf.d/
+
+echo '-- Configuring locale.'
+cp ./sys/etc/locale.gen $mount_dir/etc/locale.gen
+cp ./sys/etc/locale.conf $mount_dir/etc/locale.conf
+
+echo '-- Configuring journald.'
+mkdir -p $mount_dir/etc/systemd/journald.conf.d
+cp ./sys/etc/systemd/journald.conf.d/00-google.conf $mount_dir/etc/systemd/journald.conf.d/
+
+## Disable password authentication and root login on SSH server.
+echo '-- Configuring ssh.'
+cp ./sys/etc/ssh/sshd_config $mount_dir/etc/ssh/
+
+echo '-- Configuring pacman mirrorlist.'
+cp -f ./sys/etc/pacman.d/mirrorlist $mount_dir/etc/pacman.d/mirrorlist
+
+echo '-- Creating pacman-init service.'
+cp ./sys/etc/systemd/system/pacman-init.service $mount_dir/etc/systemd/system/
+
+echo '-- Configuring initcpio.'
+cp ./sys/etc/mkinitcpio.conf $mount_dir/etc/
+cp ./sys/etc/mkinitcpio.d/linux.preset $mount_dir/etc/mkinitcpio.d/
+
arch-chroot -- "$mount_dir" /bin/bash -s <<-'EOS'
set -eEuo pipefail
trap 'echo "Error: \`$BASH_COMMAND\` exited with status $?"' ERR
echo '-- Configuring time.'
ln -sf /usr/share/zoneinfo/UTC /etc/localtime
- gawk -i assert -i inplace '
- /^#NTP=/ { $0 = "NTP=metadata.google.internal"; ++f }
- { print } END { assert(f == 1, "f == 1") }' /etc/systemd/timesyncd.conf
systemctl --quiet enable systemd-timesyncd.service
- echo '-- Configuring locale.'
- gawk -i assert -i inplace '
- /^#en_US\.UTF-8 UTF-8\s*$/ { $0 = substr($0, 2); ++f }
- { print } END { assert(f == 1, "f == 1") }' /etc/locale.gen
+ echo '-- Running locale-gen.'
locale-gen
- echo 'LANG=en_US.UTF-8' > /etc/locale.conf
-
- echo '-- Configuring journald.'
- gawk -i assert -i inplace '
- /^#ForwardToConsole=/ { $0 = "ForwardToConsole=yes"; ++f }
- { print } END { assert(f == 1, "f == 1") }' /etc/systemd/journald.conf
- echo '-- Configuring ssh.'
- gawk -i assert -i inplace '
- /^#PasswordAuthentication / { $0 = "PasswordAuthentication no"; ++f1 }
- /^#PermitRootLogin / { $0 = "PermitRootLogin no"; ++f2 }
- { print } END { assert(f1 * f2 == 1, "f == 1") }' /etc/ssh/sshd_config
+ echo '-- Enabling sshd service.'
systemctl --quiet enable sshd.service
- echo '-- Configuring pacman.'
- curl --silent --show-error -o /etc/pacman.d/mirrorlist \
- 'https://archlinux.org/mirrorlist/?country=all&ip_version=4&use_mirror_status=on'
- gawk -i assert -i inplace '
- /^#Server / { $0 = substr($0, 2); ++f }
- { print } END { assert(f > 0, "f > 0") }' /etc/pacman.d/mirrorlist
- cat <<-'EOF' > /etc/systemd/system/pacman-init.service
- [Unit]
- Description=Pacman keyring initialization
- ConditionDirectoryNotEmpty=!/etc/pacman.d/gnupg
-
- [Service]
- Type=oneshot
- RemainAfterExit=yes
- ExecStart=/usr/bin/pacman-key --init
- ExecStart=/usr/bin/pacman-key --populate archlinux
-
- [Install]
- WantedBy=multi-user.target
- EOF
+ echo '-- Enabling pacman-init service.'
systemctl --quiet enable pacman-init.service
- echo '-- Configuring systemd-repart.'
- mkdir /etc/repart.d
- cat <<-'EOF' > /etc/repart.d/root.conf
- [Partition]
- Type=root
- EOF
- mkdir /etc/systemd/system/systemd-repart.service.d
- cat <<-'EOF' > /etc/systemd/system/systemd-repart.service.d/override.conf
- [Unit]
- Before=systemd-growfs@-.service
- EOF
+ echo '-- Enabling google-cloud-ops-agent.service'
+ systemctl --quiet enable google-cloud-ops-agent.service
echo '-- Enabling other services.'
systemctl --quiet enable dhclient@eth0.service
- echo '-- Configuring initcpio.'
- gawk -i assert -i inplace '
- /^MODULES=/ { $0 = "MODULES=(virtio_pci virtio_scsi sd_mod ext4)"; ++f1 }
- /^BINARIES=/ { $0 = "BINARIES=(fsck fsck.ext4)"; ++f2 }
- /^HOOKS=/ { $0 = "HOOKS=(systemd modconf)"; ++f3 }
- { print } END { assert(f1 * f2 * f3 == 1, "f == 1") }' /etc/mkinitcpio.conf
- gawk -i assert -i inplace '
- /^PRESETS=/ { $0 = "PRESETS=(default)"; ++f }
- /#?fallback_/ { next }
- { print } END { assert(f == 1, "f == 1") }' /etc/mkinitcpio.d/linux.preset
+ echo '-- Running mkinitcpio.'
rm /boot/initramfs-linux-fallback.img
mkinitcpio --nocolor --preset linux
- echo '-- Configuring systemd-boot.'
- bootctl install --no-variables --esp-path=/boot
- echo 'default arch.conf' > /boot/loader/loader.conf
- cat <<-'EOF' > /boot/loader/entries/arch.conf
- title Arch Linux
- linux /vmlinuz-linux
- initrd /initramfs-linux.img
- options root="LABEL=root" rw console=ttyS0,38400n8 net.ifnames=0 scsi_mod.use_blk_mq=Y
- EOF
+ echo '-- Running boot loader.'
+ bootctl install --no-variables --quiet
EOS
+echo '- Configuring boot loader.'
+cp ./sys/efi/loader/loader.conf $mount_dir/boot/loader/
+cp ./sys/efi/loader/entries/arch.conf $mount_dir/boot/loader/entries/
+
+echo '- Configuring pacman hooks.'
+mkdir -p -- "$mount_dir/etc/pacman.d/hooks"
+cp ./sys/etc/pacman.d/hooks/00-systemd-boot.hook $mount_dir/etc/pacman.d/hooks/
+
echo '- Cleaning up and finalizing the image.'
> "$mount_dir/etc/machine-id"
rm -- "$mount_dir/var/log/pacman.log"
diff --git a/gcloud-image-cleanup.aww b/gcloud-image-cleanup.aww
new file mode 100644
index 0000000..955b5cb
--- /dev/null
+++ b/gcloud-image-cleanup.aww
@@ -0,0 +1,20 @@
+## Script to remove all except the last five images.
+
+#require: gcloud config configurations activate {{.Val "gcloud::config"}}
+
+gcloud compute images list \
+ --no-standard-images \
+ --show-deprecated \
+ --format="value(NAME)"
+
+gcloud compute images list \
+ --no-standard-images \
+ --show-deprecated \
+ --format="value(NAME)" \
+ | head --lines=-5 \
+ | xargs gcloud compute images delete --quiet
+
+gcloud compute images list \
+ --no-standard-images \
+ --show-deprecated \
+ --format="value(NAME)"
diff --git a/gcloud-image-publish.aww b/gcloud-image-publish.aww
new file mode 100644
index 0000000..c238673
--- /dev/null
+++ b/gcloud-image-publish.aww
@@ -0,0 +1,33 @@
+## Script to publish builded image to public.
+
+#require: gcloud config configurations activate {{.Val "gcloud::config"}}
+
+gsutil cp {{.Val "host::image"}}.tar.gz gs://arch-builder-a/image/
+
+gcloud compute images delete {{.Val "host::image"}} --quiet || exit 0
+
+gcloud compute images create {{.Val "host::image"}} \
+ --source-uri=gs://arch-builder-a/image/{{.Val "host::image"}}.tar.gz \
+ --family=arch \
+ --guest-os-features=GVNIC,UEFI_COMPATIBLE,VIRTIO_SCSI_MULTIQUEUE \
+ --description="Arch linux image with ops-agent. See https://github.com/shuLhan/compute-archlinux-image-builder"
+
+gcloud compute images deprecate {{.Val "host::image"}} \
+ --state=ACTIVE \
+ --deprecate-in=30d \
+ --obsolete-in=37d \
+ --delete-in=44d
+
+gcloud compute images list --no-standard-images
+gcloud compute images describe {{.Val "host::image"}}
+
+## Share the image publicly with authenticated users.
+
+gcloud compute images add-iam-policy-binding {{.Val "host::image"}} \
+ --member='allAuthenticatedUsers' \
+ --role='roles/compute.imageUser'
+
+## Delete the image on storage.
+
+gsutil rm -a gs://arch-builder-a/image/**
+gsutil ls gs://arch-builder-a/
diff --git a/gcloud-image-test.aww b/gcloud-image-test.aww
new file mode 100644
index 0000000..218dae7
--- /dev/null
+++ b/gcloud-image-test.aww
@@ -0,0 +1,30 @@
+## Script to test the published image manually by creating new compute
+## instance.
+
+#require: gcloud config configurations activate {{.Val "gcloud::config"}}
+
+gcloud compute instances create arch-test \
+ --zone={{.Val "gcloud::zone"}} \
+ --image={{.Val "host::image"}} \
+ --metadata=block-project-ssh-keys=TRUE \
+ --machine-type=f1-micro
+
+gcloud compute instances describe arch-test \
+ --zone={{.Val "gcloud::zone"}}
+
+gcloud compute instances tail-serial-port-output {{.Val "host::name"}} \
+ --zone={{.Val "gcloud::zone"}} \
+
+gcloud compute ssh \
+ --zone={{.Val "gcloud::zone"}} \
+ --command="lsblk -o NAME,UUID,MOUNTPOINTS; cat /etc/fstab; timedatectl show-timesync; localectl" \
+ arch-test
+
+##---- Cleaning up.
+
+gcloud compute instances stop arch-test \
+ --zone={{.Val "gcloud::zone"}}
+
+gcloud compute instances delete arch-test \
+ --zone={{.Val "gcloud::zone"}} \
+ --quiet
diff --git a/gcloud-test-image-official.aww b/gcloud-test-image-official.aww
new file mode 100644
index 0000000..3e464af
--- /dev/null
+++ b/gcloud-test-image-official.aww
@@ -0,0 +1,17 @@
+## Script to test the official public image.
+
+#require: gcloud config configurations activate {{.Val "gcloud::config"}}
+
+gcloud compute instances create arch-test \
+ --zone={{.Val "gcloud::zone"}} \
+ --image-project=arch-linux-gce \
+ --image-family=arch \
+ --machine-type=f1-micro
+
+gcloud compute instances describe arch-test \
+ --zone={{.Val "gcloud::zone"}}
+
+gcloud compute ssh \
+ --zone={{.Val "gcloud::zone"}} \
+ --command="lsblk -o NAME,UUID,MOUNTPOINTS; cat /etc/fstab; timedatectl show-timesync; localectl" \
+ arch-test
diff --git a/gcloud-test-tail.aww b/gcloud-test-tail.aww
new file mode 100644
index 0000000..c7dd93f
--- /dev/null
+++ b/gcloud-test-tail.aww
@@ -0,0 +1,4 @@
+#require: gcloud config configurations activate {{.Val "gcloud::config"}}
+
+gcloud compute instances get-serial-port-output {{.Val "host::name"}} \
+ --zone={{.Val "gcloud::zone"}}
diff --git a/qemu.sh b/qemu.sh
new file mode 100755
index 0000000..559313a
--- /dev/null
+++ b/qemu.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+image=$1
+echo $image
+qemu-system-x86_64 -enable-kvm \
+ -drive format=raw,file=$image,if=virtio \
+ -net none \
+ -m 512M \
+ -bios /usr/share/ovmf/x64/OVMF.fd \
+ -boot menu=on
diff --git a/sys/efi/loader/entries/arch.conf b/sys/efi/loader/entries/arch.conf
new file mode 100644
index 0000000..3f36b44
--- /dev/null
+++ b/sys/efi/loader/entries/arch.conf
@@ -0,0 +1,4 @@
+title Arch Linux
+linux /vmlinuz-linux
+initrd /initramfs-linux.img
+options rw console=ttyS0,38400n8 net.ifnames=0 scsi_mod.use_blk_mq=Y
diff --git a/sys/efi/loader/loader.conf b/sys/efi/loader/loader.conf
new file mode 100644
index 0000000..6c5641d
--- /dev/null
+++ b/sys/efi/loader/loader.conf
@@ -0,0 +1,2 @@
+default arch.conf
+editor no
diff --git a/sys/etc/locale.conf b/sys/etc/locale.conf
new file mode 100644
index 0000000..f62153b
--- /dev/null
+++ b/sys/etc/locale.conf
@@ -0,0 +1 @@
+LANG=en_GB.UTF-8
diff --git a/sys/etc/locale.gen b/sys/etc/locale.gen
new file mode 100644
index 0000000..230dd52
--- /dev/null
+++ b/sys/etc/locale.gen
@@ -0,0 +1 @@
+en_GB.UTF-8 UTF-8
diff --git a/sys/etc/mkinitcpio.conf b/sys/etc/mkinitcpio.conf
new file mode 100644
index 0000000..abe6299
--- /dev/null
+++ b/sys/etc/mkinitcpio.conf
@@ -0,0 +1,67 @@
+# vim:set ft=sh
+# MODULES
+# The following modules are loaded before any boot hooks are
+# run. Advanced users may wish to specify all system modules
+# in this array. For instance:
+# MODULES=(piix ide_disk reiserfs)
+MODULES=(virtio_pci virtio_scsi sd_mod ext4)
+
+# BINARIES
+# This setting includes any additional binaries a given user may
+# wish into the CPIO image. This is run last, so it may be used to
+# override the actual binaries included by a given hook
+# BINARIES are dependency parsed, so you may safely ignore libraries
+BINARIES=(fsck fsck.ext4)
+
+# FILES
+# This setting is similar to BINARIES above, however, files are added
+# as-is and are not parsed in any way. This is useful for config files.
+FILES=()
+
+# HOOKS
+# This is the most important setting in this file. The HOOKS control the
+# modules and scripts added to the image, and what happens at boot time.
+# Order is important, and it is recommended that you do not change the
+# order in which HOOKS are added. Run 'mkinitcpio -H <hook name>' for
+# help on a given hook.
+# 'base' is _required_ unless you know precisely what you are doing.
+# 'udev' is _required_ in order to automatically load modules
+# 'filesystems' is _required_ unless you specify your fs modules in MODULES
+# Examples:
+## This setup specifies all modules in the MODULES setting above.
+## No raid, lvm2, or encrypted root is needed.
+# HOOKS=(base)
+#
+## This setup will autodetect all modules for your system and should
+## work as a sane default
+# HOOKS=(base udev autodetect block filesystems)
+#
+## This setup will generate a 'full' image which supports most systems.
+## No autodetection is done.
+# HOOKS=(base udev block filesystems)
+#
+## This setup assembles a pata mdadm array with an encrypted root FS.
+## Note: See 'mkinitcpio -H mdadm' for more information on raid devices.
+# HOOKS=(base udev block mdadm encrypt filesystems)
+#
+## This setup loads an lvm2 volume group on a usb device.
+# HOOKS=(base udev block lvm2 filesystems)
+#
+## NOTE: If you have /usr on a separate partition, you MUST include the
+# usr, fsck and shutdown hooks.
+HOOKS=(systemd autodetect block modconf)
+
+# COMPRESSION
+# Use this to compress the initramfs image. By default, zstd compression
+# is used. Use 'cat' to create an uncompressed image.
+#COMPRESSION="zstd"
+#COMPRESSION="gzip"
+#COMPRESSION="bzip2"
+#COMPRESSION="lzma"
+#COMPRESSION="xz"
+#COMPRESSION="lzop"
+#COMPRESSION="lz4"
+
+# COMPRESSION_OPTIONS
+# Additional options for the compressor
+#COMPRESSION_OPTIONS=()
diff --git a/sys/etc/mkinitcpio.d/linux.preset b/sys/etc/mkinitcpio.d/linux.preset
new file mode 100644
index 0000000..6fcee70
--- /dev/null
+++ b/sys/etc/mkinitcpio.d/linux.preset
@@ -0,0 +1,10 @@
+# mkinitcpio preset file for the 'linux' package
+
+ALL_config="/etc/mkinitcpio.conf"
+ALL_kver="/boot/vmlinuz-linux"
+
+PRESETS=('default')
+
+#default_config="/etc/mkinitcpio.conf"
+default_image="/boot/initramfs-linux.img"
+#default_options=""
diff --git a/sys/etc/pacman.conf b/sys/etc/pacman.conf
new file mode 100644
index 0000000..e8760a2
--- /dev/null
+++ b/sys/etc/pacman.conf
@@ -0,0 +1,108 @@
+#
+# /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
+CheckSpace
+#VerbosePkgLists
+#ParallelDownloads = 5
+
+# 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.
+
+#[testing]
+#Include = /etc/pacman.d/mirrorlist
+
+[core]
+Include = /etc/pacman.d/mirrorlist
+
+[extra]
+Include = /etc/pacman.d/mirrorlist
+
+#[community-testing]
+#Include = /etc/pacman.d/mirrorlist
+
+[community]
+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
+
+[gce]
+Server = https://storage.googleapis.com/arch-linux-gce/repo
+SigLevel = Optional TrustAll
+
+[build.kilabit.info]
+SigLevel = Optional TrustAll
+Server = https://build.kilabit.info/aur
diff --git a/sys/etc/pacman.d/hooks/00-systemd-boot.hook b/sys/etc/pacman.d/hooks/00-systemd-boot.hook
new file mode 100644
index 0000000..d65c027
--- /dev/null
+++ b/sys/etc/pacman.d/hooks/00-systemd-boot.hook
@@ -0,0 +1,9 @@
+[Trigger]
+Type = Package
+Operation = Upgrade
+Target = systemd
+
+[Action]
+Description = Gracefully upgrading systemd-boot...
+When = PostTransaction
+Exec = /usr/bin/systemctl restart systemd-boot-update.service
diff --git a/sys/etc/pacman.d/mirrorlist b/sys/etc/pacman.d/mirrorlist
new file mode 100644
index 0000000..79c9728
--- /dev/null
+++ b/sys/etc/pacman.d/mirrorlist
@@ -0,0 +1,882 @@
+##
+## Arch Linux repository mirrorlist
+## Generated on 2022-07-24
+##
+
+## Worldwide
+#Server = https://geo.mirror.pkgbuild.com/$repo/os/$arch
+#Server = http://mirror.rackspace.com/archlinux/$repo/os/$arch
+Server = https://mirror.rackspace.com/archlinux/$repo/os/$arch
+
+## Australia
+#Server = https://mirror.aarnet.edu.au/pub/archlinux/$repo/os/$arch
+#Server = http://archlinux.mirror.digitalpacific.com.au/$repo/os/$arch
+#Server = https://archlinux.mirror.digitalpacific.com.au/$repo/os/$arch
+#Server = https://sydney.mirror.pkgbuild.com/$repo/os/$arch
+#Server = http://ftp.iinet.net.au/pub/archlinux/$repo/os/$arch
+#Server = http://mirror.internode.on.net/pub/archlinux/$repo/os/$arch
+#Server = http://arch.lucassymons.net/$repo/os/$arch
+#Server = https://arch.lucassymons.net/$repo/os/$arch
+#Server = http://syd.mirror.rackspace.com/archlinux/$repo/os/$arch
+#Server = https://syd.mirror.rackspace.com/archlinux/$repo/os/$arch
+#Server = http://ftp.swin.edu.au/archlinux/$repo/os/$arch
+#Server = http://mirrors.wale.id.au/archlinux/$repo/os/$arch
+#Server = https://mirrors.wale.id.au/archlinux/$repo/os/$arch
+
+## Austria
+#Server = http://mirror.alwyzon.net/archlinux/$repo/os/$arch
+#Server = https://mirror.alwyzon.net/archlinux/$repo/os/$arch
+#Server = http://mirror.digitalnova.at/archlinux/$repo/os/$arch
+#Server = http://mirror.easyname.at/archlinux/$repo/os/$arch
+#Server = https://at.arch.mirror.kescher.at/$repo/os/$arch
+#Server = http://mirror.reisenbauer.ee/archlinux/$repo/os/$arch
+#Server = https://mirror.reisenbauer.ee/archlinux/$repo/os/$arch
+
+## Bangladesh
+#Server = http://mirror.xeonbd.com/archlinux/$repo/os/$arch
+
+## Belarus
+#Server = http://ftp.byfly.by/pub/archlinux/$repo/os/$arch
+#Server = http://mirror.datacenter.by/pub/archlinux/$repo/os/$arch
+
+## Belgium
+#Server = http://archlinux.cu.be/$repo/os/$arch
+#Server = http://archlinux.mirror.kangaroot.net/$repo/os/$arch
+#Server = http://mirror.tiguinet.net/arch/$repo/os/$arch
+
+## Bosnia and Herzegovina
+#Server = http://archlinux.mirror.ba/$repo/os/$arch
+
+## Brazil
+#Server = http://archlinux-br.com.br/archlinux/$repo/os/$arch
+#Server = https://archlinux-br.com.br/archlinux/$repo/os/$arch
+#Server = http://br.mirror.archlinux-br.org/$repo/os/$arch
+#Server = http://archlinux.c3sl.ufpr.br/$repo/os/$arch
+#Server = http://www.caco.ic.unicamp.br/archlinux/$repo/os/$arch
+#Server = https://www.caco.ic.unicamp.br/archlinux/$repo/os/$arch
+#Server = http://linorg.usp.br/archlinux/$repo/os/$arch
+#Server = http://archlinux.pop-es.rnp.br/$repo/os/$arch
+#Server = http://mirror.ufam.edu.br/archlinux/$repo/os/$arch
+#Server = http://mirror.ufscar.br/archlinux/$repo/os/$arch
+
+## Bulgaria
+#Server = https://mirror.darklinux.uk/archlinux/$repo/os/$arch
+#Server = http://mirror.host.ag/archlinux/$repo/os/$arch
+#Server = http://mirrors.netix.net/archlinux/$repo/os/$arch
+#Server = http://mirror.telepoint.bg/archlinux/$repo/os/$arch
+#Server = https://mirror.telepoint.bg/archlinux/$repo/os/$arch
+#Server = http://mirrors.uni-plovdiv.net/archlinux/$repo/os/$arch
+#Server = https://mirrors.uni-plovdiv.net/archlinux/$repo/os/$arch
+
+## Cambodia
+#Server = http://mirror.sabay.com.kh/archlinux/$repo/os/$arch
+#Server = https://mirror.sabay.com.kh/archlinux/$repo/os/$arch
+
+## Canada
+#Server = http://mirror.0xem.ma/arch/$repo/os/$arch
+#Server = https://mirror.0xem.ma/arch/$repo/os/$arch
+#Server = http://mirror.cedille.club/archlinux/$repo/os/$arch
+#Server = http://archlinux.mirror.colo-serv.net/$repo/os/$arch
+#Server = http://mirror.csclub.uwaterloo.ca/archlinux/$repo/os/$arch
+#Server = https://mirror.csclub.uwaterloo.ca/archlinux/$repo/os/$arch
+#Server = http://mirror2.evolution-host.com/archlinux/$repo/os/$arch
+#Server = https://mirror2.evolution-host.com/archlinux/$repo/os/$arch
+#Server = http://mirror.its.dal.ca/archlinux/$repo/os/$arch
+#Server = http://muug.ca/mirror/archlinux/$repo/os/$arch
+#Server = https://muug.ca/mirror/archlinux/$repo/os/$arch
+#Server = http://mirror.powerfly.ca/archlinux/$repo/os/$arch
+#Server = https://mirror.powerfly.ca/archlinux/$repo/os/$arch
+#Server = http://archlinux.mirror.rafal.ca/$repo/os/$arch
+#Server = http://mirror.scd31.com/arch/$repo/os/$arch
+#Server = https://mirror.scd31.com/arch/$repo/os/$arch
+#Server = http://mirror.sergal.org/archlinux/$repo/os/$arch
+#Server = https://mirror.sergal.org/archlinux/$repo/os/$arch
+#Server = http://mirror.xenyth.net/archlinux/$repo/os/$arch
+#Server = https://mirror.xenyth.net/archlinux/$repo/os/$arch
+
+## Chile
+#Server = http://mirror.anquan.cl/archlinux/$repo/os/$arch
+#Server = https://mirror.anquan.cl/archlinux/$repo/os/$arch
+#Server = http://mirror.archlinux.cl/$repo/os/$arch
+#Server = http://mirror1.cl.netactuate.com/archlinux/$repo/os/$arch
+#Server = https://mirror1.cl.netactuate.com/archlinux/$repo/os/$arch
+#Server = http://mirror.ufro.cl/archlinux/$repo/os/$arch
+#Server = https://mirror.ufro.cl/archlinux/$repo/os/$arch
+
+## China
+#Server = http://mirrors.163.com/archlinux/$repo/os/$arch
+#Server = http://mirrors.aliyun.com/archlinux/$repo/os/$arch
+#Server = https://mirrors.aliyun.com/archlinux/$repo/os/$arch
+#Server = http://mirrors.bfsu.edu.cn/archlinux/$repo/os/$arch
+#Server = https://mirrors.bfsu.edu.cn/archlinux/$repo/os/$arch
+#Server = http://mirrors.cqu.edu.cn/archlinux/$repo/os/$arch
+#Server = https://mirrors.cqu.edu.cn/archlinux/$repo/os/$arch
+#Server = http://mirrors.dgut.edu.cn/archlinux/$repo/os/$arch
+#Server = https://mirrors.dgut.edu.cn/archlinux/$repo/os/$arch
+#Server = http://mirrors.hit.edu.cn/archlinux/$repo/os/$arch
+#Server = https://mirrors.hit.edu.cn/archlinux/$repo/os/$arch
+#Server = http://mirror.lzu.edu.cn/archlinux/$repo/os/$arch
+#Server = http://mirrors.neusoft.edu.cn/archlinux/$repo/os/$arch
+#Server = https://mirrors.neusoft.edu.cn/archlinux/$repo/os/$arch
+#Server = http://mirrors.nju.edu.cn/archlinux/$repo/os/$arch
+#Server = https://mirrors.nju.edu.cn/archlinux/$repo/os/$arch
+#Server = https://mirrors.njupt.edu.cn/archlinux/$repo/os/$arch
+#Server = http://mirror.redrock.team/archlinux/$repo/os/$arch
+#Server = https://mirror.redrock.team/archlinux/$repo/os/$arch
+#Server = http://mirrors.shanghaitech.edu.cn/archlinux/$repo/os/$arch
+#Server = https://mirrors.shanghaitech.edu.cn/archlinux/$repo/os/$arch
+#Server = https://mirrors.sjtug.sjtu.edu.cn/archlinux/$repo/os/$arch
+#Server = http://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch
+#Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch
+#Server = http://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch
+#Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch
+#Server = http://mirrors.wsyu.edu.cn/archlinux/$repo/os/$arch
+#Server = https://mirrors.wsyu.edu.cn/archlinux/$repo/os/$arch
+#Server = https://mirrors.xjtu.edu.cn/archlinux/$repo/os/$arch
+#Server = http://mirrors.zju.edu.cn/archlinux/$repo/os/$arch
+
+## Colombia
+#Server = http://mirrors.udenar.edu.co/archlinux/$repo/os/$arch
+
+## Croatia
+#Server = http://archlinux.iskon.hr/$repo/os/$arch
+
+## Czechia
+#Server = http://mirror.dkm.cz/archlinux/$repo/os/$arch
+#Server = https://mirror.dkm.cz/archlinux/$repo/os/$arch
+#Server = http://ftp.fi.muni.cz/pub/linux/arch/$repo/os/$arch
+#Server = http://ftp.linux.cz/pub/linux/arch/$repo/os/$arch
+#Server = https://europe.mirror.pkgbuild.com/$repo/os/$arch
+#Server = http://gluttony.sin.cvut.cz/arch/$repo/os/$arch
+#Server = https://gluttony.sin.cvut.cz/arch/$repo/os/$arch
+#Server = http://mirrors.nic.cz/archlinux/$repo/os/$arch
+#Server = http://ftp.sh.cvut.cz/arch/$repo/os/$arch
+#Server = https://ftp.sh.cvut.cz/arch/$repo/os/$arch
+#Server = http://mirror.vpsfree.cz/archlinux/$repo/os/$arch
+
+## Denmark
+#Server = http://mirrors.dotsrc.org/archlinux/$repo/os/$arch
+#Server = https://mirrors.dotsrc.org/archlinux/$repo/os/$arch
+#Server = http://mirror.one.com/archlinux/$repo/os/$arch
+#Server = https://mirror.one.com/archlinux/$repo/os/$arch
+#Server = https://mirror.safe-con.dk/archlinux/$repo/os/$arch
+
+## Ecuador
+#Server = http://mirror.cedia.org.ec/archlinux/$repo/os/$arch
+#Server = http://mirror.espoch.edu.ec/archlinux/$repo/os/$arch
+#Server = http://mirror.uta.edu.ec/archlinux/$repo/os/$arch
+
+## Estonia
+#Server = http://mirror.cspacehostings.com/archlinux/$repo/os/$arch
+#Server = https://mirror.cspacehostings.com/archlinux/$repo/os/$arch
+#Server = http://mirrors.xtom.ee/archlinux/$repo/os/$arch
+#Server = https://mirrors.xtom.ee/archlinux/$repo/os/$arch
+
+## Finland
+#Server = https://arch.mcstrugs.org/$repo/os/$arch
+#Server = http://mirror.arctic.lol/ArchMirror/$repo/os/$arch
+#Server = https://mirror.arctic.lol/ArchMirror/$repo/os/$arch
+#Server = http://arch.mirror.far.fi/$repo/os/$arch
+#Server = http://mirror.hosthink.net/archlinux/$repo/os/$arch
+#Server = http://arch.kyberorg.fi/$repo/os/$arch
+#Server = https://arch.kyberorg.fi/$repo/os/$arch
+#Server = https://mirror.srv.fail/archlinux/$repo/os/$arch
+#Server = http://mirror.wuki.li/archlinux/$repo/os/$arch
+#Server = https://mirror.wuki.li/archlinux/$repo/os/$arch
+#Server = http://arch.yhtez.xyz/$repo/os/$arch
+#Server = https://arch.yhtez.xyz/$repo/os/$arch
+
+## France
+#Server = http://archlinux.de-labrusse.fr/$repo/os/$arch
+#Server = http://mirror.archlinux.ikoula.com/archlinux/$repo/os/$arch
+#Server = https://archlinux.vi-di.fr/$repo/os/$arch
+#Server = http://archlinux.mirrors.benatherton.com/$repo/os/$arch
+#Server = http://mirror.cyberbits.eu/archlinux/$repo/os/$arch
+#Server = https://mirror.cyberbits.eu/archlinux/$repo/os/$arch
+#Server = http://archlinux.datagr.am/$repo/os/$arch
+#Server = https://mirrors.eric.ovh/arch/$repo/os/$arch
+#Server = http://mirrors.gandi.net/archlinux/$repo/os/$arch
+#Server = https://mirrors.gandi.net/archlinux/$repo/os/$arch
+#Server = https://mirror.ibakerserver.pt/Arch/$repo/os/$arch
+#Server = http://mirror.ibcp.fr/pub/archlinux/$repo/os/$arch
+#Server = https://arch.juline.tech/$repo/os/$arch
+#Server = http://mirroir.labhouse.fr/arch/$repo/os/$arch
+#Server = https://mirroir.labhouse.fr/arch/$repo/os/$arch
+#Server = http://mirror.lastmikoi.net/archlinux/$repo/os/$arch
+#Server = https://arch-mirror.cloud.louifox.house/$repo/os/$arch
+#Server = http://archlinux.mailtunnel.eu/$repo/os/$arch
+#Server = https://archlinux.mailtunnel.eu/$repo/os/$arch
+#Server = http://mir.archlinux.fr/$repo/os/$arch
+#Server = http://mirrors.celianvdb.fr/archlinux/$repo/os/$arch
+#Server = https://mirrors.celianvdb.fr/archlinux/$repo/os/$arch
+#Server = http://arch.nimukaito.net/$repo/os/$arch
+#Server = https://arch.nimukaito.net/$repo/os/$arch
+#Server = http://mirror.oldsql.cc/archlinux/$repo/os/$arch
+#Server = https://mirror.oldsql.cc/archlinux/$repo/os/$arch
+#Server = http://archlinux.mirrors.ovh.net/archlinux/$repo/os/$arch
+#Server = http://archlinux.polymorf.fr/$repo/os/$arch
+#Server = http://archlinux.rezopole.net/$repo/os/$arch
+#Server = https://mirrors.slaanesh.org/archlinux/$repo/os/$arch
+#Server = http://mirrors.standaloneinstaller.com/archlinux/$repo/os/$arch
+#Server = https://mirror.sysa.tech/archlinux/$repo/os/$arch
+#Server = https://mirror.thekinrar.fr/archlinux/$repo/os/$arch
+#Server = http://mirror.theo546.fr/archlinux/$repo/os/$arch
+#Server = https://mirror.theo546.fr/archlinux/$repo/os/$arch
+#Server = http://ftp.u-strasbg.fr/linux/distributions/archlinux/$repo/os/$arch
+#Server = https://mirror.wormhole.eu/archlinux/$repo/os/$arch
+#Server = http://mirroir.wptheme.fr/archlinux/$repo/os/$arch
+#Server = https://mirroir.wptheme.fr/archlinux/$repo/os/$arch
+#Server = http://arch.yourlabs.org/$repo/os/$arch
+#Server = https://arch.yourlabs.org/$repo/os/$arch
+
+## Georgia
+#Server = http://archlinux.grena.ge/$repo/os/$arch
+#Server = https://archlinux.grena.ge/$repo/os/$arch
+
+## Germany
+#Server = http://mirror.23m.com/archlinux/$repo/os/$arch
+#Server = https://mirror.23m.com/archlinux/$repo/os/$arch
+#Server = http://ftp.agdsn.de/pub/mirrors/archlinux/$repo/os/$arch
+#Server = https://ftp.agdsn.de/pub/mirrors/archlinux/$repo/os/$arch
+#Server = https://appuals.com/archlinux/$repo/os/$arch
+#Server = http://artfiles.org/archlinux.org/$repo/os/$arch
+#Server = https://mirror.bethselamin.de/$repo/os/$arch
+#Server = http://mirror.chaoticum.net/arch/$repo/os/$arch
+#Server = https://mirror.chaoticum.net/arch/$repo/os/$arch
+#Server = http://mirror.checkdomain.de/archlinux/$repo/os/$arch
+#Server = https://mirror.checkdomain.de/archlinux/$repo/os/$arch
+#Server = http://mirror.clientvps.com/archlinux/$repo/os/$arch
+#Server = https://mirror.clientvps.com/archlinux/$repo/os/$arch
+#Server = http://os.codefionn.eu/archlinux/$repo/os/$arch
+#Server = https://os.codefionn.eu/archlinux/$repo/os/$arch
+#Server = https://mirror.dogado.de/archlinux/$repo/os/$arch
+#Server = http://mirror.f4st.host/archlinux/$repo/os/$arch
+#Server = https://mirror.f4st.host/archlinux/$repo/os/$arch
+#Server = http://ftp.fau.de/archlinux/$repo/os/$arch
+#Server = https://ftp.fau.de/archlinux/$repo/os/$arch
+#Server = https://pkg.fef.moe/archlinux/$repo/os/$arch
+#Server = https://dist-mirror.fem.tu-ilmenau.de/archlinux/$repo/os/$arch
+#Server = http://mirror.fsrv.services/archlinux/$repo/os/$arch
+#Server = https://mirror.fsrv.services/archlinux/$repo/os/$arch
+#Server = https://mirror.gnomus.de/$repo/os/$arch
+#Server = http://www.gutscheindrache.com/mirror/archlinux/$repo/os/$arch
+#Server = http://ftp.gwdg.de/pub/linux/archlinux/$repo/os/$arch
+#Server = https://archlinux.homeinfo.de/$repo/os/$arch
+#Server = http://archlinux.honkgong.info/$repo/os/$arch
+#Server = http://ftp.hosteurope.de/mirror/ftp.archlinux.org/$repo/os/$arch
+#Server = http://ftp-stud.hs-esslingen.de/pub/Mirrors/archlinux/$repo/os/$arch
+#Server = http://mirror.informatik.tu-freiberg.de/arch/$repo/os/$arch
+#Server = https://mirror.informatik.tu-freiberg.de/arch/$repo/os/$arch
+#Server = http://archlinux.mirror.iphh.net/$repo/os/$arch
+#Server = https://mirror.iusearchbtw.nl/$repo/os/$arch
+#Server = http://mirror.jaime.sh/archlinux/$repo/os/$arch
+#Server = https://mirror.jaime.sh/archlinux/$repo/os/$arch
+#Server = http://mirrors.janbruckner.de/archlinux/$repo/os/$arch
+#Server = https://mirrors.janbruckner.de/archlinux/$repo/os/$arch
+#Server = http://arch.jensgutermuth.de/$repo/os/$arch
+#Server = https://arch.jensgutermuth.de/$repo/os/$arch
+#Server = https://de.arch.mirror.kescher.at/$repo/os/$arch
+#Server = http://mirror.kumi.systems/archlinux/$repo/os/$arch
+#Server = https://mirror.kumi.systems/archlinux/$repo/os/$arch
+#Server = http://mirror.fra10.de.leaseweb.net/archlinux/$repo/os/$arch
+#Server = https://mirror.fra10.de.leaseweb.net/archlinux/$repo/os/$arch
+#Server = http://archlinux.mirror.luzea.de/$repo/os/$arch
+#Server = https://archlinux.mirror.luzea.de/$repo/os/$arch
+#Server = http://mirror.metalgamer.eu/archlinux/$repo/os/$arch
+#Server = https://mirror.metalgamer.eu/archlinux/$repo/os/$arch
+#Server = http://mirror.mikrogravitation.org/archlinux/$repo/os/$arch
+#Server = https://mirror.mikrogravitation.org/archlinux/$repo/os/$arch
+#Server = http://mirror.moson.org/arch/$repo/os/$arch
+#Server = https://mirror.moson.org/arch/$repo/os/$arch
+#Server = http://mirrors.n-ix.net/archlinux/$repo/os/$arch
+#Server = https://mirrors.n-ix.net/archlinux/$repo/os/$arch
+#Server = http://mirror.netcologne.de/archlinux/$repo/os/$arch
+#Server = https://mirror.netcologne.de/archlinux/$repo/os/$arch
+#Server = http://mirrors.niyawe.de/archlinux/$repo/os/$arch
+#Server = https://mirrors.niyawe.de/archlinux/$repo/os/$arch
+#Server = http://mirror.orbit-os.com/archlinux/$repo/os/$arch
+#Server = https://mirror.orbit-os.com/archlinux/$repo/os/$arch
+#Server = http://packages.oth-regensburg.de/archlinux/$repo/os/$arch
+#Server = https://packages.oth-regensburg.de/archlinux/$repo/os/$arch
+#Server = http://mirror.pagenotfound.de/archlinux/$repo/os/$arch
+#Server = https://mirror.pagenotfound.de/archlinux/$repo/os/$arch
+#Server = http://phinau.de/arch/$repo/os/$arch
+#Server = https://phinau.de/arch/$repo/os/$arch
+#Server = https://mirror.pseudoform.org/$repo/os/$arch
+#Server = https://www.ratenzahlung.de/mirror/archlinux/$repo/os/$arch
+#Server = http://ftp.halifax.rwth-aachen.de/archlinux/$repo/os/$arch
+#Server = https://ftp.halifax.rwth-aachen.de/archlinux/$repo/os/$arch
+#Server = http://linux.rz.rub.de/archlinux/$repo/os/$arch
+#Server = http://mirror.satis-faction.de/archlinux/$repo/os/$arch
+#Server = https://mirror.satis-faction.de/archlinux/$repo/os/$arch
+#Server = http://mirror.selfnet.de/archlinux/$repo/os/$arch
+#Server = https://mirror.selfnet.de/archlinux/$repo/os/$arch
+#Server = http://ftp.spline.inf.fu-berlin.de/mirrors/archlinux/$repo/os/$arch
+#Server = https://ftp.spline.inf.fu-berlin.de/mirrors/archlinux/$repo/os/$arch
+#Server = http://archlinux.thaller.ws/$repo/os/$arch
+#Server = https://archlinux.thaller.ws/$repo/os/$arch
+#Server = http://ftp.tu-chemnitz.de/pub/linux/archlinux/$repo/os/$arch
+#Server = http://mirror.ubrco.de/archlinux/$repo/os/$arch
+#Server = https://mirror.ubrco.de/archlinux/$repo/os/$arch
+#Server = http://mirror.undisclose.de/archlinux/$repo/os/$arch
+#Server = https://mirror.undisclose.de/archlinux/$repo/os/$arch
+#Server = http://ftp.uni-bayreuth.de/linux/archlinux/$repo/os/$arch
+#Server = http://ftp.uni-hannover.de/archlinux/$repo/os/$arch
+#Server = http://ftp.uni-kl.de/pub/linux/archlinux/$repo/os/$arch
+#Server = http://mirror.united-gameserver.de/archlinux/$repo/os/$arch
+#Server = https://arch.unixpeople.org/$repo/os/$arch
+#Server = http://ftp.wrz.de/pub/archlinux/$repo/os/$arch
+#Server = https://ftp.wrz.de/pub/archlinux/$repo/os/$arch
+#Server = http://mirror.wtnet.de/archlinux/$repo/os/$arch
+#Server = https://mirror.wtnet.de/archlinux/$repo/os/$arch
+#Server = http://mirrors.xtom.de/archlinux/$repo/os/$arch
+#Server = https://mirrors.xtom.de/archlinux/$repo/os/$arch
+#Server = http://arch.mirror.zachlge.org/$repo/os/$arch
+#Server = https://arch.mirror.zachlge.org/$repo/os/$arch
+
+## Greece
+#Server = http://ftp.cc.uoc.gr/mirrors/linux/archlinux/$repo/os/$arch
+#Server = https://repo.greeklug.gr/data/pub/linux/archlinux/$repo/os/$arch
+#Server = http://mirrors.myaegean.gr/linux/archlinux/$repo/os/$arch
+#Server = http://ftp.ntua.gr/pub/linux/archlinux/$repo/os/$arch
+#Server = http://ftp.otenet.gr/linux/archlinux/$repo/os/$arch
+
+## Hong Kong
+#Server = https://asia.mirror.pkgbuild.com/$repo/os/$arch
+#Server = http://mirror-hk.koddos.net/archlinux/$repo/os/$arch
+#Server = https://mirror-hk.koddos.net/archlinux/$repo/os/$arch
+#Server = http://hkg.mirror.rackspace.com/archlinux/$repo/os/$arch
+#Server = https://hkg.mirror.rackspace.com/archlinux/$repo/os/$arch
+#Server = https://arch-mirror.wtako.net/$repo/os/$arch
+#Server = http://mirror.xtom.com.hk/archlinux/$repo/os/$arch
+#Server = https://mirror.xtom.com.hk/archlinux/$repo/os/$arch
+
+## Hungary
+#Server = http://ftp.ek-cer.hu/pub/mirrors/ftp.archlinux.org/$repo/os/$arch
+#Server = http://archmirror.hbit.sztaki.hu/archlinux/$repo/os/$arch
+#Server = http://nova.quantum-mirror.hu/mirrors/pub/archlinux/$repo/os/$arch
+#Server = http://quantum-mirror.hu/mirrors/pub/archlinux/$repo/os/$arch
+#Server = http://super.quantum-mirror.hu/mirrors/pub/archlinux/$repo/os/$arch
+#Server = https://nova.quantum-mirror.hu/mirrors/pub/archlinux/$repo/os/$arch
+#Server = https://quantum-mirror.hu/mirrors/pub/archlinux/$repo/os/$arch
+#Server = https://super.quantum-mirror.hu/mirrors/pub/archlinux/$repo/os/$arch
+
+## Iceland
+#Server = http://mirror.system.is/arch/$repo/os/$arch
+#Server = https://mirror.system.is/arch/$repo/os/$arch
+
+## India
+#Server = https://mirror.albony.xyz/archlinux/$repo/os/$arch
+#Server = http://mirror.cse.iitk.ac.in/archlinux/$repo/os/$arch
+#Server = http://in-mirror.garudalinux.org/archlinux/$repo/os/$arch
+#Server = https://in-mirror.garudalinux.org/archlinux/$repo/os/$arch
+#Server = http://archlinux.mirror.net.in/archlinux/$repo/os/$arch
+#Server = https://archlinux.mirror.net.in/archlinux/$repo/os/$arch
+#Server = http://mirrors.nxtgen.com/archlinux-mirror/$repo/os/$arch
+#Server = https://mirrors.nxtgen.com/archlinux-mirror/$repo/os/$arch
+#Server = http://mirrors.piconets.webwerks.in/archlinux-mirror/$repo/os/$arch
+#Server = https://mirrors.piconets.webwerks.in/archlinux-mirror/$repo/os/$arch
+#Server = http://mirror.sahil.world/archlinux/$repo/os/$arch
+#Server = https://mirror.sahil.world/archlinux/$repo/os/$arch
+
+## Indonesia
+#Server = http://mirror.cloudweeb.com/archlinux/$repo/os/$arch
+#Server = http://mirror.faizuladib.com/archlinux/$repo/os/$arch
+#Server = http://mirror.gi.co.id/archlinux/$repo/os/$arch
+#Server = https://mirror.gi.co.id/archlinux/$repo/os/$arch
+#Server = http://vpsmurah.jagoanhosting.com/archlinux/$repo/os/$arch
+#Server = https://vpsmurah.jagoanhosting.com/archlinux/$repo/os/$arch
+#Server = http://kebo.pens.ac.id/archlinux/$repo/os/$arch
+#Server = http://mirror.labkom.id/archlinux/$repo/os/$arch
+#Server = http://mirror.papua.go.id/archlinux/$repo/os/$arch
+#Server = https://mirror.papua.go.id/archlinux/$repo/os/$arch
+#Server = http://mirror.poliwangi.ac.id/archlinux/$repo/os/$arch
+#Server = http://mirror.repository.id/archlinux/$repo/os/$arch
+#Server = https://mirror.repository.id/archlinux/$repo/os/$arch
+#Server = http://suro.ubaya.ac.id/archlinux/$repo/os/$arch
+#Server = http://mirror.telkomuniversity.ac.id/archlinux/$repo/os/$arch
+#Server = https://mirror.telkomuniversity.ac.id/archlinux/$repo/os/$arch
+
+## Iran
+#Server = http://mirror.arvancloud.com/archlinux/$repo/os/$arch
+#Server = https://mirror.arvancloud.com/archlinux/$repo/os/$arch
+#Server = http://mirror.bardia.tech/archlinux/$repo/os/$arch
+#Server = https://mirror.bardia.tech/archlinux/$repo/os/$arch
+#Server = http://mirror.hostiran.ir/archlinux/$repo/os/$arch
+#Server = https://mirror.hostiran.ir/archlinux/$repo/os/$arch
+#Server = http://repo.iut.ac.ir/repo/archlinux/$repo/os/$arch
+#Server = http://mirror.nak-mci.ir/arch/$repo/os/$arch
+#Server = http://mirror.rasanegar.com/archlinux/$repo/os/$arch
+#Server = https://mirror.rasanegar.com/archlinux/$repo/os/$arch
+
+## Ireland
+#Server = http://ftp.heanet.ie/mirrors/ftp.archlinux.org/$repo/os/$arch
+#Server = https://ftp.heanet.ie/mirrors/ftp.archlinux.org/$repo/os/$arch
+
+## Israel
+#Server = http://mirror.isoc.org.il/pub/archlinux/$repo/os/$arch
+#Server = https://mirror.isoc.org.il/pub/archlinux/$repo/os/$arch
+#Server = https://archlinux.mivzakim.net/$repo/os/$arch
+
+## Italy
+#Server = https://archmirror.it/repos/$repo/os/$arch
+#Server = http://archlinux.mirror.garr.it/archlinux/$repo/os/$arch
+#Server = http://mirrors.prometeus.net/archlinux/$repo/os/$arch
+#Server = http://archlinux.mirror.server24.net/$repo/os/$arch
+#Server = https://archlinux.mirror.server24.net/$repo/os/$arch
+
+## Japan
+#Server = http://mirrors.cat.net/archlinux/$repo/os/$arch
+#Server = https://mirrors.cat.net/archlinux/$repo/os/$arch
+#Server = http://ftp.tsukuba.wide.ad.jp/Linux/archlinux/$repo/os/$arch
+#Server = http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch
+#Server = https://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch
+
+## Kazakhstan
+#Server = http://mirror.hoster.kz/archlinux/$repo/os/$arch
+#Server = https://mirror.hoster.kz/archlinux/$repo/os/$arch
+#Server = http://mirror.ps.kz/archlinux/$repo/os/$arch
+#Server = https://mirror.ps.kz/archlinux/$repo/os/$arch
+
+## Kenya
+#Server = http://archlinux.mirror.liquidtelecom.com/$repo/os/$arch
+#Server = https://archlinux.mirror.liquidtelecom.com/$repo/os/$arch
+
+## Latvia
+#Server = http://archlinux.koyanet.lv/archlinux/$repo/os/$arch
+#Server = https://archlinux.koyanet.lv/archlinux/$repo/os/$arch
+
+## Lithuania
+#Server = http://mirrors.atviras.lt/archlinux/$repo/os/$arch
+#Server = https://mirrors.atviras.lt/archlinux/$repo/os/$arch
+#Server = http://mirrors.ims.nksc.lt/archlinux/$repo/os/$arch
+#Server = https://mirrors.ims.nksc.lt/archlinux/$repo/os/$arch
+
+## Luxembourg
+#Server = http://archlinux.mirror.root.lu/$repo/os/$arch
+
+## Mexico
+#Server = https://arch.jsc.mx/$repo/os/$arch
+
+## Moldova
+#Server = http://mirror.ihost.md/archlinux/$repo/os/$arch
+#Server = https://mirror.ihost.md/archlinux/$repo/os/$arch
+#Server = http://mirror.mangohost.net/archlinux/$repo/os/$arch
+#Server = https://mirror.mangohost.net/archlinux/$repo/os/$arch
+
+## Monaco
+#Server = http://archlinux.qontinuum.space/archlinux/$repo/os/$arch
+#Server = https://archlinux.qontinuum.space/archlinux/$repo/os/$arch
+
+## Netherlands
+#Server = http://mirror.cj2.nl/archlinux/$repo/os/$arch
+#Server = https://mirror.cj2.nl/archlinux/$repo/os/$arch
+#Server = https://mirrors.daan.vodka/archlinux/$repo/os/$arch
+#Server = http://mirrors.evoluso.com/archlinux/$repo/os/$arch
+#Server = http://mirror.i3d.net/pub/archlinux/$repo/os/$arch
+#Server = https://mirror.i3d.net/pub/archlinux/$repo/os/$arch
+#Server = https://arch.jeweet.net/$repo/os/$arch
+#Server = http://mirror.koddos.net/archlinux/$repo/os/$arch
+#Server = https://mirror.koddos.net/archlinux/$repo/os/$arch
+#Server = http://arch.mirrors.lavatech.top/$repo/os/$arch
+#Server = https://arch.mirrors.lavatech.top/$repo/os/$arch
+#Server = http://mirror.ams1.nl.leaseweb.net/archlinux/$repo/os/$arch
+#Server = https://mirror.ams1.nl.leaseweb.net/archlinux/$repo/os/$arch
+#Server = http://archlinux.mirror.liteserver.nl/$repo/os/$arch
+#Server = https://archlinux.mirror.liteserver.nl/$repo/os/$arch
+#Server = http://mirror.lyrahosting.com/archlinux/$repo/os/$arch
+#Server = https://mirror.lyrahosting.com/archlinux/$repo/os/$arch
+#Server = http://mirror.mijn.host/archlinux/$repo/os/$arch
+#Server = https://mirror.mijn.host/archlinux/$repo/os/$arch
+#Server = http://mirror.neostrada.nl/archlinux/$repo/os/$arch
+#Server = https://mirror.neostrada.nl/archlinux/$repo/os/$arch
+#Server = http://ftp.nluug.nl/os/Linux/distr/archlinux/$repo/os/$arch
+#Server = http://archlinux.mirror.pcextreme.nl/$repo/os/$arch
+#Server = https://archlinux.mirror.pcextreme.nl/$repo/os/$arch
+#Server = http://mirror.serverion.com/archlinux/$repo/os/$arch
+#Server = https://mirror.serverion.com/archlinux/$repo/os/$arch
+#Server = http://ftp.snt.utwente.nl/pub/os/linux/archlinux/$repo/os/$arch
+#Server = http://mirror.tarellia.net/distr/archlinux/$repo/os/$arch
+#Server = https://mirror.tarellia.net/distr/archlinux/$repo/os/$arch
+#Server = http://mirrors.viflcraft.top/archlinux/$repo/os/$arch
+#Server = https://mirrors.viflcraft.top/archlinux/$repo/os/$arch
+#Server = http://archlinux.mirror.wearetriple.com/$repo/os/$arch
+#Server = https://archlinux.mirror.wearetriple.com/$repo/os/$arch
+#Server = http://mirror-archlinux.webruimtehosting.nl/$repo/os/$arch
+#Server = https://mirror-archlinux.webruimtehosting.nl/$repo/os/$arch
+#Server = http://mirrors.xtom.nl/archlinux/$repo/os/$arch
+#Server = https://mirrors.xtom.nl/archlinux/$repo/os/$arch
+
+## New Caledonia
+#Server = http://mirror.lagoon.nc/pub/archlinux/$repo/os/$arch
+#Server = http://archlinux.nautile.nc/archlinux/$repo/os/$arch
+#Server = https://archlinux.nautile.nc/archlinux/$repo/os/$arch
+
+## New Zealand
+#Server = http://mirror.2degrees.nz/archlinux/$repo/os/$arch
+#Server = https://mirror.2degrees.nz/archlinux/$repo/os/$arch
+#Server = http://mirror.fsmg.org.nz/archlinux/$repo/os/$arch
+#Server = https://mirror.fsmg.org.nz/archlinux/$repo/os/$arch
+#Server = https://archlinux.ourhome.kiwi/$repo/os/$arch
+#Server = http://mirror.smith.geek.nz/archlinux/$repo/os/$arch
+#Server = https://mirror.smith.geek.nz/archlinux/$repo/os/$arch
+
+## North Macedonia
+#Server = http://arch.softver.org.mk/archlinux/$repo/os/$arch
+#Server = http://mirror.onevip.mk/archlinux/$repo/os/$arch
+#Server = http://mirror.t-home.mk/archlinux/$repo/os/$arch
+#Server = https://mirror.t-home.mk/archlinux/$repo/os/$arch
+
+## Norway
+#Server = http://mirror.archlinux.no/$repo/os/$arch
+#Server = https://mirror.archlinux.no/$repo/os/$arch
+#Server = http://archlinux.uib.no/$repo/os/$arch
+#Server = http://lysakermoen.com/Software/Linux/Mirrors/ArchLinux/$repo/os/$arch
+#Server = https://lysakermoen.com/Software/Linux/Mirrors/ArchLinux/$repo/os/$arch
+#Server = http://mirror.neuf.no/archlinux/$repo/os/$arch
+#Server = https://mirror.neuf.no/archlinux/$repo/os/$arch
+#Server = http://mirror.terrahost.no/linux/archlinux/$repo/os/$arch
+
+## Pakistan
+#Server = http://repo.inara.pk/archlinux/$repo/os/$arch
+#Server = https://repo.inara.pk/archlinux/$repo/os/$arch
+
+## Paraguay
+#Server = http://archlinux.mirror.py/archlinux/$repo/os/$arch
+
+## Poland
+#Server = https://mirror.eloteam.tk/archlinux/$repo/os/$arch
+#Server = http://ftp.icm.edu.pl/pub/Linux/dist/archlinux/$repo/os/$arch
+#Server = https://ftp.icm.edu.pl/pub/Linux/dist/archlinux/$repo/os/$arch
+#Server = http://mirror.juniorjpdj.pl/archlinux/$repo/os/$arch
+#Server = https://mirror.juniorjpdj.pl/archlinux/$repo/os/$arch
+#Server = http://arch.midov.pl/arch/$repo/os/$arch
+#Server = https://arch.midov.pl/arch/$repo/os/$arch
+#Server = http://mirror.onet.pl/pub/mirrors/archlinux/$repo/os/$arch
+#Server = http://piotrkosoft.net/pub/mirrors/ftp.archlinux.org/$repo/os/$arch
+#Server = http://ftp.psnc.pl/linux/archlinux/$repo/os/$arch
+#Server = https://ftp.psnc.pl/linux/archlinux/$repo/os/$arch
+#Server = http://repo.skni.umcs.pl/archlinux/$repo/os/$arch
+#Server = https://repo.skni.umcs.pl/archlinux/$repo/os/$arch
+#Server = http://ftp.vectranet.pl/archlinux/$repo/os/$arch
+
+## Portugal
+#Server = http://glua.ua.pt/pub/archlinux/$repo/os/$arch
+#Server = https://glua.ua.pt/pub/archlinux/$repo/os/$arch
+#Server = http://ftp.rnl.tecnico.ulisboa.pt/pub/archlinux/$repo/os/$arch
+#Server = https://ftp.rnl.tecnico.ulisboa.pt/pub/archlinux/$repo/os/$arch
+#Server = http://mirrors.up.pt/pub/archlinux/$repo/os/$arch
+#Server = https://mirrors.up.pt/pub/archlinux/$repo/os/$arch
+
+## Romania
+#Server = http://mirrors.chroot.ro/archlinux/$repo/os/$arch
+#Server = https://mirrors.chroot.ro/archlinux/$repo/os/$arch
+#Server = http://mirror.efect.ro/archlinux/$repo/os/$arch
+#Server = https://mirror.efect.ro/archlinux/$repo/os/$arch
+#Server = http://mirror.flokinet.net/archlinux/$repo/os/$arch
+#Server = https://mirror.flokinet.net/archlinux/$repo/os/$arch
+#Server = http://mirrors.go.ro/archlinux/$repo/os/$arch
+#Server = https://mirrors.go.ro/archlinux/$repo/os/$arch
+#Server = http://mirrors.hostico.ro/archlinux/$repo/os/$arch
+#Server = https://mirrors.hostico.ro/archlinux/$repo/os/$arch
+#Server = http://archlinux.mirrors.linux.ro/$repo/os/$arch
+#Server = http://mirrors.m247.ro/archlinux/$repo/os/$arch
+#Server = http://mirrors.nav.ro/archlinux/$repo/os/$arch
+#Server = http://mirrors.nxthost.com/archlinux/$repo/os/$arch
+#Server = https://mirrors.nxthost.com/archlinux/$repo/os/$arch
+#Server = http://mirrors.pidginhost.com/arch/$repo/os/$arch
+#Server = https://mirrors.pidginhost.com/arch/$repo/os/$arch
+
+## Russia
+#Server = http://mirror.kamtv.ru/archlinux/$repo/os/$arch
+#Server = https://mirror.kamtv.ru/archlinux/$repo/os/$arch
+#Server = http://mirror.lebedinets.ru/archlinux/$repo/os/$arch
+#Server = https://mirror.lebedinets.ru/archlinux/$repo/os/$arch
+#Server = http://mirror.surf/archlinux/$repo/os/$arch
+#Server = https://mirror.surf/archlinux/$repo/os/$arch
+#Server = http://mirror.nw-sys.ru/archlinux/$repo/os/$arch
+#Server = https://mirror.nw-sys.ru/archlinux/$repo/os/$arch
+#Server = http://mirrors.powernet.com.ru/archlinux/$repo/os/$arch
+#Server = http://mirror.rol.ru/archlinux/$repo/os/$arch
+#Server = https://mirror.rol.ru/archlinux/$repo/os/$arch
+#Server = http://mirror.truenetwork.ru/archlinux/$repo/os/$arch
+#Server = https://mirror.truenetwork.ru/archlinux/$repo/os/$arch
+#Server = http://mirror.yandex.ru/archlinux/$repo/os/$arch
+#Server = https://mirror.yandex.ru/archlinux/$repo/os/$arch
+#Server = http://archlinux.zepto.cloud/$repo/os/$arch
+
+## Réunion
+#Server = http://arch.mithril.re/$repo/os/$arch
+
+## Serbia
+#Server = http://arch.petarmaric.com/$repo/os/$arch
+#Server = http://mirror.pmf.kg.ac.rs/archlinux/$repo/os/$arch
+
+## Singapore
+#Server = http://mirror.0x.sg/archlinux/$repo/os/$arch
+#Server = https://mirror.0x.sg/archlinux/$repo/os/$arch
+#Server = http://mirror.aktkn.sg/archlinux/$repo/os/$arch
+#Server = https://mirror.aktkn.sg/archlinux/$repo/os/$arch
+#Server = https://download.nus.edu.sg/mirror/archlinux/$repo/os/$arch
+#Server = http://mirror.guillaumea.fr/archlinux/$repo/os/$arch
+#Server = https://mirror.guillaumea.fr/archlinux/$repo/os/$arch
+#Server = http://mirror.jingk.ai/archlinux/$repo/os/$arch
+#Server = https://mirror.jingk.ai/archlinux/$repo/os/$arch
+#Server = http://ossmirror.mycloud.services/os/linux/archlinux/$repo/os/$arch
+#Server = http://mirror.sg.gs/archlinux/$repo/os/$arch
+#Server = https://mirror.sg.gs/archlinux/$repo/os/$arch
+
+## Slovakia
+#Server = http://mirror.lnx.sk/pub/linux/archlinux/$repo/os/$arch
+#Server = https://mirror.lnx.sk/pub/linux/archlinux/$repo/os/$arch
+#Server = http://tux.rainside.sk/archlinux/$repo/os/$arch
+
+## Slovenia
+#Server = http://archimonde.ts.si/archlinux/$repo/os/$arch
+#Server = https://archimonde.ts.si/archlinux/$repo/os/$arch
+#Server = http://arch.tux.si/mirror/$repo/os/$arch
+#Server = https://arch.tux.si/mirror/$repo/os/$arch
+
+## South Africa
+#Server = http://archlinux.za.mirror.allworldit.com/archlinux/$repo/os/$arch
+#Server = https://archlinux.za.mirror.allworldit.com/archlinux/$repo/os/$arch
+#Server = http://za.mirror.archlinux-br.org/$repo/os/$arch
+#Server = http://mirror.is.co.za/mirror/archlinux.org/$repo/os/$arch
+#Server = http://mirrors.urbanwave.co.za/archlinux/$repo/os/$arch
+#Server = https://mirrors.urbanwave.co.za/archlinux/$repo/os/$arch
+
+## South Korea
+#Server = http://mirror.anigil.com/archlinux/$repo/os/$arch
+#Server = https://mirror.anigil.com/archlinux/$repo/os/$arch
+#Server = http://mirror.funami.tech/arch/$repo/os/$arch
+#Server = https://mirror.funami.tech/arch/$repo/os/$arch
+#Server = https://seoul.mirror.pkgbuild.com/$repo/os/$arch
+#Server = http://ftp.harukasan.org/archlinux/$repo/os/$arch
+#Server = https://ftp.harukasan.org/archlinux/$repo/os/$arch
+#Server = http://ftp.lanet.kr/pub/archlinux/$repo/os/$arch
+#Server = https://ftp.lanet.kr/pub/archlinux/$repo/os/$arch
+#Server = http://mirror.misakamikoto.network/archlinux/$repo/os/$arch
+#Server = https://mirror.misakamikoto.network/archlinux/$repo/os/$arch
+#Server = http://mirror.premi.st/archlinux/$repo/os/$arch
+#Server = https://mirror.premi.st/archlinux/$repo/os/$arch
+
+## Spain
+#Server = https://mirror.cloroformo.org/archlinux/$repo/os/$arch
+#Server = http://mirror.librelabucm.org/archlinux/$repo/os/$arch
+#Server = https://mirror.librelabucm.org/archlinux/$repo/os/$arch
+#Server = http://ftp.rediris.es/mirror/archlinux/$repo/os/$arch
+
+## Sweden
+#Server = http://ftp.acc.umu.se/mirror/archlinux/$repo/os/$arch
+#Server = https://ftp.acc.umu.se/mirror/archlinux/$repo/os/$arch
+#Server = http://ftpmirror.infania.net/mirror/archlinux/$repo/os/$arch
+#Server = https://ftp.ludd.ltu.se/mirrors/archlinux/$repo/os/$arch
+#Server = http://ftp.lysator.liu.se/pub/archlinux/$repo/os/$arch
+#Server = https://ftp.lysator.liu.se/pub/archlinux/$repo/os/$arch
+#Server = http://ftp.myrveln.se/pub/linux/archlinux/$repo/os/$arch
+#Server = https://ftp.myrveln.se/pub/linux/archlinux/$repo/os/$arch
+#Server = https://mirror.osbeck.com/archlinux/$repo/os/$arch
+
+## Switzerland
+#Server = http://pkg.adfinis.com/archlinux/$repo/os/$arch
+#Server = https://pkg.adfinis.com/archlinux/$repo/os/$arch
+#Server = http://mirror.init7.net/archlinux/$repo/os/$arch
+#Server = https://mirror.init7.net/archlinux/$repo/os/$arch
+#Server = http://mirror.puzzle.ch/archlinux/$repo/os/$arch
+#Server = https://mirror.puzzle.ch/archlinux/$repo/os/$arch
+#Server = https://theswissbay.ch/archlinux/$repo/os/$arch
+#Server = https://mirror.ungleich.ch/mirror/packages/archlinux/$repo/os/$arch
+
+## Taiwan
+#Server = http://mirror.archlinux.tw/ArchLinux/$repo/os/$arch
+#Server = https://mirror.archlinux.tw/ArchLinux/$repo/os/$arch
+#Server = http://archlinux.ccns.ncku.edu.tw/archlinux/$repo/os/$arch
+#Server = http://free.nchc.org.tw/arch/$repo/os/$arch
+#Server = https://free.nchc.org.tw/arch/$repo/os/$arch
+#Server = http://shadow.ind.ntou.edu.tw/archlinux/$repo/os/$arch
+#Server = https://shadow.ind.ntou.edu.tw/archlinux/$repo/os/$arch
+#Server = http://archlinux.cs.nycu.edu.tw/$repo/os/$arch
+#Server = https://archlinux.cs.nycu.edu.tw/$repo/os/$arch
+#Server = http://ftp.tku.edu.tw/Linux/ArchLinux/$repo/os/$arch
+#Server = http://ftp.yzu.edu.tw/Linux/archlinux/$repo/os/$arch
+#Server = https://ftp.yzu.edu.tw/Linux/archlinux/$repo/os/$arch
+
+## Thailand
+#Server = https://mirror.cyberbits.asia/archlinux/$repo/os/$arch
+#Server = http://mirror.kku.ac.th/archlinux/$repo/os/$arch
+#Server = https://mirror.kku.ac.th/archlinux/$repo/os/$arch
+#Server = http://mirror2.totbb.net/archlinux/$repo/os/$arch
+
+## Turkey
+#Server = http://ftp.linux.org.tr/archlinux/$repo/os/$arch
+#Server = http://depo.turkiye.linux.web.tr/archlinux/$repo/os/$arch
+#Server = https://depo.turkiye.linux.web.tr/archlinux/$repo/os/$arch
+#Server = http://mirror.veriteknik.net.tr/archlinux/$repo/os/$arch
+
+## Ukraine
+#Server = http://archlinux.astra.in.ua/$repo/os/$arch
+#Server = https://archlinux.astra.in.ua/$repo/os/$arch
+#Server = http://repo.endpoint.ml/archlinux/$repo/os/$arch
+#Server = https://repo.endpoint.ml/archlinux/$repo/os/$arch
+#Server = http://fastmirror.pp.ua/archlinux/$repo/os/$arch
+#Server = https://fastmirror.pp.ua/archlinux/$repo/os/$arch
+#Server = http://archlinux.ip-connect.vn.ua/$repo/os/$arch
+#Server = https://archlinux.ip-connect.vn.ua/$repo/os/$arch
+#Server = http://mirror.mirohost.net/archlinux/$repo/os/$arch
+#Server = https://mirror.mirohost.net/archlinux/$repo/os/$arch
+#Server = http://mirrors.nix.org.ua/linux/archlinux/$repo/os/$arch
+#Server = https://mirrors.nix.org.ua/linux/archlinux/$repo/os/$arch
+
+## United Kingdom
+#Server = http://archlinux.uk.mirror.allworldit.com/archlinux/$repo/os/$arch
+#Server = https://archlinux.uk.mirror.allworldit.com/archlinux/$repo/os/$arch
+#Server = http://mirror.bytemark.co.uk/archlinux/$repo/os/$arch
+#Server = https://mirror.bytemark.co.uk/archlinux/$repo/os/$arch
+#Server = http://mirrors.gethosted.online/archlinux/$repo/os/$arch
+#Server = https://mirrors.gethosted.online/archlinux/$repo/os/$arch
+#Server = http://mirrors.manchester.m247.com/arch-linux/$repo/os/$arch
+#Server = http://mirrors.melbourne.co.uk/archlinux/$repo/os/$arch
+#Server = https://mirrors.melbourne.co.uk/archlinux/$repo/os/$arch
+#Server = http://www.mirrorservice.org/sites/ftp.archlinux.org/$repo/os/$arch
+#Server = https://www.mirrorservice.org/sites/ftp.archlinux.org/$repo/os/$arch
+#Server = http://mirror.netweaver.uk/archlinux/$repo/os/$arch
+#Server = https://mirror.netweaver.uk/archlinux/$repo/os/$arch
+#Server = http://lon.mirror.rackspace.com/archlinux/$repo/os/$arch
+#Server = https://lon.mirror.rackspace.com/archlinux/$repo/os/$arch
+#Server = http://arch.serverspace.co.uk/arch/$repo/os/$arch
+#Server = http://mirrors.ukfast.co.uk/sites/archlinux.org/$repo/os/$arch
+#Server = https://mirrors.ukfast.co.uk/sites/archlinux.org/$repo/os/$arch
+#Server = http://mirror.cov.ukservers.com/archlinux/$repo/os/$arch
+#Server = https://mirror.cov.ukservers.com/archlinux/$repo/os/$arch
+
+## United States
+#Server = http://mirrors.acm.wpi.edu/archlinux/$repo/os/$arch
+#Server = http://mirrors.advancedhosters.com/archlinux/$repo/os/$arch
+#Server = http://mirrors.aggregate.org/archlinux/$repo/os/$arch
+#Server = http://ca.us.mirror.archlinux-br.org/$repo/os/$arch
+#Server = http://il.us.mirror.archlinux-br.org/$repo/os/$arch
+#Server = http://mirror.arizona.edu/archlinux/$repo/os/$arch
+#Server = https://mirror.arizona.edu/archlinux/$repo/os/$arch
+#Server = http://arlm.tyzoid.com/$repo/os/$arch
+#Server = https://arlm.tyzoid.com/$repo/os/$arch
+#Server = https://mirror.ava.dev/archlinux/$repo/os/$arch
+#Server = http://mirrors.bloomu.edu/archlinux/$repo/os/$arch
+#Server = https://mirrors.bloomu.edu/archlinux/$repo/os/$arch
+#Server = http://mirrors.cat.pdx.edu/archlinux/$repo/os/$arch
+#Server = http://mirror.cc.columbia.edu/pub/linux/archlinux/$repo/os/$arch
+#Server = http://mirror.clarkson.edu/archlinux/$repo/os/$arch
+#Server = https://mirror.clarkson.edu/archlinux/$repo/os/$arch
+#Server = http://arch.mirror.constant.com/$repo/os/$arch
+#Server = https://arch.mirror.constant.com/$repo/os/$arch
+#Server = http://mirror.cs.pitt.edu/archlinux/$repo/os/$arch
+#Server = http://mirror.cs.vt.edu/pub/ArchLinux/$repo/os/$arch
+#Server = http://mirror.cybersecurity.nmt.edu/archlinux/$repo/os/$arch
+#Server = https://mirror.cybersecurity.nmt.edu/archlinux/$repo/os/$arch
+#Server = http://distro.ibiblio.org/archlinux/$repo/os/$arch
+#Server = http://mirror.es.its.nyu.edu/archlinux/$repo/os/$arch
+#Server = http://mirror.ette.biz/archlinux/$repo/os/$arch
+#Server = https://mirror.ette.biz/archlinux/$repo/os/$arch
+#Server = http://codingflyboy.mm.fcix.net/archlinux/$repo/os/$arch
+#Server = http://coresite.mm.fcix.net/archlinux/$repo/os/$arch
+#Server = http://mirror.fcix.net/archlinux/$repo/os/$arch
+#Server = http://mnvoip.mm.fcix.net/archlinux/$repo/os/$arch
+#Server = http://ridgewireless.mm.fcix.net/archlinux/$repo/os/$arch
+#Server = https://codingflyboy.mm.fcix.net/archlinux/$repo/os/$arch
+#Server = https://coresite.mm.fcix.net/archlinux/$repo/os/$arch
+#Server = https://mirror.fcix.net/archlinux/$repo/os/$arch
+#Server = https://mnvoip.mm.fcix.net/archlinux/$repo/os/$arch
+#Server = https://ridgewireless.mm.fcix.net/archlinux/$repo/os/$arch
+#Server = https://america.mirror.pkgbuild.com/$repo/os/$arch
+#Server = http://mirrors.gigenet.com/archlinux/$repo/os/$arch
+#Server = http://www.gtlib.gatech.edu/pub/archlinux/$repo/os/$arch
+#Server = http://mirror.hackingand.coffee/arch/$repo/os/$arch
+#Server = https://mirror.hackingand.coffee/arch/$repo/os/$arch
+#Server = https://mirror.hodgepodge.dev/archlinux/$repo/os/$arch
+#Server = http://mirror.hostup.org/archlinux/$repo/os/$arch
+#Server = https://mirror.hostup.org/archlinux/$repo/os/$arch
+#Server = http://arch.hu.fo/archlinux/$repo/os/$arch
+#Server = https://arch.hu.fo/archlinux/$repo/os/$arch
+#Server = http://repo.ialab.dsu.edu/archlinux/$repo/os/$arch
+#Server = https://repo.ialab.dsu.edu/archlinux/$repo/os/$arch
+#Server = https://arch.mirror.ivo.st/$repo/os/$arch
+#Server = http://mirrors.kernel.org/archlinux/$repo/os/$arch
+#Server = https://mirrors.kernel.org/archlinux/$repo/os/$arch
+#Server = http://mirror.dal10.us.leaseweb.net/archlinux/$repo/os/$arch
+#Server = http://mirror.mia11.us.leaseweb.net/archlinux/$repo/os/$arch
+#Server = http://mirror.sfo12.us.leaseweb.net/archlinux/$repo/os/$arch
+#Server = http://mirror.wdc1.us.leaseweb.net/archlinux/$repo/os/$arch
+#Server = https://mirror.dal10.us.leaseweb.net/archlinux/$repo/os/$arch
+#Server = https://mirror.mia11.us.leaseweb.net/archlinux/$repo/os/$arch
+#Server = https://mirror.sfo12.us.leaseweb.net/archlinux/$repo/os/$arch
+#Server = https://mirror.wdc1.us.leaseweb.net/archlinux/$repo/os/$arch
+#Server = http://mirrors.liquidweb.com/archlinux/$repo/os/$arch
+#Server = http://mirror.lty.me/archlinux/$repo/os/$arch
+#Server = https://mirror.lty.me/archlinux/$repo/os/$arch
+#Server = http://mirrors.lug.mtu.edu/archlinux/$repo/os/$arch
+#Server = https://mirrors.lug.mtu.edu/archlinux/$repo/os/$arch
+#Server = http://mirror.math.princeton.edu/pub/archlinux/$repo/os/$arch
+#Server = http://mirror.metrocast.net/archlinux/$repo/os/$arch
+#Server = http://mirror.kaminski.io/archlinux/$repo/os/$arch
+#Server = https://mirror.kaminski.io/archlinux/$repo/os/$arch
+#Server = http://iad.mirrors.misaka.one/archlinux/$repo/os/$arch
+#Server = https://iad.mirrors.misaka.one/archlinux/$repo/os/$arch
+#Server = http://repo.miserver.it.umich.edu/archlinux/$repo/os/$arch
+#Server = http://mirrors.mit.edu/archlinux/$repo/os/$arch
+#Server = https://mirrors.mit.edu/archlinux/$repo/os/$arch
+#Server = http://mirrors.ocf.berkeley.edu/archlinux/$repo/os/$arch
+#Server = https://mirrors.ocf.berkeley.edu/archlinux/$repo/os/$arch
+#Server = http://archmirror1.octyl.net/$repo/os/$arch
+#Server = https://archmirror1.octyl.net/$repo/os/$arch
+#Server = http://ftp.osuosl.org/pub/archlinux/$repo/os/$arch
+#Server = http://arch.mirrors.pair.com/$repo/os/$arch
+#Server = http://archlinux.qern-industries.pw/$repo/os/$arch
+#Server = https://archlinux.qern-industries.pw/$repo/os/$arch
+#Server = http://dfw.mirror.rackspace.com/archlinux/$repo/os/$arch
+#Server = http://iad.mirror.rackspace.com/archlinux/$repo/os/$arch
+#Server = http://ord.mirror.rackspace.com/archlinux/$repo/os/$arch
+#Server = https://dfw.mirror.rackspace.com/archlinux/$repo/os/$arch
+#Server = https://iad.mirror.rackspace.com/archlinux/$repo/os/$arch
+#Server = https://ord.mirror.rackspace.com/archlinux/$repo/os/$arch
+#Server = http://mirrors.radwebhosting.com/archlinux/$repo/os/$arch
+#Server = https://mirrors.radwebhosting.com/archlinux/$repo/os/$arch
+#Server = http://plug-mirror.rcac.purdue.edu/archlinux/$repo/os/$arch
+#Server = https://plug-mirror.rcac.purdue.edu/archlinux/$repo/os/$arch
+#Server = http://mirrors.rit.edu/archlinux/$repo/os/$arch
+#Server = https://mirrors.rit.edu/archlinux/$repo/os/$arch
+#Server = http://mirrors.rutgers.edu/archlinux/$repo/os/$arch
+#Server = https://mirrors.rutgers.edu/archlinux/$repo/os/$arch
+#Server = https://mirror2.sandyriver.net/pub/archlinux/$repo/os/$arch
+#Server = http://mirror.siena.edu/archlinux/$repo/os/$arch
+#Server = http://mirrors.sonic.net/archlinux/$repo/os/$arch
+#Server = https://mirrors.sonic.net/archlinux/$repo/os/$arch
+#Server = http://mirror.phx1.us.spryservers.net/archlinux/$repo/os/$arch
+#Server = https://mirror.phx1.us.spryservers.net/archlinux/$repo/os/$arch
+#Server = http://arch.mirror.square-r00t.net/$repo/os/$arch
+#Server = https://arch.mirror.square-r00t.net/$repo/os/$arch
+#Server = http://mirror.stephen304.com/archlinux/$repo/os/$arch
+#Server = https://mirror.stephen304.com/archlinux/$repo/os/$arch
+#Server = http://ftp.sudhip.com/archlinux/$repo/os/$arch
+#Server = https://ftp.sudhip.com/archlinux/$repo/os/$arch
+#Server = http://mirror.pit.teraswitch.com/archlinux/$repo/os/$arch
+#Server = https://mirror.pit.teraswitch.com/archlinux/$repo/os/$arch
+#Server = https://mirror.theash.xyz/arch/$repo/os/$arch
+#Server = https://mirror.tmmworkshop.com/archlinux/$repo/os/$arch
+#Server = http://mirror.umd.edu/archlinux/$repo/os/$arch
+#Server = https://mirror.umd.edu/archlinux/$repo/os/$arch
+#Server = http://mirrors.vectair.net/archlinux/$repo/os/$arch
+#Server = https://mirrors.vectair.net/archlinux/$repo/os/$arch
+#Server = http://mirror.vtti.vt.edu/archlinux/$repo/os/$arch
+#Server = http://mirrors.xmission.com/archlinux/$repo/os/$arch
+#Server = http://mirrors.xtom.com/archlinux/$repo/os/$arch
+#Server = https://mirrors.xtom.com/archlinux/$repo/os/$arch
+#Server = https://zxcvfdsa.com/arch/$repo/os/$arch
+
+## Uzbekistan
+#Server = http://mirror.dc.uz/arch/$repo/os/$arch
+#Server = https://mirror.dc.uz/arch/$repo/os/$arch
+
+## Vietnam
+#Server = https://mirrors.42tm.tech/archlinux/$repo/os/$arch
+#Server = http://f.archlinuxvn.org/archlinux/$repo/os/$arch
+#Server = http://mirror.bizflycloud.vn/archlinux/$repo/os/$arch
+
diff --git a/sys/etc/repart.d/root.conf b/sys/etc/repart.d/root.conf
new file mode 100644
index 0000000..1aadd2d
--- /dev/null
+++ b/sys/etc/repart.d/root.conf
@@ -0,0 +1,2 @@
+[Partition]
+Type=root
diff --git a/sys/etc/ssh/sshd_config b/sys/etc/ssh/sshd_config
new file mode 100644
index 0000000..ad7e1f2
--- /dev/null
+++ b/sys/etc/ssh/sshd_config
@@ -0,0 +1,116 @@
+# $OpenBSD: sshd_config,v 1.104 2021/07/02 05:11:21 dtucker Exp $
+
+# This is the sshd server system-wide configuration file. See
+# sshd_config(5) for more information.
+
+# This sshd was compiled with PATH=/usr/local/sbin:/usr/local/bin:/usr/bin
+
+# The strategy used for options in the default sshd_config shipped with
+# OpenSSH is to specify options with their default value where
+# possible, but leave them commented. Uncommented options override the
+# default value.
+
+#Port 22
+#AddressFamily any
+#ListenAddress 0.0.0.0
+#ListenAddress ::
+
+#HostKey /etc/ssh/ssh_host_rsa_key
+#HostKey /etc/ssh/ssh_host_ecdsa_key
+#HostKey /etc/ssh/ssh_host_ed25519_key
+
+# Ciphers and keying
+#RekeyLimit default none
+
+# Logging
+#SyslogFacility AUTH
+#LogLevel INFO
+
+# Authentication:
+
+#LoginGraceTime 2m
+PermitRootLogin no
+#StrictModes yes
+#MaxAuthTries 6
+#MaxSessions 10
+
+#PubkeyAuthentication yes
+
+# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
+# but this is overridden so installations will only check .ssh/authorized_keys
+AuthorizedKeysFile .ssh/authorized_keys
+
+#AuthorizedPrincipalsFile none
+
+#AuthorizedKeysCommand none
+#AuthorizedKeysCommandUser nobody
+
+# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
+#HostbasedAuthentication no
+# Change to yes if you don't trust ~/.ssh/known_hosts for
+# HostbasedAuthentication
+#IgnoreUserKnownHosts no
+# Don't read the user's ~/.rhosts and ~/.shosts files
+#IgnoreRhosts yes
+
+# To disable tunneled clear text passwords, change to no here!
+PasswordAuthentication no
+#PermitEmptyPasswords no
+
+# Change to no to disable s/key passwords
+KbdInteractiveAuthentication no
+
+# Kerberos options
+#KerberosAuthentication no
+#KerberosOrLocalPasswd yes
+#KerberosTicketCleanup yes
+#KerberosGetAFSToken no
+
+# GSSAPI options
+#GSSAPIAuthentication no
+#GSSAPICleanupCredentials yes
+
+# Set this to 'yes' to enable PAM authentication, account processing,
+# and session processing. If this is enabled, PAM authentication will
+# be allowed through the KbdInteractiveAuthentication and
+# PasswordAuthentication. Depending on your PAM configuration,
+# PAM authentication via KbdInteractiveAuthentication may bypass
+# the setting of "PermitRootLogin without-password".
+# If you just want the PAM account and session checks to run without
+# PAM authentication, then enable this but set PasswordAuthentication
+# and KbdInteractiveAuthentication to 'no'.
+UsePAM yes
+
+#AllowAgentForwarding yes
+#AllowTcpForwarding yes
+#GatewayPorts no
+#X11Forwarding no
+#X11DisplayOffset 10
+#X11UseLocalhost yes
+#PermitTTY yes
+PrintMotd no # pam does that
+#PrintLastLog yes
+#TCPKeepAlive yes
+#PermitUserEnvironment no
+#Compression delayed
+#ClientAliveInterval 0
+#ClientAliveCountMax 3
+#UseDNS no
+#PidFile /run/sshd.pid
+#MaxStartups 10:30:100
+#PermitTunnel no
+#ChrootDirectory none
+#VersionAddendum none
+
+# no default banner path
+#Banner none
+
+# override default of no subsystems
+Subsystem sftp /usr/lib/ssh/sftp-server
+
+# Example of overriding settings on a per-user basis
+#Match User anoncvs
+# X11Forwarding no
+# AllowTcpForwarding no
+# PermitTTY no
+# ForceCommand cvs server
diff --git a/sys/etc/systemd/journald.conf.d/00-google.conf b/sys/etc/systemd/journald.conf.d/00-google.conf
new file mode 100644
index 0000000..620db84
--- /dev/null
+++ b/sys/etc/systemd/journald.conf.d/00-google.conf
@@ -0,0 +1,2 @@
+[Journal]
+ForwardToConsole=yes
diff --git a/sys/etc/systemd/system/pacman-init.service b/sys/etc/systemd/system/pacman-init.service
new file mode 100644
index 0000000..ed515f4
--- /dev/null
+++ b/sys/etc/systemd/system/pacman-init.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Pacman keyring initialization
+ConditionDirectoryNotEmpty=!/etc/pacman.d/gnupg
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=/usr/bin/pacman-key --init
+ExecStart=/usr/bin/pacman-key --populate archlinux
+
+[Install]
+WantedBy=multi-user.target
diff --git a/sys/etc/systemd/system/systemd-repart.service.d/override.conf b/sys/etc/systemd/system/systemd-repart.service.d/override.conf
new file mode 100644
index 0000000..50ae1f4
--- /dev/null
+++ b/sys/etc/systemd/system/systemd-repart.service.d/override.conf
@@ -0,0 +1,2 @@
+[Unit]
+Before=systemd-growfs@-.service
diff --git a/sys/etc/systemd/timesyncd.conf.d/00-google.conf b/sys/etc/systemd/timesyncd.conf.d/00-google.conf
new file mode 100644
index 0000000..4f07fb6
--- /dev/null
+++ b/sys/etc/systemd/timesyncd.conf.d/00-google.conf
@@ -0,0 +1,2 @@
+[Time]
+NTP=metadata.google.internal