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
|
outputs = { self, nixpkgs, nixos-hardware, flake-utils, home-manager, nur
|
||||||
, neovim, obelisk, photoprism-flake, pre-commit-hooks, nvim-ts-autotag
|
, neovim, obelisk, photoprism-flake, pre-commit-hooks, nvim-ts-autotag
|
||||||
, nvim-ts-context-commentstring }:
|
, nvim-ts-context-commentstring }@inputs:
|
||||||
let
|
let
|
||||||
overlays = {
|
overlays = {
|
||||||
neovim = self: super:
|
neovim = self: super:
|
||||||
|
@ -78,43 +78,58 @@
|
||||||
photoprism = photoprism-flake.defaultPackage.${self.system};
|
photoprism = photoprism-flake.defaultPackage.${self.system};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
systemModule = { hostName, hardwareConfig, config }:
|
nixosModules = { flakeDefaults = import ./modules/flakeDefaults.nix; };
|
||||||
({ pkgs, ... }: {
|
homeManagerModules = { git = import ./home/modules/git.nix; };
|
||||||
networking.hostName = hostName;
|
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
|
nixpkgs.overlays = systemDefaults.overlays;
|
||||||
# of this flake.
|
|
||||||
system.configurationRevision = nixpkgs.lib.mkIf (self ? rev) self.rev;
|
|
||||||
|
|
||||||
nix.registry.nixpkgs.flake = nixpkgs;
|
imports = systemDefaults.modules ++ [
|
||||||
|
hardwareConfig
|
||||||
nixpkgs.overlays = [
|
config
|
||||||
nur.overlay
|
{
|
||||||
overlays.neovim
|
# make arguments available to modules
|
||||||
overlays.deconz
|
_module.args = { inherit self inputs; };
|
||||||
overlays.photoprism
|
}
|
||||||
overlays.obelisk
|
];
|
||||||
];
|
});
|
||||||
|
createUser' = import ./lib/createUser.nix;
|
||||||
imports =
|
createUser = name: args:
|
||||||
[ hardwareConfig home-manager.nixosModules.home-manager config ];
|
({ pkgs, ... }@args2:
|
||||||
});
|
(createUser' name args) ({ inherit home-manager; } // args2));
|
||||||
|
};
|
||||||
in rec {
|
in rec {
|
||||||
|
|
||||||
inherit overlays;
|
inherit lib overlays nixosModules homeManagerModules;
|
||||||
|
|
||||||
homeManagerModules.git = import ./home/modules/git.nix;
|
|
||||||
|
|
||||||
nixosConfigurations.felix-nixos = nixpkgs.lib.nixosSystem {
|
nixosConfigurations.felix-nixos = nixpkgs.lib.nixosSystem {
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
modules = [
|
modules = [
|
||||||
nixpkgs.nixosModules.notDetected
|
nixpkgs.nixosModules.notDetected
|
||||||
{ home-manager.users.felschr.imports = [ homeManagerModules.git ]; }
|
(lib.createSystem "felix-nixos" {
|
||||||
(systemModule {
|
|
||||||
hostName = "felix-nixos";
|
|
||||||
hardwareConfig = ./hardware/felix-nixos.nix;
|
hardwareConfig = ./hardware/felix-nixos.nix;
|
||||||
config = ./home-pc.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";
|
system = "x86_64-linux";
|
||||||
modules = [
|
modules = [
|
||||||
nixpkgs.nixosModules.notDetected
|
nixpkgs.nixosModules.notDetected
|
||||||
{ home-manager.users.felschr.imports = [ homeManagerModules.git ]; }
|
(lib.createSystem "pilot1" {
|
||||||
(systemModule {
|
|
||||||
hostName = "pilot1";
|
|
||||||
hardwareConfig = ./hardware-configuration.nix; # TODO
|
hardwareConfig = ./hardware-configuration.nix; # TODO
|
||||||
config = ./work-pc.nix;
|
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 = [
|
modules = [
|
||||||
nixpkgs.nixosModules.notDetected
|
nixpkgs.nixosModules.notDetected
|
||||||
nixos-hardware.nixosModules.raspberry-pi-4
|
nixos-hardware.nixosModules.raspberry-pi-4
|
||||||
{
|
|
||||||
home-manager.users.felschr.imports = [ homeManagerModules.git ];
|
|
||||||
}
|
|
||||||
# photoprism-flake.nixosModules.photoprism
|
# photoprism-flake.nixosModules.photoprism
|
||||||
(systemModule {
|
(lib.createSystem "felix-rpi4" {
|
||||||
hostName = "felix-rpi4";
|
|
||||||
hardwareConfig = ./hardware/rpi4.nix;
|
hardwareConfig = ./hardware/rpi4.nix;
|
||||||
config = ./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 ];
|
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
|
# only change this when specified in release notes
|
||||||
system.stateVersion = "21.05";
|
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") ];
|
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
|
# only change this when specified in release notes
|
||||||
system.stateVersion = "21.05";
|
system.stateVersion = "21.05";
|
||||||
}
|
}
|
||||||
|
|
13
work-pc.nix
13
work-pc.nix
|
@ -32,19 +32,6 @@
|
||||||
|
|
||||||
services.printing.drivers = with pkgs; [ epson-escpr ];
|
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
|
# only change this when specified in release notes
|
||||||
system.stateVersion = "21.05";
|
system.stateVersion = "21.05";
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue