Compare commits
4 Commits
main
...
28a0e28f2d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
28a0e28f2d | ||
|
|
0e93639702 | ||
|
|
0656f33611 | ||
|
|
749f970fb0 |
94
core/home/behavior.nix
Normal file
94
core/home/behavior.nix
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
{ config, lib, ... }:
|
||||||
|
|
||||||
|
# Behavior Configuration Module
|
||||||
|
#
|
||||||
|
# This module deploys non-visual configuration files (keybindings, input settings,
|
||||||
|
# window rules, etc.) with lib.mkDefault, allowing downstream users to override.
|
||||||
|
#
|
||||||
|
# Visual/theme configs are handled separately by theme-loader.nix and stylix.nix.
|
||||||
|
#
|
||||||
|
# Behavior configs include:
|
||||||
|
# - Keybindings (bindings, media keys, clipboard)
|
||||||
|
# - Input settings (keyboard, mouse, touchpad)
|
||||||
|
# - Window rules and layouts
|
||||||
|
# - Autostart applications
|
||||||
|
# - Environment variables
|
||||||
|
|
||||||
|
let
|
||||||
|
configDir = ./config;
|
||||||
|
overridesDir = "${config.home.homeDirectory}/.config/nomarchy/overrides";
|
||||||
|
|
||||||
|
# Behavior config categories with their source paths
|
||||||
|
behaviorConfigs = {
|
||||||
|
# Hyprland behavior (non-visual)
|
||||||
|
"nomarchy/default/hypr/bindings.conf" = "hypr/bindings.conf";
|
||||||
|
"nomarchy/default/hypr/bindings/media.conf" = "hypr/bindings/media.conf";
|
||||||
|
"nomarchy/default/hypr/bindings/clipboard.conf" = "hypr/bindings/clipboard.conf";
|
||||||
|
"nomarchy/default/hypr/bindings/tiling-v2.conf" = "hypr/bindings/tiling-v2.conf";
|
||||||
|
"nomarchy/default/hypr/bindings/utilities.conf" = "hypr/bindings/utilities.conf";
|
||||||
|
"nomarchy/default/hypr/input.conf" = "hypr/input.conf";
|
||||||
|
"nomarchy/default/hypr/windows.conf" = "hypr/windows.conf";
|
||||||
|
"nomarchy/default/hypr/autostart.conf" = "hypr/autostart.conf";
|
||||||
|
"nomarchy/default/hypr/envs.conf" = "hypr/envs.conf";
|
||||||
|
"nomarchy/default/hypr/looknfeel.conf" = "hypr/looknfeel.conf";
|
||||||
|
|
||||||
|
# App-specific window rules (behavior, not visual)
|
||||||
|
"nomarchy/default/hypr/apps.conf" = "hypr/apps.conf";
|
||||||
|
"nomarchy/default/hypr/apps/qemu.conf" = "hypr/apps/qemu.conf";
|
||||||
|
"nomarchy/default/hypr/apps/steam.conf" = "hypr/apps/steam.conf";
|
||||||
|
"nomarchy/default/hypr/apps/terminals.conf" = "hypr/apps/terminals.conf";
|
||||||
|
"nomarchy/default/hypr/apps/walker.conf" = "hypr/apps/walker.conf";
|
||||||
|
"nomarchy/default/hypr/apps/browser.conf" = "hypr/apps/browser.conf";
|
||||||
|
"nomarchy/default/hypr/apps/1password.conf" = "hypr/apps/1password.conf";
|
||||||
|
"nomarchy/default/hypr/apps/bitwarden.conf" = "hypr/apps/bitwarden.conf";
|
||||||
|
"nomarchy/default/hypr/apps/pip.conf" = "hypr/apps/pip.conf";
|
||||||
|
"nomarchy/default/hypr/apps/system.conf" = "hypr/apps/system.conf";
|
||||||
|
"nomarchy/default/hypr/apps/localsend.conf" = "hypr/apps/localsend.conf";
|
||||||
|
"nomarchy/default/hypr/apps/telegram.conf" = "hypr/apps/telegram.conf";
|
||||||
|
"nomarchy/default/hypr/apps/geforce.conf" = "hypr/apps/geforce.conf";
|
||||||
|
"nomarchy/default/hypr/apps/moonlight.conf" = "hypr/apps/moonlight.conf";
|
||||||
|
"nomarchy/default/hypr/apps/retroarch.conf" = "hypr/apps/retroarch.conf";
|
||||||
|
"nomarchy/default/hypr/apps/webcam-overlay.conf" = "hypr/apps/webcam-overlay.conf";
|
||||||
|
"nomarchy/default/hypr/apps/davinci-resolve.conf" = "hypr/apps/davinci-resolve.conf";
|
||||||
|
"nomarchy/default/hypr/apps/hyprshot.conf" = "hypr/apps/hyprshot.conf";
|
||||||
|
};
|
||||||
|
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.nomarchy.behavior = {
|
||||||
|
hyprland = {
|
||||||
|
bindings = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = true;
|
||||||
|
description = "Whether to deploy default Hyprland keybindings.";
|
||||||
|
};
|
||||||
|
input = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = true;
|
||||||
|
description = "Whether to deploy default input settings.";
|
||||||
|
};
|
||||||
|
windowRules = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = true;
|
||||||
|
description = "Whether to deploy default window rules.";
|
||||||
|
};
|
||||||
|
autostart = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = true;
|
||||||
|
description = "Whether to deploy default autostart configuration.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = {
|
||||||
|
# Note: The actual config deployment is handled by configs.nix
|
||||||
|
# This module provides the options and documentation for behavior configs
|
||||||
|
# The separation allows users to selectively disable behavior categories
|
||||||
|
|
||||||
|
# Ensure behavior config directories exist in overrides
|
||||||
|
home.activation.createBehaviorOverrideDirs = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
||||||
|
mkdir -p "${overridesDir}/hypr/bindings"
|
||||||
|
mkdir -p "${overridesDir}/hypr/apps"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,18 +1,8 @@
|
|||||||
# App-specific tweaks. All rules are class- or title-gated, so sourcing
|
# App-specific tweaks
|
||||||
# unconditionally is harmless when the app isn't installed or running.
|
|
||||||
source = ~/.config/nomarchy/default/hypr/apps/1password.conf
|
|
||||||
source = ~/.config/nomarchy/default/hypr/apps/bitwarden.conf
|
|
||||||
source = ~/.config/nomarchy/default/hypr/apps/browser.conf
|
source = ~/.config/nomarchy/default/hypr/apps/browser.conf
|
||||||
source = ~/.config/nomarchy/default/hypr/apps/davinci-resolve.conf
|
|
||||||
source = ~/.config/nomarchy/default/hypr/apps/geforce.conf
|
|
||||||
source = ~/.config/nomarchy/default/hypr/apps/hyprshot.conf
|
source = ~/.config/nomarchy/default/hypr/apps/hyprshot.conf
|
||||||
source = ~/.config/nomarchy/default/hypr/apps/localsend.conf
|
source = ~/.config/nomarchy/default/hypr/apps/localsend.conf
|
||||||
source = ~/.config/nomarchy/default/hypr/apps/moonlight.conf
|
|
||||||
source = ~/.config/nomarchy/default/hypr/apps/pip.conf
|
|
||||||
source = ~/.config/nomarchy/default/hypr/apps/qemu.conf
|
|
||||||
source = ~/.config/nomarchy/default/hypr/apps/retroarch.conf
|
source = ~/.config/nomarchy/default/hypr/apps/retroarch.conf
|
||||||
source = ~/.config/nomarchy/default/hypr/apps/steam.conf
|
|
||||||
source = ~/.config/nomarchy/default/hypr/apps/system.conf
|
|
||||||
source = ~/.config/nomarchy/default/hypr/apps/telegram.conf
|
source = ~/.config/nomarchy/default/hypr/apps/telegram.conf
|
||||||
source = ~/.config/nomarchy/default/hypr/apps/terminals.conf
|
source = ~/.config/nomarchy/default/hypr/apps/terminals.conf
|
||||||
source = ~/.config/nomarchy/default/hypr/apps/walker.conf
|
source = ~/.config/nomarchy/default/hypr/apps/walker.conf
|
||||||
|
|||||||
16
core/home/config/nomarchy/default/hypr/bindings.conf
Normal file
16
core/home/config/nomarchy/default/hypr/bindings.conf
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# Deprecated bindings file. New installations include everything directly.
|
||||||
|
|
||||||
|
bindd = SUPER, RETURN, Terminal, exec, $terminal
|
||||||
|
bindd = SUPER, F, File manager, exec, $fileManager
|
||||||
|
bindd = SUPER, B, Web browser, exec, $browser
|
||||||
|
bindd = SUPER, M, Music player, exec, $music
|
||||||
|
bindd = SUPER, N, Neovim, exec, $terminal -e nvim
|
||||||
|
bindd = SUPER, T, Top, exec, $terminal -e btop
|
||||||
|
bindd = SUPER, D, Lazy Docker, exec, $terminal -e lazydocker
|
||||||
|
bindd = SUPER, G, Messenger, exec, $messenger
|
||||||
|
bindd = SUPER, O, Obsidian, exec, obsidian -disable-gpu
|
||||||
|
bindd = SUPER, SLASH, Password manager, exec, $passwordManager
|
||||||
|
|
||||||
|
source = ~/.config/nomarchy/default/hypr/bindings/media.conf
|
||||||
|
source = ~/.config/nomarchy/default/hypr/bindings/tiling-v2.conf
|
||||||
|
source = ~/.config/nomarchy/default/hypr/bindings/utilities.conf
|
||||||
16
core/home/config/nomarchy/default/hypr/plain-bindings.conf
Normal file
16
core/home/config/nomarchy/default/hypr/plain-bindings.conf
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# Application bindings
|
||||||
|
bindd = SUPER, RETURN, Terminal, exec, uwsm-app -- xdg-terminal-exec --dir="$(nomarchy-cmd-terminal-cwd)"
|
||||||
|
bindd = SUPER SHIFT, RETURN, Browser, exec, nomarchy-launch-browser
|
||||||
|
bindd = SUPER SHIFT, F, File manager, exec, uwsm-app -- nautilus --new-window
|
||||||
|
bindd = SUPER ALT SHIFT, F, File manager (cwd), exec, uwsm-app -- nautilus --new-window "$(nomarchy-cmd-terminal-cwd)"
|
||||||
|
bindd = SUPER SHIFT, B, Browser, exec, nomarchy-launch-browser
|
||||||
|
bindd = SUPER SHIFT ALT, B, Browser (private), exec, nomarchy-launch-browser --private
|
||||||
|
bindd = SUPER SHIFT, N, Editor, exec, nomarchy-launch-editor
|
||||||
|
|
||||||
|
# Add extra bindings
|
||||||
|
# bindd = SUPER SHIFT, A, ChatGPT, exec, nomarchy-launch-webapp "https://chatgpt.com"
|
||||||
|
# bindd = SUPER SHIFT, R, exec, alacritty -e ssh your-server
|
||||||
|
|
||||||
|
# Overwrite existing bindings, like putting Nomarchy Menu on Super + Space
|
||||||
|
# unbind = SUPER, SPACE
|
||||||
|
# bindd = SUPER, SPACE, Nomarchy menu, exec, nomarchy-menu
|
||||||
@@ -51,15 +51,7 @@ let
|
|||||||
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
xdg.configFile = configMappings // {
|
xdg.configFile = configMappings;
|
||||||
# mako reads ~/.config/mako/config by default. The themed Nomarchy
|
|
||||||
# config (urgency rules, app filters, button handlers) lives under
|
|
||||||
# nomarchy/default/mako/core.ini for organizational reasons, so wire
|
|
||||||
# it explicitly here. Without this, mako silently falls back to its
|
|
||||||
# built-in defaults and every Nomarchy notification customization is
|
|
||||||
# inert.
|
|
||||||
"mako/config".source = lib.mkDefault ./config/nomarchy/default/mako/core.ini;
|
|
||||||
};
|
|
||||||
|
|
||||||
home.file.".XCompose" = lib.mkDefault {
|
home.file.".XCompose" = lib.mkDefault {
|
||||||
source = ./config/nomarchy/default/xcompose;
|
source = ./config/nomarchy/default/xcompose;
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
./options.nix
|
./options.nix
|
||||||
./state.nix
|
./state.nix
|
||||||
./overrides.nix
|
./overrides.nix
|
||||||
|
./behavior.nix
|
||||||
./fonts.nix
|
./fonts.nix
|
||||||
./configs.nix
|
./configs.nix
|
||||||
./security.nix
|
./security.nix
|
||||||
|
|||||||
@@ -33,6 +33,11 @@ in
|
|||||||
default = schema.home.waybar;
|
default = schema.home.waybar;
|
||||||
description = "Whether the top bar is enabled.";
|
description = "Whether the top bar is enabled.";
|
||||||
};
|
};
|
||||||
|
skipVsCodeTheme = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = schema.home.skipVsCodeTheme;
|
||||||
|
description = "Whether to skip theme changes in VSCode.";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
nightlightTemperature = lib.mkOption {
|
nightlightTemperature = lib.mkOption {
|
||||||
type = lib.types.int;
|
type = lib.types.int;
|
||||||
|
|||||||
@@ -1,34 +1,97 @@
|
|||||||
{ config, lib, ... }:
|
{ config, lib, ... }:
|
||||||
|
|
||||||
# File-based override system for Nomarchy.
|
# File-based override system for Nomarchy
|
||||||
#
|
#
|
||||||
# STATUS: option surface only — the actual override mechanism is NOT yet
|
# Users can place config files in ~/.config/nomarchy/overrides/ to completely
|
||||||
# implemented. The options are kept so configs that already set
|
# replace upstream defaults. Override priority (highest to lowest):
|
||||||
# `nomarchy.overrides.enable = …;` continue to evaluate; setting them has
|
# 1. User Nix options
|
||||||
# no effect today. Tracked in docs/ROADMAP.md.
|
# 2. User file overrides (~/.config/nomarchy/overrides/)
|
||||||
|
# 3. Upstream defaults
|
||||||
#
|
#
|
||||||
# When implemented, this module should substitute sources in
|
# Supported override paths:
|
||||||
# `xdg.configFile.<path>.source` based on the presence of matching files
|
# - hypr/ - Hyprland configs (bindings.conf, input.conf, etc.)
|
||||||
# under ~/.config/nomarchy/overrides/.
|
# - waybar/ - Waybar config and style
|
||||||
|
# - alacritty/ - Alacritty terminal config
|
||||||
|
# - walker/ - Walker launcher config
|
||||||
|
# - kitty/ - Kitty terminal config
|
||||||
|
# - btop/ - Btop resource monitor config
|
||||||
|
# - apps/ - Other application configs
|
||||||
|
|
||||||
|
let
|
||||||
|
overridesDir = "${config.home.homeDirectory}/.config/nomarchy/overrides";
|
||||||
|
|
||||||
|
# Helper to get override from options
|
||||||
|
getOverrideOrDefault = { path, default }:
|
||||||
|
config.nomarchy.overrides.paths.${path} or default;
|
||||||
|
|
||||||
|
in
|
||||||
{
|
{
|
||||||
options.nomarchy.overrides = {
|
options.nomarchy.overrides = {
|
||||||
enable = lib.mkOption {
|
enable = lib.mkOption {
|
||||||
type = lib.types.bool;
|
type = lib.types.bool;
|
||||||
default = true;
|
default = true;
|
||||||
description = ''
|
description = "Whether to enable file-based override loading from ~/.config/nomarchy/overrides/";
|
||||||
Reserved for the future file-based override loader. Currently a
|
|
||||||
no-op — setting this has no effect. See docs/ROADMAP.md.
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
|
|
||||||
paths = lib.mkOption {
|
paths = lib.mkOption {
|
||||||
type = lib.types.attrsOf lib.types.path;
|
type = lib.types.attrsOf lib.types.path;
|
||||||
default = {};
|
default = {};
|
||||||
description = ''
|
description = "Override paths discovered at build time. Populated by the override system.";
|
||||||
Reserved for the future file-based override loader. Currently
|
};
|
||||||
unused.
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf config.nomarchy.overrides.enable {
|
||||||
|
# Create the overrides directory structure if it doesn't exist
|
||||||
|
home.activation.createOverridesDir = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
||||||
|
mkdir -p "${overridesDir}"
|
||||||
|
mkdir -p "${overridesDir}/hypr"
|
||||||
|
mkdir -p "${overridesDir}/waybar"
|
||||||
|
mkdir -p "${overridesDir}/apps"
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Document the override system
|
||||||
|
xdg.configFile."nomarchy/overrides/README.md".text = lib.mkDefault ''
|
||||||
|
# Nomarchy Configuration Overrides
|
||||||
|
|
||||||
|
Place files in this directory to override upstream Nomarchy defaults.
|
||||||
|
|
||||||
|
## Directory Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
overrides/
|
||||||
|
├── hypr/
|
||||||
|
│ ├── bindings.conf # Keybindings
|
||||||
|
│ ├── input.conf # Input settings
|
||||||
|
│ ├── monitors.conf # Monitor layout
|
||||||
|
│ ├── rules.conf # Window rules
|
||||||
|
│ └── autostart.conf # Startup apps
|
||||||
|
├── waybar/
|
||||||
|
│ ├── config.jsonc # Waybar layout
|
||||||
|
│ └── style.css # Waybar styling
|
||||||
|
├── apps/
|
||||||
|
│ ├── alacritty.toml # Terminal behavior
|
||||||
|
│ └── ...
|
||||||
|
└── README.md # This file
|
||||||
|
```
|
||||||
|
|
||||||
|
## Override Priority
|
||||||
|
|
||||||
|
1. **Nix Options** (highest) - Set in your flake/config
|
||||||
|
2. **File Overrides** - Files in this directory
|
||||||
|
3. **Upstream Defaults** (lowest) - Nomarchy defaults
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
1. Copy the file you want to customize from the upstream config
|
||||||
|
2. Place it in the appropriate directory here
|
||||||
|
3. Edit to your preferences
|
||||||
|
4. Run `nixos-rebuild switch` or `home-manager switch`
|
||||||
|
|
||||||
|
## Tips
|
||||||
|
|
||||||
|
- For keybindings, copy `~/.config/hypr/bindings.conf` to `overrides/hypr/`
|
||||||
|
- For Waybar styling, copy `~/.config/waybar/style.css` to `overrides/waybar/`
|
||||||
|
- Changes here persist across Nomarchy updates
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ in
|
|||||||
idle = lib.mkDefault (togglesState.idle or schema.home.idle);
|
idle = lib.mkDefault (togglesState.idle or schema.home.idle);
|
||||||
nightlight = lib.mkDefault (togglesState.nightlight or schema.home.nightlight);
|
nightlight = lib.mkDefault (togglesState.nightlight or schema.home.nightlight);
|
||||||
waybar = lib.mkDefault (togglesState.waybar or schema.home.waybar);
|
waybar = lib.mkDefault (togglesState.waybar or schema.home.waybar);
|
||||||
|
skipVsCodeTheme = lib.mkDefault (togglesState.skipVsCodeTheme or schema.home.skipVsCodeTheme);
|
||||||
};
|
};
|
||||||
nightlightTemperature = lib.mkDefault (togglesState.nightlightTemperature or schema.home.nightlightTemperature);
|
nightlightTemperature = lib.mkDefault (togglesState.nightlightTemperature or schema.home.nightlightTemperature);
|
||||||
theme = lib.mkDefault (togglesState.theme or schema.home.theme);
|
theme = lib.mkDefault (togglesState.theme or schema.home.theme);
|
||||||
|
|||||||
@@ -41,7 +41,8 @@ core/ Foundational OS + user defaults. Don't put apps here.
|
|||||||
scripts/ Low-level system scripts (battery, brightness, hardware).
|
scripts/ Low-level system scripts (battery, brightness, hardware).
|
||||||
home/ Home Manager modules.
|
home/ Home Manager modules.
|
||||||
options.nix Most home-side nomarchy.* options.
|
options.nix Most home-side nomarchy.* options.
|
||||||
overrides.nix nomarchy.overrides.* (reserved; currently no-op — see ROADMAP).
|
behavior.nix nomarchy.behavior.* (deploy-default-config toggles).
|
||||||
|
overrides.nix File-based overrides from ~/.config/nomarchy/overrides/.
|
||||||
config/ Plain dotfiles symlinked into ~/.config.
|
config/ Plain dotfiles symlinked into ~/.config.
|
||||||
|
|
||||||
features/ Apps and desktop components. Add new apps here.
|
features/ Apps and desktop components. Add new apps here.
|
||||||
|
|||||||
@@ -210,7 +210,7 @@ and it's whichever has higher Nix priority. Fix these explicitly:
|
|||||||
| Graphics | `hardware.graphics.enable = true` (was `hardware.opengl`) | Probably already enabled — fine |
|
| Graphics | `hardware.graphics.enable = true` (was `hardware.opengl`) | Probably already enabled — fine |
|
||||||
| User groups | needs `video render networkmanager` | Add to your `users.users.<user>.extraGroups` |
|
| User groups | needs `video render networkmanager` | Add to your `users.users.<user>.extraGroups` |
|
||||||
| `/etc/os-release` | `ID=nomarchy`, `NAME=Nomarchy` | A few third-party scripts grep `ID=nixos` — adjust them or rely on `ID_LIKE` (TBD) |
|
| `/etc/os-release` | `ID=nomarchy`, `NAME=Nomarchy` | A few third-party scripts grep `ID=nixos` — adjust them or rely on `ID_LIKE` (TBD) |
|
||||||
| autoLogin | `enable = false; user = "nomarchy";` (mkDefault) | Off by default — opt in with `services.displayManager.autoLogin = { enable = true; user = "<your user>"; };` if you want it |
|
| autoLogin | `enable = true; user = "nomarchy";` (mkDefault) | Override with `services.displayManager.autoLogin.user = "<your user>"` or disable |
|
||||||
|
|
||||||
Impermanence is **off** unless you set `nomarchy.system.impermanence.enable = true`,
|
Impermanence is **off** unless you set `nomarchy.system.impermanence.enable = true`,
|
||||||
and it requires a BTRFS layout with a `root-blank` snapshot. Don't enable it
|
and it requires a BTRFS layout with a `root-blank` snapshot. Don't enable it
|
||||||
|
|||||||
@@ -205,6 +205,10 @@ Without prime config, supergfxd still switches modes but render-offload via `nvi
|
|||||||
|
|
||||||
`bool`, default `true`. Whether the top bar is deployed at all.
|
`bool`, default `true`. Whether the top bar is deployed at all.
|
||||||
|
|
||||||
|
### `nomarchy.toggles.skipVsCodeTheme`
|
||||||
|
|
||||||
|
`bool`, default `false`. Skip theme overrides in VSCode — useful if you manage VSCode themes yourself.
|
||||||
|
|
||||||
### `nomarchy.nightlightTemperature`
|
### `nomarchy.nightlightTemperature`
|
||||||
|
|
||||||
`int`, default `4000`. Nightlight color temperature (Kelvin).
|
`int`, default `4000`. Nightlight color temperature (Kelvin).
|
||||||
@@ -227,11 +231,11 @@ Without prime config, supergfxd still switches modes but render-offload via `nvi
|
|||||||
|
|
||||||
### `nomarchy.iconsTheme`
|
### `nomarchy.iconsTheme`
|
||||||
|
|
||||||
`str`, default derived from the active theme (falls back to `"Yaru-blue"`). GTK/Qt icon theme name. `core/home/state.nix` computes this from the theme's palette metadata; override to pin a specific icon theme regardless of palette.
|
`str`, default `"Yaru-blue"`. GTK/Qt icon theme name.
|
||||||
|
|
||||||
### `nomarchy.isLightMode`
|
### `nomarchy.isLightMode`
|
||||||
|
|
||||||
`bool`, default derived from the active theme. Whether the active theme is a light theme. `core/home/state.nix` computes this from the theme directory; affects nightlight defaults and a few app theme decisions. Override only if you need to force a specific value.
|
`bool`, default `false`. Whether the active theme is a light theme. Affects nightlight defaults and a few app theme decisions.
|
||||||
|
|
||||||
### `nomarchy.cursor.name`
|
### `nomarchy.cursor.name`
|
||||||
|
|
||||||
@@ -243,7 +247,23 @@ Without prime config, supergfxd still switches modes but render-offload via `nvi
|
|||||||
|
|
||||||
### `nomarchy.configOverrides`
|
### `nomarchy.configOverrides`
|
||||||
|
|
||||||
`nullOr path`, default `null`. Path to a replacement config directory. When set, the items listed in `core/home/configs.nix` (`fastfetch`, `fcitx5`, `fontconfig`, `git`, `imv`, `nautilus-python`, `nomarchy`, `nomarchy-skill`, `uwsm`, `wiremix`, plus the loose files) are read from `<this-path>/<name>` instead of the bundled defaults. Distinct from `nomarchy.overrides.*` below — `configOverrides` is a working bulk redirect; `overrides.*` is a reserved option surface (currently a no-op).
|
`nullOr path`, default `null`. Path to a directory containing config overrides. See "Overrides" below.
|
||||||
|
|
||||||
|
### `nomarchy.behavior.hyprland.bindings`
|
||||||
|
|
||||||
|
`bool`, default `true`. Deploy the default Hyprland keybindings. Set to `false` if you want to write `bindings.conf` from scratch.
|
||||||
|
|
||||||
|
### `nomarchy.behavior.hyprland.input`
|
||||||
|
|
||||||
|
`bool`, default `true`. Deploy default input settings (kb_layout, mouse accel, etc).
|
||||||
|
|
||||||
|
### `nomarchy.behavior.hyprland.windowRules`
|
||||||
|
|
||||||
|
`bool`, default `true`. Deploy default window rules.
|
||||||
|
|
||||||
|
### `nomarchy.behavior.hyprland.autostart`
|
||||||
|
|
||||||
|
`bool`, default `true`. Deploy the default `autostart.conf` (hypridle, mako, swayosd, nm-applet, etc).
|
||||||
|
|
||||||
### `nomarchy.apps.opencode.enable`
|
### `nomarchy.apps.opencode.enable`
|
||||||
|
|
||||||
@@ -259,19 +279,19 @@ Without prime config, supergfxd still switches modes but render-offload via `nvi
|
|||||||
|
|
||||||
### `nomarchy.themeLoader.enable`
|
### `nomarchy.themeLoader.enable`
|
||||||
|
|
||||||
`bool`, default `true`. Auto-load theme-specific app configs from the active theme's `apps/` directory. Disable if you want to provide your own.
|
`bool`, default `true`. Auto-load theme-specific app configs (btop, waybar, mako, kitty, alacritty) from the active theme. Disable if you want to provide your own.
|
||||||
|
|
||||||
### `nomarchy.themeLoader.apps.btop`
|
### `nomarchy.themeLoader.apps.{btop,waybar,mako,kitty,alacritty}`
|
||||||
|
|
||||||
`bool`, default `true`. Deploy the active theme's `apps/btop.theme` to `~/.config/btop/themes/nomarchy.theme`. The only per-app toggle in this group — waybar themes inline from `colorScheme` in `features/desktop/waybar`; kitty and alacritty are themed by stylix targets (`themes/engine/stylix.nix`); mako has no theme integration yet.
|
`bool`, default `true` each. Per-app toggles for the theme loader — pick which apps follow the active theme.
|
||||||
|
|
||||||
### `nomarchy.overrides.enable`
|
### `nomarchy.overrides.enable`
|
||||||
|
|
||||||
`bool`, default `true`. **Reserved — currently a no-op.** Intended to gate a future file-based override loader (drop a file under `~/.config/nomarchy/overrides/`, have it substitute the bundled default for that path). The option exists so configs that set it don't fail to evaluate; setting it has no effect today. Use `nomarchy.configOverrides` for bulk redirection, or set `xdg.configFile.<path>.source` directly in your `home.nix` for per-file overrides — Nomarchy's defaults use `lib.mkDefault` and yield to higher-priority assignments. Tracked in `docs/ROADMAP.md`.
|
`bool`, default `true`. Enable file-based overrides loaded from `~/.config/nomarchy/overrides/`. With this on, Nomarchy looks for matching files in that directory and substitutes them for the bundled defaults.
|
||||||
|
|
||||||
### `nomarchy.overrides.paths`
|
### `nomarchy.overrides.paths`
|
||||||
|
|
||||||
`attrsOf path`, default `{}`. **Reserved — currently unused.** Will be populated by the future override loader.
|
`attrsOf path`, default `{}`. Override paths discovered at build time. Populated by the override system — you don't normally set this directly.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -303,17 +323,15 @@ Without prime config, supergfxd still switches modes but render-offload via `nvi
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Ship your own Hyprland keybindings instead of Nomarchy's defaults
|
### Disable Nomarchy's default Hyprland keybindings to ship your own
|
||||||
|
|
||||||
Nomarchy deploys its `bindings.conf` with `lib.mkDefault`, so a higher-priority assignment from your own `home.nix` wins:
|
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
{
|
{
|
||||||
xdg.configFile."hypr/bindings.conf".source = ./my-bindings.conf;
|
nomarchy.behavior.hyprland.bindings = false;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
The same pattern works for any file Nomarchy deploys via `xdg.configFile.<path>.source = lib.mkDefault …` — point at your own file and skip the default.
|
Then put your own `bindings.conf` at `~/.config/nomarchy/overrides/hypr/bindings.conf` (with `nomarchy.overrides.enable = true;`, which is the default).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -323,6 +341,7 @@ The same pattern works for any file Nomarchy deploys via `xdg.configFile.<path>.
|
|||||||
- `core/system/hardware.nix` — `nomarchy.hardware.*`
|
- `core/system/hardware.nix` — `nomarchy.hardware.*`
|
||||||
- `core/system/impermanence.nix` — `impermanence.enable`
|
- `core/system/impermanence.nix` — `impermanence.enable`
|
||||||
- `core/home/options.nix` — most home-side `nomarchy.*` options
|
- `core/home/options.nix` — most home-side `nomarchy.*` options
|
||||||
- `core/home/overrides.nix` — `nomarchy.overrides.*` (reserved; currently no-op)
|
- `core/home/behavior.nix` — `nomarchy.behavior.*`
|
||||||
|
- `core/home/overrides.nix` — `nomarchy.overrides.*`
|
||||||
- `themes/engine/loader.nix` — `nomarchy.themeLoader.*`
|
- `themes/engine/loader.nix` — `nomarchy.themeLoader.*`
|
||||||
- `features/apps/vscode.nix` — `nomarchy.vscode.*`
|
- `features/apps/vscode.nix` — `nomarchy.vscode.*`
|
||||||
|
|||||||
@@ -19,16 +19,15 @@ Guardrails (apply when adding anything):
|
|||||||
|
|
||||||
### Now (ready to pick up)
|
### Now (ready to pick up)
|
||||||
|
|
||||||
|
- **Full QA audit of shipped features.** Walk every feature/component end-to-end on a real install, fix what's small, log what's not. Runs as per-component PR sweeps — methodology in [Pillar 8](#8-pillar-qa-audit--features--components).
|
||||||
- **Installer: "What's installed?" summary on first boot.** Surface what the installer actually wrote (theme, font, profiles, drives, form factor) from `state.json` + `nomarchy-system-scripts` introspection so the user can verify before they start customising. Detail in [Pillar 4](#4-pillar-installer).
|
- **Installer: "What's installed?" summary on first boot.** Surface what the installer actually wrote (theme, font, profiles, drives, form factor) from `state.json` + `nomarchy-system-scripts` introspection so the user can verify before they start customising. Detail in [Pillar 4](#4-pillar-installer).
|
||||||
- **Installer: optional non-LUKS branch.** Let users explicitly opt out of FDE during install. Detail in [Pillar 4](#4-pillar-installer).
|
- **Installer: optional non-LUKS branch.** Let users explicitly opt out of FDE during install. Detail in [Pillar 4](#4-pillar-installer).
|
||||||
- **Pillar 8 runtime verification pass.** Every Component 1–10 code sweep has shipped, but each closeout entry flagged behaviour that can only be confirmed on a real install: boot the live ISO and eyeball waybar across panel positions × form factors × all 22 palettes; run every `nomarchy-menu` entry and confirm it does the thing; walk every `nomarchy.*` option's enable→rebuild→observe loop. Run the punch-list, fix any new bugs inline, log structural ones as new roadmap rows.
|
|
||||||
|
|
||||||
### Next (bigger lifts that build on Now)
|
### Next (bigger lifts that build on Now)
|
||||||
|
|
||||||
- **Accessibility — home-side companion.** Hyprland-side bits the system preset can't reach: slower `input.repeat_rate` / `repeat_delay` defaults, `SUPER+ALT+S` keybinding to launch Orca, and a high-contrast palette under `themes/palettes/`. Gated on a new `nomarchy.accessibility.enable` mirror of the system option.
|
- **Accessibility — home-side companion.** Hyprland-side bits the system preset can't reach: slower `input.repeat_rate` / `repeat_delay` defaults, `SUPER+ALT+S` keybinding to launch Orca, and a high-contrast palette under `themes/palettes/`. Gated on a new `nomarchy.accessibility.enable` mirror of the system option.
|
||||||
- **Gaming — declarative flathub remote.** `services.flatpak.enable` doesn't ship a declarative remote API in nixpkgs. Either add the `flatpak-managed-install` overlay, write a one-shot systemd unit that runs `flatpak remote-add --if-not-exists flathub …`, or surface the manual step in `nomarchy-welcome`.
|
- **Gaming — declarative flathub remote.** `services.flatpak.enable` doesn't ship a declarative remote API in nixpkgs. Either add the `flatpak-managed-install` overlay, write a one-shot systemd unit that runs `flatpak remote-add --if-not-exists flathub …`, or surface the manual step in `nomarchy-welcome`.
|
||||||
- **Plymouth theme variants per palette.** Currently one Plymouth theme; could template per-palette so the boot splash matches the active theme.
|
- **Plymouth theme variants per palette.** Currently one Plymouth theme; could template per-palette so the boot splash matches the active theme.
|
||||||
- **Implement `nomarchy.overrides.*` file-based override loader.** The option surface is declared in `core/home/overrides.nix` but the loader doesn't exist — files dropped under `~/.config/nomarchy/overrides/` are ignored. Spec: when `overrides.enable = true`, for each `xdg.configFile.<path>` Nomarchy deploys with `lib.mkDefault`, check whether `~/.config/nomarchy/overrides/<path>` exists at build time; if so, use it as the source. Requires deciding whether discovery happens at activation time (cheap, but rebuild-required to pick up new files) or via a populated `paths` attrset (Nix-side, evaluated once per rebuild). Until shipped, document the per-file workaround (`xdg.configFile.<path>.source = ./mine`) in OPTIONS.md.
|
|
||||||
|
|
||||||
### Later (speculative or research-shaped)
|
### Later (speculative or research-shaped)
|
||||||
|
|
||||||
@@ -40,15 +39,7 @@ Guardrails (apply when adding anything):
|
|||||||
- **Forgejo release pipeline.** `vYY.MM.x` tags matching the upstream NixOS channel; the pipeline pushes the three ISOs and an updated `flake.lock` snapshot.
|
- **Forgejo release pipeline.** `vYY.MM.x` tags matching the upstream NixOS channel; the pipeline pushes the three ISOs and an updated `flake.lock` snapshot.
|
||||||
- **Optional `nomarchy-installer-vm`** rebuilt as a real flake app (not a one-off shell script) so users can install Nomarchy into a libvirt VM declaratively.
|
- **Optional `nomarchy-installer-vm`** rebuilt as a real flake app (not a one-off shell script) so users can install Nomarchy into a libvirt VM declaratively.
|
||||||
- **Surface support module** via the relevant `nixos-hardware` profile + Surface kernel patches behind a `nomarchy.hardware.isSurface` toggle.
|
- **Surface support module** via the relevant `nixos-hardware` profile + Surface kernel patches behind a `nomarchy.hardware.isSurface` toggle.
|
||||||
- **Consolidate palette imports in `flake.nix` via `nomarchyLib`.** `flake.nix:79-80` re-imports `./themes/palettes` and recomputes `themeNames` even though `lib/default.nix` already exports both. Two computations, same result today — drift risk tomorrow. Import `nomarchyLib = import ./lib { inherit lib; }` once and use `nomarchyLib.{palettes,themeNames}` to make `lib/default.nix` the single source of truth for the theme list.
|
|
||||||
- **Decide what to do about `features/apps/chromium/Default/Preferences`.** The module deploys a static 204-byte `Default/Preferences` (setting `extensions.theme.use_system = false`, `browser.theme.color_scheme = 2`) into chromium's mutable profile directory via Home Manager symlink. Chromium expects to write that file at runtime, so either the symlink is silently replaced on first save (losing the static defaults) or the write fails silently. The real chromium theming work happens via managed policies in `core/system/browser.nix`. Probably the user-profile deployment should be removed; needs someone with chromium-internals knowledge to confirm before deletion.
|
|
||||||
- **`nomarchy-menu` "Setup → Config" pattern edits Nix-managed files.** Five of the nine entries in `show_setup_config_menu` open files that Home Manager generates from declarative options (`hypridle.conf` from `services.hypridle.settings`, `hyprsunset.conf` from `services.hyprsunset`, `walker/config.toml` from `programs.walker.config`, `waybar/config.jsonc` from `programs.waybar.settings`, `hyprland.conf` from `wayland.windowManager.hyprland.settings`). The menu pattern is "edit then restart", but a `home-manager switch` clobbers the edit and the file goes back to the Nix-generated content. Two more entries (`hyprlock.conf`, `swayosd/config.toml`) point at paths the modules don't deploy at all — `open_in_editor` creates an empty file. Either remove these entries (the user should edit the Nix module), or rewire each to open the matching Nomarchy option doc / module file path, or document the ephemerality in `notify-send` when entering edit mode. Picked up during Pillar 8 / Component 8.
|
|
||||||
- **`themes/templates/*.tpl` — prune the truly dead, document the rest.** Eleven mustache-style templates deployed to `~/.local/share/nomarchy/templates/` via `themes/engine/files.nix`. Originally flagged as "no script consumes them" — that was wrong: `themes/engine/scripts/nomarchy-theme-set-templates` (called at the end of `nomarchy-theme-set`) reads them, substitutes palette colors, and writes the output to `~/.config/nomarchy/current/theme/<file>` only when no file is already there. Now categorise: **(a) functionally dead** — `alacritty.toml.tpl`, `btop.theme.tpl`, `chromium.theme.tpl`, `swayosd.css.tpl` all produce files at paths nothing reads (alacritty + swayosd are Stylix/Nix-themed; btop reads from `~/.config/btop/themes/nomarchy.theme` not from the theme symlink; chromium.theme references were deleted in `9b06b6c`). **(b) superseded** — `kitty.conf.tpl` and `ghostty.conf.tpl` are now generated by `themes/engine/files.nix` (commit `8d3ce2d`); the template path skips harmlessly via the "if not exists" check. **(c) still relevant** — `hyprland.conf.tpl`, `hyprlock.conf.tpl`, `obsidian.css.tpl`, `keyboard.rgb.tpl`, `hyprland-preview-share-picker.css.tpl` (this last one was orphaned when the share-picker dir was deleted in `20de3d4` — verify before keeping). Delete (a) + (b) + the orphan share-picker tpl; document the rest in `docs/creating-themes.md` as the layered override surface they actually are.
|
|
||||||
- **Move `programs.uwsm` Hyprland session out of `core/system/virtualization.nix`.** Session-manager config is wired in the virtualization module by historical accident — it's loaded unconditionally on every install and has nothing to do with libvirt/docker. Move to a dedicated `core/system/session.nix` (or fold into the Hyprland feature module) so the location matches the responsibility.
|
- **Move `programs.uwsm` Hyprland session out of `core/system/virtualization.nix`.** Session-manager config is wired in the virtualization module by historical accident — it's loaded unconditionally on every install and has nothing to do with libvirt/docker. Move to a dedicated `core/system/session.nix` (or fold into the Hyprland feature module) so the location matches the responsibility.
|
||||||
- **Route installer keymap into Hyprland's Wayland session.** `core/home/config/nomarchy/default/hypr/input.conf:3` hardcodes `kb_layout = us`. The installer writes `services.xserver.xkb.layout = "$KEYMAP_LAYOUT"` (and `console.keyMap`), but Hyprland reads its own input config on native Wayland, so a non-US user's chosen layout works in XWayland apps and the TTY console but not in native Wayland apps — surprising and inconsistent. Fix paths: (a) template `input.conf` from a new `nomarchy.keymap.{layout,variant}` home option that the installer writes alongside `formFactor`, or (b) propagate `XKB_DEFAULT_LAYOUT` via session env so Hyprland's fallback kicks in. Option (a) is the durable fix; needs the installer's heredoc to add the option write.
|
|
||||||
- **Make `nomarchy.toggles.waybar` a Nix-level gate, or document it as runtime-only.** Today the toggle is exported as `NOMARCHY_TOGGLE_WAYBAR` env, consumed only by `nomarchy-toggle-waybar` (which pkill/exec's at runtime). The Nix module always sets `programs.waybar.enable = lib.mkDefault true`, so waybar comes back on every rebuild/reboot regardless of the toggle. Inconsistent with `toggles.idle`, which correctly gates `services.hypridle.enable`. Either gate `programs.waybar.enable` on the toggle (persistent) or rename the option to make its session-only nature obvious.
|
|
||||||
- **Package missing VSCode theme extensions via `extensionFromVscodeMarketplace`.** 15 of the 21 palettes that ship a `themes/palettes/<theme>/apps/vscode.json` declare a theme extension that isn't in `pkgs.vscode-extensions` — including `sainnhe.everforest` which is the default `summer-night` palette's theme. With the `577b3ae` fix in place, the 6 nixpkgs-packaged extensions install by default (catppuccin, catppuccin-latte, nord, tokyo-night, rose-pine, gruvbox), but the other 15 (`sainnhe.everforest`, `qufiwefefwoyn.kanagawa`, `monokai.theme-monokai-pro-vscode`, `oldjobobo.{lumon,miasma,retro-82}-theme`, `Bjarne.{ethereal,hackerman,vantablack,white}-nomarchy`, `shadesOfBuntu.flexoki-light`, `jovejonovski.ocean-green`, `TahaYVR.matteblack`) still leave `workbench.colorTheme` referencing an unloaded theme, so VSCode silently falls back. Fix: extend `features/apps/vscode.nix` to look up the active palette's extension via `pkgs.vscode-utils.extensionFromVscodeMarketplace { publisher; name; version; sha256; }` — each entry pinned by hash. Could be table-driven in `lib/` so a new palette only needs to add a row.
|
|
||||||
- **Reconcile nightlight: systemd-managed hyprsunset vs `pkill`/`hyprctl exec` toggle.** `features/desktop/nightlight.nix` always sets `services.hyprsunset.enable = lib.mkDefault true` and bakes the temperature (`toggles.nightlight ? nightlightTemperature : 6500`) into `extraArgs` at Nix-eval time. The toggle script `themes/engine/scripts/nomarchy-toggle-nightlight` bypasses systemd entirely: `pkill hyprsunset` on disable, `hyprctl dispatch exec hyprsunset --temperature 4000` on enable — racing the systemd-managed instance and ignoring the user's chosen `nightlightTemperature`. The comment "Always enabled, we control via IPC and state" doesn't match the implementation (there's no IPC; the temperature is rebuild-time, not runtime). Pick one: (a) toggle stays as `hyprctl dispatch hyprsunset temperature ${T}` (proper IPC, no daemon restart), with Nix dropping `extraArgs` to just `--temperature 6500` on boot; or (b) gate `services.hyprsunset.enable` on the toggle and run `systemctl --user restart hyprsunset` from the script. Both also need the script to read `nightlightTemperature` instead of hardcoding 4000.
|
|
||||||
|
|
||||||
## 3. Pillar: Script & menu audit
|
## 3. Pillar: Script & menu audit
|
||||||
|
|
||||||
@@ -160,11 +151,6 @@ Pillar is **done** when every component has a closed `wave/qa-<component>` PR an
|
|||||||
|
|
||||||
(Move items here when they land — keep them brief, link the commit/PR.)
|
(Move items here when they land — keep them brief, link the commit/PR.)
|
||||||
|
|
||||||
- _2026-05-21_ — **Pillar 8 / Component 9 (ISOs): closeout — Pillar 8 code-audit phase complete.** Code-review-shaped sweep over `hosts/{nomarchy-installer,nomarchy-live}.nix`, the `installation-cd-minimal`/`installation-cd-graphical-base` module chain, and the four ISO build/test scripts. Two minor fixes inline: `nomarchy-build-iso` and `nomarchy-build-live-iso` both ran under `set -e` but then wrapped `nix build` in an `if [ $? -eq 0 ]` block — the `else` branch printing "Error: ISO build failed." was unreachable because `set -e` aborts before the conditional. Removed the dead branches (behaviour identical: the user sees `nix build`'s own error and the script exits). Regression-class check (`hardware-db.sh` precedent): cross-referenced every tool `install.sh` calls against the installer host's `environment.systemPackages` chain — `gptfdisk` (sgdisk) is provided by upstream `profiles/base.nix:21` which `installation-cd-base.nix` chains, `jq` is wrapped in the `nrun` nix-run fallback, and every other direct call (`wipefs`, `dd`, `parted`, `partprobe`, `cryptsetup`, `disko`, `nixos-{install,enter,rebuild}`, `loadkeys`, `timedatectl`, `nmtui`) resolves via either the explicit host packages or the standard base. `nomarchy-live` host shape verified: multi-GPU initrd modules + Xwayland video drivers cover both real hardware and QEMU; auto-login + passwordless sudo + helpful TTY MOTD + Hyprland on-boot exec to a terminal at the install command. `nomarchy-test-live-iso` walks four OVMF candidate paths with KVM detection. With this entry, every code-shaped audit in Pillar 8 has shipped (Components 1–10); the Now-column "Full QA audit" item moves out, replaced by a runtime-verification punch-list entry covering the cross-component "needs runtime verification" notes from each closeout.
|
|
||||||
- _2026-05-21_ — **Pillar 8 / Component 8 (Scripts runtime behavior): closeout.** Code-review-shaped sweep over `features/scripts/utils/nomarchy-menu` (382 lines, 23 submenu functions), every script referenced from those submenus, the schema↔script field-name cross-check, and cross-cutting typo/stale-reference patterns. Four real fixes inline: **(1)** `nomarchy-menu:70` — "Learn → Nomarchy" still called `nomarchy-launch-webapp https://learn.omacom.io/2/the-nomarchy-manual` (an upstream Omarchy URL — the same one fixed in `nomarchy-manual` back on 2026-05-18). Now calls `nomarchy-manual`, which opens the local docs index. **(2)** `nomarchy-menu:179` — "Style → Hyprland" opened `~/.config/hypr/looknfeel.conf`, a path nothing deploys; the actual file lives at `~/.config/nomarchy/default/hypr/looknfeel.conf` (sourced via the chain from `nomarchy.conf`). Updated the path. **(3)** `nomarchy-menu:258` — `*Overrides*) xdg-open ~/.config/nomarchy/overrides/` case branch with no matching menu option, dead code anticipating the still-unimplemented `nomarchy.overrides.*` loader. Removed (will reappear with the option when the loader ships). **(4)** `nomarchy-theme-bg-next:12` — `jq -r '.theme // "nord"'` defaulted to `"nord"` if `.theme` was missing, while `lib/state-schema.nix:17` defines `"summer-night"` as the schema default. On a fresh-or-empty `state.json` the script looked for backgrounds under `palettes/nord/` while the rest of the system treated `summer-night` as active. Matched to the schema default. Cross-cutting sweeps came back clean: no `$NN[A-Z]+` env var typos elsewhere (the prior pair fixed in `40b6212` was the lot), no references to scripts deleted in earlier Pillar 3 batches (`nomarchy-restart-{hyprctl,mako,tmux}`, `nomarchy-battery-present`, `nomarchy-sudo-keepalive`, `nomarchy-rollback`, `nomarchy-snapshot`, `nomarchy-migrate-state`, `nomarchy-config-direct-boot`, `nomarchy-npx-install`, `nomarchy-webapp-handler-{hey,zoom}`), no stray `omarchy`/`omacom` strings outside historical roadmap entries, and every `state.json` field-write resolves against `lib/state-schema.nix` (or the documented off-schema `welcome_done`). One UX-shaped pattern bug logged separately to Later: `show_setup_config_menu` edits Nix-managed files that get clobbered on the next `home-manager switch`. Runtime verification (run every user-visible menu entry and confirm it does the thing) remains on the user.
|
|
||||||
- _2026-05-21_ — **Pillar 8 / Component 7 (Theme engine + palettes): closeout.** Code-review-shaped sweep across `themes/engine/{stylix,stylix-compat,loader,files,scripts}.nix`, the 23 theme-engine scripts, and the 21 palettes' file completeness. Three real fixes inline + targeted dead-surface cleanup: **(1)** `nomarchy-theme-set` printed a warning when the named theme directory didn't exist but continued executing — wrote the bad name into `state.json` and ran `nomarchy-env-update` on a broken state. Now `exit 1` after the warning. **(2)** `nomarchy-theme-bg-set` (called by the walker background-selector menu and by the `nomarchy-wallpaper` CLI) updated the live `~/.config/nomarchy/current/background` symlink + restarted swaybg but never wrote `state.json` — so every wallpaper picked via either path silently reverted to the theme default on the next `home-manager switch` (`themes/engine/files.nix` re-resolves `nomarchy.wallpaper` at every rebuild). Now writes the chosen path into `state.json.wallpaper`, mirroring `nomarchy-theme-bg-next`. Added a file-exists check so a bogus path fails loudly instead of leaving a dangling symlink + a crashed swaybg. **(3)** Palette tree dead-surface cleanup: deleted `themes/palettes/{flexoki-light,lumon,retro-82,rose-pine}/apps/chromium.theme` (9-byte RGB strings nothing reads — chromium is themed via managed policies in `core/system/browser.nix`, not per-palette files) and `themes/palettes/summer-day/apps/kitty/{kitty.conf,everforest-light.conf}` (a 76KB stray kitty config at the wrong nested path, superseded by the `kitty.conf` generator added in `8d3ce2d`). Total: 6 files / 2210 lines. Updated the misleading comment in `nomarchy-themes-prebuild` ("the installer wires this up") to reflect reality (the installer only tips the user to run it). Updated the `themes/templates/*.tpl` Later row with a fact-check + concrete categorisation — the templates ARE consumed by `nomarchy-theme-set-templates`, but most write to paths nothing reads or are now superseded by Nix-side generators. Palette completeness matrix: all 21 palettes have `colors.toml`, `backgrounds/`, `icons.theme`, and `apps/`; 5 carry the `light.mode` marker (catppuccin-latte, flexoki-light, rose-pine, summer-day, white); only tokyo-night ships `keyboard.rgb` for the ASUS ROG path, and the keyboard-set chain isn't wired into `nomarchy-theme-set` so it stays manual — niche enough to leave. Runtime verification (switch through all 22 palettes and eyeball SDDM + Plymouth + GTK + Qt + terminals + browsers + waybar + walker rendering) remains on the user.
|
|
||||||
- _2026-05-21_ — **Pillar 8 / Component 6 (Apps): closeout.** Code-review-shaped sweep over `features/apps/{alacritty,btop,chromium,elephant,ghostty,kitty,lazygit,opencode,swayosd,tmux,vscode,walker}`. Three real theming bugs fixed inline: **(1)** `features/apps/kitty/config/kitty.conf:1` and `features/apps/ghostty/config/config:2` referenced palette-specific include files (`~/.config/nomarchy/current/theme/{kitty,ghostty}.conf`) that didn't exist for any of the 22 palettes — kitty include failed silently, ghostty's was optional (`?`-prefix), and both terminals rendered with their built-in defaults regardless of the active Nomarchy palette. Stylix's `kitty.enable = true` was a no-op because the module uses `xdg.configFile` instead of `programs.kitty`; ghostty has no Stylix target. Added theme-engine generators in `themes/engine/files.nix` mirroring the existing `waybar.css` pattern, mapping `palette.base*` to kitty/ghostty color directives. **(2)** `features/apps/btop/config/btop.conf:5` set `color_theme = "current"` but `themes/engine/loader.nix:72` deploys the active palette's btop theme to `~/.config/btop/themes/nomarchy.theme` — name mismatch, btop fell back to its built-in Default theme on every palette. Renamed to `"nomarchy"`. **(3)** `programs.vscode.profiles.default.userSettings.workbench.colorTheme` was set unconditionally from `themes/palettes/<theme>/apps/vscode.json`, but the matching theme extensions were bundled with `devExtensions` (default `false`) — so VSCode silently fell back to its built-in theme out of the box on every palette. Split `themeExtensions` (always-on, covers the 6 palettes whose theme extension is in nixpkgs) from `devExtensions` (opt-in). The remaining 15 palettes — including the default `summer-night` (`sainnhe.everforest`) — still break because their theme extensions aren't packaged in nixpkgs; logged as a new Later row. Chromium static `Default/Preferences` symlink already had an open Later row; verified the file's contents are duplicate of the managed-policy intent in `core/system/browser.nix`, so the existing entry's hypothesis is correct — left for the user to greenlight deletion. alacritty (Stylix-themed via `programs.alacritty.settings`), elephant (no UI), swayosd (base16 inline), walker (covered in Component 5), lazygit + tmux (terminal ANSI inheritance, transitively fixed by the kitty/ghostty changes), and opencode (minimal opt-in config) are healthy. Runtime verification (launch each app on each palette and eyeball the theming) remains the user's responsibility.
|
|
||||||
- _2026-05-21_ — **Pillar 8 / Component 5 (Desktop stack): closeout.** Code-review-shaped sweep over Hyprland, waybar, walker, hypridle, hyprsunset, mako, KEYBINDINGS.md (the runtime-rendering subset — waybar across panel positions × form factors × all 22 palettes, walker launcher modes, hypridle timeout feel — stays on the user). Five real bugs fixed inline: **(1)** 9 of 17 `~/.config/nomarchy/default/hypr/apps/*.conf` window-rule files were deployed but never sourced, including `system.conf` (the `tag +floating-window` rules every TUI helper class relies on + `class:org.nomarchy.screensaver` fullscreen rule that hypridle's 150s on-timeout depends on) and `pip.conf` (the PiP pin/size rules). `apps.conf` now sources all 17. **(2)** Two `$NNOMARCHY_TOGGLE_*` typos (double-N) in `nomarchy-menu:330` and `nomarchy-launch-screensaver:16` made `toggles.suspend` and `toggles.screensaver` vacuous — Suspend always showed in the system menu and the screensaver always launched at idle regardless of the documented option. **(3)** 4 broken per-palette waybar `style.css` overrides (`catppuccin`, `lumon`, `nord`, `retro-82`) fully replaced the default style with 2–14 lines of only `@define-color` declarations — picking those palettes produced a waybar with zero structural styling. Default style already imports per-palette colors via `themes/engine/files.nix`-generated `theme/waybar.css`, so deletion restores correct rendering; `summer-day`/`summer-night` kept as legitimate 100+-line redesigns. **(4)** `core/home/config/nomarchy/default/hypr/{bindings,plain-bindings}.conf` were explicitly-labeled deprecated files sourced by nothing (plain-bindings.conf referenced undefined `$terminal`/`$browser`/etc. Hyprland vars) — deleted; `docs/SCRIPTS.md` regenerated to drop stale callers and incidentally corrected 4 Origin columns whose scripts moved from `core/system/scripts/` to `features/scripts/utils/`. **(5)** Mako post-fix (commit `2a301a0`) verified: deployment + the 4 referenced scripts (`nomarchy-notification-dismiss`, `nomarchy-launch-wifi`, `nomarchy-launch-floating-terminal-with-presentation`, `nomarchy-menu-keybindings`) all resolve. Two structural inconsistencies logged to Later: keymap routing (already in 72f7e7b) and the new hyprsunset toggle-vs-systemd reconcile. `KEYBINDINGS.md` regenerated with zero diff — generator already covers both binding source locations. Runtime verification (boot live ISO, eyeball waybar/walker/screensaver flows across panel positions and palettes) remains the user's responsibility before declaring Component 5 fully closed.
|
|
||||||
- _2026-05-18_ — Hardware DB correctness pass + ROG Ally support + CI lint. Audited every `nomarchy-hardware-db` entry against `inputs.nixos-hardware.nixosModules` and found **21 of 43 entries (49%) referenced modules that don't exist** — `microsoft-surface-pro-8`, `lenovo-thinkpad-x1-carbon-gen11`, `framework-13-11th-gen-intel`, etc. were all eval-time failures waiting for a real user. Rewrote the DB to use only valid module names: Framework gens dropped the "13-" prefix in nixos-hardware (`framework-11th-gen-intel`, not `framework-13-11th-gen-intel`); ThinkPad X1 modules are `x1-Nth-gen`, not `x1-carbon-genN`; Surface Pro 6/7/8/10 all share `microsoft-surface-pro-intel`; Surface Book / Intel Surface Laptop have no module (rows dropped, generic detection still emits sensible `common-pc-laptop` + cpu/gpu). Added matchers for **ROG Ally** (RC71L / RC72LA / "ROG Ally" via `asus-ally-rc71l`). Documented Steam Deck and Snapdragon X as nixos-hardware-unsupported in a footer comment (Steam Deck → Jovian-NixOS; Snapdragon X → installer is x86_64 only). Added a CI step (`.forgejo/workflows/check.yml`) that fails on any DB entry whose module name isn't in `nixos-hardware.nixosModules` — closes this regression class.
|
- _2026-05-18_ — Hardware DB correctness pass + ROG Ally support + CI lint. Audited every `nomarchy-hardware-db` entry against `inputs.nixos-hardware.nixosModules` and found **21 of 43 entries (49%) referenced modules that don't exist** — `microsoft-surface-pro-8`, `lenovo-thinkpad-x1-carbon-gen11`, `framework-13-11th-gen-intel`, etc. were all eval-time failures waiting for a real user. Rewrote the DB to use only valid module names: Framework gens dropped the "13-" prefix in nixos-hardware (`framework-11th-gen-intel`, not `framework-13-11th-gen-intel`); ThinkPad X1 modules are `x1-Nth-gen`, not `x1-carbon-genN`; Surface Pro 6/7/8/10 all share `microsoft-surface-pro-intel`; Surface Book / Intel Surface Laptop have no module (rows dropped, generic detection still emits sensible `common-pc-laptop` + cpu/gpu). Added matchers for **ROG Ally** (RC71L / RC72LA / "ROG Ally" via `asus-ally-rc71l`). Documented Steam Deck and Snapdragon X as nixos-hardware-unsupported in a footer comment (Steam Deck → Jovian-NixOS; Snapdragon X → installer is x86_64 only). Added a CI step (`.forgejo/workflows/check.yml`) that fails on any DB entry whose module name isn't in `nixos-hardware.nixosModules` — closes this regression class.
|
||||||
- _2026-05-18_ — `nomarchy-manual` re-targeted at local docs. The script's `xdg-open` previously pointed at `https://learn.omacom.io/2/the-nomarchy-manual` — an upstream Omarchy URL that opened an unrelated page when users hit the menu's Help entry. Now opens `~/.local/share/nomarchy/README.md` (the local docs index per `SKILL.md`'s "Out of Scope" note), with a `notify-send` fallback if the source tree isn't synced.
|
- _2026-05-18_ — `nomarchy-manual` re-targeted at local docs. The script's `xdg-open` previously pointed at `https://learn.omacom.io/2/the-nomarchy-manual` — an upstream Omarchy URL that opened an unrelated page when users hit the menu's Help entry. Now opens `~/.local/share/nomarchy/README.md` (the local docs index per `SKILL.md`'s "Out of Scope" note), with a `notify-send` fallback if the source tree isn't synced.
|
||||||
- _2026-05-18_ — Docs hygiene: STRUCTURE.md "Root Directory" + Pillar 6 reality-check. `docs/STRUCTURE.md` listed three top-level files that don't exist (`GEMINI.md`, root-level `STRUCTURE.md`, `TODO.md`) — replaced with an accurate root listing plus a `docs/` sub-tree that names every doc. Pillar 6 in this file had `nomarchy-welcome`, `docs/TROUBLESHOOTING.md`, and the "docs index" bullet still marked Next despite all three shipping on 2026-04-26 — moved to `(Shipped)`. `nomarchy-manual` bullet's "orphaned reference today" claim was stale (the script is called from `nomarchy-menu` and `nomarchy-theme-install`); rewritten to reflect the real remaining issue — its hardcoded `xdg-open https://learn.omacom.io/2/the-nomarchy-manual` is an Omarchy URL.
|
- _2026-05-18_ — Docs hygiene: STRUCTURE.md "Root Directory" + Pillar 6 reality-check. `docs/STRUCTURE.md` listed three top-level files that don't exist (`GEMINI.md`, root-level `STRUCTURE.md`, `TODO.md`) — replaced with an accurate root listing plus a `docs/` sub-tree that names every doc. Pillar 6 in this file had `nomarchy-welcome`, `docs/TROUBLESHOOTING.md`, and the "docs index" bullet still marked Next despite all three shipping on 2026-04-26 — moved to `(Shipped)`. `nomarchy-manual` bullet's "orphaned reference today" claim was stale (the script is called from `nomarchy-menu` and `nomarchy-theme-install`); rewritten to reflect the real remaining issue — its hardcoded `xdg-open https://learn.omacom.io/2/the-nomarchy-manual` is an Omarchy URL.
|
||||||
|
|||||||
@@ -45,14 +45,14 @@ Phase B (per-batch PRs) refines those into `port-from-omarchy`,
|
|||||||
| `nomarchy-cmd-screensaver` | `features/scripts/utils` | features/scripts/utils/nomarchy-launch-screensaver | `kept` | |
|
| `nomarchy-cmd-screensaver` | `features/scripts/utils` | features/scripts/utils/nomarchy-launch-screensaver | `kept` | |
|
||||||
| `nomarchy-cmd-screenshot` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf,core/home/config/nomarchy-skill/SKILL.md, +1 more | `kept` | |
|
| `nomarchy-cmd-screenshot` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf,core/home/config/nomarchy-skill/SKILL.md, +1 more | `kept` | |
|
||||||
| `nomarchy-cmd-share` | `features/scripts/utils` | features/scripts/utils/nomarchy-menu | `kept` | |
|
| `nomarchy-cmd-share` | `features/scripts/utils` | features/scripts/utils/nomarchy-menu | `kept` | |
|
||||||
| `nomarchy-cmd-terminal-cwd` | `features/scripts/utils` | features/desktop/hyprland/config/bindings.conf | `kept` | |
|
| `nomarchy-cmd-terminal-cwd` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/plain-bindings.conf,features/desktop/hyprland/config/bindings.conf | `kept` | |
|
||||||
| `nomarchy-debug` | `features/scripts/utils` | core/home/config/nomarchy-skill/SKILL.md | `kept` | |
|
| `nomarchy-debug` | `features/scripts/utils` | core/home/config/nomarchy-skill/SKILL.md | `kept` | |
|
||||||
| `nomarchy-docs-keybindings` | `features/scripts/utils` | bin/utils/nomarchy-docs-keybindings | `kept` | |
|
| `nomarchy-docs-keybindings` | `features/scripts/utils` | bin/utils/nomarchy-docs-keybindings | `kept` | |
|
||||||
| `nomarchy-docs-scripts` | `features/scripts/utils` | bin/utils/nomarchy-docs-scripts | `kept` | |
|
| `nomarchy-docs-scripts` | `features/scripts/utils` | bin/utils/nomarchy-docs-scripts | `kept` | |
|
||||||
| `nomarchy-drive-info` | `features/scripts/utils` | features/scripts/utils/nomarchy-drive-select | `kept` | |
|
| `nomarchy-drive-info` | `features/scripts/utils` | features/scripts/utils/nomarchy-drive-select | `kept` | |
|
||||||
| `nomarchy-drive-select` | `features/scripts/utils` | features/scripts/utils/nomarchy-drive-info,features/scripts/utils/nomarchy-drive-set-password | `kept` | |
|
| `nomarchy-drive-select` | `features/scripts/utils` | features/scripts/utils/nomarchy-drive-info,features/scripts/utils/nomarchy-drive-set-password | `kept` | |
|
||||||
| `nomarchy-drive-set-password` | `features/scripts/utils` | features/scripts/utils/nomarchy-drive-select,features/scripts/utils/nomarchy-menu | `kept` | |
|
| `nomarchy-drive-set-password` | `features/scripts/utils` | features/scripts/utils/nomarchy-drive-select,features/scripts/utils/nomarchy-menu | `kept` | |
|
||||||
| `nomarchy-env-update` | `features/scripts/utils` | core/home/bash.nix,core/system/scripts.nix, +7 more | `kept` | |
|
| `nomarchy-env-update` | `core/system/scripts` | core/home/bash.nix,core/system/scripts.nix, +7 more | `kept` | |
|
||||||
| `nomarchy-font` | `features/scripts/utils` | bin/utils/nomarchy-docs-scripts,core/home/config/nomarchy-skill/SKILL.md, +6 more | `kept` | |
|
| `nomarchy-font` | `features/scripts/utils` | bin/utils/nomarchy-docs-scripts,core/home/config/nomarchy-skill/SKILL.md, +6 more | `kept` | |
|
||||||
| `nomarchy-font-current` | `themes/engine/scripts` | core/home/config/nomarchy-skill/SKILL.md,features/scripts/utils/nomarchy-menu | `kept` | |
|
| `nomarchy-font-current` | `themes/engine/scripts` | core/home/config/nomarchy-skill/SKILL.md,features/scripts/utils/nomarchy-menu | `kept` | |
|
||||||
| `nomarchy-font-list` | `themes/engine/scripts` | core/home/config/nomarchy-skill/SKILL.md,features/scripts/utils/nomarchy-font, +2 more | `kept` | |
|
| `nomarchy-font-list` | `themes/engine/scripts` | core/home/config/nomarchy-skill/SKILL.md,features/scripts/utils/nomarchy-font, +2 more | `kept` | |
|
||||||
@@ -77,8 +77,8 @@ Phase B (per-batch PRs) refines those into `port-from-omarchy`,
|
|||||||
| `nomarchy-launch-about` | `features/scripts/utils` | features/scripts/utils/nomarchy-menu | `kept` | |
|
| `nomarchy-launch-about` | `features/scripts/utils` | features/scripts/utils/nomarchy-menu | `kept` | |
|
||||||
| `nomarchy-launch-audio` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf,features/desktop/waybar/config/config.jsonc, +2 more | `kept` | |
|
| `nomarchy-launch-audio` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf,features/desktop/waybar/config/config.jsonc, +2 more | `kept` | |
|
||||||
| `nomarchy-launch-bluetooth` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf,features/desktop/waybar/config/config.jsonc, +1 more | `kept` | |
|
| `nomarchy-launch-bluetooth` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf,features/desktop/waybar/config/config.jsonc, +1 more | `kept` | |
|
||||||
| `nomarchy-launch-browser` | `features/scripts/utils` | core/home/config/nomarchy-skill/SKILL.md,features/desktop/hyprland/config/bindings.conf | `kept` | |
|
| `nomarchy-launch-browser` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/plain-bindings.conf,core/home/config/nomarchy-skill/SKILL.md, +1 more | `kept` | |
|
||||||
| `nomarchy-launch-editor` | `features/scripts/utils` | features/desktop/hyprland/config/bindings.conf,features/scripts/utils/nomarchy-menu, +1 more | `kept` | |
|
| `nomarchy-launch-editor` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/plain-bindings.conf,features/desktop/hyprland/config/bindings.conf, +2 more | `kept` | |
|
||||||
| `nomarchy-launch-floating-terminal-with-presentation` | `features/scripts/utils` | core/home/config/nomarchy/default/mako/core.ini,features/desktop/waybar/config/config.jsonc, +3 more | `kept` | |
|
| `nomarchy-launch-floating-terminal-with-presentation` | `features/scripts/utils` | core/home/config/nomarchy/default/mako/core.ini,features/desktop/waybar/config/config.jsonc, +3 more | `kept` | |
|
||||||
| `nomarchy-launch-or-focus` | `features/scripts/utils` | core/home/config/nomarchy/extensions/menu.sh,features/desktop/hyprland/config/bindings.conf, +6 more | `kept` | |
|
| `nomarchy-launch-or-focus` | `features/scripts/utils` | core/home/config/nomarchy/extensions/menu.sh,features/desktop/hyprland/config/bindings.conf, +6 more | `kept` | |
|
||||||
| `nomarchy-launch-or-focus-tui` | `features/scripts/utils` | core/home/config/nomarchy/extensions/menu.sh,features/desktop/waybar/config/config.jsonc, +3 more | `kept` | |
|
| `nomarchy-launch-or-focus-tui` | `features/scripts/utils` | core/home/config/nomarchy/extensions/menu.sh,features/desktop/waybar/config/config.jsonc, +3 more | `kept` | |
|
||||||
@@ -86,21 +86,21 @@ Phase B (per-batch PRs) refines those into `port-from-omarchy`,
|
|||||||
| `nomarchy-launch-screensaver` | `features/scripts/utils` | features/desktop/idle.nix,features/scripts/utils/nomarchy-menu | `kept` | |
|
| `nomarchy-launch-screensaver` | `features/scripts/utils` | features/desktop/idle.nix,features/scripts/utils/nomarchy-menu | `kept` | |
|
||||||
| `nomarchy-launch-tui` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf,features/desktop/hyprland/config/bindings.conf, +2 more | `kept` | |
|
| `nomarchy-launch-tui` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf,features/desktop/hyprland/config/bindings.conf, +2 more | `kept` | |
|
||||||
| `nomarchy-launch-walker` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/bindings/clipboard.conf,core/home/config/nomarchy/default/hypr/bindings/utilities.conf, +4 more | `kept` | |
|
| `nomarchy-launch-walker` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/bindings/clipboard.conf,core/home/config/nomarchy/default/hypr/bindings/utilities.conf, +4 more | `kept` | |
|
||||||
| `nomarchy-launch-webapp` | `features/scripts/utils` | features/desktop/hyprland/config/bindings.conf,features/scripts/utils/nomarchy-launch-or-focus-webapp, +4 more | `kept` | |
|
| `nomarchy-launch-webapp` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/plain-bindings.conf,features/desktop/hyprland/config/bindings.conf, +5 more | `kept` | |
|
||||||
| `nomarchy-launch-wifi` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf,core/home/config/nomarchy/default/mako/core.ini, +4 more | `kept` | |
|
| `nomarchy-launch-wifi` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf,core/home/config/nomarchy/default/mako/core.ini, +4 more | `kept` | |
|
||||||
| `nomarchy-lock-screen` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf,core/home/config/nomarchy/extensions/menu.sh, +3 more | `kept` | |
|
| `nomarchy-lock-screen` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf,core/home/config/nomarchy/extensions/menu.sh, +3 more | `kept` | |
|
||||||
| `nomarchy-manual` | `features/scripts/utils` | core/branding/about.txt,features/scripts/utils/nomarchy-menu, +1 more | `kept` | |
|
| `nomarchy-manual` | `features/scripts/utils` | core/branding/about.txt,features/scripts/utils/nomarchy-menu, +1 more | `kept` | |
|
||||||
| `nomarchy-menu` | `features/scripts/utils` | bin/utils/nomarchy-docs-scripts,core/home/config/nomarchy/default/hypr/bindings/utilities.conf, +9 more | `kept` | |
|
| `nomarchy-menu` | `features/scripts/utils` | bin/utils/nomarchy-docs-scripts,core/home/config/nomarchy/default/hypr/bindings/utilities.conf, +10 more | `kept` | |
|
||||||
| `nomarchy-menu-keybindings` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf,core/home/config/nomarchy/default/mako/core.ini, +2 more | `kept` | |
|
| `nomarchy-menu-keybindings` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/bindings/utilities.conf,core/home/config/nomarchy/default/mako/core.ini, +2 more | `kept` | |
|
||||||
| `nomarchy-notification-dismiss` | `features/scripts/utils` | core/home/config/nomarchy/default/mako/core.ini | `kept` | |
|
| `nomarchy-notification-dismiss` | `features/scripts/utils` | core/home/config/nomarchy/default/mako/core.ini | `kept` | |
|
||||||
| `nomarchy-on-boot` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/autostart.conf | `kept` | |
|
| `nomarchy-on-boot` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/autostart.conf | `kept` | |
|
||||||
| `nomarchy-pkg-add` | `features/scripts/utils` | core/home/config/nomarchy-skill/SKILL.md,features/scripts/utils/nomarchy-pkg-install, +2 more | `kept` | |
|
| `nomarchy-pkg-add` | `core/system/scripts` | core/home/config/nomarchy-skill/SKILL.md,features/scripts/utils/nomarchy-pkg-install, +2 more | `kept` | |
|
||||||
| `nomarchy-pkg-aur-add` | `features/scripts/utils` | core/home/config/nomarchy-skill/SKILL.md | `kept` | |
|
| `nomarchy-pkg-aur-add` | `features/scripts/utils` | core/home/config/nomarchy-skill/SKILL.md | `kept` | |
|
||||||
| `nomarchy-pkg-drop` | `features/scripts/utils` | features/scripts/utils/nomarchy-voxtype-remove | `kept` | |
|
| `nomarchy-pkg-drop` | `features/scripts/utils` | features/scripts/utils/nomarchy-voxtype-remove | `kept` | |
|
||||||
| `nomarchy-pkg-install` | `features/scripts/utils` | core/home/config/nomarchy-skill/SKILL.md | `kept` | |
|
| `nomarchy-pkg-install` | `features/scripts/utils` | core/home/config/nomarchy-skill/SKILL.md | `kept` | |
|
||||||
| `nomarchy-pkg-remove` | `features/scripts/utils` | features/scripts/utils/nomarchy-pkg-drop | `kept` | |
|
| `nomarchy-pkg-remove` | `core/system/scripts` | features/scripts/utils/nomarchy-pkg-drop | `kept` | |
|
||||||
| `nomarchy-powerprofiles-list` | `core/system/scripts` | features/scripts/utils/nomarchy-menu | `kept` | |
|
| `nomarchy-powerprofiles-list` | `core/system/scripts` | features/scripts/utils/nomarchy-menu | `kept` | |
|
||||||
| `nomarchy-preflight-migration` | `features/scripts/utils` | features/scripts/utils/nomarchy-env-update | `kept` | |
|
| `nomarchy-preflight-migration` | `core/system/scripts` | core/system/scripts/nomarchy-env-update | `kept` | |
|
||||||
| `nomarchy-refresh-config` | `features/scripts/utils` | core/home/config/nomarchy-skill/SKILL.md,features/scripts/utils/nomarchy-refresh-fastfetch | `kept` | |
|
| `nomarchy-refresh-config` | `features/scripts/utils` | core/home/config/nomarchy-skill/SKILL.md,features/scripts/utils/nomarchy-refresh-fastfetch | `kept` | |
|
||||||
| `nomarchy-refresh-fastfetch` | `features/scripts/utils` | core/home/config/nomarchy-skill/SKILL.md | `kept` | |
|
| `nomarchy-refresh-fastfetch` | `features/scripts/utils` | core/home/config/nomarchy-skill/SKILL.md | `kept` | |
|
||||||
| `nomarchy-refresh-hyprland` | `features/scripts/utils` | core/home/config/nomarchy-skill/SKILL.md | `kept` | |
|
| `nomarchy-refresh-hyprland` | `features/scripts/utils` | core/home/config/nomarchy-skill/SKILL.md | `kept` | |
|
||||||
@@ -184,7 +184,7 @@ Phase B (per-batch PRs) refines those into `port-from-omarchy`,
|
|||||||
| `nomarchy-webapp-install` | `features/scripts/utils` | core/home/config/nomarchy-skill/SKILL.md,features/scripts/utils/nomarchy-webapp-remove-all | `kept` | |
|
| `nomarchy-webapp-install` | `features/scripts/utils` | core/home/config/nomarchy-skill/SKILL.md,features/scripts/utils/nomarchy-webapp-remove-all | `kept` | |
|
||||||
| `nomarchy-webapp-remove` | `features/scripts/utils` | core/home/config/nomarchy-skill/SKILL.md | `kept` | |
|
| `nomarchy-webapp-remove` | `features/scripts/utils` | core/home/config/nomarchy-skill/SKILL.md | `kept` | |
|
||||||
| `nomarchy-webapp-remove-all` | `features/scripts/utils` | core/home/config/nomarchy-skill/SKILL.md | `kept` | |
|
| `nomarchy-webapp-remove-all` | `features/scripts/utils` | core/home/config/nomarchy-skill/SKILL.md | `kept` | |
|
||||||
| `nomarchy-welcome` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/autostart.conf,lib/state-schema.nix | `kept` | |
|
| `nomarchy-welcome` | `features/scripts/utils` | core/home/config/nomarchy/default/hypr/autostart.conf | `kept` | |
|
||||||
| `nomarchy-wifi-powersave` | `core/system/scripts` | features/scripts/utils/nomarchy-sys-update,installer/install.sh | `kept` | |
|
| `nomarchy-wifi-powersave` | `core/system/scripts` | features/scripts/utils/nomarchy-sys-update,installer/install.sh | `kept` | |
|
||||||
| `nomarchy-windows-vm` | `features/scripts/utils` | core/home/config/nomarchy-skill/SKILL.md | `kept` | |
|
| `nomarchy-windows-vm` | `features/scripts/utils` | core/home/config/nomarchy-skill/SKILL.md | `kept` | |
|
||||||
|
|
||||||
|
|||||||
@@ -70,8 +70,8 @@ The `core/` directory contains the foundational modules required for a functiona
|
|||||||
- **`default.nix`**: The entry point for the base Home Manager module.
|
- **`default.nix`**: The entry point for the base Home Manager module.
|
||||||
- **`options.nix`**: Defines the `nomarchy` user options (Toggles, Theme, Fonts, etc.).
|
- **`options.nix`**: Defines the `nomarchy` user options (Toggles, Theme, Fonts, etc.).
|
||||||
- **`state.nix`**: Loads and applies user-level state (from `~/.config/nomarchy/state.json`).
|
- **`state.nix`**: Loads and applies user-level state (from `~/.config/nomarchy/state.json`).
|
||||||
- **`overrides.nix`**: Declares `nomarchy.overrides.*` (reserved for a future file-based override loader; currently no-op).
|
- **`behavior.nix`**: Deploys non-visual configs (Keybindings, Input settings, Window rules) with `lib.mkDefault`.
|
||||||
- **`configs.nix`**: Manages static configuration files and directories in `~/.config/`. Honors `nomarchy.configOverrides` as a bulk redirect to a replacement config dir.
|
- **`configs.nix`**: Manages static configuration files and directories in `~/.config/`.
|
||||||
- **`bash.nix`**: Shell environment, aliases, and specialized `env-update` hooks.
|
- **`bash.nix`**: Shell environment, aliases, and specialized `env-update` hooks.
|
||||||
- **`security.nix`**: Polkit, keyring management, and GPG settings.
|
- **`security.nix`**: Polkit, keyring management, and GPG settings.
|
||||||
- **`config/`**: Contains the physical source files for the base user configuration (e.g., `starship.toml`, `hypr/` behavior configs).
|
- **`config/`**: Contains the physical source files for the base user configuration (e.g., `starship.toml`, `hypr/` behavior configs).
|
||||||
|
|||||||
25
features/apps/alacritty/config/alacritty.toml
Normal file
25
features/apps/alacritty/config/alacritty.toml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
general.import = [ "~/.config/nomarchy/current/theme/alacritty.toml" ]
|
||||||
|
|
||||||
|
[env]
|
||||||
|
TERM = "xterm-256color"
|
||||||
|
|
||||||
|
[terminal]
|
||||||
|
osc52 = "CopyPaste"
|
||||||
|
|
||||||
|
[font]
|
||||||
|
normal = { family = "JetBrainsMono Nerd Font", style = "Regular" }
|
||||||
|
bold = { family = "JetBrainsMono Nerd Font", style = "Bold" }
|
||||||
|
italic = { family = "JetBrainsMono Nerd Font", style = "Italic" }
|
||||||
|
size = 9
|
||||||
|
|
||||||
|
[window]
|
||||||
|
padding.x = 14
|
||||||
|
padding.y = 14
|
||||||
|
decorations = "None"
|
||||||
|
|
||||||
|
[keyboard]
|
||||||
|
bindings = [
|
||||||
|
{ key = "Insert", mods = "Shift", action = "Paste" },
|
||||||
|
{ key = "Insert", mods = "Control", action = "Copy" },
|
||||||
|
{ key = "Return", mods = "Shift", chars = "\u001B\r" }
|
||||||
|
]
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
|
#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
|
||||||
#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
|
#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
|
||||||
color_theme = "nomarchy"
|
color_theme = "current"
|
||||||
|
|
||||||
#* If the theme set background should be shown, set to False if you want terminal background transparency.
|
#* If the theme set background should be shown, set to False if you want terminal background transparency.
|
||||||
theme_background = True
|
theme_background = True
|
||||||
|
|||||||
@@ -7,26 +7,7 @@ let
|
|||||||
else
|
else
|
||||||
{ name = "Default Dark Modern"; };
|
{ name = "Default Dark Modern"; };
|
||||||
|
|
||||||
# Theme extensions matching palette vscode.json `extension` fields. Always
|
# Development extensions that match the system theme
|
||||||
# installed because workbench.colorTheme is set unconditionally from the
|
|
||||||
# active palette — without the matching extension VSCode silently falls
|
|
||||||
# back to its default theme. Only the extensions available in
|
|
||||||
# pkgs.vscode-extensions are listed. Palettes whose theme extension is on
|
|
||||||
# the VSCode marketplace but not packaged in nixpkgs (sainnhe.everforest —
|
|
||||||
# affects the DEFAULT summer-night palette — plus qufiwefefwoyn.kanagawa,
|
|
||||||
# monokai.theme-monokai-pro-vscode, oldjobobo.*, Bjarne.*,
|
|
||||||
# shadesOfBuntu.flexoki-light, jovejonovski.ocean-green, TahaYVR.matteblack)
|
|
||||||
# still break and need pkgs.vscode-utils.extensionFromVscodeMarketplace —
|
|
||||||
# tracked in ROADMAP Later.
|
|
||||||
themeExtensions = with pkgs.vscode-extensions; [
|
|
||||||
catppuccin.catppuccin-vsc # catppuccin, catppuccin-latte
|
|
||||||
enkia.tokyo-night # tokyo-night
|
|
||||||
arcticicestudio.nord-visual-studio-code # nord
|
|
||||||
mvllow.rose-pine # rose-pine
|
|
||||||
jdinhlife.gruvbox # gruvbox
|
|
||||||
];
|
|
||||||
|
|
||||||
# Development extensions — opt-in via nomarchy.vscode.devExtensions.
|
|
||||||
devExtensions = with pkgs.vscode-extensions; [
|
devExtensions = with pkgs.vscode-extensions; [
|
||||||
# Language support
|
# Language support
|
||||||
ms-python.python
|
ms-python.python
|
||||||
@@ -41,6 +22,13 @@ let
|
|||||||
esbenp.prettier-vscode
|
esbenp.prettier-vscode
|
||||||
dbaeumer.vscode-eslint
|
dbaeumer.vscode-eslint
|
||||||
bradlc.vscode-tailwindcss
|
bradlc.vscode-tailwindcss
|
||||||
|
|
||||||
|
# Theme extensions (provide color themes matching nomarchy palettes)
|
||||||
|
catppuccin.catppuccin-vsc
|
||||||
|
enkia.tokyo-night
|
||||||
|
arcticicestudio.nord-visual-studio-code
|
||||||
|
sainnhe.everforest
|
||||||
|
mvllow.rose-pine
|
||||||
];
|
];
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
@@ -63,10 +51,7 @@ in
|
|||||||
"editor.fontFamily" = "'${config.nomarchy.fonts.monospace}', 'Droid Sans Mono', monospace";
|
"editor.fontFamily" = "'${config.nomarchy.fonts.monospace}', 'Droid Sans Mono', monospace";
|
||||||
"terminal.integrated.fontFamily" = config.nomarchy.fonts.monospace;
|
"terminal.integrated.fontFamily" = config.nomarchy.fonts.monospace;
|
||||||
};
|
};
|
||||||
extensions = lib.mkDefault (
|
extensions = lib.mkIf config.nomarchy.vscode.devExtensions (lib.mkDefault devExtensions);
|
||||||
themeExtensions
|
|
||||||
++ lib.optionals config.nomarchy.vscode.devExtensions devExtensions
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,14 @@
|
|||||||
|
|
||||||
let
|
let
|
||||||
nomarchyLib = import ../lib { inherit lib; };
|
nomarchyLib = import ../lib { inherit lib; };
|
||||||
|
userPackagesFile = "${config.home.homeDirectory}/.config/home-manager/user-packages.json";
|
||||||
|
userPackages = if builtins.pathExists userPackagesFile then
|
||||||
|
let
|
||||||
|
pkgNames = builtins.fromJSON (builtins.readFile userPackagesFile);
|
||||||
|
# Filter to only packages that exist in pkgs to prevent build failures
|
||||||
|
validPkgs = builtins.filter (name: builtins.hasAttr name pkgs) pkgNames;
|
||||||
|
in builtins.map (name: pkgs.${name}) validPkgs
|
||||||
|
else [];
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
|
|||||||
@@ -0,0 +1,71 @@
|
|||||||
|
# paths to stylesheets on the filesystem which should be applied to the application
|
||||||
|
#
|
||||||
|
# relative paths are resolved relative to the location of the config file
|
||||||
|
stylesheets: ["../nomarchy/current/theme/hyprland-preview-share-picker.css"]
|
||||||
|
# default page selected when the picker is opened
|
||||||
|
default_page: outputs
|
||||||
|
|
||||||
|
window:
|
||||||
|
# height of the application window
|
||||||
|
height: 500
|
||||||
|
# width of the application window
|
||||||
|
width: 1000
|
||||||
|
|
||||||
|
image:
|
||||||
|
# size to which the images should be internally resized to reduce the memory footprint
|
||||||
|
resize_size: 500
|
||||||
|
# target size of the longer side of the image widget
|
||||||
|
widget_size: 150
|
||||||
|
|
||||||
|
classes:
|
||||||
|
# css classname of the window
|
||||||
|
window: window
|
||||||
|
# css classname of the card containing an image and a label
|
||||||
|
image_card: card
|
||||||
|
# css classname of the card containing an image and a label when the image is still being loaded
|
||||||
|
image_card_loading: card-loading
|
||||||
|
# css classname of the image inside the card
|
||||||
|
image: image
|
||||||
|
# css classname of the label inside the card
|
||||||
|
image_label: image-label
|
||||||
|
# css classname of the notebook containing all pages
|
||||||
|
notebook: notebook
|
||||||
|
# css classname of a label of the notebook
|
||||||
|
tab_label: tab-label
|
||||||
|
# css classname of a notebook page (e.g. windows container)
|
||||||
|
notebook_page: page
|
||||||
|
# css classname of the region selection button
|
||||||
|
region_button: region-button
|
||||||
|
# css classname of the button containing the session restore checkbox and label
|
||||||
|
restore_button: restore-button
|
||||||
|
|
||||||
|
windows:
|
||||||
|
# minimum amount of image cards per row on the windows page
|
||||||
|
min_per_row: 3
|
||||||
|
# maximum amount of image cards per row on the windows page
|
||||||
|
max_per_row: 999
|
||||||
|
# number of clicks needed to select a window
|
||||||
|
clicks: 1
|
||||||
|
# spacing in pixels between the window cards
|
||||||
|
spacing: 12
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
# number of clicks needed to select an output
|
||||||
|
clicks: 1
|
||||||
|
# spacing in pixels between the outputs in the layout
|
||||||
|
# note: the spacing is applied from both sides (the gap is `spacing * 2`)
|
||||||
|
spacing: 6
|
||||||
|
# show the label with the output name
|
||||||
|
show_label: false
|
||||||
|
# size the output cards respectively to their scaling
|
||||||
|
respect_output_scaling: true
|
||||||
|
|
||||||
|
region:
|
||||||
|
# command to run for region selection
|
||||||
|
# the output needs to be in the <output>@<x>,<y>,<w>,<h> (e.g. DP-3@2789,436,756,576) format
|
||||||
|
command: slurp -f '%o@%x,%y,%w,%h'
|
||||||
|
|
||||||
|
# hide the token restore checkbox and use the default value instead
|
||||||
|
hide_token_restore: true
|
||||||
|
# enable debug logs by default
|
||||||
|
debug: false
|
||||||
2
features/desktop/hyprland/config/autostart.conf
Normal file
2
features/desktop/hyprland/config/autostart.conf
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# Extra autostart processes
|
||||||
|
# exec-once = uwsm-app -- my-service
|
||||||
43
features/desktop/hyprland/config/hyprlock.conf
Normal file
43
features/desktop/hyprland/config/hyprlock.conf
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
source = ~/.config/nomarchy/current/theme/hyprlock.conf
|
||||||
|
|
||||||
|
general {
|
||||||
|
ignore_empty_input = true
|
||||||
|
}
|
||||||
|
|
||||||
|
background {
|
||||||
|
monitor =
|
||||||
|
color = $color
|
||||||
|
path = ~/.config/nomarchy/current/background
|
||||||
|
blur_passes = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
animations {
|
||||||
|
enabled = false
|
||||||
|
}
|
||||||
|
|
||||||
|
input-field {
|
||||||
|
monitor =
|
||||||
|
size = 650, 100
|
||||||
|
position = 0, 0
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
|
||||||
|
inner_color = $inner_color
|
||||||
|
outer_color = $outer_color
|
||||||
|
outline_thickness = 4
|
||||||
|
|
||||||
|
font_family = JetBrainsMono Nerd Font
|
||||||
|
font_color = $font_color
|
||||||
|
|
||||||
|
placeholder_text = Enter Password
|
||||||
|
check_color = $check_color
|
||||||
|
fail_text = <i>$FAIL ($ATTEMPTS)</i>
|
||||||
|
|
||||||
|
rounding = 0
|
||||||
|
shadow_passes = 0
|
||||||
|
fade_on_empty = false
|
||||||
|
}
|
||||||
|
|
||||||
|
auth {
|
||||||
|
fingerprint:enabled = false
|
||||||
|
}
|
||||||
14
features/desktop/hyprland/config/hyprsunset.conf
Normal file
14
features/desktop/hyprland/config/hyprsunset.conf
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# Makes hyprsunset do nothing to the screen by default
|
||||||
|
# Without this, the default applies some tint to the monitor
|
||||||
|
profile {
|
||||||
|
time = 07:00
|
||||||
|
identity = true
|
||||||
|
}
|
||||||
|
|
||||||
|
# To enable auto switch to nightlight, set in your .config/hypr/autostart:
|
||||||
|
# exec-once = uwsm app -- hyprsunset
|
||||||
|
# and use the following:
|
||||||
|
# profile {
|
||||||
|
# time = 20:00
|
||||||
|
# temperature = 4000
|
||||||
|
# }
|
||||||
34
features/desktop/hyprland/config/looknfeel.conf
Normal file
34
features/desktop/hyprland/config/looknfeel.conf
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
# Change the default Nomarchy look'n'feel
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#general
|
||||||
|
general {
|
||||||
|
# No gaps between windows or borders
|
||||||
|
# gaps_in = 0
|
||||||
|
# gaps_out = 0
|
||||||
|
# border_size = 0
|
||||||
|
|
||||||
|
# Change to niri-like side-scrolling layout
|
||||||
|
# layout = scrolling
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#decoration
|
||||||
|
decoration {
|
||||||
|
# Use round window corners
|
||||||
|
# rounding = 8
|
||||||
|
|
||||||
|
# Dim unfocused windows (0.0 = no dim, 1.0 = fully dimmed)
|
||||||
|
# dim_inactive = true
|
||||||
|
# dim_strength = 0.15
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#animations
|
||||||
|
animations {
|
||||||
|
# Disable all animations
|
||||||
|
# enabled = no
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hypr.land/Configuring/Variables/#layout
|
||||||
|
layout {
|
||||||
|
# Avoid overly wide single-window layouts on wide screens
|
||||||
|
# single_window_aspect_ratio = 1 1
|
||||||
|
}
|
||||||
4
features/desktop/hyprland/config/xdph.conf
Normal file
4
features/desktop/hyprland/config/xdph.conf
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
screencopy {
|
||||||
|
allow_token_by_default = true
|
||||||
|
custom_picker_binary = hyprland-preview-share-picker
|
||||||
|
}
|
||||||
@@ -48,14 +48,13 @@ in
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
# Deploy Hyprland configuration files. Only the files that nomarchy.conf
|
# Deploy Hyprland configuration files
|
||||||
# actually sources are deployed here — looknfeel.conf and autostart.conf
|
|
||||||
# live under ~/.config/nomarchy/default/hypr/ and are deployed by the
|
|
||||||
# core/home bulk-nomarchy dir, so duplicating them here was dead surface.
|
|
||||||
xdg.configFile."hypr/nomarchy.conf".source = ./config/nomarchy.conf;
|
xdg.configFile."hypr/nomarchy.conf".source = ./config/nomarchy.conf;
|
||||||
xdg.configFile."hypr/monitors.conf".source = lib.mkDefault ./config/monitors.conf;
|
xdg.configFile."hypr/monitors.conf".source = lib.mkDefault ./config/monitors.conf;
|
||||||
xdg.configFile."hypr/input.conf".source = lib.mkDefault ./config/input.conf;
|
xdg.configFile."hypr/input.conf".source = lib.mkDefault ./config/input.conf;
|
||||||
xdg.configFile."hypr/bindings.conf".source = lib.mkDefault ./config/bindings.conf;
|
xdg.configFile."hypr/bindings.conf".source = lib.mkDefault ./config/bindings.conf;
|
||||||
|
xdg.configFile."hypr/looknfeel.conf".source = lib.mkDefault ./config/looknfeel.conf;
|
||||||
|
xdg.configFile."hypr/autostart.conf".source = lib.mkDefault ./config/autostart.conf;
|
||||||
|
|
||||||
# Run swaybg as a proper systemd user service rather than a Hyprland exec-once.
|
# Run swaybg as a proper systemd user service rather than a Hyprland exec-once.
|
||||||
# exec-once fails silently (black screen with no visible error) when timing
|
# exec-once fails silently (black screen with no visible error) when timing
|
||||||
|
|||||||
2
features/desktop/waybar/themes/catppuccin/style.css
Normal file
2
features/desktop/waybar/themes/catppuccin/style.css
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
@define-color foreground #cdd6f4;
|
||||||
|
@define-color background #181824;
|
||||||
2
features/desktop/waybar/themes/lumon/style.css
Normal file
2
features/desktop/waybar/themes/lumon/style.css
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
@define-color foreground #d6e2ee;
|
||||||
|
@define-color background #213442;
|
||||||
14
features/desktop/waybar/themes/nord/style.css
Normal file
14
features/desktop/waybar/themes/nord/style.css
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
@define-color background #2e3440;
|
||||||
|
@define-color foreground #d8dee9;
|
||||||
|
@define-color accent #88c0d0;
|
||||||
|
|
||||||
|
/* Base style for Nord */
|
||||||
|
* {
|
||||||
|
font-family: JetBrainsMono Nerd Font, FontAwesome;
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
window#waybar {
|
||||||
|
background-color: @background;
|
||||||
|
color: @foreground;
|
||||||
|
}
|
||||||
3
features/desktop/waybar/themes/retro-82/style.css
Normal file
3
features/desktop/waybar/themes/retro-82/style.css
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
@define-color bg #00172e;
|
||||||
|
@define-color foreground #f6dcac;
|
||||||
|
@define-color background alpha(@bg, 0.8);
|
||||||
@@ -71,6 +71,7 @@ let
|
|||||||
NOMARCHY_TOGGLE_IDLE = if config.nomarchy.toggles.idle then "true" else "false";
|
NOMARCHY_TOGGLE_IDLE = if config.nomarchy.toggles.idle then "true" else "false";
|
||||||
NOMARCHY_TOGGLE_NIGHTLIGHT = if config.nomarchy.toggles.nightlight then "true" else "false";
|
NOMARCHY_TOGGLE_NIGHTLIGHT = if config.nomarchy.toggles.nightlight then "true" else "false";
|
||||||
NOMARCHY_TOGGLE_WAYBAR = if config.nomarchy.toggles.waybar then "true" else "false";
|
NOMARCHY_TOGGLE_WAYBAR = if config.nomarchy.toggles.waybar then "true" else "false";
|
||||||
|
NOMARCHY_TOGGLE_SKIP_VSCODE_THEME = if config.nomarchy.toggles.skipVsCodeTheme then "true" else "false";
|
||||||
NOMARCHY_MONOSPACE_FONT = config.nomarchy.fonts.monospace;
|
NOMARCHY_MONOSPACE_FONT = config.nomarchy.fonts.monospace;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,15 @@ set -e
|
|||||||
# Build the Nomarchy Installer ISO declaratively using the flake.
|
# Build the Nomarchy Installer ISO declaratively using the flake.
|
||||||
|
|
||||||
echo "Building Nomarchy Installer ISO..."
|
echo "Building Nomarchy Installer ISO..."
|
||||||
|
|
||||||
|
# The output will be a symlink named 'result' in the current directory
|
||||||
nix build .#nixosConfigurations.nomarchy-installer.config.system.build.isoImage
|
nix build .#nixosConfigurations.nomarchy-installer.config.system.build.isoImage
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
ISO_PATH=$(readlink -f result/iso/*.iso)
|
ISO_PATH=$(readlink -f result/iso/*.iso)
|
||||||
echo "Success! ISO built at: $ISO_PATH"
|
echo "Success! ISO built at: $ISO_PATH"
|
||||||
echo "You can now burn this to a USB drive using 'dd' or 'etcher'."
|
echo "You can now burn this to a USB drive using 'dd' or 'etcher'."
|
||||||
|
else
|
||||||
|
echo "Error: ISO build failed."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|||||||
@@ -4,8 +4,15 @@ set -e
|
|||||||
# Build the Nomarchy Live ISO (Full Desktop Environment) using the flake.
|
# Build the Nomarchy Live ISO (Full Desktop Environment) using the flake.
|
||||||
|
|
||||||
echo "Building Nomarchy Live ISO..."
|
echo "Building Nomarchy Live ISO..."
|
||||||
|
|
||||||
|
# The output will be a symlink named 'result' in the current directory
|
||||||
nix build .#nixosConfigurations.nomarchy-live.config.system.build.isoImage
|
nix build .#nixosConfigurations.nomarchy-live.config.system.build.isoImage
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
ISO_PATH=$(readlink -f result/iso/*.iso)
|
ISO_PATH=$(readlink -f result/iso/*.iso)
|
||||||
echo "Success! Live ISO built at: $ISO_PATH"
|
echo "Success! Live ISO built at: $ISO_PATH"
|
||||||
echo "You can now burn this to a USB drive using 'dd' or 'etcher'."
|
echo "You can now burn this to a USB drive using 'dd' or 'etcher'."
|
||||||
|
else
|
||||||
|
echo "Error: Live ISO build failed."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ pgrep -f org.nomarchy.screensaver && exit 0
|
|||||||
|
|
||||||
# Allow screensaver to be turned off but also force started
|
# Allow screensaver to be turned off but also force started
|
||||||
# Skip if screensaver is disabled in configuration
|
# Skip if screensaver is disabled in configuration
|
||||||
if [[ $NOMARCHY_TOGGLE_SCREENSAVER == "false" ]] && [[ $1 != "force" ]]; then
|
if [[ $NNOMARCHY_TOGGLE_SCREENSAVER == "false" ]] && [[ $1 != "force" ]]; then
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ open_in_editor() {
|
|||||||
show_learn_menu() {
|
show_learn_menu() {
|
||||||
case $(menu "Learn" " Keybindings\n Nomarchy\n Hyprland\n Arch\n Neovim\n Bash") in
|
case $(menu "Learn" " Keybindings\n Nomarchy\n Hyprland\n Arch\n Neovim\n Bash") in
|
||||||
*Keybindings*) nomarchy-menu-keybindings ;;
|
*Keybindings*) nomarchy-menu-keybindings ;;
|
||||||
*Nomarchy*) nomarchy-manual ;;
|
*Nomarchy*) nomarchy-launch-webapp "https://learn.omacom.io/2/the-nomarchy-manual" ;;
|
||||||
*Hyprland*) nomarchy-launch-webapp "https://wiki.hypr.land/" ;;
|
*Hyprland*) nomarchy-launch-webapp "https://wiki.hypr.land/" ;;
|
||||||
*Arch*) nomarchy-launch-webapp "https://wiki.archlinux.org/title/Main_page" ;;
|
*Arch*) nomarchy-launch-webapp "https://wiki.archlinux.org/title/Main_page" ;;
|
||||||
*Bash*) nomarchy-launch-webapp "https://devhints.io/bash" ;;
|
*Bash*) nomarchy-launch-webapp "https://devhints.io/bash" ;;
|
||||||
@@ -176,7 +176,7 @@ show_style_menu() {
|
|||||||
*Theme*) show_theme_menu ;;
|
*Theme*) show_theme_menu ;;
|
||||||
*Font*) show_font_menu ;;
|
*Font*) show_font_menu ;;
|
||||||
*Background*) show_background_menu ;;
|
*Background*) show_background_menu ;;
|
||||||
*Hyprland*) open_in_editor ~/.config/nomarchy/default/hypr/looknfeel.conf ;;
|
*Hyprland*) open_in_editor ~/.config/hypr/looknfeel.conf ;;
|
||||||
*Screensaver*) open_in_editor ~/.config/nomarchy/branding/screensaver.txt ;;
|
*Screensaver*) open_in_editor ~/.config/nomarchy/branding/screensaver.txt ;;
|
||||||
*About*) open_in_editor ~/.config/nomarchy/branding/about.txt ;;
|
*About*) open_in_editor ~/.config/nomarchy/branding/about.txt ;;
|
||||||
*) back_to show_main_menu ;;
|
*) back_to show_main_menu ;;
|
||||||
@@ -255,6 +255,7 @@ show_setup_config_menu() {
|
|||||||
*Walker*) open_in_editor ~/.config/walker/config.toml && nomarchy-restart-walker ;;
|
*Walker*) open_in_editor ~/.config/walker/config.toml && nomarchy-restart-walker ;;
|
||||||
*Waybar*) open_in_editor ~/.config/waybar/config.jsonc && nomarchy-restart-waybar ;;
|
*Waybar*) open_in_editor ~/.config/waybar/config.jsonc && nomarchy-restart-waybar ;;
|
||||||
*XCompose*) open_in_editor ~/.XCompose && nomarchy-restart-xcompose ;;
|
*XCompose*) open_in_editor ~/.XCompose && nomarchy-restart-xcompose ;;
|
||||||
|
*Overrides*) xdg-open ~/.config/nomarchy/overrides/ ;;
|
||||||
*) back_to show_setup_menu ;;
|
*) back_to show_setup_menu ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
@@ -326,7 +327,7 @@ show_about() {
|
|||||||
|
|
||||||
show_system_menu() {
|
show_system_menu() {
|
||||||
local options=" Screensaver\n Lock"
|
local options=" Screensaver\n Lock"
|
||||||
[[ $NOMARCHY_TOGGLE_SUSPEND != "false" ]] && options="$options\n Suspend"
|
[[ $NNOMARCHY_TOGGLE_SUSPEND != "false" ]] && options="$options\n Suspend"
|
||||||
nomarchy-hibernation-available && options="$options\n Hibernate"
|
nomarchy-hibernation-available && options="$options\n Hibernate"
|
||||||
options="$options\n Logout\n Restart\n Shutdown"
|
options="$options\n Logout\n Restart\n Shutdown"
|
||||||
|
|
||||||
|
|||||||
@@ -59,9 +59,39 @@ if [[ "$USER" == "nixos" ]]; then
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 4. Setup Local Repo (Crucial for nomarchy-env-update to work)
|
# 4. Starter home.nix
|
||||||
echo ""
|
echo ""
|
||||||
echo "Step 4: Git Repository Check"
|
echo "Step 4: Starter home.nix"
|
||||||
|
HOME_NIX="$HOME/.config/home-manager/home.nix"
|
||||||
|
if [ ! -f "$HOME_NIX" ]; then
|
||||||
|
echo "It looks like you don't have a ~/.config/home-manager/home.nix file yet."
|
||||||
|
echo "Nomarchy uses this file to manage your user-level packages and settings."
|
||||||
|
if gum confirm "Would you like to generate a starter home.nix?"; then
|
||||||
|
mkdir -p "$(dirname "$HOME_NIX")"
|
||||||
|
cat <<EOF > "$HOME_NIX"
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
# Nomarchy starter home.nix
|
||||||
|
# Add your user packages here.
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
btop
|
||||||
|
fastfetch
|
||||||
|
chromium
|
||||||
|
# Add more packages here
|
||||||
|
];
|
||||||
|
|
||||||
|
# home.stateVersion = "25.11"; # Consult docs/MIGRATION.md if you change this
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
echo "Starter home.nix generated at $HOME_NIX"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Detected existing home.nix at $HOME_NIX. Skipping generation."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 5. Setup Local Repo (Crucial for nomarchy-env-update to work)
|
||||||
|
echo ""
|
||||||
|
echo "Step 5: Git Repository Check"
|
||||||
echo "Nomarchy relies on a local git repository for declarative updates."
|
echo "Nomarchy relies on a local git repository for declarative updates."
|
||||||
if [ ! -d "/etc/nixos/.git" ]; then
|
if [ ! -d "/etc/nixos/.git" ]; then
|
||||||
echo "Warning: /etc/nixos is not a git repository. Declarative updates might fail."
|
echo "Warning: /etc/nixos is not a git repository. Declarative updates might fail."
|
||||||
@@ -72,7 +102,7 @@ if [ ! -d "/etc/nixos/.git" ]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 5. Success
|
# 6. Success
|
||||||
echo ""
|
echo ""
|
||||||
echo "Applying all changes..."
|
echo "Applying all changes..."
|
||||||
nomarchy-env-update
|
nomarchy-env-update
|
||||||
|
|||||||
@@ -98,6 +98,7 @@ let
|
|||||||
in {
|
in {
|
||||||
inherit
|
inherit
|
||||||
palettes
|
palettes
|
||||||
|
readState
|
||||||
readHomeState
|
readHomeState
|
||||||
readSystemState
|
readSystemState
|
||||||
resolveWallpaper
|
resolveWallpaper
|
||||||
|
|||||||
@@ -1,13 +1,5 @@
|
|||||||
# Nomarchy State Schema
|
# Nomarchy State Schema
|
||||||
#
|
# Defines the complete state shape with defaults for both home and system state
|
||||||
# Defines the default values for every state.json field that's consumed by a
|
|
||||||
# Nix option. Read by core/{system,home}/options.nix (for `default = …`) and
|
|
||||||
# by core/{system,home}/state.nix (for `or` fallbacks).
|
|
||||||
#
|
|
||||||
# state.json may also hold runtime-only fields that aren't declared here —
|
|
||||||
# notably `welcome_done`, managed by `nomarchy-welcome`. Those are intentionally
|
|
||||||
# off-schema because no Nix option reads them; the schema is the "consumed by
|
|
||||||
# Nix" surface, not the full state.json shape.
|
|
||||||
{ lib }:
|
{ lib }:
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -26,6 +18,7 @@
|
|||||||
idle = true;
|
idle = true;
|
||||||
nightlight = false;
|
nightlight = false;
|
||||||
waybar = true;
|
waybar = true;
|
||||||
|
skipVsCodeTheme = false;
|
||||||
|
|
||||||
# Hyprland window manager settings
|
# Hyprland window manager settings
|
||||||
hyprland = {
|
hyprland = {
|
||||||
@@ -60,4 +53,14 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Get a value from state with fallback to default
|
||||||
|
getWithDefault = state: path: default:
|
||||||
|
let
|
||||||
|
pathList = lib.splitString "." path;
|
||||||
|
getValue = obj: remaining:
|
||||||
|
if remaining == [] then obj
|
||||||
|
else if builtins.isAttrs obj && builtins.hasAttr (builtins.head remaining) obj
|
||||||
|
then getValue obj.${builtins.head remaining} (builtins.tail remaining)
|
||||||
|
else default;
|
||||||
|
in getValue state pathList;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,62 +33,6 @@ in
|
|||||||
@define-color accent #${palette.base0D};
|
@define-color accent #${palette.base0D};
|
||||||
'';
|
'';
|
||||||
|
|
||||||
# Per-palette kitty colors. features/apps/kitty/config/kitty.conf includes
|
|
||||||
# this file; without it the include silently failed and kitty stayed on
|
|
||||||
# default colors for every palette (Stylix's kitty target only kicks in
|
|
||||||
# when programs.kitty.enable is set, which the module doesn't use).
|
|
||||||
xdg.configFile."nomarchy/current/theme/kitty.conf".text = ''
|
|
||||||
background #${palette.base00}
|
|
||||||
foreground #${palette.base05}
|
|
||||||
cursor #${palette.base05}
|
|
||||||
selection_background #${palette.base02}
|
|
||||||
selection_foreground #${palette.base05}
|
|
||||||
color0 #${palette.base01}
|
|
||||||
color1 #${palette.base08}
|
|
||||||
color2 #${palette.base0B}
|
|
||||||
color3 #${palette.base0A}
|
|
||||||
color4 #${palette.base0D}
|
|
||||||
color5 #${palette.base0E}
|
|
||||||
color6 #${palette.base0C}
|
|
||||||
color7 #${palette.base04}
|
|
||||||
color8 #${palette.base03}
|
|
||||||
color9 #${palette.base08}
|
|
||||||
color10 #${palette.base0B}
|
|
||||||
color11 #${palette.base0A}
|
|
||||||
color12 #${palette.base0D}
|
|
||||||
color13 #${palette.base0E}
|
|
||||||
color14 #${palette.base0C}
|
|
||||||
color15 #${palette.base07}
|
|
||||||
'';
|
|
||||||
|
|
||||||
# Per-palette ghostty colors. features/apps/ghostty/config/config uses an
|
|
||||||
# optional include (?-prefix) of this file; without it the include was
|
|
||||||
# silently skipped and ghostty rendered with its built-in defaults across
|
|
||||||
# every palette. ghostty has no Stylix target.
|
|
||||||
xdg.configFile."nomarchy/current/theme/ghostty.conf".text = ''
|
|
||||||
background = ${palette.base00}
|
|
||||||
foreground = ${palette.base05}
|
|
||||||
cursor-color = ${palette.base05}
|
|
||||||
selection-background = ${palette.base02}
|
|
||||||
selection-foreground = ${palette.base05}
|
|
||||||
palette = 0=#${palette.base01}
|
|
||||||
palette = 1=#${palette.base08}
|
|
||||||
palette = 2=#${palette.base0B}
|
|
||||||
palette = 3=#${palette.base0A}
|
|
||||||
palette = 4=#${palette.base0D}
|
|
||||||
palette = 5=#${palette.base0E}
|
|
||||||
palette = 6=#${palette.base0C}
|
|
||||||
palette = 7=#${palette.base04}
|
|
||||||
palette = 8=#${palette.base03}
|
|
||||||
palette = 9=#${palette.base08}
|
|
||||||
palette = 10=#${palette.base0B}
|
|
||||||
palette = 11=#${palette.base0A}
|
|
||||||
palette = 12=#${palette.base0D}
|
|
||||||
palette = 13=#${palette.base0E}
|
|
||||||
palette = 14=#${palette.base0C}
|
|
||||||
palette = 15=#${palette.base07}
|
|
||||||
'';
|
|
||||||
|
|
||||||
# Ensure theme-specific hyprland config exists
|
# Ensure theme-specific hyprland config exists
|
||||||
# Lookup priority: palette apps/ > feature themes/ > nord fallback
|
# Lookup priority: palette apps/ > feature themes/ > nord fallback
|
||||||
xdg.configFile."nomarchy/current/theme/apps/hyprland.conf" = lib.mkIf (!hasHyprlandConf) {
|
xdg.configFile."nomarchy/current/theme/apps/hyprland.conf" = lib.mkIf (!hasHyprlandConf) {
|
||||||
|
|||||||
@@ -54,16 +54,31 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
apps = {
|
apps = {
|
||||||
# waybar, kitty, alacritty, and mako are intentionally absent. Waybar
|
|
||||||
# themes inline in features/desktop/waybar via colorScheme; kitty and
|
|
||||||
# alacritty are themed by stylix targets (themes/engine/stylix.nix); mako
|
|
||||||
# has no theme integration yet. Only btop is loaded from the active
|
|
||||||
# theme's apps/ directory.
|
|
||||||
btop = lib.mkOption {
|
btop = lib.mkOption {
|
||||||
type = lib.types.bool;
|
type = lib.types.bool;
|
||||||
default = true;
|
default = true;
|
||||||
description = "Whether to load btop theme from active theme.";
|
description = "Whether to load btop theme from active theme.";
|
||||||
};
|
};
|
||||||
|
waybar = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = true;
|
||||||
|
description = "Whether to load waybar CSS from active theme.";
|
||||||
|
};
|
||||||
|
mako = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = true;
|
||||||
|
description = "Whether to load mako config from active theme.";
|
||||||
|
};
|
||||||
|
kitty = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = true;
|
||||||
|
description = "Whether to load kitty config from active theme.";
|
||||||
|
};
|
||||||
|
alacritty = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = true;
|
||||||
|
description = "Whether to load alacritty config from active theme.";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ STATE_FILE="$STATE_DIR/state.json"
|
|||||||
mkdir -p "$STATE_DIR"
|
mkdir -p "$STATE_DIR"
|
||||||
[[ ! -f $STATE_FILE ]] && echo "{}" > "$STATE_FILE"
|
[[ ! -f $STATE_FILE ]] && echo "{}" > "$STATE_FILE"
|
||||||
|
|
||||||
THEME_NAME=$(jq -r '.theme // "summer-night"' "$STATE_FILE")
|
THEME_NAME=$(jq -r '.theme // "nord"' "$STATE_FILE")
|
||||||
|
|
||||||
# Resolve themes directory (Built-in from Nix store via Home Manager, or user extra)
|
# Resolve themes directory (Built-in from Nix store via Home Manager, or user extra)
|
||||||
if [ -d "$HOME/.config/nomarchy/themes/$THEME_NAME" ]; then
|
if [ -d "$HOME/.config/nomarchy/themes/$THEME_NAME" ]; then
|
||||||
|
|||||||
@@ -1,12 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# Sets the specified image as the current background.
|
# Sets the specified image as the current background
|
||||||
# Updates state.json so the choice survives the next rebuild — without
|
|
||||||
# that write, themes/engine/files.nix re-resolves the wallpaper from
|
|
||||||
# `nomarchy.wallpaper` on the next home-manager switch and silently
|
|
||||||
# falls back to the active theme's default background, undoing the
|
|
||||||
# user's pick.
|
|
||||||
|
|
||||||
if [[ -z $1 ]]; then
|
if [[ -z $1 ]]; then
|
||||||
echo "Usage: nomarchy-theme-bg-set <path-to-image>" >&2
|
echo "Usage: nomarchy-theme-bg-set <path-to-image>" >&2
|
||||||
@@ -14,22 +9,7 @@ if [[ -z $1 ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
BACKGROUND="$1"
|
BACKGROUND="$1"
|
||||||
|
CURRENT_BACKGROUND_LINK="$HOME/.config/nomarchy/current/background"
|
||||||
if [[ ! -f "$BACKGROUND" ]]; then
|
|
||||||
echo "Background image not found: $BACKGROUND" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
STATE_DIR="$HOME/.config/nomarchy"
|
|
||||||
STATE_FILE="$STATE_DIR/state.json"
|
|
||||||
CURRENT_BACKGROUND_LINK="$STATE_DIR/current/background"
|
|
||||||
|
|
||||||
mkdir -p "$STATE_DIR"
|
|
||||||
[[ ! -f $STATE_FILE ]] && echo "{}" > "$STATE_FILE"
|
|
||||||
|
|
||||||
# Persist the choice for the next rebuild.
|
|
||||||
TMP_JSON=$(mktemp)
|
|
||||||
jq --arg wp "$BACKGROUND" '.wallpaper = $wp' "$STATE_FILE" > "$TMP_JSON" && mv "$TMP_JSON" "$STATE_FILE"
|
|
||||||
|
|
||||||
# Create symlink to the new background
|
# Create symlink to the new background
|
||||||
ln -nsf "$BACKGROUND" "$CURRENT_BACKGROUND_LINK"
|
ln -nsf "$BACKGROUND" "$CURRENT_BACKGROUND_LINK"
|
||||||
|
|||||||
@@ -30,8 +30,7 @@ mkdir -p "$STATE_DIR"
|
|||||||
[[ ! -f $STATE_FILE ]] && echo "{}" > "$STATE_FILE"
|
[[ ! -f $STATE_FILE ]] && echo "{}" > "$STATE_FILE"
|
||||||
|
|
||||||
if [ ! -d "$THEMES_DIR/$THEME_NAME" ]; then
|
if [ ! -d "$THEMES_DIR/$THEME_NAME" ]; then
|
||||||
echo "Theme '$THEME_NAME' not found in $THEMES_DIR" >&2
|
echo "Theme '$THEME_NAME' not found in $THEMES_DIR"
|
||||||
exit 1
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
TMP_JSON=$(mktemp)
|
TMP_JSON=$(mktemp)
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
# Pre-realise every theme's Home Manager generation into the Nix store so
|
# Pre-realise every theme's Home Manager generation into the Nix store so
|
||||||
# future `nomarchy-theme-set` swaps are cache hits — no Stylix rebuild, no
|
# future `nomarchy-theme-set` swaps are cache hits — no Stylix rebuild, no
|
||||||
# downloads. Run once after install (the installer's final message prompts
|
# downloads. Run once after install (the installer wires this up) and again
|
||||||
# you to do so) and again after adding or updating palettes.
|
# after adding or updating palettes.
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
|||||||
@@ -27,12 +27,8 @@ in
|
|||||||
|
|
||||||
services.displayManager.defaultSession = lib.mkDefault "hyprland-uwsm";
|
services.displayManager.defaultSession = lib.mkDefault "hyprland-uwsm";
|
||||||
|
|
||||||
# autoLogin defaults off so hand-migrated configs (no installer-written
|
|
||||||
# username) don't try to log in as a nonexistent "nomarchy" user. The
|
|
||||||
# installer-generated system.nix sets both `enable = true;` and
|
|
||||||
# `user = "$USERNAME";` at normal priority, overriding these defaults.
|
|
||||||
services.displayManager.autoLogin = {
|
services.displayManager.autoLogin = {
|
||||||
enable = lib.mkDefault false;
|
enable = lib.mkDefault true;
|
||||||
user = lib.mkDefault "nomarchy";
|
user = lib.mkDefault "nomarchy";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
1
themes/palettes/flexoki-light/apps/chromium.theme
Normal file
1
themes/palettes/flexoki-light/apps/chromium.theme
Normal file
@@ -0,0 +1 @@
|
|||||||
|
242,240,229
|
||||||
1
themes/palettes/lumon/apps/chromium.theme
Normal file
1
themes/palettes/lumon/apps/chromium.theme
Normal file
@@ -0,0 +1 @@
|
|||||||
|
14,31,41
|
||||||
1
themes/palettes/retro-82/apps/chromium.theme
Normal file
1
themes/palettes/retro-82/apps/chromium.theme
Normal file
@@ -0,0 +1 @@
|
|||||||
|
0,23,46
|
||||||
1
themes/palettes/rose-pine/apps/chromium.theme
Normal file
1
themes/palettes/rose-pine/apps/chromium.theme
Normal file
@@ -0,0 +1 @@
|
|||||||
|
210,196,219
|
||||||
44
themes/palettes/summer-day/apps/kitty/everforest-light.conf
Executable file
44
themes/palettes/summer-day/apps/kitty/everforest-light.conf
Executable file
@@ -0,0 +1,44 @@
|
|||||||
|
# A port of forest night by sainnhe
|
||||||
|
# https://github.com/sainnhe/forest-night
|
||||||
|
|
||||||
|
font_family JetBrainsMono Nerd Font
|
||||||
|
font_size 12.0
|
||||||
|
|
||||||
|
foreground #323d43
|
||||||
|
background #fdf6e3
|
||||||
|
selection_foreground #e4e1cd
|
||||||
|
selection_background #d3dbc8
|
||||||
|
url_color #415c6d
|
||||||
|
cursor #7fbbb3
|
||||||
|
|
||||||
|
# black
|
||||||
|
color0 #4a555b
|
||||||
|
color8 #525c62
|
||||||
|
|
||||||
|
# red
|
||||||
|
color1 #e68183
|
||||||
|
color9 #e68183
|
||||||
|
|
||||||
|
# green
|
||||||
|
color2 #a7c080
|
||||||
|
color10 #a7c080
|
||||||
|
|
||||||
|
# yellow
|
||||||
|
color3 #dbbc7f
|
||||||
|
color11 #dbbc7f
|
||||||
|
|
||||||
|
# blue
|
||||||
|
color4 #7fbbb3
|
||||||
|
color12 #7fbbb3
|
||||||
|
|
||||||
|
# magenta
|
||||||
|
color5 #d699b6
|
||||||
|
color13 #d699b6
|
||||||
|
|
||||||
|
# cyan
|
||||||
|
color6 #83c092
|
||||||
|
color14 #83c092
|
||||||
|
|
||||||
|
# white
|
||||||
|
color7 #f3efda
|
||||||
|
color15 #f3efda
|
||||||
2162
themes/palettes/summer-day/apps/kitty/kitty.conf
Executable file
2162
themes/palettes/summer-day/apps/kitty/kitty.conf
Executable file
File diff suppressed because it is too large
Load Diff
5
themes/templates/mako.ini.tpl
Normal file
5
themes/templates/mako.ini.tpl
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
include=~/.config/nomarchy/default/mako/core.ini
|
||||||
|
|
||||||
|
text-color={{ foreground }}
|
||||||
|
border-color={{ accent }}
|
||||||
|
background-color={{ background }}
|
||||||
Reference in New Issue
Block a user