forked from extern/flakelight
fad306c589
If merge is not set for an option type, it will use the default merge function; this was not what was intended. Updated the merge values for options that did not set one to mergeOneOption or mergeEqualOption.
45 lines
1.0 KiB
Nix
45 lines
1.0 KiB
Nix
# flakelight -- Framework for simplifying flake setup
|
|
# Copyright (C) 2023 Archit Gupta <archit@accelbread.com>
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
{ config, lib, ... }:
|
|
let
|
|
inherit (builtins) isPath isString;
|
|
inherit (lib) mkOption mkOptionType mkIf mkMerge;
|
|
inherit (lib.types) lazyAttrsOf nullOr;
|
|
inherit (lib.options) mergeEqualOption;
|
|
|
|
template = mkOptionType {
|
|
name = "template";
|
|
description = "template definition";
|
|
descriptionClass = "noun";
|
|
check = x: (x ? path) && (isPath x.path) &&
|
|
(x ? description) && (isString x.description) &&
|
|
((! x ? welcomeText) || (isString x.welcomeText));
|
|
merge = mergeEqualOption;
|
|
};
|
|
in
|
|
{
|
|
options = {
|
|
template = mkOption {
|
|
type = nullOr template;
|
|
default = null;
|
|
};
|
|
|
|
templates = mkOption {
|
|
type = lazyAttrsOf template;
|
|
default = { };
|
|
};
|
|
};
|
|
|
|
config = mkMerge [
|
|
(mkIf (config.template != null) {
|
|
templates.default = config.template;
|
|
})
|
|
|
|
(mkIf (config.templates != { }) {
|
|
outputs = { inherit (config) templates; };
|
|
})
|
|
];
|
|
}
|