refactor: split flake-parts modules
This commit is contained in:
parent
5cde37b26d
commit
7e3161ae67
7 changed files with 239 additions and 196 deletions
197
flake.nix
197
flake.nix
|
|
@ -41,200 +41,5 @@
|
|||
twitch-hls-client.url = "github:2bc4/twitch-hls-client";
|
||||
};
|
||||
|
||||
outputs =
|
||||
inputs@{
|
||||
self,
|
||||
nixpkgs,
|
||||
flake-parts,
|
||||
deploy-rs,
|
||||
home-manager,
|
||||
nvf,
|
||||
plasma-manager,
|
||||
...
|
||||
}:
|
||||
let
|
||||
namespace = "awesome-flake";
|
||||
lib = nixpkgs.lib.extend (
|
||||
_final: _prev: {
|
||||
${namespace} = import ./lib/module/default.nix { lib = nixpkgs.lib; };
|
||||
}
|
||||
);
|
||||
homeLib = lib.extend (
|
||||
_final: _prev: {
|
||||
hm = home-manager.lib.hm;
|
||||
}
|
||||
);
|
||||
|
||||
supportedSystems = [
|
||||
"x86_64-linux"
|
||||
"aarch64-linux"
|
||||
];
|
||||
|
||||
importTree =
|
||||
root:
|
||||
let
|
||||
scan =
|
||||
prefix: dir:
|
||||
lib.concatMapAttrs (
|
||||
name: type:
|
||||
let
|
||||
path = dir + "/${name}";
|
||||
moduleName = if prefix == "" then name else "${prefix}/${name}";
|
||||
in
|
||||
if type == "directory" then
|
||||
(lib.optionalAttrs (builtins.pathExists (path + "/default.nix")) {
|
||||
${moduleName} = import path;
|
||||
})
|
||||
// scan moduleName path
|
||||
else
|
||||
{ }
|
||||
) (builtins.readDir dir);
|
||||
in
|
||||
scan "" root;
|
||||
|
||||
packageSet = pkgs: {
|
||||
codeberg-themes = pkgs.callPackage ./packages/codeberg-themes { };
|
||||
ente-web-auth = pkgs.callPackage ./packages/ente-web-auth { };
|
||||
linkwarden = pkgs.callPackage ./packages/linkwarden { };
|
||||
redlib = pkgs.callPackage ./packages/redlib { };
|
||||
};
|
||||
|
||||
packageOverlay = final: prev: {
|
||||
${namespace} = (prev.${namespace} or { }) // packageSet final;
|
||||
};
|
||||
packageOverlayFor = name: final: prev: {
|
||||
${namespace} = (prev.${namespace} or { }) // {
|
||||
${name} = (packageSet final).${name};
|
||||
};
|
||||
};
|
||||
|
||||
overlays = {
|
||||
cinny = import ./overlays/cinny;
|
||||
redlib-fixed = import ./overlays/redlib-fixed;
|
||||
technitium-dns-server = import ./overlays/technitium-dns-server;
|
||||
packages = packageOverlay;
|
||||
"package/codeberg-themes" = packageOverlayFor "codeberg-themes";
|
||||
"package/ente-web-auth" = packageOverlayFor "ente-web-auth";
|
||||
"package/linkwarden" = packageOverlayFor "linkwarden";
|
||||
"package/redlib" = packageOverlayFor "redlib";
|
||||
default =
|
||||
final: prev:
|
||||
lib.composeManyExtensions [
|
||||
packageOverlay
|
||||
overlays.cinny
|
||||
overlays.redlib-fixed
|
||||
overlays.technitium-dns-server
|
||||
] final prev;
|
||||
};
|
||||
|
||||
pkgsFor =
|
||||
system:
|
||||
import nixpkgs {
|
||||
inherit system;
|
||||
config.allowUnfree = true;
|
||||
overlays = [ overlays.default ];
|
||||
};
|
||||
|
||||
nixosModules = importTree ./modules/nixos;
|
||||
homeManagerModules = importTree ./modules/home;
|
||||
commonSpecialArgs = {
|
||||
inherit inputs namespace;
|
||||
lib = lib;
|
||||
};
|
||||
commonHomeSpecialArgs = commonSpecialArgs // {
|
||||
lib = homeLib;
|
||||
};
|
||||
|
||||
commonHomeModules = builtins.attrValues homeManagerModules ++ [
|
||||
plasma-manager.homeModules.plasma-manager
|
||||
];
|
||||
|
||||
commonNixosModules = builtins.attrValues nixosModules ++ [
|
||||
home-manager.nixosModules.home-manager
|
||||
nvf.nixosModules.default
|
||||
{
|
||||
nixpkgs.overlays = [ overlays.default ];
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.backupFileExtension = "bk-hm";
|
||||
home-manager.sharedModules = commonHomeModules;
|
||||
home-manager.extraSpecialArgs = commonHomeSpecialArgs;
|
||||
}
|
||||
];
|
||||
|
||||
mkNixosConfiguration =
|
||||
system: modules:
|
||||
nixpkgs.lib.nixosSystem {
|
||||
inherit system;
|
||||
specialArgs = commonSpecialArgs;
|
||||
modules = commonNixosModules ++ modules;
|
||||
};
|
||||
|
||||
mkHomeConfiguration =
|
||||
system: modules:
|
||||
home-manager.lib.homeManagerConfiguration {
|
||||
pkgs = pkgsFor system;
|
||||
extraSpecialArgs = commonHomeSpecialArgs;
|
||||
modules = commonHomeModules ++ modules;
|
||||
};
|
||||
|
||||
nixosConfigurations = {
|
||||
aquarius = mkNixosConfiguration "aarch64-linux" [ ./systems/aarch64-linux/aquarius ];
|
||||
blarm = mkNixosConfiguration "x86_64-linux" [ ./systems/x86_64-linux/blarm ];
|
||||
bodenheizung = mkNixosConfiguration "x86_64-linux" [
|
||||
./systems/x86_64-linux/bodenheizung
|
||||
{ home-manager.users.philipp = import (./homes/x86_64-linux + "/philipp@bodenheizung"); }
|
||||
];
|
||||
dns = mkNixosConfiguration "x86_64-linux" [ ./systems/x86_64-linux/dns ];
|
||||
};
|
||||
|
||||
deployNode = nixosConfiguration: hostname: {
|
||||
inherit hostname;
|
||||
sshUser = "philipp";
|
||||
profiles.system = {
|
||||
user = "root";
|
||||
path =
|
||||
deploy-rs.lib.${nixosConfiguration.pkgs.stdenv.hostPlatform.system}.activate.nixos
|
||||
nixosConfiguration;
|
||||
};
|
||||
};
|
||||
in
|
||||
flake-parts.lib.mkFlake { inherit inputs; } {
|
||||
systems = supportedSystems;
|
||||
|
||||
perSystem =
|
||||
{ system, ... }:
|
||||
let
|
||||
pkgs = pkgsFor system;
|
||||
in
|
||||
{
|
||||
_module.args.pkgs = pkgs;
|
||||
|
||||
packages = packageSet pkgs;
|
||||
formatter = pkgs.nixfmt;
|
||||
checks = deploy-rs.lib.${system}.deployChecks self.deploy;
|
||||
};
|
||||
|
||||
flake = {
|
||||
inherit nixosConfigurations overlays;
|
||||
|
||||
nixosModules = nixosModules;
|
||||
homeManagerModules = homeManagerModules;
|
||||
homeModules = homeManagerModules;
|
||||
|
||||
homeConfigurations = {
|
||||
"philipp@bodenheizung" = mkHomeConfiguration "x86_64-linux" [
|
||||
(./homes/x86_64-linux + "/philipp@bodenheizung")
|
||||
];
|
||||
};
|
||||
|
||||
deploy.nodes = {
|
||||
aquarius = deployNode nixosConfigurations.aquarius "aquarius";
|
||||
blarm = deployNode nixosConfigurations.blarm "blarm";
|
||||
dns-1 = deployNode nixosConfigurations.dns "dns-1";
|
||||
dns-2 = deployNode nixosConfigurations.dns "dns-2";
|
||||
};
|
||||
};
|
||||
};
|
||||
outputs = inputs: inputs.flake-parts.lib.mkFlake { inherit inputs; } { imports = [ ./flake ]; };
|
||||
}
|
||||
|
|
|
|||
161
flake/default.nix
Normal file
161
flake/default.nix
Normal file
|
|
@ -0,0 +1,161 @@
|
|||
{
|
||||
inputs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
namespace = "awesome-flake";
|
||||
lib = inputs.nixpkgs.lib.extend (
|
||||
_final: _prev: {
|
||||
${namespace} = import ../lib/module/default.nix { lib = inputs.nixpkgs.lib; };
|
||||
}
|
||||
);
|
||||
homeLib = lib.extend (_final: _prev: { hm = inputs.home-manager.lib.hm; });
|
||||
|
||||
importTree =
|
||||
root:
|
||||
let
|
||||
scan =
|
||||
prefix: dir:
|
||||
lib.concatMapAttrs (
|
||||
name: type:
|
||||
let
|
||||
path = dir + "/${name}";
|
||||
moduleName = if prefix == "" then name else "${prefix}/${name}";
|
||||
in
|
||||
if type == "directory" then
|
||||
(lib.optionalAttrs (builtins.pathExists (path + "/default.nix")) {
|
||||
${moduleName} = import path;
|
||||
})
|
||||
// scan moduleName path
|
||||
else
|
||||
{ }
|
||||
) (builtins.readDir dir);
|
||||
in
|
||||
scan "" root;
|
||||
|
||||
packageSet = pkgs: {
|
||||
codeberg-themes = pkgs.callPackage ../packages/codeberg-themes { };
|
||||
ente-web-auth = pkgs.callPackage ../packages/ente-web-auth { };
|
||||
linkwarden = pkgs.callPackage ../packages/linkwarden { };
|
||||
redlib = pkgs.callPackage ../packages/redlib { };
|
||||
};
|
||||
|
||||
packageOverlay = final: prev: {
|
||||
${namespace} = (prev.${namespace} or { }) // packageSet final;
|
||||
};
|
||||
packageOverlayFor = name: final: prev: {
|
||||
${namespace} = (prev.${namespace} or { }) // {
|
||||
${name} = (packageSet final).${name};
|
||||
};
|
||||
};
|
||||
|
||||
overlays = rec {
|
||||
cinny = import ../overlays/cinny;
|
||||
redlib-fixed = import ../overlays/redlib-fixed;
|
||||
technitium-dns-server = import ../overlays/technitium-dns-server;
|
||||
packages = packageOverlay;
|
||||
"package/codeberg-themes" = packageOverlayFor "codeberg-themes";
|
||||
"package/ente-web-auth" = packageOverlayFor "ente-web-auth";
|
||||
"package/linkwarden" = packageOverlayFor "linkwarden";
|
||||
"package/redlib" = packageOverlayFor "redlib";
|
||||
default =
|
||||
final: prev:
|
||||
lib.composeManyExtensions [
|
||||
packageOverlay
|
||||
cinny
|
||||
redlib-fixed
|
||||
technitium-dns-server
|
||||
] final prev;
|
||||
};
|
||||
|
||||
pkgsFor =
|
||||
system:
|
||||
import inputs.nixpkgs {
|
||||
inherit system;
|
||||
config.allowUnfree = true;
|
||||
overlays = [ overlays.default ];
|
||||
};
|
||||
|
||||
nixosModules = importTree ../modules/nixos;
|
||||
homeManagerModules = importTree ../modules/home;
|
||||
|
||||
commonSpecialArgs = {
|
||||
inherit inputs namespace;
|
||||
lib = lib;
|
||||
};
|
||||
commonHomeSpecialArgs = commonSpecialArgs // {
|
||||
lib = homeLib;
|
||||
};
|
||||
|
||||
commonHomeModules = builtins.attrValues homeManagerModules ++ [
|
||||
inputs.plasma-manager.homeModules.plasma-manager
|
||||
];
|
||||
|
||||
commonNixosModules = builtins.attrValues nixosModules ++ [
|
||||
inputs.home-manager.nixosModules.home-manager
|
||||
inputs.nvf.nixosModules.default
|
||||
{
|
||||
nixpkgs.overlays = [ overlays.default ];
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.backupFileExtension = "bk-hm";
|
||||
home-manager.sharedModules = commonHomeModules;
|
||||
home-manager.extraSpecialArgs = commonHomeSpecialArgs;
|
||||
}
|
||||
];
|
||||
|
||||
mkNixosConfiguration =
|
||||
system: modules:
|
||||
inputs.nixpkgs.lib.nixosSystem {
|
||||
inherit system;
|
||||
specialArgs = commonSpecialArgs;
|
||||
modules = commonNixosModules ++ modules;
|
||||
};
|
||||
|
||||
mkHomeConfiguration =
|
||||
system: modules:
|
||||
inputs.home-manager.lib.homeManagerConfiguration {
|
||||
pkgs = pkgsFor system;
|
||||
extraSpecialArgs = commonHomeSpecialArgs;
|
||||
modules = commonHomeModules ++ modules;
|
||||
};
|
||||
|
||||
deployNode = nixosConfiguration: hostname: {
|
||||
inherit hostname;
|
||||
sshUser = "philipp";
|
||||
profiles.system = {
|
||||
user = "root";
|
||||
path =
|
||||
inputs.deploy-rs.lib.${nixosConfiguration.pkgs.stdenv.hostPlatform.system}.activate.nixos
|
||||
nixosConfiguration;
|
||||
};
|
||||
};
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
./deploy.nix
|
||||
./hosts.nix
|
||||
./modules.nix
|
||||
./overlays.nix
|
||||
./packages.nix
|
||||
];
|
||||
|
||||
systems = [
|
||||
"x86_64-linux"
|
||||
"aarch64-linux"
|
||||
];
|
||||
|
||||
_module.args = {
|
||||
inherit
|
||||
deployNode
|
||||
homeManagerModules
|
||||
mkHomeConfiguration
|
||||
mkNixosConfiguration
|
||||
nixosModules
|
||||
overlays
|
||||
packageSet
|
||||
pkgsFor
|
||||
;
|
||||
};
|
||||
}
|
||||
20
flake/deploy.nix
Normal file
20
flake/deploy.nix
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
{
|
||||
config,
|
||||
deployNode,
|
||||
inputs,
|
||||
...
|
||||
}:
|
||||
{
|
||||
flake.deploy.nodes = {
|
||||
aquarius = deployNode config.flake.nixosConfigurations.aquarius "aquarius";
|
||||
blarm = deployNode config.flake.nixosConfigurations.blarm "blarm";
|
||||
dns-1 = deployNode config.flake.nixosConfigurations.dns "dns-1";
|
||||
dns-2 = deployNode config.flake.nixosConfigurations.dns "dns-2";
|
||||
};
|
||||
|
||||
perSystem =
|
||||
{ system, ... }:
|
||||
{
|
||||
checks = inputs.deploy-rs.lib.${system}.deployChecks config.flake.deploy;
|
||||
};
|
||||
}
|
||||
27
flake/hosts.nix
Normal file
27
flake/hosts.nix
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
{
|
||||
mkHomeConfiguration,
|
||||
mkNixosConfiguration,
|
||||
...
|
||||
}:
|
||||
let
|
||||
homeRoot = ../homes/x86_64-linux;
|
||||
in
|
||||
{
|
||||
flake = {
|
||||
nixosConfigurations = {
|
||||
aquarius = mkNixosConfiguration "aarch64-linux" [ ../systems/aarch64-linux/aquarius ];
|
||||
blarm = mkNixosConfiguration "x86_64-linux" [ ../systems/x86_64-linux/blarm ];
|
||||
bodenheizung = mkNixosConfiguration "x86_64-linux" [
|
||||
../systems/x86_64-linux/bodenheizung
|
||||
{ home-manager.users.philipp = import (homeRoot + "/philipp@bodenheizung"); }
|
||||
];
|
||||
dns = mkNixosConfiguration "x86_64-linux" [ ../systems/x86_64-linux/dns ];
|
||||
};
|
||||
|
||||
homeConfigurations = {
|
||||
"philipp@bodenheizung" = mkHomeConfiguration "x86_64-linux" [
|
||||
(homeRoot + "/philipp@bodenheizung")
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
12
flake/modules.nix
Normal file
12
flake/modules.nix
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
homeManagerModules,
|
||||
nixosModules,
|
||||
...
|
||||
}:
|
||||
{
|
||||
flake = {
|
||||
inherit nixosModules homeManagerModules;
|
||||
|
||||
homeModules = homeManagerModules;
|
||||
};
|
||||
}
|
||||
4
flake/overlays.nix
Normal file
4
flake/overlays.nix
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{ overlays, ... }:
|
||||
{
|
||||
flake.overlays = overlays;
|
||||
}
|
||||
14
flake/packages.nix
Normal file
14
flake/packages.nix
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
{ packageSet, pkgsFor, ... }:
|
||||
{
|
||||
perSystem =
|
||||
{ system, ... }:
|
||||
let
|
||||
pkgs = pkgsFor system;
|
||||
in
|
||||
{
|
||||
_module.args.pkgs = pkgs;
|
||||
|
||||
packages = packageSet pkgs;
|
||||
formatter = pkgs.nixfmt;
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue