feat: rework to modular

This commit is contained in:
eric
2026-04-10 17:25:08 +02:00
parent 28dad81816
commit 99658b27dc
39 changed files with 738 additions and 211 deletions

133
flake.nix
View File

@@ -1,14 +1,16 @@
{
description = "NodeiWest employee and workstation flake";
description = "NodeiWest company Nix SDK";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
deployment = {
url = "git+file:../nix-deployment";
nix-darwin = {
url = "github:LnL7/nix-darwin";
inputs.nixpkgs.follows = "nixpkgs";
};
};
@@ -17,33 +19,116 @@
inputs@{
self,
nixpkgs,
deployment,
...
}:
let
lib = nixpkgs.lib;
supportedSystems = [
"aarch64-darwin"
"x86_64-darwin"
"x86_64-linux"
];
forAllSystems = lib.genAttrs supportedSystems;
defaults = import ./lib/defaults.nix { inherit lib; };
inherit (defaults) forAllSystems supportedSystems;
shellFactories = {
default = args: import ./shells/default.nix args;
node = args: import ./shells/node.nix (args // { inherit lib; });
go = args: import ./shells/go.nix args;
rust = args: import ./shells/rust.nix (args // { inherit lib; });
};
profileModules = {
backend = import ./profiles/backend.nix;
frontend = import ./profiles/frontend.nix;
minimal = import ./profiles/minimal.nix;
};
darwinSystem = args: import ./systems/darwin/default.nix ({ inherit inputs; } // args);
linuxHome = args: import ./systems/linux/default.nix ({ inherit inputs; } // args);
in
{
homeManagerModules.default = ./modules/home.nix;
homeManagerModules.helpers = ./modules/helpers/home.nix;
packages = forAllSystems (system: {
nodeiwest-helper = deployment.packages.${system}.nodeiwest-helper;
default = self.packages.${system}.nodeiwest-helper;
});
apps = forAllSystems (system: {
nodeiwest-helper = {
type = "app";
program = "${self.packages.${system}.nodeiwest-helper}/bin/nodeiwest";
lib = {
inherit (defaults) companySessionVariables forAllSystems supportedSystems;
mkProfile = import ./lib/mkProfile.nix;
mkSystem = import ./lib/mkSystem.nix {
systems = {
darwin = darwinSystem;
linux = linuxHome;
};
};
default = self.apps.${system}.nodeiwest-helper;
});
shells = shellFactories;
systems = {
darwin = darwinSystem;
linux = linuxHome;
};
};
homeManagerModules = {
base = {
nix = import ./modules/base/nix.nix;
core = import ./modules/base/core.nix;
shell = import ./modules/base/shell.nix;
fonts = import ./modules/base/fonts.nix;
};
dev = {
node = import ./modules/dev/node.nix;
go = import ./modules/dev/go.nix;
rust = import ./modules/dev/rust.nix;
docker = import ./modules/dev/docker.nix;
};
roles = {
backend = import ./modules/roles/backend.nix;
frontend = import ./modules/roles/frontend.nix;
infra = import ./modules/roles/infra.nix;
minimal = import ./modules/roles/minimal.nix;
};
services = {
tailscale = import ./modules/services/tailscale.nix;
ssh = import ./modules/services/ssh.nix;
gpg = import ./modules/services/gpg.nix;
};
secrets = {
env = import ./modules/secrets/env.nix;
openbao = import ./modules/secrets/openbao.nix;
};
optional = {
homebrew = import ./modules/optional/homebrew.nix;
gui = import ./modules/optional/gui.nix;
devtools = import ./modules/optional/devtools.nix;
};
profiles = profileModules;
default = import ./modules/home.nix;
};
devShells = forAllSystems (
system:
let
pkgs = import nixpkgs { inherit system; };
in
{
default = shellFactories.default { inherit pkgs; };
node = shellFactories.node { inherit pkgs; };
go = shellFactories.go { inherit pkgs; };
rust = shellFactories.rust { inherit pkgs; };
}
);
formatter = forAllSystems (
system:
let
pkgs = import nixpkgs { inherit system; };
in
pkgs.nixfmt
);
templates = {
user-flake = {
path = ./templates/user-flake;
description = "Starter personal flake wired to NodeiWest profiles.";
};
};
};
}