feat(tower): tower profile + zfs + eternal-terminal

This commit is contained in:
Hermes Agent
2026-09-24 21:31:12 -04:00
parent 15427c48a9
commit ed26a96aad
4 changed files with 52 additions and 3 deletions
+1 -1
View File
@@ -21,7 +21,7 @@ in {
wikify
# showQueueDuration
queueTime
betterGenres
# betterGenres : n'existe plus dans spicePkgs.extensions (retirée en amont de spicetify-nix), cassait tout `just home HM=marc`
];
enabledCustomApps = with spicePkgs.apps; [
localFiles
+2
View File
@@ -1,5 +1,7 @@
{ pkgs, ... }:
{
boot.zfs.forceImportRoot = false; # nouveau défaut 26.11, réduit le risque de double-import silencieux
services.zfs.autoSnapshot = {
enable = true;
flags = "-k -p";
+1 -1
View File
@@ -10,7 +10,7 @@
];
boot.kernelParams = ["panic=10"]; # reboot 10 s après un kernel panic, le dump reste dans pstore
systemd.watchdog.runtimeTime = "30s"; # reboot si la machine gèle (si `sudo wdctl` trouve un watchdog)
systemd.settings.Manager.RuntimeWatchdogSec = "30s"; # reboot si la machine gèle (si `sudo wdctl` trouve un watchdog)
# boot.initrd.clevis.enable = true;
# boot.initrd.clevis.devices."zroot/root".secretFile = ./zfs.jwe; # ton encryptionroot
# boot.initrd.availableKernelModules = ["tpm_crb"]; # driver du fTPM AMD
+48 -1
View File
@@ -2,7 +2,48 @@
config,
pkgs,
...
}: {
}:
let
# Attache (ou crée) une session zellij et l'enregistre avec asciinema, côté serveur.
# L'enregistrement vit dans le process distant : il survit donc aux reconnexions ET.
# Variables : ET_RECORD_DIR (défaut ~/recordings/et), ET_RECORD_KEEP_DAYS (défaut 30).
etSession = pkgs.writeShellApplication {
name = "et-session";
runtimeInputs = [
pkgs.asciinema
pkgs.zellij
pkgs.coreutils
pkgs.findutils
];
text = ''
if [ "''${1:-}" = "-h" ] || [ "''${1:-}" = "--help" ]; then
echo "usage: et-session [session zellij] (défaut : main)"
exit 0
fi
session="''${1:-main}"
dir="''${ET_RECORD_DIR:-$HOME/recordings/et}"
keep="''${ET_RECORD_KEEP_DAYS:-30}"
mkdir -p "$dir"
# Rotation : purge les enregistrements de CET utilisateur plus vieux que $keep jours
# (-type f ignore les symlinks latest-*.cast)
find "$dir" -maxdepth 1 -name '*.cast' -type f -mtime "+$keep" -delete
stamp="$(date -u +%Y%m%dT%H%M%SZ)"
cast="$dir/$session-$stamp.cast"
ln -sfn "$cast" "$dir/latest-$session.cast"
printf 'et-session : session zellij « %s » sur %s, enregistrement -> %s\n' \
"$session" "$HOSTNAME" "$cast"
exec asciinema rec --quiet --idle-time-limit 5 \
--title "et $HOSTNAME $session $stamp" \
--command "zellij attach --create $session" \
"$cast"
'';
};
in
{
# Configuration du serveur Eternal Terminal
services.eternal-terminal = {
enable = true;
@@ -16,6 +57,12 @@
# logSize = 20971520;
};
# Helper de session (`et-session` = zellij + enregistrement asciinema) et asciinema.
environment.systemPackages = [
etSession
pkgs.asciinema
];
# TRÈS IMPORTANT : Ouvrir le port dans le pare-feu pour pouvoir s'y connecter
networking.firewall.allowedTCPPorts = [config.services.eternal-terminal.port];