Files
nix-config/docs/modules/README.md
mjallen18 535fdc2f86 ha
2026-02-10 19:44:41 -06:00

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:

  1. NixOS Modules - System-level configurations in modules/nixos/
  2. Home Manager Modules - User-level configurations in modules/home/

NixOS Modules

These modules configure the system-level aspects of NixOS:

Home Manager Modules

These modules configure user environments:

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:

  1. Enable the module in your system configuration:
{ config, ... }:
{
  mjallen.example-module = {
    enable = true;
    # Other options
  };
}

Creating New Modules

To create a new module:

  1. Create a new directory in modules/nixos/ or modules/home/
  2. Create default.nix and options.nix files
  3. Implement your module functionality
  4. Import the module in your system configuration

See the Getting Started guide for more details on creating modules.