feat: improve flake structure
This commit is contained in:
parent
969be6b552
commit
b30e96b595
90
flake.nix
90
flake.nix
|
@ -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;
|
||||
})
|
||||
];
|
||||
};
|
||||
|
||||
|
|
13
home-pc.nix
13
home-pc.nix
|
@ -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
18
lib/createUser.nix
Normal 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
17
modules/flakeDefaults.nix
Normal 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;
|
||||
};
|
||||
}
|
14
rpi4.nix
14
rpi4.nix
|
@ -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";
|
||||
}
|
||||
|
|
13
work-pc.nix
13
work-pc.nix
|
@ -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";
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue