116 lines
2.9 KiB
Markdown
116 lines
2.9 KiB
Markdown
# 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:
|
|
|
|
- [Boot Modules](./boot.md) - Boot loader and kernel configurations
|
|
- [Desktop Modules](./desktop.md) - Desktop environment configurations
|
|
- [Development Modules](./development.md) - Development tools and environments
|
|
- [Hardware Modules](./hardware.md) - Hardware-specific configurations
|
|
- [Home Assistant Modules](./homeassistant.md) - Home automation configuration
|
|
- [Networking Modules](./network.md) - Network configuration and services
|
|
- [Security Modules](./security.md) - Security-related configurations
|
|
- [Services Modules](./services.md) - Various service configurations
|
|
- [System Modules](./system.md) - General system configurations
|
|
- [Virtualization Modules](./virtualization.md) - Virtualization and containerization
|
|
|
|
## Home Manager Modules
|
|
|
|
These modules configure user environments:
|
|
|
|
- [Applications](./home/applications.md) - User applications
|
|
- [Desktop](./home/desktop.md) - User desktop environments
|
|
- [Development](./home/development.md) - User development environments
|
|
- [Media](./home/media.md) - Media applications
|
|
- [Shell](./home/shell.md) - 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:
|
|
|
|
```nix
|
|
{
|
|
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:
|
|
|
|
```nix
|
|
{ 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:
|
|
|
|
```nix
|
|
{ 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](../getting-started.md) guide for more details on creating modules. |