diff --git a/flake.nix b/flake.nix index 3fb8695..9a9ec4e 100644 --- a/flake.nix +++ b/flake.nix @@ -3,7 +3,7 @@ inputs = { # Core - nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11"; + nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11"; nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable"; # Flakes @@ -11,7 +11,7 @@ # Home Manager home-manager = { - url = "github:nix-community/home-manager/release-24.11"; + url = "github:nix-community/home-manager/release-25.11"; inputs.nixpkgs.follows = "nixpkgs"; }; @@ -30,23 +30,55 @@ outputs = { self, nixpkgs, nixpkgs-unstable, flake-utils, home-manager, sops-nix, disko }: let - system = "x86_64-linux"; - - pkgs = import nixpkgs { + # Helper to build per-host pkgs for a given system string + mkPkgs = system: import nixpkgs { inherit system; config.allowUnfree = true; }; - pkgs-unstable = import nixpkgs-unstable { + mkPkgsUnstable = system: import nixpkgs-unstable { inherit system; config.allowUnfree = true; }; - # Utility to overlay unstable packages - overlayUnstable = final: prev: { - unstable = pkgs-unstable; + # Utility to overlay unstable packages (takes system as arg) + mkOverlayUnstable = system: + final: prev: { unstable = mkPkgsUnstable system; }; + + # Helper that builds a full NixOS configuration for a given host + arch + mkNixosSystem = { system, hostModule }: nixpkgs.lib.nixosSystem { + inherit system; + + specialArgs = { + inherit sops-nix disko; + pkgs-unstable = mkPkgsUnstable system; + }; + + modules = [ + (mkOverlayUnstable system) + sops-nix.nixosModules.sops + disko.nixosModules.disko + + hostModule + ./nixos/default.nix + + home-manager.nixosModules.home-manager + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.extraSpecialArgs = { + inherit sops-nix; + pkgs-unstable = mkPkgsUnstable system; + }; + home-manager.users.youruser = import ./home/default.nix; + } + ]; }; + # Default system for devShell and standalone home-manager + defaultSystem = "x86_64-linux"; + pkgs = mkPkgs defaultSystem; + in { # ============================================ @@ -55,67 +87,23 @@ nixosConfigurations = { - # Example: Laptop configuration - laptop = nixpkgs.lib.nixosSystem { - inherit system; - - specialArgs = { - inherit sops-nix disko; - pkgs-unstable = pkgs-unstable; - }; - - modules = [ - overlayUnstable - sops-nix.nixosModules.sops - disko.nixosModules.disko - - # Machine-specific config - ./hosts/laptop/default.nix - - # Shared system modules - ./nixos/default.nix - - # Home Manager integration - home-manager.nixosModules.home-manager - { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.extraSpecialArgs = { - inherit sops-nix pkgs-unstable; - }; - home-manager.users.youruser = import ./home/default.nix; - } - ]; + # x86_64 laptop (most common) + laptop = mkNixosSystem { + system = "x86_64-linux"; + hostModule = ./hosts/laptop/default.nix; }; - # Example: Server configuration - server = nixpkgs.lib.nixosSystem { - inherit system; - - specialArgs = { - inherit sops-nix disko; - pkgs-unstable = pkgs-unstable; - }; - - modules = [ - overlayUnstable - sops-nix.nixosModules.sops - disko.nixosModules.disko - - ./hosts/server/default.nix - ./nixos/default.nix - - home-manager.nixosModules.home-manager - { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.extraSpecialArgs = { - inherit sops-nix pkgs-unstable; - }; - home-manager.users.youruser = import ./home/default.nix; - } - ]; + # x86_64 server + server = mkNixosSystem { + system = "x86_64-linux"; + hostModule = ./hosts/server/default.nix; }; + + # Example: ARM64 host (e.g. Raspberry Pi 4, Apple Silicon VM) + # laptop-arm = mkNixosSystem { + # system = "aarch64-linux"; + # hostModule = ./hosts/laptop/default.nix; + # }; }; # ============================================ @@ -123,24 +111,38 @@ # ============================================ homeConfigurations = { + # x86_64 Linux "youruser@linux" = home-manager.lib.homeManagerConfiguration { - inherit pkgs; + pkgs = mkPkgs "x86_64-linux"; extraSpecialArgs = { - pkgs-unstable = pkgs-unstable; + pkgs-unstable = mkPkgsUnstable "x86_64-linux"; sops-nix = sops-nix; }; modules = [ - overlayUnstable + (mkOverlayUnstable "x86_64-linux") ./home/default.nix ]; }; + + # aarch64 Linux (e.g. Raspberry Pi, ARM servers) + # "youruser@linux-arm" = home-manager.lib.homeManagerConfiguration { + # pkgs = mkPkgs "aarch64-linux"; + # extraSpecialArgs = { + # pkgs-unstable = mkPkgsUnstable "aarch64-linux"; + # sops-nix = sops-nix; + # }; + # modules = [ + # (mkOverlayUnstable "aarch64-linux") + # ./home/default.nix + # ]; + # }; }; # ============================================ # Development Shell # ============================================ - devShells.${system}.default = pkgs.mkShell { + devShells.${defaultSystem}.default = pkgs.mkShell { buildInputs = with pkgs; [ nix nixpkgs-fmt @@ -151,7 +153,7 @@ ]; shellHook = '' - echo "🔧 NixOS Configuration Development Shell" + echo "NixOS Configuration Development Shell" echo "Available commands:" echo " - nix flake check # Check flake validity" echo " - nix flake show # Show all outputs" @@ -165,7 +167,7 @@ # Installer Script # ============================================ - apps.${system}.installer = { + apps.${defaultSystem}.installer = { type = "app"; program = toString (pkgs.writeShellScript "installer" '' set -e