{ config, pkgs, lib, modulesPath, ... }: let asteriskDir = ./asterisk; asteriskFiles = builtins.readDir asteriskDir; fileNames = builtins.attrNames asteriskFiles; entries = builtins.map (name: { name = name; path = "${asteriskDir}/${name}"; }) fileNames; in { config = let configFarm = pkgs.linkFarm "asterisk-config" entries; in { services.getty.autologinUser = "root"; systemd.services.asterisk = { wantedBy = [ "multi-user.target" ]; serviceConfig = { ExecStart = "${pkgs.asterisk}/bin/asterisk -f -C ${configFarm}/asterisk.conf"; Restart = "on-failure"; User = "asterisk"; }; }; users.users.asterisk = { isSystemUser = true; group = "asterisk"; }; users.groups.asterisk = { }; environment.etc."asterisk".source = configFarm; networking.firewall.allowedTCPPorts = [ 5060 ]; networking.firewall.allowedUDPPorts = [ 5060 4569 ]; }; }