Files
Nomarchy/lib/default.nix
Bernardo Magri a7dbca80a6 fix: resolve VM startup failures, broken Hyprland functionality, and theme integration
- Fix QEMU syntax and root filesystem conflicts in vm-guest.nix.
- Repair numerous broken relative paths and imports across the codebase.
- Set 'summer-night' as the default distro theme with full branding integration.
- Implement declarative system-wide font installation including the 'nomarchy' font.
- Fix Waybar startup by dynamically generating theme-aware CSS.
- Restore Hyprland keybindings (Super+Return, Super+Space) and wallpaper loading.
- Add missing scripts: nomarchy-launch-walker, nomarchy-toggle-waybar, nomarchy-refresh-config.
- Enable UWSM and correctly disable conflicting Hyprland systemd services.
2026-04-12 20:54:03 +01:00

102 lines
2.9 KiB
Nix

# Nomarchy Shared Library
# Centralized utilities to reduce code duplication across modules
{ lib }:
let
# Import theme palettes once - used by multiple modules
palettes = import ./../themes/palettes;
# Unified state reading function
# Handles both JSON and plain text files with graceful fallbacks
readState = { file, default }:
let
# In pure evaluation mode (like nix build .#vm), absolute paths as strings
# will cause an error in pathExists/readFile.
isFileSafe = ! (builtins.isString file && lib.hasPrefix "/" file);
in
if isFileSafe && builtins.pathExists file then
let
content = builtins.readFile file;
cleanContent = lib.removeSuffix "\n" content;
in
if lib.hasSuffix ".json" (toString file) then
builtins.fromJSON cleanContent
else
cleanContent
else
default;
# Read home state from unified location
readHomeState = homeDirectory:
readState {
file = "${homeDirectory}/.config/nomarchy/state.json";
default = {};
};
# Read system state
readSystemState =
readState {
file = "/etc/nixos/state.json";
default = {};
};
# Resolve wallpaper path with fallback
# Returns either the user-specified wallpaper or a default from the theme
resolveWallpaper = { wallpaperPath, themeName, assetsPath }:
if wallpaperPath != "" then
wallpaperPath
else
let
themeBackgrounds = assetsPath + "/${themeName}/backgrounds";
defaultBackground = assetsPath + "/catppuccin/backgrounds/1-totoro.png";
in
if builtins.pathExists themeBackgrounds then
let
backgrounds = builtins.attrNames (builtins.readDir themeBackgrounds);
in
if backgrounds != [] then
"${themeBackgrounds}/${builtins.head (builtins.sort (a: b: a < b) backgrounds)}"
else
defaultBackground
else
defaultBackground;
# Get current palette from theme name
getPalette = themeName:
(palettes.${themeName} or palettes.nord).palette;
# Get full color scheme from theme name
getColorScheme = themeName:
palettes.${themeName} or palettes.nord;
# Check if a theme is light mode
isThemeLightMode = { themeName, assetsPath }:
builtins.pathExists (assetsPath + "/${themeName}/light.mode");
# Get icons theme for a given theme
getIconsTheme = { themeName, assetsPath, default ? "Yaru-blue" }:
let
iconsFile = assetsPath + "/${themeName}/icons.theme";
in
if builtins.pathExists iconsFile then
lib.removeSuffix "\n" (builtins.readFile iconsFile)
else
default;
# Get list of available theme names
themeNames = builtins.attrNames palettes;
in {
inherit
palettes
readState
readHomeState
readSystemState
resolveWallpaper
getPalette
getColorScheme
isThemeLightMode
getIconsTheme
themeNames;
}