omnixient/modules/boot.nix
Padreug 0ca8dd3929 feat(modules): boot loader, kernel, plymouth, console
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 09:59:04 +02:00

268 lines
7.7 KiB
Nix
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
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
[ ]
);
};
};
}