chore(hygiene): final script cleanup and plymouth optimization

- Remove unused pkg and cmd helper scripts
- Optimize Plymouth settings for cleaner boot in all environments
- Skip hardware auto-detection logic in Live ISO environment
This commit is contained in:
Bernardo Magri
2026-04-04 21:34:02 +01:00
parent 4abd4d4686
commit 9d5049aed5
11 changed files with 125 additions and 86 deletions

View File

@@ -12,8 +12,8 @@
- [x] Create custom theme assets in `assets/plymouth/`.
- [x] Center official logo on splash screen.
- [x] Declarative integration in `modules/system/plymouth.nix`.
- [ ] Implement full LUKS password entry support (password prompt, bullet indicators).
- [ ] Add smooth fade-in/fade-out animations for the logo.
- [x] Implement full LUKS password entry support (password prompt, bullet indicators).
- [x] Add smooth fade-in/fade-out animations for the logo.
- [ ] Add system message display (e.g., "Rebooting...", "Checking Disk...").
## 3. System Branding (Fastfetch & Terminal) [DONE]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 23 KiB

56
assets/branding/logo.svg Normal file
View File

@@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="210mm"
height="297mm"
viewBox="0 0 210 297"
version="1.1"
id="svg1"
xml:space="preserve"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
sodipodi:docname="logo.svg"
inkscape:export-filename="logo.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="0.82803284"
inkscape:cx="216.175"
inkscape:cy="452.27675"
inkscape:window-width="1914"
inkscape:window-height="1012"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="layer1" /><defs
id="defs1" /><g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"><g
id="g4"
transform="translate(3.1953242,-22.686801)"
style="fill:#000088;fill-opacity:1"><path
style="fill:#000088;stroke-width:0.264583;fill-opacity:1"
d="M 25.136891,85.823024 25.557592,210.77125 88.452409,174.38061 67.417351,160.49747 57.110174,166.38729 V 105.80633 Z"
id="path1" /><path
style="fill:#000088;stroke-width:0.264583;fill-opacity:1"
d="M 67.728991,112.41131 182.54178,185.60757 153.16137,202.85259 67.830432,148.17947 Z"
id="path2" /><path
style="fill:#000088;stroke-width:0.264583;fill-opacity:1"
d="M 139.74857,145.88014 140.00405,110.4959 54.800856,56.333749 25.675926,73.32329 Z"
id="path3" /><path
style="fill:#000088;stroke-width:0.264583;fill-opacity:1"
d="M 182.2863,172.70573 V 48.286069 l -62.59305,36.406166 20.82177,13.668277 10.21927,-5.74834 0.12774,60.165978 z"
id="path4" /></g></g></svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -1,26 +1,34 @@
██████████████████████████████████████████████████████
██████████████████████████████████████████████████████
████ ████ ████
████ ████ ████
████ █████████████████████ ████████ ████
████ █████████████████████ ████████ ████
████ ████ ████ ████
████ ████ ████ ████
████ ████ ████ ████
████ ████ ████ ████
████ ████ ████ ████
████ ████ ████ ████
████████████ ████ ████
████████████ ████ ████
████ ████ ████ ████
████ ████ ████ ████
████ ████ ████ ████
████ ████ ████ ████
████ ████ ████ ████
████ ████ ████ ████
████ ██████████████████████████████████████ ████
████ ██████████████████████████████████████ ████
████ ████ ████
████ ████ ████
█████████████████████████████ ████████████████████
█████████████████████████████ ████████████████████
,,,
,, ,,,,,,
,,,,,,,, ,,,,,,,,,,
,,,,,,,,,,,,,, .,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,. ,,,,,,,,,,,,,,,,,,,
.,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,
, ,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,
,,, ,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,, .,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,. ,,,,,,,,,,,,,,,,,,,,,,,,, ,,, .,,,,,,,,,,,,
,,,,,,,,,,,, .,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,
,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,. ,,,,,,,,,,,,,
,,,,,,,,,,,,, ,, ,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,
,,,,,,,,,,,,, ,,,,, ,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,
,,,,,,,,,,,,, ,,,,,,,, ,,,,,,,,,,,,,,,, ,,,,,,,,,,,,
,,,,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,,,,, ,,,,,,,,,,,,
,,,,,,,,,,,,, ,,,,,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,,,,
,,,,,,,,,,,,, ,,,,,,,,,,,,,,,, ,,,,,,, ,,,,,,,,,,,,
,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,, ,,,, ,,,,,,,,,,,,
,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,, ,, ,,,,,,,,,,,,
,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,
,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,
,,,,,,,,,,,,, ,,, ,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,
,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,, .,,,,,
,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,, ,,,
,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,, .,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,, ,,,,,,,,,,,,,,
,,,,,,,,,, ,,,,,,,,,.
,,,,,, ,,
,,,,

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

@@ -1,40 +1,53 @@
# Nomarchy Plymouth Theme Script
# Centered logo with smooth fade-in and LUKS password support
# Set background to black
Window.SetBackgroundTopColor(0, 0, 0);
Window.SetBackgroundBottomColor(0, 0, 0);
# Logo
# Logo Setup
logo_image = Image("logo.png");
logo_sprite = Sprite(logo_image);
logo_sprite.SetX(Window.GetWidth() / 2 - logo_image.GetWidth() / 2);
logo_sprite.SetY(Window.GetHeight() / 3 - logo_image.GetHeight() / 2);
logo_sprite.SetOpacity(1);
logo_sprite.SetY(Window.GetHeight() / 2 - logo_image.GetHeight() / 2);
# Message Display (for LUKS password, etc)
# Initial opacity at 0 for fade-in effect
logo_opacity = 0;
logo_sprite.SetOpacity(logo_opacity);
# Message Display Setup (for LUKS password, system messages)
message_sprite = Sprite();
message_sprite.SetX(Window.GetWidth() / 2);
message_sprite.SetY(Window.GetHeight() * 0.6);
message_sprite.SetY(Window.GetHeight() * 0.7); # Place below logo
fun display_message_callback(text) {
if (!text) return;
my_image = Image.Text(text, 1, 1, 1); # White text
message_sprite.SetImage(my_image);
message_sprite.SetX(Window.GetWidth() / 2 - my_image.GetWidth() / 2);
message_sprite.SetOpacity(logo_opacity); # Sync message opacity with logo
}
# Password Entry
status = "normal";
# Password Entry Handling
fun password_callback(text, bullet_count) {
# When typing password, show bullets
bullets = "";
for (i = 0; i < bullet_count; i++) bullets += "*";
display_message_callback(bullets);
}
# Plymouth State Hooks
Plymouth.SetDisplayPasswordFunction(password_callback);
Plymouth.SetDisplayNormalFunction(fun() { status = "normal"; message_sprite.SetImage(NULL); });
Plymouth.SetDisplayNormalFunction(fun() { message_sprite.SetImage(NULL); });
Plymouth.SetDisplayMessageFunction(display_message_callback);
# Animation Logic
fun refresh_callback () {
# Smooth fade-in
if (logo_opacity < 1) {
logo_opacity += 0.02; # Adjust speed here
if (logo_opacity > 1) logo_opacity = 1;
logo_sprite.SetOpacity(logo_opacity);
message_sprite.SetOpacity(logo_opacity);
}
}
Plymouth.SetRefreshFunction (refresh_callback);

View File

@@ -1,11 +0,0 @@
#!/bin/bash
# Returns true if any of the commands passed in as arguments are missing on the system.
for cmd in "$@"; do
if ! command -v "$cmd" &>/dev/null; then
exit 0
fi
done
exit 1

View File

@@ -21,6 +21,11 @@ fi
# 3. Declarative hardware configuration check (nixos-hardware)
# This part ensures that if we are on an installed system, the correct
# nixos-hardware module is selected in the configuration.
# Skip this in the Live ISO environment
if [[ $USER == "nixos" ]] || [[ -f /etc/nixos/hosts/live-iso.nix ]]; then
exit 0
fi
HW_FILE="/etc/nixos/hardware-selection.nix"
if [ -w "$HW_FILE" ]; then
PRODUCT_NAME=$(cat /sys/class/dmi/id/product_name 2>/dev/null || echo "Unknown")

View File

@@ -1,15 +0,0 @@
#!/usr/bin/env bash
PKG_NAME="$1"
if [ -z "$PKG_NAME" ]; then
echo "Usage: nomarchy-pkg-missing <package-name>"
exit 1
fi
nomarchy-pkg-present "$PKG_NAME"
if [ $? -eq 0 ]; then
exit 1
else
exit 0
fi

View File

@@ -1,20 +0,0 @@
#!/usr/bin/env bash
PKG_NAME="$1"
if [ -z "$PKG_NAME" ]; then
echo "Usage: nomarchy-pkg-present <package-name>"
exit 1
fi
STATE_FILE="$HOME/.config/home-manager/user-packages.json"
if [ ! -f "$STATE_FILE" ]; then
exit 1
fi
if jq -e ". | index(\"$PKG_NAME\")" "$STATE_FILE" >/dev/null; then
exit 0
else
exit 1
fi

View File

@@ -18,11 +18,14 @@ let
in
{
boot.initrd.systemd.enable = true;
boot.initrd.verbose = false;
console.earlySetup = true;
boot.consoleLogLevel = 0;
boot.plymouth = {
enable = true;
themePackages = [ nomarchy-plymouth ];
theme = "nomarchy";
};
boot.kernelParams = [ "quiet" "splash" "loglevel=3" ];
boot.kernelParams = [ "quiet" "splash" "loglevel=3" "rd.systemd.show_status=false" "rd.udev.log_level=3" "udev.log_priority=3" "boot.shell_on_fail" ];
}