From 6686a9f6b65225a3fb8e0f8377566812f387961c Mon Sep 17 00:00:00 2001 From: Brandon Lucas Date: Sun, 15 Feb 2026 02:50:48 -0500 Subject: [PATCH] Add Limine bootloader support with themed styling Phase 2: Bootloader improvements - Add bootloader choice: systemd-boot (default) or Limine - Configure Limine with classical theme colors: - Dark brown background (#1a1611) - Tan text (#d4c4a8) - Gold accents (#d4a857) - Add Plymouth boot splash option - Update installer to prompt for bootloader choice - Add example-limine configuration - Update documentation with boot options Users can now choose between: 1. systemd-boot - Simple, reliable, well-tested (default) 2. Limine - Modern, prettier, themed to match Nomarchy Co-Authored-By: Claude Opus 4.5 --- README.md | 2 + docs/CUSTOMIZATION.md | 4 ++ flake.nix | 26 +++++++++++-- installer/install.sh | 29 ++++++++++++++ modules/core/boot.nix | 89 +++++++++++++++++++++++++++++++++++++++---- 5 files changed, 140 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index def032b..ce945b4 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,8 @@ Download the ISO from the releases page and boot from it for a fresh installatio - **SwayNC** - Notification center - **Neovim** - Fully configured with LSP support - **Classical Theme** - Earthy, vintage aesthetic inspired by historical paintings +- **Bootloader Choice** - systemd-boot (default) or Limine (prettier, more features) +- **Plymouth** - Optional boot splash screen ## Keybindings diff --git a/docs/CUSTOMIZATION.md b/docs/CUSTOMIZATION.md index c083069..a6d3c70 100644 --- a/docs/CUSTOMIZATION.md +++ b/docs/CUSTOMIZATION.md @@ -31,6 +31,10 @@ Your configuration lives in `~/.config/nomarchy/config.nix`: # Performance (security tradeoff!) enableMitigationsOff = false; + # Boot + bootloader = "systemd-boot"; # or "limine" for prettier boot + enablePlymouth = false; # Boot splash screen + # Theme theme = "classical"; } diff --git a/flake.nix b/flake.nix index 2e1a7f3..35ede9e 100644 --- a/flake.nix +++ b/flake.nix @@ -57,14 +57,17 @@ # Performance (security-conscious defaults) enableMitigationsOff = false; # Opt-in only + # Boot + bootloader = "systemd-boot"; # or "limine" + enablePlymouth = false; # Boot splash + # Theme theme = "classical"; }; in { # NixOS configurations nixosConfigurations = { - # Example configuration (requires hardware-configuration.nix) - # Users create their own configuration via the installer + # Example configuration with systemd-boot (default) example = mkHost { system = "x86_64-linux"; config = defaultConfig // { @@ -73,7 +76,24 @@ extraModules = [ # Minimal test hardware config ({...}: { - boot.loader.systemd-boot.enable = true; + fileSystems."/" = { + device = "/dev/disk/by-label/nixos"; + fsType = "ext4"; + }; + }) + ]; + }; + + # Example configuration with Limine bootloader + example-limine = mkHost { + system = "x86_64-linux"; + config = defaultConfig // { + hostname = "nomarchy-limine"; + bootloader = "limine"; + enablePlymouth = true; + }; + extraModules = [ + ({...}: { fileSystems."/" = { device = "/dev/disk/by-label/nixos"; fsType = "ext4"; diff --git a/installer/install.sh b/installer/install.sh index 22cdeef..45db5c6 100755 --- a/installer/install.sh +++ b/installer/install.sh @@ -117,6 +117,28 @@ prompt_location() { echo "" } +prompt_bootloader() { + echo -e "${BOLD}Bootloader${NC}" + echo "1) systemd-boot (default) - Simple, reliable, well-tested" + echo "2) Limine - Modern, prettier, themed to match Nomarchy" + read -rp "Choose bootloader [1/2]: " bootloader_choice + bootloader_choice="${bootloader_choice:-1}" + + if [[ "$bootloader_choice" == "2" ]]; then + bootloader="limine" + echo -e "${CYAN}Using Limine bootloader${NC}" + else + bootloader="systemd-boot" + echo -e "${CYAN}Using systemd-boot${NC}" + fi + + read -rp "Enable Plymouth boot splash? [y/N]: " plymouth + plymouth="${plymouth:-n}" + [[ "$plymouth" =~ ^[Yy] ]] && enable_plymouth="true" || enable_plymouth="false" + + echo "" +} + prompt_features() { echo -e "${BOLD}Optional Features${NC}" @@ -182,6 +204,10 @@ generate_config() { enablePrinting = ${enable_printing}; enableBluetooth = true; + # Boot + bootloader = "${bootloader}"; + enablePlymouth = ${enable_plymouth}; + # Performance (security tradeoff) enableMitigationsOff = ${enable_mitigations_off}; @@ -253,6 +279,8 @@ show_summary() { echo -e "Timezone: ${CYAN}${timezone}${NC}" echo -e "Locale: ${CYAN}${locale}${NC}" echo -e "Keyboard: ${CYAN}${keyboard}${NC}" + echo -e "Bootloader: ${CYAN}${bootloader}${NC}" + echo -e "Plymouth: ${CYAN}${enable_plymouth}${NC}" echo -e "Syncthing: ${CYAN}${enable_syncthing}${NC}" echo -e "Mullvad: ${CYAN}${enable_mullvad}${NC}" echo -e "Printing: ${CYAN}${enable_printing}${NC}" @@ -303,6 +331,7 @@ main() { prompt_locale prompt_keyboard prompt_location + prompt_bootloader prompt_features show_summary diff --git a/modules/core/boot.nix b/modules/core/boot.nix index 952fc7e..e5b6fce 100644 --- a/modules/core/boot.nix +++ b/modules/core/boot.nix @@ -1,5 +1,5 @@ # Boot configuration -# Supports both systemd-boot (default) and Limine +# Supports systemd-boot (default) and Limine (optional) { config, lib, @@ -7,19 +7,94 @@ nomarchyConfig, ... }: let - # For ISO builds, we'll use Limine; for regular installs, systemd-boot - useSystemdBoot = nomarchyConfig.bootloader or "systemd-boot" == "systemd-boot"; + bootloader = nomarchyConfig.bootloader or "systemd-boot"; + useLimine = bootloader == "limine"; + useSystemdBoot = bootloader == "systemd-boot"; + + # Theme colors for Limine + theme = config.nomarchy.theme or (import ../../themes/classical/colors.nix); in { - # Systemd-boot (default for NixOS installs) + # Systemd-boot (default - simpler, well-tested) boot.loader.systemd-boot = lib.mkIf useSystemdBoot { enable = true; configurationLimit = 10; + editor = false; # Disable editor for security }; - boot.loader.efi.canTouchEfiVariables = useSystemdBoot; + # EFI variables - needed for both bootloaders + boot.loader.efi.canTouchEfiVariables = true; - # Limine support (for ISO) - boot.loader.limine = lib.mkIf (!useSystemdBoot) { + # Limine bootloader (optional - prettier, more features) + boot.loader.limine = lib.mkIf useLimine { enable = true; + + # Support both BIOS and UEFI + efiSupport = true; + biosSupport = true; + + # Max generations to show + maxGenerations = 10; + + # Disable editor for security (can be overridden) + enableEditor = false; + + # Validate boot files + validateChecksums = true; + panicOnChecksumMismatch = false; + + # Styling + style = { + # Background color (dark brown from classical theme) + backdrop = "1a1611"; + + # Wallpaper style + wallpaperStyle = "stretched"; + + # Boot wallpaper (optional - can be set by user) + wallpapers = lib.mkIf (builtins.pathExists ../../themes/classical/wallpapers/boot.png) [ + ../../themes/classical/wallpapers/boot.png + ]; + + # Graphical terminal settings + graphicalTerminal = { + # Font (Limine uses built-in fonts) + # Background color (RRGGBB) + background = "1a1611"; + # Foreground/text color + foreground = "d4c4a8"; + # Bright foreground + brightForeground = "d4a857"; + }; + + # Interface styling + interface = { + # Resolution (empty = auto) + resolution = ""; + # Branding colors + brandingColor = "d4a857"; # Gold accent + }; + }; + + # Extra config for branding + extraConfig = '' + # Nomarchy Bootloader + TIMEOUT=5 + GRAPHICS=yes + VERBOSE=no + ''; + }; + + # Kernel parameters (applied regardless of bootloader) + boot.kernelParams = [ + "quiet" + "splash" + "loglevel=3" + "udev.log_level=3" + ]; + + # Plymouth boot splash (optional, works with both bootloaders) + boot.plymouth = lib.mkIf (nomarchyConfig.enablePlymouth or false) { + enable = true; + theme = "bgrt"; # Uses system logo }; }