mirror of
https://github.com/buckley310/nixos-config.git
synced 2024-11-09 18:47:02 +00:00
modularize hosts function
This commit is contained in:
parent
ed1020974a
commit
361fe957c6
11 changed files with 48 additions and 40 deletions
12
flake.nix
12
flake.nix
|
@ -2,10 +2,12 @@
|
||||||
inputs.nixpkgs.url = "nixpkgs/nixos-21.05";
|
inputs.nixpkgs.url = "nixpkgs/nixos-21.05";
|
||||||
inputs.unstable.url = "nixpkgs/nixos-unstable";
|
inputs.unstable.url = "nixpkgs/nixos-unstable";
|
||||||
|
|
||||||
outputs = { self, unstable, nixpkgs }: {
|
outputs = { self, ... }@inputs:
|
||||||
nixosModule = { ... }: {
|
{
|
||||||
imports = [ ./. ];
|
nixosModule = { ... }: { imports = [ ./. ]; };
|
||||||
};
|
|
||||||
nixosConfigurations = import ./hosts { modules = [ ./. ]; inherit unstable nixpkgs; };
|
nixosConfigurations = self.lib.getHosts inputs ./hosts;
|
||||||
|
|
||||||
|
lib.getHosts = import lib/hosts.nix;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,35 +0,0 @@
|
||||||
{ modules, nixpkgs, unstable }:
|
|
||||||
let
|
|
||||||
|
|
||||||
hostMetadata =
|
|
||||||
let
|
|
||||||
fs = builtins.readDir ./.;
|
|
||||||
inherit (builtins) concatMap attrNames;
|
|
||||||
hostNames = concatMap (x: if fs.${x} == "directory" then [ x ] else [ ]) (attrNames fs);
|
|
||||||
in
|
|
||||||
builtins.listToAttrs (map
|
|
||||||
(hn: { name = hn; value = import (./. + "/${hn}"); })
|
|
||||||
hostNames);
|
|
||||||
|
|
||||||
hardwareModule = hardware: (
|
|
||||||
{
|
|
||||||
qemu = (x: { imports = [ "${x.modulesPath}/profiles/qemu-guest.nix" ]; });
|
|
||||||
physical = (x: { imports = [ "${x.modulesPath}/installer/scan/not-detected.nix" ]; });
|
|
||||||
}
|
|
||||||
).${hardware};
|
|
||||||
|
|
||||||
in
|
|
||||||
builtins.mapAttrs
|
|
||||||
(n: v:
|
|
||||||
let pkgs = { inherit nixpkgs unstable; }.${v.pkgs};
|
|
||||||
in
|
|
||||||
pkgs.lib.nixosSystem {
|
|
||||||
inherit (v) system;
|
|
||||||
modules = modules ++ [
|
|
||||||
(./. + "/${n}/configuration.nix")
|
|
||||||
(hardwareModule v.hardware)
|
|
||||||
({ ... }: { networking.hostName = n; })
|
|
||||||
];
|
|
||||||
}
|
|
||||||
)
|
|
||||||
hostMetadata
|
|
|
@ -3,4 +3,6 @@
|
||||||
services.qemuGuest.enable = true;
|
services.qemuGuest.enable = true;
|
||||||
sconfig.profile = "server";
|
sconfig.profile = "server";
|
||||||
services.getty.autologinUser = "root";
|
services.getty.autologinUser = "root";
|
||||||
|
fileSystems."/" = { device = "/dev/vda1"; fsType = "ext4"; };
|
||||||
|
boot.loader.grub.device = "nodev";
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,4 +2,5 @@
|
||||||
pkgs = "unstable";
|
pkgs = "unstable";
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
hardware = "qemu";
|
hardware = "qemu";
|
||||||
|
module = ./configuration.nix;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,4 +4,6 @@
|
||||||
sconfig.profile = "desktop";
|
sconfig.profile = "desktop";
|
||||||
sconfig.gnome = true;
|
sconfig.gnome = true;
|
||||||
services.getty.autologinUser = "root";
|
services.getty.autologinUser = "root";
|
||||||
|
fileSystems."/" = { device = "/dev/vda1"; fsType = "ext4"; };
|
||||||
|
boot.loader.grub.device = "nodev";
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,4 +2,5 @@
|
||||||
pkgs = "unstable";
|
pkgs = "unstable";
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
hardware = "qemu";
|
hardware = "qemu";
|
||||||
|
module = ./configuration.nix;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,4 +2,5 @@
|
||||||
pkgs = "nixpkgs";
|
pkgs = "nixpkgs";
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
hardware = "physical";
|
hardware = "physical";
|
||||||
|
module = ./configuration.nix;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,4 +2,5 @@
|
||||||
pkgs = "nixpkgs";
|
pkgs = "nixpkgs";
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
hardware = "physical";
|
hardware = "physical";
|
||||||
|
module = ./configuration.nix;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,4 +2,5 @@
|
||||||
pkgs = "nixpkgs";
|
pkgs = "nixpkgs";
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
hardware = "physical";
|
hardware = "physical";
|
||||||
|
module = ./configuration.nix;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,4 +2,5 @@
|
||||||
pkgs = "nixpkgs";
|
pkgs = "nixpkgs";
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
hardware = "physical";
|
hardware = "physical";
|
||||||
|
module = ./configuration.nix;
|
||||||
}
|
}
|
||||||
|
|
31
lib/hosts.nix
Normal file
31
lib/hosts.nix
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
callerInputs: hostsPath:
|
||||||
|
let
|
||||||
|
|
||||||
|
hostMetadata = builtins.mapAttrs
|
||||||
|
(name: _: import (hostsPath + "/${name}"))
|
||||||
|
(builtins.readDir hostsPath);
|
||||||
|
|
||||||
|
hardwareModules =
|
||||||
|
{
|
||||||
|
physical = (x: { imports = [ "${x.modulesPath}/installer/scan/not-detected.nix" ]; });
|
||||||
|
vmware = (x: { virtualisation.vmware.guest.enable = true; });
|
||||||
|
qemu = (x: {
|
||||||
|
services.qemuGuest.enable = true;
|
||||||
|
imports = [ "${x.modulesPath}/profiles/qemu-guest.nix" ];
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
getHostConfig = hostName: hostMeta:
|
||||||
|
callerInputs.${hostMeta.pkgs}.lib.nixosSystem
|
||||||
|
{
|
||||||
|
inherit (hostMeta) system;
|
||||||
|
modules = [
|
||||||
|
(callerInputs.self.nixosModule)
|
||||||
|
(hostMeta.module)
|
||||||
|
(hardwareModules.${hostMeta.hardware})
|
||||||
|
(_: { networking.hostName = hostName; })
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
in
|
||||||
|
builtins.mapAttrs getHostConfig hostMetadata
|
Loading…
Reference in a new issue