Some checks failed
Check / eval (push) Has been cancelled
Ghostty's OpenGL 4.3 floor broke the Acer (HD 4000 / 4.2). Dual-terminal support (default Ghostty + install-time Kitty fallback) was more complexity than it was worth. - Remove ghostty.nix / nomarchy.ghostty.enable - Kitty always installed and themed from theme-state - Default nomarchy.terminal = kitty; SUPER+Return, doctor, calendar, what-changed use kitty --class=com.nomarchy.* - Drop install-time glxinfo probe and mesa-demos on the installer - Docs/REQUIREMENTS no longer list OpenGL 4.3 as a terminal floor Verified: V0 flake check; option-docs; installer-safety; template HM has kitty, no ghostty; menu/calendar emit classed kitty launches.
124 lines
5.7 KiB
Nix
124 lines
5.7 KiB
Nix
# Nomarchy — Home Manager entry point.
|
|
# Consume this via homeModules.nomarchy (flake.nix), which also pulls in
|
|
# the stylix home module that stylix.nix configures.
|
|
{ config, lib, pkgs, ... }:
|
|
|
|
{
|
|
imports = [
|
|
./options.nix # the nomarchy.* option surface
|
|
./theme.nix # ingests theme-state.json, owns the live-sync hooks
|
|
./stylix.nix # GTK/Qt/cursor/fonts from the same JSON
|
|
./hyprland.nix
|
|
./waybar.nix
|
|
./kitty.nix # sole terminal (themed); doctor/calendar/--class load-bearing
|
|
./btop.nix
|
|
./rofi.nix # launcher theming + the nomarchy-menu dispatcher
|
|
./swaync.nix # notification daemon, themed from the same JSON
|
|
./idle.nix # hyprlock + hypridle, themed from the same JSON
|
|
./yazi.nix # flagship TUI file manager, themed + plugins
|
|
./osd.nix # swayosd volume/brightness OSD, themed
|
|
./nightlight.nix # scheduled blue-light filter (hyprsunset), opt-in
|
|
./autotheme.nix # auto day/night theme switch (settings.autoTheme), opt-in
|
|
./timezone.nix # keep the Waybar clock in step with auto-timezone changes
|
|
./updates.nix # passive update-awareness indicator + notification, opt-in
|
|
./shell.nix # zsh + starship + bat/eza/zoxide, themed
|
|
./keys.nix # gpg-agent (fronts SSH) + pinentry-qt
|
|
./fastfetch.nix # system info with the themed Nomarchy logo
|
|
./viewers.nix # zathura (Stylix-themed) + imv — PDF/image viewing
|
|
./mime.nix # default applications (mimeapps.list), degrades with the suite
|
|
./recording.nix # nomarchy-record: screen recording behind Capture + the bar ⏺
|
|
./battery-notify.nix # low-battery toasts at the bar's 25/10% thresholds
|
|
./dock-audio.nix # default sink follows dock/monitor audio on hotplug (#87)
|
|
./first-boot.nix # one-shot "you're set" toast on first session (#81)
|
|
./satty.nix # satty screenshot annotation tool, themed
|
|
];
|
|
|
|
# Clipboard history (wl-paste watcher); browsed via the SUPER+CTRL+V
|
|
# menu module.
|
|
services.cliphist.enable = true;
|
|
|
|
# Automount removable media (USB drives) and provide safe-removal notifications.
|
|
services.udiskie.enable = true;
|
|
|
|
# Microphone noise cancellation (rnnoise) and audio EQ.
|
|
# Tray icon is built into EasyEffects 8 (Qt StatusNotifierItem); the
|
|
# daemon must start after a tray HOST is live or the icon is missing
|
|
# for the whole session (wwmm/easyeffects#4636). After=waybar.service
|
|
# was inert — Nomarchy's waybar runs from the nomarchy-waybar
|
|
# supervisor (Hyprland exec-once), not a systemd unit, so the race was
|
|
# a boot-order coin flip (lost on TuringMachine 2026-07-11). Gate on
|
|
# the watcher's IsStatusNotifierHostRegistered instead; the `-` prefix
|
|
# lets EasyEffects still start after the timeout on tray-less setups —
|
|
# audio processing must not hinge on an icon.
|
|
services.easyeffects.enable = true;
|
|
systemd.user.services.easyeffects = {
|
|
Unit = {
|
|
After = [ "graphical-session.target" "tray.target" ];
|
|
Wants = [ "tray.target" ];
|
|
};
|
|
Service.ExecStartPre = "-${pkgs.writeShellScript "wait-for-tray-host" ''
|
|
timeout 30 ${pkgs.bash}/bin/sh -c '
|
|
until ${pkgs.systemd}/bin/busctl --user get-property \
|
|
org.kde.StatusNotifierWatcher /StatusNotifierWatcher \
|
|
org.kde.StatusNotifierWatcher IsStatusNotifierHostRegistered \
|
|
2>/dev/null | ${pkgs.gnugrep}/bin/grep -q true; do
|
|
sleep 0.5
|
|
done'
|
|
''}";
|
|
};
|
|
|
|
# Wifi from the bar: nm-applet lives in waybar's tray (SNI flag via
|
|
# preferStatusNotifierItems — without it there is no tray icon).
|
|
services.network-manager-applet.enable = true;
|
|
xsession.preferStatusNotifierItems = true;
|
|
|
|
# Standard XDG user directories (Downloads, Documents, Pictures, Music,
|
|
# Videos, Desktop, Public, Templates): written to user-dirs.dirs so file
|
|
# pickers/browsers resolve them, and created on activation so a fresh
|
|
# install lands with them present (not just on first app use). mkDefault
|
|
# so a downstream home.nix can flip it off or remap individual paths.
|
|
xdg.userDirs = {
|
|
enable = lib.mkDefault true;
|
|
createDirectories = lib.mkDefault true;
|
|
# Pinned: HM 26.05 flips the default to false (and warns on every eval
|
|
# for older stateVersions). Keep exporting XDG_*_DIR into the session —
|
|
# scripts and non-glib apps read the vars, and pinning gives every
|
|
# downstream the same behavior regardless of its stateVersion.
|
|
setSessionVariables = lib.mkDefault true;
|
|
};
|
|
|
|
home.stateVersion = lib.mkDefault "26.05";
|
|
|
|
home.packages = with pkgs; [
|
|
awww # wallpaper daemon with animated transitions (the swww fork)
|
|
libnotify
|
|
hyprpicker
|
|
# Lifecycle CLIs (pull/rebuild/home). HM profile usually precedes
|
|
# /run/current-system on PATH, so nomarchy-home can replace a broken
|
|
# system-generation nomarchy-pull without a full sys rebuild.
|
|
nomarchy-lifecycle
|
|
];
|
|
|
|
home.sessionVariables = {
|
|
TERMINAL = config.nomarchy.terminal;
|
|
NIXOS_OZONE_WL = "1"; # Electron/Chromium native Wayland
|
|
# Same gate as modules/nixos: CLI nix-shell/shell/run for unfree pkgs
|
|
# (system nixpkgs.config alone does not cover those entry points).
|
|
NIXPKGS_ALLOW_UNFREE = "1";
|
|
|
|
# Where the Nomarchy flake (and therefore theme-state.json) lives on
|
|
# disk. nomarchy-theme-sync writes its state here; rebuilds read from
|
|
# here. Clone/symlink your flake to this path.
|
|
NOMARCHY_PATH = "$HOME/.nomarchy";
|
|
};
|
|
|
|
# Classic nix-shell / nix-env read this; pairs with NIXPKGS_ALLOW_UNFREE
|
|
# above so "allow unfree" is the default desktop experience, not a
|
|
# per-command export the user has to remember.
|
|
xdg.configFile."nixpkgs/config.nix".text = ''
|
|
{ allowUnfree = true; }
|
|
'';
|
|
|
|
programs.home-manager.enable = true;
|
|
}
|