#!/usr/bin/env bash
set -ex

[[ $UID = 0 ]] || exec sudo "$0" "$@"
touch /etc/resolv.conf || true

[[ -z "$KEEP_TERM" ]] && export TERM=xterm-256color

if [[ -e /run/nixos-mount-ns ]] && [[ -z "$ENTERED_EXISTING_MOUNT_NAMESPACE" ]] ; then
  exec env ENTERED_EXISTING_MOUNT_NAMESPACE=1 nsenter --mount=/run/nixos-mount-ns \
    sh -c 'cp /etc/resolv.conf /run/mnt/etc/resolv.conf ; exec chroot /run/mnt /nix/var/nix/profiles/system/sw/bin/bash -l'
fi

if [[ -z "$ENTERED_NEW_MOUNT_NAMESPACE$ENTERED_EXISTING_MOUNT_NAMESPACE" ]] ; then
  {
    t=0.2
    while ! [[ -e /run/nixos-pid ]] ; do
      sleep $t
      t=1
    done
    read pid </run/nixos-pid
    rm /run/nixos-pid
    touch /run/nixos-mount-ns
    mount --bind "/proc/$pid/ns/mnt" /run/nixos-mount-ns
  } &
  exec env ENTERED_NEW_MOUNT_NAMESPACE=1 /usr/local/unshare -m -- bash "$0"
fi

for dev in /dev/sda3; do
  [[ -e "$dev" ]] && break
done
[[ -e "$dev" ]]

mkdir -p /run/mnt
mount "$dev" /run/mnt
for fs in dev proc sys dev/pts ; do
  mount --bind /$fs /run/mnt/$fs
done
mount -t tmpfs tmpfs /run/mnt/dev/shm

echo $$ > /run/nixos-pid
cp /etc/resolv.conf /run/mnt/etc/resolv.conf
exec chroot /run/mnt /nix/var/nix/profiles/system/sw/bin/bash -l
