1
1
mirror of https://github.com/NixOS/mobile-nixos.git synced 2024-12-14 18:21:41 +03:00
mobile-nixos/modules/generated-filesystems.nix
Samuel Dionne-Riel 22eddafd91 generated-filesystems: overridable options for filesystem generation
This allows filesystem generation to be re-configured without overriding
all options.
2020-05-31 18:54:07 -04:00

93 lines
2.5 KiB
Nix

# Generated filesystems, contrary to filesystems on a configured system.
#
# This contains the machinery to produce filesystem images.
{ config, lib, pkgs, ...}:
let
inherit (lib) types;
filesystemFunctions = {
"ext4" = pkgs.imageBuilder.fileSystem.makeExt4;
};
filesystemSubmodule =
{ name, config, ... }: {
options = {
type = lib.mkOption {
type = types.enum [ "ext4" ];
description = ''
Type of the generated filesystem.
'';
};
label = lib.mkOption {
type = types.str;
description = ''
The label used by the generated rootfs, when generating a rootfs, and
the filesystem label a Mobile NixOS system will look for by default.
'';
};
id = lib.mkOption {
type = types.str;
description = ''
The UUID used by the generated rootfs, when generating a rootfs.
'';
};
populateCommands = lib.mkOption {
type = types.lines;
description = ''
Commands used to fill the filesystem.
`$PWD` is the root of the filesystem.
'';
};
postProcess = lib.mkOption {
type = types.lines;
internal = true;
description = ''
Commands used to manipulate the filesystem after it has been
created.
'';
};
extraPadding = lib.mkOption {
type = types.int;
description = ''
Extra padding to add to the filesystem image.
'';
};
zstd = lib.mkOption {
internal = true;
type = types.bool;
description = ''
Whether to compress this artifact; used to work around size
limitations in CI situations.
'';
};
};
config = {
};
}
;
in
{
options = {
mobile.generatedFilesystems = lib.mkOption {
type = types.attrsOf (types.submodule filesystemSubmodule);
description = ''
Filesystem definitions that will be created at build.
'';
};
};
config = {
system.build.generatedFilesystems = lib.attrsets.mapAttrs (name: {type, id, label, ...} @ attrs:
filesystemFunctions."${type}" (attrs // {
name = label;
partitionID = id;
})
) config.mobile.generatedFilesystems;
# Compatibility alias with the previous path.
system.build.rootfs = config.system.build.generatedFilesystems.rootfs;
};
}