feat: improve flake structure

This commit is contained in:
Felix Schröter 2021-08-08 17:44:59 +02:00
parent 969be6b552
commit b30e96b595
No known key found for this signature in database
GPG key ID: 910ACB9F6BD26F58
6 changed files with 91 additions and 74 deletions

View file

@ -46,7 +46,7 @@
outputs = { self, nixpkgs, nixos-hardware, flake-utils, home-manager, nur
, neovim, obelisk, photoprism-flake, pre-commit-hooks, nvim-ts-autotag
, nvim-ts-context-commentstring }:
, nvim-ts-context-commentstring }@inputs:
let
overlays = {
neovim = self: super:
@ -78,43 +78,58 @@
photoprism = photoprism-flake.defaultPackage.${self.system};
};
};
systemModule = { hostName, hardwareConfig, config }:
({ pkgs, ... }: {
networking.hostName = hostName;
nixosModules = { flakeDefaults = import ./modules/flakeDefaults.nix; };
homeManagerModules = { git = import ./home/modules/git.nix; };
systemDefaults = {
modules = [ nixosModules.flakeDefaults ];
overlays = [
nur.overlay
overlays.wayland
overlays.neovim
overlays.deconz
overlays.photoprism
overlays.obelisk
];
};
lib = rec {
createSystem = hostName:
{ hardwareConfig, config }:
({ pkgs, lib, ... }: {
networking.hostName = hostName;
# Let 'nixos-version --json' know about the Git revision
# of this flake.
system.configurationRevision = nixpkgs.lib.mkIf (self ? rev) self.rev;
nixpkgs.overlays = systemDefaults.overlays;
nix.registry.nixpkgs.flake = nixpkgs;
nixpkgs.overlays = [
nur.overlay
overlays.neovim
overlays.deconz
overlays.photoprism
overlays.obelisk
];
imports =
[ hardwareConfig home-manager.nixosModules.home-manager config ];
});
imports = systemDefaults.modules ++ [
hardwareConfig
config
{
# make arguments available to modules
_module.args = { inherit self inputs; };
}
];
});
createUser' = import ./lib/createUser.nix;
createUser = name: args:
({ pkgs, ... }@args2:
(createUser' name args) ({ inherit home-manager; } // args2));
};
in rec {
inherit overlays;
homeManagerModules.git = import ./home/modules/git.nix;
inherit lib overlays nixosModules homeManagerModules;
nixosConfigurations.felix-nixos = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
nixpkgs.nixosModules.notDetected
{ home-manager.users.felschr.imports = [ homeManagerModules.git ]; }
(systemModule {
hostName = "felix-nixos";
(lib.createSystem "felix-nixos" {
hardwareConfig = ./hardware/felix-nixos.nix;
config = ./home-pc.nix;
})
(lib.createUser "felschr" {
user.extraGroups = [ "wheel" "audio" "docker" "disk" ];
modules = [ homeManagerModules.git ];
config = ./home/felschr.nix;
})
];
};
@ -122,12 +137,15 @@
system = "x86_64-linux";
modules = [
nixpkgs.nixosModules.notDetected
{ home-manager.users.felschr.imports = [ homeManagerModules.git ]; }
(systemModule {
hostName = "pilot1";
(lib.createSystem "pilot1" {
hardwareConfig = ./hardware-configuration.nix; # TODO
config = ./work-pc.nix;
})
(lib.createUser "felschr" {
user.extraGroups = [ "wheel" "audio" "docker" "disk" ];
modules = [ homeManagerModules.git ];
config = ./home/felschr-work.nix;
})
];
};
@ -136,15 +154,19 @@
modules = [
nixpkgs.nixosModules.notDetected
nixos-hardware.nixosModules.raspberry-pi-4
{
home-manager.users.felschr.imports = [ homeManagerModules.git ];
}
# photoprism-flake.nixosModules.photoprism
(systemModule {
hostName = "felix-rpi4";
(lib.createSystem "felix-rpi4" {
hardwareConfig = ./hardware/rpi4.nix;
config = ./rpi4.nix;
})
(lib.createUser "felschr" {
user = {
extraGroups = [ "wheel" "audio" "disk" "media" ];
openssh.authorizedKeys.keyFiles = [ ./key ];
};
modules = [ homeManagerModules.git ];
config = ./home/felschr-rpi4.nix;
})
];
};