{ description = "nix-config — multi-host Nix configurations"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; nix-darwin = { url = "github:LnL7/nix-darwin"; inputs.nixpkgs.follows = "nixpkgs"; }; home-manager = { url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; sops-nix = { url = "github:Mic92/sops-nix"; inputs.nixpkgs.follows = "nixpkgs"; }; arion = { url = "github:hercules-ci/arion"; inputs.nixpkgs.follows = "nixpkgs"; }; # Personal CLIs built from own repos lem = { # ssh fetch via flake; ssh key available to nix-daemon. Private repo. url = "git+ssh://git@git.iscg.dev:2222/mikl/lem.git?ref=master"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { self, nixpkgs, nix-darwin, home-manager, sops-nix, arion, lem, ... }: let mkNixos = hostname: nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ ./hosts/common ./hosts/${hostname} sops-nix.nixosModules.sops home-manager.nixosModules.home-manager arion.nixosModules.arion { home-manager = { useGlobalPkgs = true; useUserPackages = true; backupFileExtension = "backup"; # Серверные хосты используют минимульный home (headless). # Десктоп-хосты (если появятся) могут переопределить users.mikl. users.mikl = import ./home/server.nix; extraSpecialArgs = { inputs = self.inputs; }; }; } ]; }; mkDarwin = hostname: nix-darwin.lib.darwinSystem { system = "aarch64-darwin"; modules = [ ./hosts/${hostname} home-manager.darwinModules.home-manager { home-manager = { useGlobalPkgs = true; useUserPackages = true; backupFileExtension = "backup"; users.mikl = import ./home; extraSpecialArgs = { inputs = self.inputs; }; }; } ]; }; in { nixosConfigurations = { heather = mkNixos "heather"; # rosemary = mkNixos "rosemary"; # TODO: будущий EU сервер (не YC) }; darwinConfigurations = { poppy = mkDarwin "poppy"; }; }; }