6.4 KiB
6.4 KiB
OmniXY Architecture
Overview
OmniXY is built on a layered architecture that combines NixOS's declarative system configuration with modern desktop tools and development environments.
System Layers
┌─────────────────────────────────────────┐
│ User Interface │
│ Hyprland + Waybar + Applications │
├─────────────────────────────────────────┤
│ Desktop Environment │
│ Theme System + Window Management │
├─────────────────────────────────────────┤
│ OmniXY Configuration │
│ Modules + Scripts + Packages │
├─────────────────────────────────────────┤
│ Home Manager Layer │
│ User Environment & Dotfiles │
├─────────────────────────────────────────┤
│ NixOS System │
│ Package Management + Services │
├─────────────────────────────────────────┤
│ Linux Kernel │
│ Hardware Abstraction │
└─────────────────────────────────────────┘
Core Components
1. Nix Flake System (flake.nix)
The foundation that defines all system inputs and outputs:
- Inputs: External dependencies (nixpkgs, home-manager, hyprland)
- Outputs: System configurations, packages, development shells, apps
- Lock File: Ensures reproducible builds across machines
2. System Configuration (configuration.nix)
Main NixOS system configuration that:
- Imports all modules
- Defines system-wide settings
- Sets the current theme
- Configures hardware and services
3. Module System (modules/)
Modular architecture with focused components:
- Core: Base system settings and OmniXY options
- Themes: Complete color schemes and application theming
- Hardware: Device-specific configurations
- Desktop: Window manager and GUI settings
- Development: Programming tools and environments
4. Home Manager (home.nix)
User environment management:
- User-specific packages
- Dotfile configuration
- Application settings
- Theme integration
5. Package System (packages/)
Custom Nix packages:
- OmniXY utility scripts
- Specialized tools
- Theme packages
6. Unix Tools (scripts/)
Focused utilities following Unix philosophy:
- System management
- Configuration backup
- User setup
- Build automation
Data Flow
System Build Process
flake.nix → configuration.nix → modules/*.nix → system build
↓ ↓ ↓
inputs system opts module config
↓ ↓ ↓
nixpkgs theme selection packages/services
Theme Application Flow
Theme Selection → Module Configuration → Application Settings
↓ ↓ ↓
omnixy theme modules/themes/ GTK/Qt/Terminal
set <name> <name>.nix theming
User Environment Flow
home.nix → Home Manager → User Packages & Dotfiles
↓ ↓ ↓
user config evaluation ~/.config/* files
Configuration Management
Declarative Configuration
- All system state defined in Nix expressions
- No imperative commands modify system configuration
- Changes require rebuild to take effect
Immutable System
- Built configurations are immutable
- Previous generations available for rollback
- Atomic upgrades prevent partial failures
Module Composition
- Features implemented as independent modules
- Modules can depend on other modules
- Options system provides configuration interface
Reproducible Builds
- Flake inputs pinned with lock file
- Same inputs produce identical outputs
- Cross-machine consistency guaranteed
Development Architecture
Language Support
Each language environment includes:
- Runtime and tools
- Language server protocols (LSPs)
- Package managers
- Development utilities
Shell Environments
Development Shell:
nix develop .#<language>
↓
Language-specific packages
↓
Configured environment
Tool Integration
- Git with lazygit TUI
- Terminal with shell integration
- Editor with language support
- Build systems and debuggers
Theme Architecture
Unified Theming
All applications themed consistently:
- Terminal emulators (Alacritty, Kitty)
- Text editors (Neovim, VSCode)
- Desktop components (Waybar, Hyprland)
- GUI applications (GTK, Qt)
Color Management
Theme Module → Color Variables → Application Configs
↓ ↓ ↓
tokyo-night.nix → #7aa2f7 (blue) → terminal.colors.blue
Theme Switching
- Update configuration.nix with new theme
- Rebuild system to apply changes
- All applications automatically use new theme
Hardware Support
Adaptive Configuration
- Automatic hardware detection
- GPU-specific optimizations (Intel, AMD, NVIDIA)
- Audio system configuration
- Network and Bluetooth setup
Conditional Modules
config = lib.mkIf cfg.hardware.nvidia.enable {
# NVIDIA-specific configuration
};
Security Architecture
System Security
- Secure boot support
- Firewall configuration
- AppArmor profiles
- User isolation
Authentication
- Multi-factor authentication support
- Fingerprint integration
- FIDO2 security keys
- Password management
Extensibility
Custom Modules
- Follow NixOS module structure
- Use options for configuration
- Implement proper dependencies
- Document all options
Package Development
- Custom packages in
packages/ - Integration with flake outputs
- Proper meta information
- Cross-platform support
Theme Development
- Color palette definition
- Application configuration
- Testing across components
- Documentation and examples
This architecture provides a solid foundation for a reproducible, customizable, and maintainable desktop Linux system.