#!/bin/bash


PACKAGES="man manpages vim less xz-utils sudo tmux dbus libpam-systemd vifm openssh-client gnome-terminal packagekit-gtk3-module libcanberra-gtk3-module libpulse0 firefox fonts-roboto-hinted nautilus eog evince unzip"

setup_locale() {
    echo "en_US.UTF-8 UTF-8" > /etc/locale.gen
    locale-gen
    update-locale LANG=en_US.UTF-8
    export LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 LC_CTYPE=en_US.UTF-8
}

configure_systemd() {
    mkdir -p /etc/systemd/user.conf.d
    printf '[Manager]\nDefaultEnvironment="DISPLAY=:0"\n' > /etc/systemd/user.conf.d/50-display-env.conf

    mkdir -p /etc/systemd/logind.conf.d
    printf 'KillUserProcesses=no\n' > /etc/systemd/logind.conf.d/50-no-kill-user-processes.conf
}

write_launch_script() {
    mkdir -p /usr/libexec
    cat > /usr/libexec/launch <<- 'EOF'
#!/bin/bash
export DISPLAY=:0
export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
export XDG_RUNTIME_DIR=/run/user/1000
export PULSE_SERVER=unix:/run/user/host/pulse/native
$@
EOF
    chmod +x /usr/libexec/launch
}

generate_apt_sources() {
    echo "deb ${DEBIAN_MIRROR} ${DEBIAN_RELEASE} main contrib non-free"
    echo "deb ${DEBIAN_MIRROR}-security ${DEBIAN_RELEASE}/updates main contrib non-free"
    echo "deb ${DEBIAN_MIRROR} unstable main"
}

setup_etc() {
    printf "127.0.0.1\tsubgraph localhost\n" > /etc/hosts
    echo "subgraph" > /etc/hostname
    generate_apt_sources > /etc/apt/sources.list
    echo 'APT::Install-Recommends "0";' > /etc/apt/apt.conf.d/99no-install-recommends
    echo 'APT::Install-Suggests "0";' >> /etc/apt/apt.conf.d/99no-install-recommends
}

create_user() {
    useradd -s /bin/bash -m user
    echo "user:user" | chpasswd 
    usermod -aG sudo user
    echo "export DISPLAY=:0" >> /home/user/.bashrc
}

install_packages() {
    apt-get update
    apt-get --assume-yes upgrade
    apt-get --assume-yes install ${PACKAGES}

    printf "\n\nInstalled Packages\n\n"
    dpkg -l
}

post_install_packages() {
    # Otherwise gnome-terminal won't work if nothing else has been launched
    # see 'enable-linger' in loginctl(1)
    mkdir /var/lib/systemd/linger
    touch /var/lib/systemd/linger/user
}

set -u
set -e

DEBIAN_RELEASE=${1}
DEBIAN_MIRROR=${2}

setup_locale
configure_systemd
write_launch_script
setup_etc
create_user
install_packages