Theme System: - Move all theme app configs to apps/ subdirectory (20 themes) - Add theme-loader.nix for dynamic theme config deployment - Simplify stylix.nix to focus on base theming only Override System: - Add overrides.nix for file-based config overrides - Add behavior-configs.nix for non-visual configuration - Split hypr/nomarchy.conf into behavior vs visual sections Module Improvements: - Add lib.mkDefault to all customizable settings - Add modules/lib/ with shared utilities and state schema - Update all home and system modules for downstream overridability Installer: - New minimal TTY installer (installer/install.sh) - Golden path: BTRFS + LUKS2 (disko-golden.nix) - New installer-iso.nix for TTY-only installation - Keep graphical installer as installerIsoGraphical option Cleanup: - Remove obsolete install.sh, disko-ext4.nix, install-nomarchy.sh - Update live-iso.nix references - Add .claude/ to .gitignore for local IDE settings Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
98 lines
4.1 KiB
Nix
98 lines
4.1 KiB
Nix
{ 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";
|
|
|
|
# Check if user has an override for a specific config
|
|
hasOverride = path: builtins.pathExists "${overridesDir}/${path}";
|
|
|
|
# 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"
|
|
'';
|
|
};
|
|
}
|