#!/bin/sh
# Finish a Das OS installation. Calamares runs this inside the target system
# after users, locale and display manager are configured, before GRUB.
set -eu

msg() { echo "das-postinstall: $*"; }

# Calamares writes LANG to /etc/locale.conf, but glibc on Void only builds the
# locales enabled in /etc/default/libc-locales.
lang=$(sed -n 's/^LANG=//p' /etc/locale.conf 2>/dev/null | tr -d '"')
for l in "$lang" en_US.UTF-8; do
	[ -n "$l" ] || continue
	re=$(printf '%s' "$l" | sed 's/[.]/\\./g')
	sed -i "s/^#\(${re} \)/\1/" /etc/default/libc-locales
done
msg "building locales"
xbps-reconfigure -f glibc-locales

# Calamares mounts /tmp on tmpfs only when the root disk is an SSD; Void's own
# installer always does.
if ! grep -q '^[^#]*[[:space:]]/tmp[[:space:]]' /etc/fstab; then
	echo "tmpfs /tmp tmpfs defaults,nosuid,nodev 0 0" >>/etc/fstab
fi

# Guest tools are only useful inside a virtual machine.
if ! grep -q '^flags.* hypervisor' /proc/cpuinfo; then
	msg "real hardware: removing virtual machine guest tools"
	rm -f /etc/runit/runsvdir/default/spice-vdagentd
	xbps-remove -Ry spice-vdagent qemu-ga virtualbox-ose-guest || true
fi

# Snapper, hourly snapshots and the GRUB snapshot menu (Btrfs only).
das-snapper-setup

# The installer copies files with rsync --sparse, which turns the zero tail of
# a kernel image into a Btrfs hole that GRUB 2.12 can't read ("premature end
# of file"). Rewrite the kernels in full.
for f in /boot/vmlinuz-*; do
	cp --sparse=never "$f" "$f.das-tmp"
	mv "$f.das-tmp" "$f"
done

# The live image has a generic initramfs. Build the target's own the same way
# Void does on kernel updates (host-only), with das-snapshot-overlay included.
msg "building the initramfs"
for kver in $(ls /usr/lib/modules); do
	dracut -q --force "/boot/initramfs-$kver.img" "$kver"
done
msg "done"
