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;
})
];
};

View file

@ -44,19 +44,6 @@
services.printing.drivers = with pkgs; [ epson-escpr ];
users.users.felschr = {
isNormalUser = true;
extraGroups = [ "wheel" "audio" "docker" "disk" ];
shell = pkgs.zsh;
};
home-manager = {
useUserPackages = true;
useGlobalPkgs = true;
backupFileExtension = "backup";
users.felschr = import ./home/felschr.nix;
};
# only change this when specified in release notes
system.stateVersion = "21.05";
}

18
lib/createUser.nix Normal file
View file

@ -0,0 +1,18 @@
name:
{ user ? { }, hm ? { }, modules ? [ ], config, ... }:
{ pkgs, lib, home-manager, ... }: {
imports = [ home-manager.nixosModules.home-manager ];
users.users."${name}" = {
isNormalUser = true;
shell = pkgs.zsh;
} // user;
home-manager = {
useUserPackages = true;
useGlobalPkgs = true;
backupFileExtension = "backup";
users."${name}" = lib.mkMerge [ { imports = modules; } (import config) ];
} // hm;
}

17
modules/flakeDefaults.nix Normal file
View file

@ -0,0 +1,17 @@
{ pkgs, lib, self, inputs, ... }:
let
flakes = lib.filterAttrs (name: value: value ? outputs) inputs;
nixRegistry = builtins.mapAttrs (name: v: { flake = v; }) flakes;
in {
# Let 'nixos-version --json' know about the Git revision
# of this flake.
system.configurationRevision = lib.mkIf (self ? rev) self.rev;
nix = {
extraOptions = "experimental-features = nix-command flakes";
nixPath = lib.mapAttrsToList (n: v: "${n}=${v}") flakes;
registry = nixRegistry;
package = pkgs.nixUnstable;
};
}

View file

@ -85,20 +85,6 @@ with builtins; {
authorizedKeys = [ (readFile "./key") ];
};
users.users.felschr = {
isNormalUser = true;
extraGroups = [ "wheel" "audio" "disk" "media" ];
shell = pkgs.zsh;
openssh.authorizedKeys.keyFiles = [ ./key ];
};
home-manager = {
useUserPackages = true;
useGlobalPkgs = true;
backupFileExtension = "backup";
users.felschr = import ./home/felschr-rpi4.nix;
};
# only change this when specified in release notes
system.stateVersion = "21.05";
}

View file

@ -32,19 +32,6 @@
services.printing.drivers = with pkgs; [ epson-escpr ];
users.users.felschr = {
isNormalUser = true;
extraGroups = [ "wheel" "audio" "docker" "disk" ];
shell = pkgs.zsh;
};
home-manager = {
useUserPackages = true;
useGlobalPkgs = true;
backupFileExtension = "backup";
users.felschr = import ./home/felschr-work.nix;
};
# only change this when specified in release notes
system.stateVersion = "21.05";
}