136 lines
3.6 KiB
Nix
136 lines
3.6 KiB
Nix
{ lib
|
|
, config
|
|
, ...
|
|
}:
|
|
{
|
|
imports = [
|
|
./etc.nix
|
|
./systemd.nix
|
|
./upstream/nixpkgs
|
|
];
|
|
|
|
options =
|
|
let
|
|
inherit (lib) types;
|
|
in
|
|
{
|
|
|
|
nixpkgs = {
|
|
# TODO: switch to lib.systems.parsedPlatform
|
|
hostPlatform = lib.mkOption {
|
|
type = types.str;
|
|
example = "x86_64-linux";
|
|
default = throw "the option nixpkgs.hostPlatform needs to be set.";
|
|
};
|
|
};
|
|
|
|
assertions = lib.mkOption {
|
|
type = types.listOf types.unspecified;
|
|
internal = true;
|
|
default = [ ];
|
|
example = [{ assertion = false; message = "you can't enable this for that reason"; }];
|
|
description = lib.mdDoc ''
|
|
This option allows modules to express conditions that must
|
|
hold for the evaluation of the system configuration to
|
|
succeed, along with associated error messages for the user.
|
|
'';
|
|
};
|
|
|
|
warnings = lib.mkOption {
|
|
internal = true;
|
|
default = [ ];
|
|
type = types.listOf types.str;
|
|
example = [ "The `foo' service is deprecated and will go away soon!" ];
|
|
description = lib.mdDoc ''
|
|
This option allows modules to show warnings to users during
|
|
the evaluation of the system configuration.
|
|
'';
|
|
};
|
|
|
|
# Statically assigned UIDs and GIDs.
|
|
# Ideally we use DynamicUser as much as possible to avoid the need for these.
|
|
ids = {
|
|
uids = lib.mkOption {
|
|
internal = true;
|
|
description = lib.mdDoc ''
|
|
The user IDs used by system-manager.
|
|
'';
|
|
type = types.attrsOf types.int;
|
|
};
|
|
|
|
gids = lib.mkOption {
|
|
internal = true;
|
|
description = lib.mdDoc ''
|
|
The group IDs used by system-manager.
|
|
'';
|
|
type = types.attrsOf types.int;
|
|
};
|
|
};
|
|
|
|
# No-op option for now.
|
|
# TODO: should we include the settings in /etc/logrotate.d ?
|
|
services.logrotate = lib.mkOption {
|
|
internal = true;
|
|
default = { };
|
|
type = types.freeform;
|
|
};
|
|
|
|
# No-op option for now.
|
|
users = lib.mkOption {
|
|
internal = true;
|
|
default = { };
|
|
type = types.freeform;
|
|
};
|
|
|
|
networking = {
|
|
enableIPv6 = lib.mkEnableOption "IPv6" // {
|
|
default = true;
|
|
};
|
|
};
|
|
|
|
system-manager = {
|
|
allowAnyDistro = lib.mkEnableOption "the usage of system-manager on untested distributions";
|
|
|
|
preActivationAssertions = lib.mkOption {
|
|
type = with lib.types; attrsOf (submodule ({ name, ... }: {
|
|
options = {
|
|
enable = lib.mkEnableOption "the assertion";
|
|
|
|
name = lib.mkOption {
|
|
type = types.str;
|
|
default = name;
|
|
};
|
|
|
|
script = lib.mkOption {
|
|
type = types.str;
|
|
};
|
|
};
|
|
}));
|
|
default = { };
|
|
};
|
|
};
|
|
};
|
|
|
|
config = {
|
|
system-manager.preActivationAssertions = {
|
|
osVersion =
|
|
let
|
|
supportedIds = [ "nixos" "ubuntu" ];
|
|
in
|
|
{
|
|
enable = !config.system-manager.allowAnyDistro;
|
|
script = ''
|
|
source /etc/os-release
|
|
${lib.concatStringsSep "\n" (lib.flip map supportedIds (supportedId: ''
|
|
if [ $ID = "${supportedId}" ]; then
|
|
exit 0
|
|
fi
|
|
''))}
|
|
echo "This OS is not currently supported."
|
|
echo "Supported OSs are: ${lib.concatStringsSep ", " supportedIds}"
|
|
exit 1
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
}
|