#!/bin/bash
# =============================================================================
#  Post-installation de la VM Debian 13 "Jux" — NAS SasNexte — 09/09/2026
#
#  A lancer DANS LA VM, apres une installation Debian 13 netinst minimale
#  (aucun environnement de bureau coche a l'installation, serveur SSH coche).
#
#      sudo bash 260909-postinstall_vm_debian_jux.sh
#
#  Le script est idempotent : le relancer ne casse rien.
#
#  ETANCHEITE — cette VM est le poste de l'univers Jux (perso).
#  Elle n'accede PAS aux ressources Alteris/NEXTE : pas de partage de mission
#  monte, pas de coffre Alteris, pas de cle SSH vers 79.137.14.202.
# =============================================================================

set -euo pipefail

UTILISATEUR="${SUDO_USER:-${1:-}}"
if [ -z "$UTILISATEUR" ] || [ "$UTILISATEUR" = "root" ]; then
    echo "ERREUR : lancer avec sudo depuis le compte utilisateur, ou passer le nom en argument." >&2
    exit 1
fi
FOYER=$(getent passwd "$UTILISATEUR" | cut -d: -f6)

titre() { echo; echo "=============== $* ==============="; }
poser() { DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends "$@"; }

titre "1/8  Langue, clavier, fuseau horaire"
sed -i 's/^# *fr_FR.UTF-8/fr_FR.UTF-8/' /etc/locale.gen
locale-gen
update-locale LANG=fr_FR.UTF-8
timedatectl set-timezone Europe/Paris
echo -e 'XKBMODEL="pc105"\nXKBLAYOUT="fr"\nXKBVARIANT=""\nXKBOPTIONS=""' > /etc/default/keyboard

titre "2/8  Mise a jour du systeme"
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get -y upgrade

titre "3/8  Socle"
poser sudo curl ca-certificates gnupg git htop less unzip xz-utils ripgrep \
      console-setup keyboard-configuration locales
usermod -aG sudo "$UTILISATEUR"

titre "4/8  Bureau XFCE (sans gestionnaire de connexion)"
# Pas de LightDM : la VM n'a pas d'ecran. C'est xrdp qui ouvre la session.
# Cela evite le conflit classique "session deja ouverte" et economise ~150 Mo.
DEBIAN_FRONTEND=noninteractive apt-get install -y \
    xfce4 xfce4-terminal xfce4-screenshooter dbus-x11 \
    thunar-archive-plugin fonts-dejavu tango-icon-theme

titre "5/8  Acces bureau distant (xrdp)"
poser xrdp xorgxrdp
adduser xrdp ssl-cert 2>/dev/null || true
echo "startxfce4" > "$FOYER/.xsession"
chown "$UTILISATEUR:$UTILISATEUR" "$FOYER/.xsession"
chmod 644 "$FOYER/.xsession"
# Supprime les demandes de mot de passe intempestives d'une session sans ecran
cat > /etc/polkit-1/rules.d/49-jux-xrdp.rules <<'POLKIT'
polkit.addRule(function(action, subject) {
    if ((action.id.indexOf("org.freedesktop.color-manager.") === 0 ||
         action.id.indexOf("org.freedesktop.packagekit.") === 0) &&
        subject.isInGroup("sudo")) {
        return polkit.Result.YES;
    }
});
POLKIT
systemctl enable --now xrdp

titre "6/8  Applications"
DEBIAN_FRONTEND=noninteractive apt-get install -y \
    firefox-esr firefox-esr-l10n-fr \
    thunderbird thunderbird-l10n-fr \
    filezilla calibre

titre "7/8  Node.js et Claude Code"
poser nodejs npm
sudo -u "$UTILISATEUR" bash <<'NODE'
set -e
mkdir -p "$HOME/.npm-global"
npm config set prefix "$HOME/.npm-global"
grep -q '.npm-global/bin' "$HOME/.profile" 2>/dev/null || \
    echo 'export PATH="$HOME/.npm-global/bin:$PATH"' >> "$HOME/.profile"
export PATH="$HOME/.npm-global/bin:$PATH"
npm install -g @anthropic-ai/claude-code
NODE

titre "8/8  Syncthing et pare-feu"
poser syncthing ufw
systemctl enable "syncthing@$UTILISATEUR.service"
systemctl start  "syncthing@$UTILISATEUR.service"
ufw --force reset >/dev/null
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp    comment 'SSH'
ufw allow 3389/tcp  comment 'RDP (xrdp)'
ufw allow 22000     comment 'Syncthing transfert'
ufw allow 21027/udp comment 'Syncthing decouverte'
ufw --force enable

titre "Termine"
cat <<FIN

  Utilisateur      : $UTILISATEUR
  Bureau           : XFCE via RDP  ->  $(hostname -I | awk '{print $1}'):3389
  Syncthing        : tunnel SSH obligatoire, l'interface n'ecoute qu'en local
                     ssh -L 8384:127.0.0.1:8384 $UTILISATEUR@$(hostname -I | awk '{print $1}')
                     puis http://127.0.0.1:8384
  Claude Code      : claude   (ouvrir un nouveau shell pour le PATH)
  RAM utilisee     : $(free -m | awk '/Mem:/ {print $3" Mo / "$2" Mo"}')

  RESTE A FAIRE, A LA MAIN :
    - appairer Syncthing avec le device juxjux.ovh
    - declarer le MCP BookStack perso DANS CETTE VM :
        claude mcp add -s user bookstack-jux \
          -e BOOKSTACK_BASE_URL=https://bookstack.juxjux.ovh/api \
          -e BOOKSTACK_API_TOKEN=ID:SECRET \
          -e MCP_TRANSPORT=stdio -- npx -y bookstack-mcp-server
    - comptes Thunderbird

FIN
