61 lines
1.3 KiB
Nix
61 lines
1.3 KiB
Nix
|
{ config, lib, ... }:
|
||
|
|
||
|
with lib;
|
||
|
let
|
||
|
cfg = config.my.nixpkgs;
|
||
|
|
||
|
overlayType = mkOptionType {
|
||
|
name = "nixpkgs-overlay";
|
||
|
description = "nixpkgs overlay";
|
||
|
check = lib.isFunction;
|
||
|
merge = lib.mergeOneOption;
|
||
|
};
|
||
|
in
|
||
|
{
|
||
|
options.my.nixpkgs = {
|
||
|
overlays = mkOption {
|
||
|
default = [ ];
|
||
|
type = types.listOf overlayType;
|
||
|
example = literalExpression
|
||
|
''
|
||
|
[
|
||
|
(self: super: {
|
||
|
openssh = super.openssh.override {
|
||
|
hpnSupport = true;
|
||
|
kerberos = self.libkrb5;
|
||
|
};
|
||
|
})
|
||
|
]
|
||
|
'';
|
||
|
};
|
||
|
channels = mkOption {
|
||
|
default = { };
|
||
|
example = literalExpression ''
|
||
|
{
|
||
|
stable = inputs.nixpkgs-stable;
|
||
|
}
|
||
|
'';
|
||
|
type = with types; attrsOf package;
|
||
|
};
|
||
|
overlaysForAllChannels = mkEnableOption "apply overlays for all channels";
|
||
|
};
|
||
|
|
||
|
config.nixpkgs = {
|
||
|
overlays =
|
||
|
let
|
||
|
channelOverlays = _: prev:
|
||
|
mapAttrs
|
||
|
(_: value:
|
||
|
import value {
|
||
|
inherit (prev) system;
|
||
|
overlays = optional cfg.overlaysForAllChannels cfg.overlays;
|
||
|
}
|
||
|
)
|
||
|
cfg.channels;
|
||
|
in
|
||
|
cfg.overlays ++ [ channelOverlays ];
|
||
|
|
||
|
config.allowUnfree = true;
|
||
|
};
|
||
|
}
|