#!/usr/bin/env bash # System-level tuning for Node / Vite / Nx development on a Debian VM: # - inotify watches limit (default 8K is too low for monorepos) # - hostname (prompt only if generic) # - swapfile (4 GB, only if none exists) set -euo pipefail # shellcheck source=./lib.sh source "$(cd "$(dirname "$0")" && pwd)/lib.sh" require_debian require_not_root # 1) inotify watches. SYSCTL_FILE="/etc/sysctl.d/99-apf-portal.conf" INOTIFY_LINE="fs.inotify.max_user_watches=524288" if sudo grep -qxF "$INOTIFY_LINE" "$SYSCTL_FILE" 2>/dev/null; then skip "inotify watches already configured in $SYSCTL_FILE." else echo "$INOTIFY_LINE" | sudo tee "$SYSCTL_FILE" >/dev/null sudo sysctl --system >/dev/null ok "fs.inotify.max_user_watches → 524288." fi # 2) Hostname — only prompt if it looks generic. current_hostname="$(hostname)" case "$current_hostname" in debian|debian13|localhost|trixie|debian12) read -r -p "Current hostname '$current_hostname' looks generic. New hostname (blank to keep): " new_hostname if [[ -n "$new_hostname" ]]; then sudo hostnamectl set-hostname "$new_hostname" ok "Hostname set to '$new_hostname'. Will reflect on next login." else skip "Hostname kept as '$current_hostname'." fi ;; *) skip "Hostname '$current_hostname' looks intentional — keeping." ;; esac # 3) Swap. if swapon --show | grep -q .; then skip "Swap already active: $(swapon --show --noheadings | head -1 | awk '{print $1, $3}')." else if confirm "No swap detected. Add a 4 GB swapfile at /swapfile?"; then sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile ensure_line_sudo "/swapfile none swap sw 0 0" /etc/fstab ok "4 GB swapfile active." else skip "No swap configured (user choice)." fi fi