#!/bin/bash

echo "This script configures chroots in /chroots for systemd-containers/nspawn"

if [[ $EUID -ne 0 ]]; then
   echo "Run as root!" 
   exit 2
fi


if [ -d "/chroots" ]
then
  echo "found /chroots dir"
else
  echo "Error, /chroots not found"
  exit 1
fi


nspawnScript="
[Exec]
Boot=1

[Files]

# nvidia-opengl
Bind=/tmp/
Bind=/sys/
Bind=/dev/:/hostdev/
Bind=/proc/sys/vm/
Bind=/dev/shm
Bind=/dev/pts/:/dev/mainpts
Bind=/home/

# input
Bind=/dev/input

# pulseaudio
Bind=/run/user/1001/pulse:/run/user/host/pulse

# alsa
Bind=/dev/snd
"

serviceScript1="[Unit]"
#add extra options
serviceScript2="
Description=Container %i
Documentation=man:systemd-nspawn(1)
PartOf=machines.target
Before=machines.target
After=network.target systemd-resolved.service 
StartLimitInterval=200
StartLimitBurst=5

[Service]
Type=idle
Restart=always
RestartSec=30
ExecStart=/usr/bin/systemd-nspawn --quiet --keep-unit --boot --link-journal=try-guest --network-veth -U --settings=override --machine=%i
KillMode=mixed
Type=notify
RestartForceExitStatus=133
SuccessExitStatus=133
Slice=machine.slice
Delegate=yes
TasksMax=16384

[Install]
WantedBy=machines.target
"

override="
[Service]
DeviceAllow=/dev/dri rw
DeviceAllow=/dev/shm rw
DeviceAllow=/dev/nvidia0 rw
DeviceAllow=/dev/nvidiactl rw
DeviceAllow=/dev/nvidia-modeset rw
DeviceAllow=char-usb_device rwm 
DeviceAllow=char-input rwm 
DeviceAllow=char-alsa rwm 
DeviceAllow=block-sd rwm
DeviceAllow=char-usb_device rwm 
ExecStart=
ExecStart=/usr/bin/systemd-nspawn --quiet --keep-unit --boot --link-journal=try-guest --machine=%I
"
echo "Linking rootfs"
ln -s /chroots/* /var/lib/machines

echo "setting up override file"
mkdir /etc/systemd/system/systemd-nspawn@.service.d/ 2>/dev/null
mkdir /etc/systemd/nspawn/ 2>/dev/null
echo -e "$override" > /etc/systemd/system/systemd-nspawn@.service.d/override.conf

for OS in `ls /chroots`
do
  echo "setting up $OS"
  echo -e "$nspawnScript" > /etc/systemd/nspawn/$OS.nspawn
  serviceScript="$serviceScript1\n$serviceScript2"
  echo -e "$serviceScript" > /etc/systemd/system/systemd-nspawn@$OS.service
  systemctl enable systemd-nspawn@$OS.service
  systemctl unmask systemd-nspawn@$OS.service
  systemctl enable systemd-nspawn@$OS.service

done

systemctl enable machines.target
