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 <noreply@anthropic.com>
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
|
||||
26
flake.nix
26
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";
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user