Legacy shipped only Thunar (and a stray nautilus extension, mid-migration). This pairs a keyboard-driven TUI flagship that fits the distro's identity with the GUI half for point-and-click + the "open folder" handler. yazi (modules/home/yazi.nix, nomarchy.yazi.enable, SUPER+E, `y` shell wrapper cd's on exit): themed from theme-state.json (mgr/mode/status mapped from the palette; merges over yazi's defaults so it tracks the theme) with a curated, correctly-wired plugin set — full-border, git (setup + prepend_fetchers), smart-enter (l/Enter), chmod (cm), mount (M), compress (caa), mediainfo (audio/subtitle only — images/videos keep native thumbnails), glow (markdown previews). Preview/tooling deps: ffmpegthumbnailer, poppler-utils, p7zip, jq, fd, ripgrep, fzf, chafa, mediainfo, glow. Thunar (modules/nixos/file-manager.nix, nomarchy.system.fileManager.enable): GTK file manager (Stylix-themed) + archive/volman/media-tags plugins + gvfs/tumbler/udisks2 backends + thumbnailers + exo. udisks2 also backs yazi's mount plugin. Verified: flake check green, HM generation builds (yazi TOML/init.lua render, all 8 plugins resolve), every package present in the live ISO closure (offline install draws from it — no source-build leak). Not verified: yazi's runtime preview/plugin behaviour needs a real session (TUI; can't drive in CI here). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
88 lines
4.0 KiB
Nix
88 lines
4.0 KiB
Nix
# User-level `nomarchy.*` options — the full surface downstream users
|
|
# configure in their home.nix. Kept small on purpose.
|
|
{ lib, pkgs, ... }:
|
|
|
|
{
|
|
options.nomarchy = {
|
|
# ── Required ───────────────────────────────────────────────────
|
|
stateFile = lib.mkOption {
|
|
type = lib.types.path;
|
|
example = lib.literalExpression "./theme-state.json";
|
|
description = ''
|
|
Path to theme-state.json, the single source of truth for all UI
|
|
configuration. Must live inside your flake (so evaluation stays
|
|
pure) and be git-tracked. nomarchy-theme-sync writes to the
|
|
on-disk copy; rebuilds bake it into the generation.
|
|
'';
|
|
};
|
|
|
|
# ── Preferences ────────────────────────────────────────────────
|
|
terminal = lib.mkOption {
|
|
type = lib.types.str;
|
|
default = "ghostty";
|
|
description = "Terminal emulator command, used by keybinds and $TERMINAL.";
|
|
};
|
|
|
|
keyboard.layout = lib.mkOption {
|
|
type = lib.types.str;
|
|
default = "us";
|
|
example = "de";
|
|
description = ''
|
|
XKB layout for the Hyprland session. The console (and the LUKS
|
|
passphrase prompt) take theirs from the system side — the
|
|
installer writes services.xserver.xkb + console.useXkbConfig
|
|
into system.nix with the same value.
|
|
'';
|
|
};
|
|
|
|
keyboard.variant = lib.mkOption {
|
|
type = lib.types.str;
|
|
default = "";
|
|
example = "nodeadkeys";
|
|
description = "XKB variant for the Hyprland session.";
|
|
};
|
|
|
|
package = lib.mkOption {
|
|
type = lib.types.package;
|
|
default = pkgs.nomarchy-theme-sync;
|
|
defaultText = lib.literalExpression "pkgs.nomarchy-theme-sync";
|
|
description = "The nomarchy-theme-sync package (provided by overlays.default).";
|
|
};
|
|
|
|
themesDir = lib.mkOption {
|
|
type = lib.types.path;
|
|
default = ../../themes;
|
|
defaultText = lib.literalExpression "\"\${nomarchy}/themes\"";
|
|
description = ''
|
|
Theme presets/assets directory probed at eval time for per-theme
|
|
app overrides (<slug>/waybar.css, <slug>/waybar.jsonc). Point it
|
|
at your own directory to ship custom layouts downstream.
|
|
'';
|
|
};
|
|
|
|
# ── Component toggles ──────────────────────────────────────────
|
|
hyprland.enable = lib.mkEnableOption "Nomarchy's Hyprland configuration" // { default = true; };
|
|
waybar.enable = lib.mkEnableOption "Nomarchy's Waybar configuration" // { default = true; };
|
|
fuzzel.enable = lib.mkEnableOption "Nomarchy's themed fuzzel + the nomarchy-menu dispatcher (power menu)" // { default = true; };
|
|
swaync.enable = lib.mkEnableOption "swaync notifications, themed from the state file" // { default = true; };
|
|
idle.enable = lib.mkEnableOption "hyprlock + hypridle (idle lock, display off, suspend)" // { default = true; };
|
|
yazi.enable = lib.mkEnableOption "the yazi TUI file manager, themed with a curated plugin set" // { default = true; };
|
|
ghostty.enable = lib.mkEnableOption "Nomarchy's Ghostty configuration" // { default = true; };
|
|
btop.enable = lib.mkEnableOption "btop with the per-theme nomarchy theme" // { default = true; };
|
|
stylix.enable = lib.mkEnableOption "Stylix theming for the long tail of apps (GTK, Qt, cursors)" // { default = true; };
|
|
|
|
# ── Computed (read-only) ───────────────────────────────────────
|
|
theme = lib.mkOption {
|
|
type = lib.types.attrs;
|
|
readOnly = true;
|
|
description = "The parsed theme state (stateFile merged over defaults).";
|
|
};
|
|
|
|
lib = lib.mkOption {
|
|
type = lib.types.attrs;
|
|
readOnly = true;
|
|
description = "Color-format helpers shared by the theme consumers.";
|
|
};
|
|
};
|
|
}
|