feat(modules): boot loader, kernel, plymouth, console

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Padreug 2026-06-28 06:48:07 +02:00
commit 0ca8dd3929

268
modules/boot.nix Normal file
View file

@ -0,0 +1,268 @@
{
config,
pkgs,
lib,
...
}:
# Omnixient Boot Configuration
# Plymouth theming and seamless boot experience
let
inherit (lib) mkIf;
cfg = config.omni;
omni = config.omni.lib;
# Import our custom Plymouth theme package
plymouth-themes = pkgs.callPackage ../packages/plymouth-theme.nix { };
in
{
config = mkIf (cfg.enable or true) {
# Plymouth boot splash configuration
boot.plymouth = {
enable = true;
theme = "omni-${cfg.theme}";
themePackages = [ plymouth-themes ];
# Logo configuration
logo = "${plymouth-themes}/share/plymouth/themes/omni-${cfg.theme}/logo.png";
};
# Boot optimization and theming
boot = {
# Try 7.0 — 6.18/6.19 have SMU deadlocks on Strix Halo (aiolabs/omnixient#26)
# Fallback: linuxPackages_6_12 (LTS) if 7.0 is also unstable
kernelPackages = pkgs.linuxPackages_latest;
# Kernel parameters for smooth boot
kernelParams = [
# Quiet boot (suppress most messages)
"quiet"
# Splash screen
"splash"
# Reduce log level
"loglevel=3"
# Disable systemd status messages on console
"rd.systemd.show_status=false"
"rd.udev.log_level=3"
"udev.log_priority=3"
# Faster boot
"boot.shell_on_fail"
# Hide cursor
"vt.global_cursor_default=0"
# Security: Disable emergency shell access
"systemd.debug-shell=0"
# Strix Halo GPU stability (aiolabs/omnixient#26)
"amdgpu.gfxoff=0" # disable gfxoff power state
"amdgpu.ppfeaturemask=0xffff7fff" # disable GFXOFF at PowerPlay level
"amdgpu.gpu_recovery=1" # auto-recover from GPU hangs
"amdgpu.cwsr_enable=0" # disable CWSR to prevent MES firmware hangs
"iommu=pt" # AMD-recommended pass-through for iGPU
];
# Console configuration for seamless experience
consoleLogLevel = 0;
# Boot loader configuration
loader = {
timeout = 3;
efi.canTouchEfiVariables = true;
systemd-boot = {
enable = true;
editor = false;
configurationLimit = 10;
consoleMode = "auto";
};
};
# Initial ramdisk
initrd = {
verbose = false;
includeDefaultModules = true;
};
};
# Plymouth transition is handled natively by systemd/plymouth integration.
# Theme switching integration
environment.systemPackages = [
plymouth-themes
# Plymouth theme switching script
(omni.makeScript "omni-plymouth-theme" "Switch Plymouth boot theme" ''
if [ -z "$1" ]; then
echo "🎨 Current Plymouth theme: omni-${cfg.theme}"
echo
echo "Available themes:"
ls ${plymouth-themes}/share/plymouth/themes/ | grep "omni-" | sed 's/omni-/ - /'
echo
echo "Usage: omni-plymouth-theme <theme-name>"
exit 0
fi
THEME="omni-$1"
THEME_PATH="${plymouth-themes}/share/plymouth/themes/$THEME"
if [ ! -d "$THEME_PATH" ]; then
echo " Theme '$1' not found!"
echo "Available themes:"
ls ${plymouth-themes}/share/plymouth/themes/ | grep "omni-" | sed 's/omni-/ - /'
exit 1
fi
echo "🎨 Setting Plymouth theme to: $1"
# Update Plymouth theme
sudo ${pkgs.plymouth}/bin/plymouth-set-default-theme "$THEME"
# Regenerate initrd
echo "🔄 Regenerating initrd..."
sudo nixos-rebuild boot --flake /etc/nixos#omni
echo " Plymouth theme updated!"
echo " Reboot to see the new boot theme"
'')
# Plymouth management utilities
(omni.makeScript "omni-boot-preview" "Preview Plymouth theme" ''
if [ "$EUID" -ne 0 ]; then
echo " This command must be run as root (use sudo)"
exit 1
fi
echo "🎬 Starting Plymouth preview..."
echo " Press Ctrl+Alt+F1 to return to console"
echo " Press Ctrl+C to stop preview"
# Kill any running Plymouth instances
pkill plymouthd 2>/dev/null || true
# Start Plymouth in preview mode
${pkgs.plymouth}/bin/plymouthd --debug --debug-file=/tmp/plymouth-debug.log
${pkgs.plymouth}/bin/plymouth --show-splash
# Simulate boot progress
for i in $(seq 0 5 100); do
${pkgs.plymouth}/bin/plymouth --update="boot-progress:$i/100"
sleep 0.1
done
echo "Plymouth preview running. Check another TTY to see the splash screen."
echo "Press Enter to stop..."
read -r
${pkgs.plymouth}/bin/plymouth --quit
pkill plymouthd 2>/dev/null || true
echo " Plymouth preview stopped"
'')
# Boot diagnostics
(omni.makeScript "omni-boot-info" "Show boot information and diagnostics" ''
echo "🚀 Omnixient Boot Information"
echo ""
echo
echo "🎨 Plymouth Configuration:"
echo " Current Theme: ${cfg.theme}"
echo " Theme Package: ${plymouth-themes}"
echo " Plymouth Status: $(systemctl is-active plymouth-start.service 2>/dev/null || echo 'inactive')"
echo
echo " Boot Configuration:"
echo " Boot Loader: $(bootctl status 2>/dev/null | grep 'systemd-boot' || echo 'systemd-boot')"
echo " Kernel: $(uname -r)"
echo " Boot Time: $(systemd-analyze | head -1)"
echo
echo "📊 Boot Performance:"
systemd-analyze blame | head -10
echo
echo "🔧 Boot Services:"
echo " Display Manager: $(systemctl is-active display-manager 2>/dev/null || echo 'inactive')"
echo " Plymouth: $(systemctl is-active plymouth-*.service 2>/dev/null || echo 'inactive')"
echo " Omnixient Transition: $(systemctl is-active omni-boot-transition 2>/dev/null || echo 'inactive')"
if [ -f "/tmp/plymouth-debug.log" ]; then
echo
echo "🐛 Plymouth Debug Log (last 10 lines):"
tail -10 /tmp/plymouth-debug.log
fi
'')
];
# Plymouth theme is set declaratively via boot.plymouth.theme above.
# Font configuration for Plymouth
fonts = {
packages = with pkgs; [
jetbrains-mono
cantarell-fonts
liberation_ttf
dejavu_fonts
];
# Ensure fonts are available early in boot
fontDir.enable = true;
};
# Security settings are now included in boot.kernelParams above
# Optional: LUKS integration for encrypted systems
# Plymouth will automatically handle LUKS password prompts when LUKS devices are configured
# Console and TTY configuration
console = {
keyMap = "us";
earlySetup = true;
colors = [
# Custom console color palette matching current theme
# This will be used before Plymouth starts
]
++ (
if cfg.theme == "tokyo-night" then
[
"1a1b26"
"f7768e"
"9ece6a"
"e0af68"
"7aa2f7"
"bb9af7"
"7dcfff"
"c0caf5"
"414868"
"f7768e"
"9ece6a"
"e0af68"
"7aa2f7"
"bb9af7"
"7dcfff"
"a9b1d6"
]
else if cfg.theme == "gruvbox" then
[
"282828"
"cc241d"
"98971a"
"d79921"
"458588"
"b16286"
"689d6a"
"a89984"
"928374"
"fb4934"
"b8bb26"
"fabd2f"
"83a598"
"d3869b"
"8ec07c"
"ebdbb2"
]
else
[ ]
);
};
};
}