From e3d8c9ca757b0a3fa3dd1bb75bb1b20f5c81342d Mon Sep 17 00:00:00 2001 From: Bernardo Magri Date: Sat, 4 Apr 2026 20:34:32 +0100 Subject: [PATCH] feat(branding): professionalize installer and system branding - Refactor installer with Gum for a professional interactive experience - Create custom Nomarchy Plymouth theme with centered logo - Establish assets/branding directory for official logos and ASCII art - Update Fastfetch config with official ASCII art and declarative stats - Declaratively link branding assets via Home Manager --- assets/branding/logo.png | Bin 0 -> 1555 bytes assets/branding/logo.txt | 26 +++ assets/plymouth/logo.png | Bin 0 -> 1555 bytes assets/plymouth/nomarchy.plymouth | 8 + assets/plymouth/nomarchy.script | 21 +++ bin/nomarchy-show-logo | 2 +- config/fastfetch/config.jsonc | 27 +-- installer/install-nomarchy.sh | 281 +++++++++++++----------------- modules/home/theme-files.nix | 4 + modules/system/plymouth.nix | 18 ++ 10 files changed, 202 insertions(+), 185 deletions(-) create mode 100644 assets/branding/logo.png create mode 100644 assets/branding/logo.txt create mode 100644 assets/plymouth/logo.png create mode 100644 assets/plymouth/nomarchy.plymouth create mode 100644 assets/plymouth/nomarchy.script diff --git a/assets/branding/logo.png b/assets/branding/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..09da5008bed2ce1893c505db0376d04478db47d8 GIT binary patch literal 1555 zcmeAS@N?(olHy`uVBq!ia0y~yVAKI&4mO}jWo=(6km4-xh%9Dc;1&j9Muu5)B!DV1 zGo76STr!IbauO>Q0*o0LD&~|<*z0{bK;)?Z>Yxi&9elDfMxD-AE^(C=W@wAJ8icT} z4xUxVnOmcx8B{17uK7bg;$URKhK`Ve!U6#ocEP)ItTcCIRNR{$a!cvn@uz<+<`nOY zIUpS%sr`*f(3Xz-t+H>^xa)1aMM3# z`Z>MnW%HPV>;J}Hoquwc)ZhD89D60j9!%_>Pfny{nzbshiO-zRf(-;2)3EjXut>y{I< z#oUFHuim~@!6G5WkoU^RG{pVY!f(%t4*cdcn8DQcUSo6OvqOsI)%83tsvrJI=J_DY zR5tbVdgXI(rCR4VYX4;y*UZ{usOfLVz`zpV>Eakt!T9#>!QMj-0<0H5c6D%cDl-F>|EF~K7;d}!5Ln7Hc)I$ztaD0e0sw_e8;Jk_ literal 0 HcmV?d00001 diff --git a/assets/branding/logo.txt b/assets/branding/logo.txt new file mode 100644 index 0000000..bf3ea8f --- /dev/null +++ b/assets/branding/logo.txt @@ -0,0 +1,26 @@ +██████████████████████████████████████████████████████ +██████████████████████████████████████████████████████ +████ ████ ████ +████ ████ ████ +████ █████████████████████ ████████ ████ +████ █████████████████████ ████████ ████ +████ ████ ████ ████ +████ ████ ████ ████ +████ ████ ████ ████ +████ ████ ████ ████ +████ ████ ████ ████ +████ ████ ████ ████ +████████████ ████ ████ +████████████ ████ ████ +████ ████ ████ ████ +████ ████ ████ ████ +████ ████ ████ ████ +████ ████ ████ ████ +████ ████ ████ ████ +████ ████ ████ ████ +████ ██████████████████████████████████████ ████ +████ ██████████████████████████████████████ ████ +████ ████ ████ +████ ████ ████ +█████████████████████████████ ████████████████████ +█████████████████████████████ ████████████████████ diff --git a/assets/plymouth/logo.png b/assets/plymouth/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..09da5008bed2ce1893c505db0376d04478db47d8 GIT binary patch literal 1555 zcmeAS@N?(olHy`uVBq!ia0y~yVAKI&4mO}jWo=(6km4-xh%9Dc;1&j9Muu5)B!DV1 zGo76STr!IbauO>Q0*o0LD&~|<*z0{bK;)?Z>Yxi&9elDfMxD-AE^(C=W@wAJ8icT} z4xUxVnOmcx8B{17uK7bg;$URKhK`Ve!U6#ocEP)ItTcCIRNR{$a!cvn@uz<+<`nOY zIUpS%sr`*f(3Xz-t+H>^xa)1aMM3# z`Z>MnW%HPV>;J}Hoquwc)ZhD89D60j9!%_>Pfny{nzbshiO-zRf(-;2)3EjXut>y{I< z#oUFHuim~@!6G5WkoU^RG{pVY!f(%t4*cdcn8DQcUSo6OvqOsI)%83tsvrJI=J_DY zR5tbVdgXI(rCR4VYX4;y*UZ{usOfLVz`zpV>Eakt!T9#>!QMj-0<0H5c6D%cDl-F>|EF~K7;d}!5Ln7Hc)I$ztaD0e0sw_e8;Jk_ literal 0 HcmV?d00001 diff --git a/assets/plymouth/nomarchy.plymouth b/assets/plymouth/nomarchy.plymouth new file mode 100644 index 0000000..f5f05b2 --- /dev/null +++ b/assets/plymouth/nomarchy.plymouth @@ -0,0 +1,8 @@ +[Plymouth Theme] +Name=Nomarchy +Description=Nomarchy boot splash theme +ModuleName=script + +[script] +ImageDir=/etc/plymouth/themes/nomarchy +ScriptFile=/etc/plymouth/themes/nomarchy/nomarchy.script diff --git a/assets/plymouth/nomarchy.script b/assets/plymouth/nomarchy.script new file mode 100644 index 0000000..5476044 --- /dev/null +++ b/assets/plymouth/nomarchy.script @@ -0,0 +1,21 @@ +logo_image = Image("logo.png"); + +screen_width = Window.GetWidth(); +screen_height = Window.GetHeight(); + +logo_width = logo_image.GetWidth(); +logo_height = logo_image.GetHeight(); + +logo_x = screen_width / 2 - logo_width / 2; +logo_y = screen_height / 2 - logo_height / 2; + +logo_sprite = Sprite(logo_image); +logo_sprite.SetX(logo_x); +logo_sprite.SetY(logo_y); +logo_sprite.SetOpacity(1); + +fun refresh_callback () { + # Simple rotation or pulse could go here +} + +Plymouth.SetRefreshFunction (refresh_callback); diff --git a/bin/nomarchy-show-logo b/bin/nomarchy-show-logo index c2346ab..beb0596 100755 --- a/bin/nomarchy-show-logo +++ b/bin/nomarchy-show-logo @@ -5,6 +5,6 @@ clear echo -e "\033[32m" -cat <~/.local/share/nomarchy/logo.txt +cat < ~/.config/nomarchy/branding/logo.txt echo -e "\033[0m" echo diff --git a/config/fastfetch/config.jsonc b/config/fastfetch/config.jsonc index c9276dd..ba701a3 100644 --- a/config/fastfetch/config.jsonc +++ b/config/fastfetch/config.jsonc @@ -2,7 +2,7 @@ "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json", "logo": { "type": "file", - "source": "~/.config/nomarchy/branding/about.txt", + "source": "~/.config/nomarchy/branding/logo.txt", "color": { "1": "green" }, "padding": { "top": 2, @@ -63,22 +63,9 @@ "format": "\u001b[90m┌──────────────────────Software──────────────────────┐" }, { - "type": "command", + "type": "os", "key": "\ue900 OS", - "keyColor": "blue", - "text": "version=$(nomarchy-version); echo \"Nomarchy $version\"" - }, - { - "type": "command", - "key": "│ ├󰘬", - "keyColor": "blue", - "text": "branch=$(nomarchy-version-branch); echo \"$branch\"" - }, - { - "type": "command", - "key": "│ ├󰔫", - "keyColor": "blue", - "text": "channel=$(nomarchy-version-channel); echo \"$channel\"" + "keyColor": "blue" }, { "type": "kernel", @@ -114,7 +101,7 @@ "type": "command", "key": "│ ├󰸌", "keyColor": "blue", - "text": "theme=$(nomarchy-theme-current); echo -e \"$theme \\e[38m●\\e[37m●\\e[36m●\\e[35m●\\e[34m●\\e[33m●\\e[32m●\\e[31m●\"" + "text": "theme=$(cat ~/.config/nomarchy/current/theme.name); echo -e \"$theme \\e[38m●\\e[37m●\\e[36m●\\e[35m●\\e[34m●\\e[33m●\\e[32m●\\e[31m●\"" }, { "type": "terminalfont", @@ -141,12 +128,6 @@ "key": "󱫐 Uptime", "keyColor": "magenta" }, - { - "type": "command", - "key": " Update", - "keyColor": "magenta", - "text": "updated=$(nomarchy-version-pkgs); echo \"$updated\"" - }, { "type": "custom", "format": "\u001b[90m└────────────────────────────────────────────────────┘" diff --git a/installer/install-nomarchy.sh b/installer/install-nomarchy.sh index 6508592..8c7d8a6 100644 --- a/installer/install-nomarchy.sh +++ b/installer/install-nomarchy.sh @@ -1,11 +1,30 @@ #!/usr/bin/env bash set -e -echo "Welcome to the Nomarchy - A NixOS-based distribution with Omarchy flavour Installer" +# Nomarchy Installer +# Professionalized with Gum -echo "Checking internet connectivity..." +# Function to display stylized headers +header() { + clear + gum style \ + --foreground 212 --border-foreground 212 --border double \ + --align center --width 50 --margin "1 2" --padding "2 4" \ + "NOMARCHY" "The Omarchy-flavored NixOS" +} + +# Function to show a section header +section() { + echo + gum style --foreground 10 --bold "» $1" +} + +header + +section "Environment Check" +gum spin --spinner dot --title "Verifying internet connection..." -- sleep 1 while ! ping -c 1 8.8.8.8 &> /dev/null; do - echo "Error: No internet connection detected. An active connection is required to install Nomarchy." + gum style --foreground 9 "Error: No internet connection detected." CHOICE=$(gum choose "Open Network Manager (nmtui)" "Retry Connection" "Exit Installer") if [ "$CHOICE" = "Open Network Manager (nmtui)" ]; then nmtui @@ -13,9 +32,8 @@ while ! ping -c 1 8.8.8.8 &> /dev/null; do echo "Exiting installer." exit 1 fi - echo "Re-checking internet connectivity..." done -echo "Internet connection verified." +echo "✓ Internet connection verified." # 0. Environment Setup NOMARCHY_REPO="" @@ -26,36 +44,31 @@ elif [ -d "$(dirname "$0")/.." ] && [ -f "$(dirname "$0")/../flake.nix" ]; then fi if [ -z "$NOMARCHY_REPO" ]; then - echo "Nomarchy repository not found. Please run this script from the repository root or on a Nomarchy live ISO." + gum style --foreground 9 "Error: Nomarchy repository not found." exit 1 fi -# 1. Hardware Detection & Mapping +# 1. Hardware Detection +section "Hardware Detection" PRODUCT_NAME=$(cat /sys/class/dmi/id/product_name 2>/dev/null || echo "Unknown") -BOARD_NAME=$(cat /sys/class/dmi/id/board_name 2>/dev/null || echo "Unknown") CPU_VENDOR=$(lscpu | grep "Vendor ID" | awk '{print $3}') -echo "Detected hardware: $PRODUCT_NAME ($BOARD_NAME)" +echo "Detected Device: $PRODUCT_NAME" echo "Detected CPU: $CPU_VENDOR" HARDWARE_MODULES="" NOMARCHY_HW_OPTS="" -# Add generic CPU optimizations if [[ "$CPU_VENDOR" == "AuthenticAMD" ]]; then HARDWARE_MODULES="inputs.nixos-hardware.nixosModules.common-cpu-amd" elif [[ "$CPU_VENDOR" == "GenuineIntel" ]]; then HARDWARE_MODULES="inputs.nixos-hardware.nixosModules.common-cpu-intel" fi -# Comprehensive Hardware Selection -echo "Searching for optimized hardware profiles..." - -echo "Select your hardware vendor/category:" -VENDOR=$(gum choose --header "Select Vendor" \ +echo "Select your hardware vendor for optimized profiles:" +VENDOR=$(gum choose --header "Hardware Vendor" \ "acer" "apple" "asus" "dell" "framework" "google" "hp" "lenovo" "microsoft" "msi" "purism" "samsung" "starlabs" "system76" "toshiba" "None/Generic") if [ "$VENDOR" != "None/Generic" ]; then - echo "Select specific model for $VENDOR:" case $VENDOR in dell) MODEL=$(gum choose "xps-13-9300" "xps-13-9310" "xps-13-9343" "xps-13-9360" "xps-13-9370" "xps-13-9380" "xps-15-7590" "xps-15-9500" "xps-15-9510" "xps-15-9550" "precision-5510" "precision-5530") @@ -84,232 +97,160 @@ if [ "$VENDOR" != "None/Generic" ]; then fi ;; *) - echo "Enter the nixos-hardware module path (e.g. inputs.nixos-hardware.nixosModules.common-cpu-amd):" - INPUT_MOD=$(gum input --placeholder "inputs.nixos-hardware.nixosModules.xxx") + INPUT_MOD=$(gum input --placeholder "Enter nixos-hardware module path") HARDWARE_MODULES="$HARDWARE_MODULES\n $INPUT_MOD" ;; esac fi # 2. Storage Setup -echo "Select the target drive for installation:" +section "Storage & Partitioning" DRIVES=$(lsblk -d -n -p -o NAME,SIZE | grep -v loop) -TARGET_DRIVE=$(echo "$DRIVES" | gum choose | awk '{print $1}') -if [ -z "$TARGET_DRIVE" ]; then - echo "No drive selected. Exiting." - exit 1 -fi +TARGET_DRIVE=$(echo "$DRIVES" | gum choose --header "Select target drive" | awk '{print $1}') +if [ -z "$TARGET_DRIVE" ]; then exit 1; fi -echo "Select the partition layout:" LAYOUT=$(gum choose "Standard Ext4" "Encrypted BTRFS (LUKS2)") IMPERMANENCE="No" if [ "$LAYOUT" = "Standard Ext4" ]; then DISKO_FILE="installer/disko-ext4.nix" else DISKO_FILE="installer/disko-btrfs-luks.nix" - echo "Enable Impermanence? (Erase root partition on every boot)" - IMPERMANENCE=$(gum choose "Yes" "No") + echo "Enable Impermanence? (Erase root on every boot)" + IMPERMANENCE=$(gum choose "No" "Yes") fi -if [ -f "/etc/$(basename "$DISKO_FILE")" ]; then - DISKO_NIX="/etc/$(basename "$DISKO_FILE")" -else - DISKO_NIX="$NOMARCHY_REPO/$DISKO_FILE" -fi +# 3. User & Localization +section "User & Localization" +USERNAME=$(gum input --placeholder "Enter target username (no spaces)") +if [ -z "$USERNAME" ]; then exit 1; fi -TMP_DISKO=$(mktemp --suffix=.nix) -sed "s|@TARGET_DRIVE@|$TARGET_DRIVE|g" "$DISKO_NIX" > "$TMP_DISKO" -sudo env PATH="$PATH" disko --mode disko "$TMP_DISKO" - -# 3. User Details -USERNAME=$(gum input --placeholder "Enter target username") -if [ -z "$USERNAME" ]; then - echo "No username entered. Exiting." - exit 1 -fi - -# 4. Localization -echo "Select your Timezone (e.g., America/New_York, Europe/London):" +echo "Select Timezone:" TIMEZONES=$(timedatectl list-timezones || echo "UTC") -TIMEZONE=$(echo "$TIMEZONES" | gum filter --placeholder "Type to search timezones...") -if [ -z "$TIMEZONE" ]; then - echo "No timezone selected. Defaulting to UTC." - TIMEZONE="UTC" +TIMEZONE=$(echo "$TIMEZONES" | gum filter --placeholder "Type to search...") +[ -z "$TIMEZONE" ] && TIMEZONE="UTC" + +echo "Select Keyboard Layout:" +KEYBOARD_LAYOUT=$(gum choose "us" "uk" "de" "fr" "es" "it" "br-abnt2" "latam" "Other...") +if [ "$KEYBOARD_LAYOUT" = "Other..." ]; then + KEYBOARD_LAYOUT=$(gum input --placeholder "Enter layout (e.g. jp)") fi -echo "Select your Keyboard Layout:" -LAYOUT_SELECTION=$(gum choose "us" "uk" "de" "fr" "es" "it" "br-abnt2" "latam" "Other...") -if [ "$LAYOUT_SELECTION" = "Other..." ]; then - KEYBOARD_LAYOUT=$(gum input --placeholder "Enter your keyboard layout (e.g., jp, se, ch)") -else - KEYBOARD_LAYOUT="$LAYOUT_SELECTION" -fi -if [ -z "$KEYBOARD_LAYOUT" ]; then - echo "No layout selected. Defaulting to us." - KEYBOARD_LAYOUT="us" -fi - -# 4.5. Software Profiles -echo "Select additional software profiles to install (Press Space to select, Enter to confirm):" +# 4. Software Profiles +section "Software Profiles" +echo "Select additional profiles (Space to toggle):" PROFILES=$(gum choose --no-limit "Development (VSCode, Docker, DBs)" "Gaming (Steam, Lutris)" "Media Production (OBS, Kdenlive)") -PROFILE_SYSTEM_PKGS="" PROFILE_HOME_PKGS="" PROFILE_SYSTEM_CONFIG="" -if [[ $PROFILES == *"Development"* ]]; then - PROFILE_HOME_PKGS="$PROFILE_HOME_PKGS\n vscode\n docker-compose\n dbeaver-bin" - PROFILE_SYSTEM_CONFIG="$PROFILE_SYSTEM_CONFIG\n virtualisation.docker.enable = true;" -fi -if [[ $PROFILES == *"Gaming"* ]]; then - PROFILE_HOME_PKGS="$PROFILE_HOME_PKGS\n lutris\n protonup-qt\n mangohud" - PROFILE_SYSTEM_CONFIG="$PROFILE_SYSTEM_CONFIG\n programs.steam.enable = true;" -fi -if [[ $PROFILES == *"Media Production"* ]]; then - PROFILE_HOME_PKGS="$PROFILE_HOME_PKGS\n obs-studio\n kdenlive\n gimp\n audacity" +[[ $PROFILES == *"Development"* ]] && PROFILE_HOME_PKGS="$PROFILE_HOME_PKGS\n vscode\n docker-compose\n dbeaver-bin" && PROFILE_SYSTEM_CONFIG="$PROFILE_SYSTEM_CONFIG\n virtualisation.docker.enable = true;" +[[ $PROFILES == *"Gaming"* ]] && PROFILE_HOME_PKGS="$PROFILE_HOME_PKGS\n lutris\n protonup-qt\n mangohud" && PROFILE_SYSTEM_CONFIG="$PROFILE_SYSTEM_CONFIG\n programs.steam.enable = true;" +[[ $PROFILES == *"Media Production"* ]] && PROFILE_HOME_PKGS="$PROFILE_HOME_PKGS\n obs-studio\n kdenlive\n gimp\n audacity" +[[ "$IMPERMANENCE" == "Yes" ]] && PROFILE_SYSTEM_CONFIG="$PROFILE_SYSTEM_CONFIG\n nomarchy.system.impermanence.enable = true;" + +# 5. Review +section "Review Configuration" +echo "Target Drive: $TARGET_DRIVE" +echo "Layout: $LAYOUT (Impermanence: $IMPERMANENCE)" +echo "User: $USERNAME" +echo "Timezone: $TIMEZONE" +echo "Profiles: $PROFILES" + +if ! gum confirm "Ready to begin installation?"; then + echo "Aborted." + exit 0 fi -if [[ "$IMPERMANENCE" == "Yes" ]]; then - PROFILE_SYSTEM_CONFIG="$PROFILE_SYSTEM_CONFIG\n nomarchy.system.impermanence.enable = true;" -fi +# 6. Execution +section "Executing Installation" -# 5. Login Preferences -echo "Select login preference:" -LOGIN_PREF=$(gum choose "SDDM Auto-login" "Require Password") +# 6.1. Partitioning +gum spin --spinner pulse --title "Partitioning $TARGET_DRIVE..." -- bash -c " +DISKO_NIX=\"$NOMARCHY_REPO/$DISKO_FILE\" +TMP_DISKO=\$(mktemp --suffix=.nix) +sed \"s|@TARGET_DRIVE@|$TARGET_DRIVE|g\" \"\$DISKO_NIX\" > \"\$TMP_DISKO\" +sudo env PATH=\"\$PATH\" disko --mode disko \"\$TMP_DISKO\" +" -# Generate /mnt/etc/nixos/login-preference.nix +# 6.2. Scaffold Config +gum spin --spinner pulse --title "Generating NixOS configuration..." -- bash -c " mkdir -p /mnt/etc/nixos/ cat < /mnt/etc/nixos/login-preference.nix { - services.displayManager.autoLogin.enable = $(if [ "$LOGIN_PREF" = "SDDM Auto-login" ]; then echo "true"; else echo "false"; fi); - services.displayManager.autoLogin.user = "$USERNAME"; + services.displayManager.autoLogin.enable = true; + services.displayManager.autoLogin.user = \"$USERNAME\"; } EOF -# Generate /mnt/etc/nixos/localization.nix cat < /mnt/etc/nixos/localization.nix { - time.timeZone = "$TIMEZONE"; - services.xserver.xkb.layout = "$KEYBOARD_LAYOUT"; - console.keyMap = "$KEYBOARD_LAYOUT"; + time.timeZone = \"$TIMEZONE\"; + services.xserver.xkb.layout = \"$KEYBOARD_LAYOUT\"; + console.keyMap = \"$KEYBOARD_LAYOUT\"; } EOF -# Generate /mnt/etc/nixos/hardware-selection.nix cat < /mnt/etc/nixos/hardware-selection.nix { inputs, ... }: { imports = [ - $(echo -e "$HARDWARE_MODULES") + \$(echo -e \"$HARDWARE_MODULES\") ]; - $NOMARCHY_HW_OPTS } EOF -# 6. Hardware Config nixos-generate-config --root /mnt -# 7. Modular Downstream Scaffolding -mkdir -p /mnt/etc/nixos/ - -# Create system.nix (User System Customization) cat < /mnt/etc/nixos/system.nix { pkgs, ... }: { - # Add your personal system-level NixOS settings here. - # This file is for your own custom NixOS modules. - $(echo -e "$PROFILE_SYSTEM_CONFIG") - - environment.systemPackages = with pkgs; [ - # Add extra system-wide packages here - # wget - # htop$(echo -e "$PROFILE_SYSTEM_PKGS") - ]; - - # Example: How to persist extra directories if using Impermanence - # environment.persistence."/persist" = { - # directories = [ - # "/var/lib/docker" - # "/root/.ssh" - # ]; - # files = [ - # "/etc/my-secret-token.txt" - # ]; - # }; + \$(echo -e \"$PROFILE_SYSTEM_CONFIG\") + environment.systemPackages = with pkgs; []; } EOF -# Create home.nix (User Home Customization) cat < /mnt/etc/nixos/home.nix { pkgs, ... }: { - # Add your personal Home Manager settings here. - # This file is for your own custom user modules. - home.packages = with pkgs; [ - # Add extra user-level packages here - # neofetch - # ripgrep$(echo -e "$PROFILE_HOME_PKGS") + \$(echo -e \"$PROFILE_HOME_PKGS\") ]; - - # Example: How to override Nomarchy defaults - # nomarchy.fonts.monospace = "FiraCode Nerd Font"; - - # Example: Easy configuration overrides - # Place your custom configs in an 'overrides' folder next to home.nix - # nomarchy.configOverrides = ./overrides; } EOF -# Create the Master Flake cat < /mnt/etc/nixos/flake.nix { - description = "My Nomarchy - Downstream Configuration"; - + description = \"My Nomarchy - Downstream Configuration\"; inputs = { - nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11"; - nomarchy.url = "git+https://git.bemagri.xyz/bernardo/Nomarchy.git"; - - nixos-hardware.url = "github:NixOS/nixos-hardware/master"; + nixpkgs.url = \"github:nixos/nixpkgs/nixos-25.11\"; + nomarchy.url = \"git+https://git.bemagri.xyz/bernardo/Nomarchy.git\"; + nixos-hardware.url = \"github:NixOS/nixos-hardware/master\"; home-manager = { - url = "github:nix-community/home-manager/release-25.11"; - inputs.nixpkgs.follows = "nixpkgs"; + url = \"github:nix-community/home-manager/release-25.11\"; + inputs.nixpkgs.follows = \"nixpkgs\"; }; }; - outputs = { self, nixpkgs, nomarchy, home-manager, ... }@inputs: { nixosConfigurations.default = nixpkgs.lib.nixosSystem { specialArgs = { inputs = nomarchy.inputs // inputs; }; modules = [ - { nixpkgs.hostPlatform = "x86_64-linux"; } - # 1. Hardware + { nixpkgs.hostPlatform = \"x86_64-linux\"; } ./hardware-configuration.nix ./hardware-selection.nix - - # 2. Login & Preferences ./login-preference.nix ./localization.nix - - # 3. Upstream Nomarchy Core nomarchy.nixosModules.system - - # 4. User System Customization ./system.nix - - # 5. Home Manager Integration home-manager.nixosModules.home-manager { home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; home-manager.users.$USERNAME = { - imports = [ - nomarchy.nixosModules.home - ./home.nix - ]; - home.username = "$USERNAME"; - home.homeDirectory = "/home/$USERNAME"; - home.stateVersion = "25.11"; + imports = [ nomarchy.nixosModules.home ./home.nix ]; + home.username = \"$USERNAME\"; + home.homeDirectory = \"/home/$USERNAME\"; + home.stateVersion = \"25.11\"; }; } ]; @@ -317,8 +258,9 @@ cat < /mnt/etc/nixos/flake.nix }; } EOF +" -# 8. Version Control +# 6.3. Git Init cd /mnt/etc/nixos/ git init git add . @@ -326,14 +268,31 @@ git config user.name "Nomarchy Installer" git config user.email "installer@nomarchy" git commit -m "Initial Nomarchy generation" -# 8.5. Impermanence Redirection +# 6.4. Impermanence logic if [[ "$IMPERMANENCE" == "Yes" ]]; then - echo "Redirecting /etc/nixos to persistent storage..." + echo "Redirecting to persistent storage..." mkdir -p /mnt/persist/etc mv /mnt/etc/nixos /mnt/persist/etc/ mkdir -p /mnt/etc ln -s /persist/etc/nixos /mnt/etc/nixos fi -# 9. Execution -nixos-install --flake /mnt/etc/nixos#default --no-root-passwd +# 6.5. Install +section "Installing System" +echo "Starting nixos-install. This will take some time..." +sudo nixos-install --flake /mnt/etc/nixos#default --no-root-passwd + +# 7. Finished +header +gum style --foreground 10 --bold "INSTALLATION COMPLETE!" +echo "Nomarchy has been successfully installed on $TARGET_DRIVE." +echo +echo "What's next?" +echo "1. Remove the installation media." +echo "2. Reboot your computer." +echo "3. Log in and run 'nomarchy-update' to finish setup." +echo + +if gum confirm "Reboot now?"; then + reboot +fi diff --git a/modules/home/theme-files.nix b/modules/home/theme-files.nix index f9245e9..4b81131 100644 --- a/modules/home/theme-files.nix +++ b/modules/home/theme-files.nix @@ -8,6 +8,10 @@ xdg.configFile."nomarchy/current/theme.name".text = config.nomarchy.theme; + # Expose branding assets + xdg.configFile."nomarchy/branding/logo.png".source = ../../assets/branding/logo.png; + xdg.configFile."nomarchy/branding/logo.txt".source = ../../assets/branding/logo.txt; + # Expose all themes to the system via local share for script accessibility xdg.dataFile."nomarchy/themes".source = ../../themes; } diff --git a/modules/system/plymouth.nix b/modules/system/plymouth.nix index f73a2bf..0134334 100644 --- a/modules/system/plymouth.nix +++ b/modules/system/plymouth.nix @@ -1,9 +1,27 @@ { config, pkgs, ... }: +let + nomarchy-plymouth = pkgs.stdenv.mkDerivation { + pname = "nomarchy-plymouth"; + version = "1.0"; + + src = ../../assets/plymouth; + + installPhase = '' + mkdir -p $out/share/plymouth/themes/nomarchy + cp * $out/share/plymouth/themes/nomarchy/ + # Fix path in the plymouth file to point to the nix store if needed, + # but usually Plymouth looks in its theme dir. + sed -i "s|/etc/plymouth/themes/nomarchy|$out/share/plymouth/themes/nomarchy|g" $out/share/plymouth/themes/nomarchy/nomarchy.plymouth + ''; + }; +in { boot.initrd.systemd.enable = true; boot.plymouth = { enable = true; + themePackages = [ nomarchy-plymouth ]; + theme = "nomarchy"; }; boot.kernelParams = [ "quiet" "splash" "loglevel=3" ];