Make system architecture per-host instead of global constant

This commit is contained in:
2026-04-07 02:49:12 +02:00
parent 0cec50d607
commit 517bc8d2f8

146
flake.nix
View File

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