{ 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"; }; nix-darwin = { url = "github:LnL7/nix-darwin"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = inputs@{ self, nixpkgs, ... }: let lib = nixpkgs.lib; 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 { lib = { inherit (defaults) companySessionVariables forAllSystems supportedSystems; mkProfile = import ./lib/mkProfile.nix; mkSystem = import ./lib/mkSystem.nix { systems = { darwin = darwinSystem; linux = linuxHome; }; }; 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."; }; }; }; }