{ 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; # 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" ''; }; }