#!/usr/bin/env bash

# execute self with sudo if user is not root
[[ $UID -ne 0 ]] && exec sudo ./"$0"

###
# Set variables
###
export DEBIAN_FRONTEND=noninteractive
DPKG_CFG_FRAGMENT=/etc/dpkg/dpkg.cfg.d/non-interactive

# Linux distro
script_distro='Kubuntu Linux 22.04'

# Additional packages
packages=(
  libreoffice
  keepassxc
  kpartx
  oem-config
  hardinfo
  regionset
  cheese
  vlc

  # Language support
  language-selector-common
  openoffice.org-hyphenation
  language-pack-kde-ar
  language-pack-kde-uk
  language-pack-kde-ru
  language-pack-kde-fa
)

###
# Functions
###

# $*: message to echo
e() {
  printf "\e[31m>>>\e[0m %s\n" "$*"
}

# It's a pain to stop (ctrl+c, kill) execution with all the Python applications
# so we catch SIGINT and SIGTERM and exit immediately
handle_signal() {
  e "Ausführung abgebrochen! Skript wird beendet."
  exit 1
}

# always executed on shell exit regardless of reason. for cleanup tasks
handle_exit() {
  e "Finales Cleanup wird durchgeführt …"
  rm -f "$DPKG_CFG_FRAGMENT"
  rm -f /etc/apt/apt.conf.d/01aptproxy
}

trap handle_signal SIGINT SIGTERM
trap handle_exit EXIT

pkg() {
  apt install "$@" --yes --quiet
}

###
# Greeting
###
echo "\
#####################################
# Computertruhe-Installationsskript #
#####################################

###
# Maintainer: Computertruhe e. V.
# Website:    https://computertruhe.de/
# Version:    1.0.1
# Repo:       https://codeberg.org/Computertruhe/computertruhe-setup
# Distro:     ${script_distro}
###
"
e "Starte initiales Setup für Rechner mit frisch installiertem '${script_distro}' …"

# ChCh apt proxy benutzen (bedingt = wenn da)
ping -c 1 apt-proxy
if [ "$?" -eq "0" ]; then
	echo 'Acquire::https::Proxy "http://apt-proxy:3142";' > /etc/apt/apt.conf.d/01aptproxy
	echo 'Acquire::http::Proxy "http://apt-proxy:3142";' >> /etc/apt/apt.conf.d/01aptproxy
	e "Proxy Apt-Aktiv"
else
	e "Kein Apt-Proxy"
fi
echo 'Dpkg::Options "--force-unsafe-io";' >> /etc/apt/apt.conf.d/01aptproxy


###
# Automatic installation
###
# place temporary dpkg configurations to ensure non-interactive upgrade
cat <<'DPKG' >"$DPKG_CFG_FRAGMENT"
force-confold
force-confdef
DPKG

e "Paketquellen aktualisieren …"
apt update --yes --quiet

e "System aktualisieren (apt) …"
apt full-upgrade --yes --quiet

e "Proprietäre Treiber installieren (sofern verfügbar) …"
ubuntu-drivers autoinstall

e "Zusätzliche Software installieren …"
pkg "${packages[@]}"

e "Sprachunterstützung vervollständigen …"
pkg $(check-language-support)
e "Arabische Schrift"
pkg fonts-arabeyes
e "Kyrillische Schrift"
pkg xfonts-cyrillic

# these packages have to be installed after "$(check-language-support)"
pkg hunspell-de-at hunspell-de-ch hunspell-de-de hunspell-uk hunspell-ru

e "Unnötige Pakete entfernen und Cache bereinigen …"
apt clean --yes --quiet
apt autoremove --yes --quiet


###
# Finalisation
###

e "Initiales Setup beendet."
oem-config-prepare
