Make system architecture per-host instead of global constant
This commit is contained in:
146
flake.nix
146
flake.nix
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user