feat(tower): tower profile + zfs + eternal-terminal
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user