2.9 KiB
2.9 KiB
Custom Modules
This directory contains documentation for the custom modules used in this NixOS configuration.
Module Types
The repository uses two main types of modules:
- NixOS Modules - System-level configurations in
modules/nixos/ - Home Manager Modules - User-level configurations in
modules/home/
NixOS Modules
These modules configure the system-level aspects of NixOS:
- Boot Modules - Boot loader and kernel configurations
- Desktop Modules - Desktop environment configurations
- Development Modules - Development tools and environments
- Hardware Modules - Hardware-specific configurations
- Home Assistant Modules - Home automation configuration
- Networking Modules - Network configuration and services
- Security Modules - Security-related configurations
- Services Modules - Various service configurations
- System Modules - General system configurations
- Virtualization Modules - Virtualization and containerization
Home Manager Modules
These modules configure user environments:
- Applications - User applications
- Desktop - User desktop environments
- Development - User development environments
- Media - Media applications
- Shell - Shell configurations
Module Structure
Each module follows a standard structure:
modules/nixos/example-module/
├── default.nix # Main implementation
├── options.nix # Option declarations
└── submodule/ # Optional submodules
└── default.nix # Submodule implementation
default.nix
The default.nix file contains the main implementation of the module:
{
config,
lib,
pkgs,
namespace,
...
}:
let
cfg = config.${namespace}.example-module;
in
{
imports = [ ./options.nix ];
config = lib.mkIf cfg.enable {
# Module implementation when enabled
};
}
options.nix
The options.nix file declares the module's configuration options:
{ lib, namespace, ... }:
with lib;
let
inherit (lib.${namespace}) mkOpt;
in
{
options.${namespace}.example-module = {
enable = mkEnableOption "enable example module";
# Other option declarations
};
}
Using Modules
To use a module in your system configuration:
- Enable the module in your system configuration:
{ config, ... }:
{
mjallen.example-module = {
enable = true;
# Other options
};
}
Creating New Modules
To create a new module:
- Create a new directory in
modules/nixos/ormodules/home/ - Create
default.nixandoptions.nixfiles - Implement your module functionality
- Import the module in your system configuration
See the Getting Started guide for more details on creating modules.