refactor(flake.nix): Use flake-parts to simplify flake.nix
This commit is contained in:
parent
f7a64063bb
commit
10e72d3c19
10 changed files with 380 additions and 271 deletions
136
flakeModules/deploy-rs.nix
Normal file
136
flakeModules/deploy-rs.nix
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
{ lib, ... }@exportingFlake:
|
||||
let
|
||||
inherit (lib) mkOption types;
|
||||
|
||||
deploy-rs-for-system =
|
||||
system:
|
||||
(import exportingFlake.inputs.nixpkgs {
|
||||
inherit system;
|
||||
overlays = [
|
||||
exportingFlake.inputs.deploy-rs.overlays.default
|
||||
(_final: prev: {
|
||||
deploy-rs = {
|
||||
inherit (exportingFlake.inputs.nixpkgs.legacyPackages.${system}) deploy-rs;
|
||||
inherit (prev.deploy-rs) lib;
|
||||
};
|
||||
})
|
||||
];
|
||||
}).deploy-rs;
|
||||
in
|
||||
{ config, ... }:
|
||||
let
|
||||
cfg = config.deploy;
|
||||
in
|
||||
{
|
||||
options.deploy =
|
||||
let
|
||||
genericOptions =
|
||||
let
|
||||
mkGenericOption =
|
||||
type:
|
||||
mkOption {
|
||||
type = types.nullOr type;
|
||||
default = null;
|
||||
};
|
||||
in
|
||||
{
|
||||
options = {
|
||||
sshUser = mkGenericOption types.str;
|
||||
user = mkGenericOption types.str;
|
||||
sshOpts = mkGenericOption (types.listOf types.str);
|
||||
fastConnection = mkGenericOption types.bool;
|
||||
autoRollback = mkGenericOption types.bool;
|
||||
magicRollback = mkGenericOption types.bool;
|
||||
confirmTimeout = mkGenericOption types.int;
|
||||
activationTimeout = mkGenericOption types.int;
|
||||
tempPath = mkGenericOption types.str;
|
||||
interactiveSudo = mkGenericOption types.bool;
|
||||
};
|
||||
};
|
||||
|
||||
profileModule =
|
||||
{ config, ... }:
|
||||
{
|
||||
imports = [ genericOptions ];
|
||||
|
||||
options = {
|
||||
activation = mkOption {
|
||||
type = types.oneOf [
|
||||
(types.enum [
|
||||
"nixos"
|
||||
"home-manager"
|
||||
"darwin"
|
||||
"noop"
|
||||
])
|
||||
];
|
||||
};
|
||||
|
||||
closure = mkOption { type = types.raw; };
|
||||
|
||||
profilePath = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
};
|
||||
|
||||
path = mkOption {
|
||||
type = types.raw;
|
||||
internal = true;
|
||||
};
|
||||
};
|
||||
|
||||
config =
|
||||
let
|
||||
inherit (config.closure.config.nixpkgs.hostPlatform) system;
|
||||
deploy-rs = deploy-rs-for-system system;
|
||||
in
|
||||
lib.mkMerge [
|
||||
(lib.mkIf (lib.elem config.activation [
|
||||
"nixos"
|
||||
"home-manager"
|
||||
"darwin"
|
||||
"noop"
|
||||
]) { path = deploy-rs.lib.activate.${config.activation} config.closure; })
|
||||
];
|
||||
};
|
||||
|
||||
nodeModule = {
|
||||
imports = [ genericOptions ];
|
||||
|
||||
options = {
|
||||
hostname = mkOption { type = types.str; };
|
||||
|
||||
profilesOrder = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [ ];
|
||||
};
|
||||
|
||||
profiles = mkOption {
|
||||
type = types.attrsOf (types.submoduleWith { modules = [ profileModule ]; });
|
||||
|
||||
apply = lib.mapAttrs (
|
||||
_: profile:
|
||||
lib.filterAttrs (
|
||||
name: val:
|
||||
!(lib.elem name [
|
||||
"activation"
|
||||
"closure"
|
||||
])
|
||||
&& val != null
|
||||
) profile
|
||||
);
|
||||
|
||||
default = { };
|
||||
};
|
||||
};
|
||||
};
|
||||
in
|
||||
{
|
||||
nodes = mkOption {
|
||||
default = { };
|
||||
type = types.attrsOf (types.submoduleWith { modules = [ nodeModule ]; });
|
||||
apply = lib.mapAttrs (_: node: lib.filterAttrs (_: val: val != null) node);
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf (cfg.nodes != { }) { flake.deploy.nodes = cfg.nodes; };
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue