refactor: split flake-parts modules

This commit is contained in:
Philipp 2026-08-07 16:10:43 +02:00
commit 7e3161ae67
Signed by: Philipp
GPG key ID: B27C3DE2FD94AFC3
7 changed files with 239 additions and 196 deletions

197
flake.nix
View file

@ -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
View 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
View 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
View 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
View file

@ -0,0 +1,12 @@
{
homeManagerModules,
nixosModules,
...
}:
{
flake = {
inherit nixosModules homeManagerModules;
homeModules = homeManagerModules;
};
}

4
flake/overlays.nix Normal file
View file

@ -0,0 +1,4 @@
{ overlays, ... }:
{
flake.overlays = overlays;
}

14
flake/packages.nix Normal file
View file

@ -0,0 +1,14 @@
{ packageSet, pkgsFor, ... }:
{
perSystem =
{ system, ... }:
let
pkgs = pkgsFor system;
in
{
_module.args.pkgs = pkgs;
packages = packageSet pkgs;
formatter = pkgs.nixfmt;
};
}