Modules

The modules directory is a replica of nixpkg's NixOS modules , and follows the same semantics. This allows for trivial upstreaming into nixpkgs proper once your module is sufficiently stable.

All modules linked in module-list.nix are automatically exported via nixosModules.<file-basename>, and imported into all hosts.

Note:

This is reserved for declaring brand new module options. If you just want to declare a coherent configuration of already existing and related NixOS options , use profiles instead.

Semantics

In case you've never written a module for nixpkgs before, here is a brief outline of the process.

Declaration

modules/services/service-category/my-service.nix:

{ config, lib, ... }: let cfg = config.services.myService; in { options.services.myService = { enable = lib.mkEnableOption "Description of my new service."; # additional options ... }; config = lib.mkIf cfg.enable { # implementation ... }; }

Import

modules/module-list.nix:

[ ./services/service-category/my-service.nix ]

Usage

Internal

profiles/profile-category/my-profile.nix:

{ ... }: { services.MyService.enable = true; }

External

flake.nix:

{ # inputs omitted outputs = { self, devos, nixpkgs, ... }: { nixosConfigurations.myConfig = nixpkgs.lib.nixosSystem { system = "..."; modules = [ devos.nixosModules.my-service ({ ... }: { services.MyService.enable = true; }) ]; }; }; }