split hosts
This commit is contained in:
@@ -1,18 +0,0 @@
|
|||||||
# configuration.nix
|
|
||||||
# Main NixOS configuration entry point
|
|
||||||
{
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
inputs,
|
|
||||||
lib,
|
|
||||||
username,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
./hardware-configuration.nix
|
|
||||||
./modules
|
|
||||||
./modules/limine-custom-labels.nix
|
|
||||||
];
|
|
||||||
}
|
|
||||||
36
flake.nix
36
flake.nix
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
description = "atlas - NixOS Config for Desktop";
|
description = "NixOS Configurations - atlas, laptop, and server";
|
||||||
|
|
||||||
# ═══════════════════════════════════════════════════════════════
|
# ═══════════════════════════════════════════════════════════════
|
||||||
# INPUTS
|
# INPUTS
|
||||||
@@ -48,18 +48,32 @@
|
|||||||
inputs@{ self, nixpkgs, ... }:
|
inputs@{ self, nixpkgs, ... }:
|
||||||
let
|
let
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
username = "pinj"; # Single source of truth for username
|
username = "pinj";
|
||||||
|
|
||||||
|
# Helper function to create NixOS configurations
|
||||||
|
mkHost =
|
||||||
|
hostname:
|
||||||
|
nixpkgs.lib.nixosSystem {
|
||||||
|
inherit system;
|
||||||
|
specialArgs = {
|
||||||
|
inherit inputs username;
|
||||||
|
};
|
||||||
|
modules = [
|
||||||
|
./hosts/${hostname}/configuration.nix
|
||||||
|
{ nixpkgs.overlays = [ inputs.nix-cachyos-kernel.overlays.pinned ]; }
|
||||||
|
];
|
||||||
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
nixosConfigurations.atlas = nixpkgs.lib.nixosSystem {
|
nixosConfigurations = {
|
||||||
inherit system;
|
# Desktop - full gaming and media setup
|
||||||
specialArgs = {
|
atlas = mkHost "atlas";
|
||||||
inherit inputs username;
|
|
||||||
};
|
# Server - headless, core + dev only
|
||||||
modules = [
|
server = mkHost "server";
|
||||||
./configuration.nix
|
|
||||||
{ nixpkgs.overlays = [ inputs.nix-cachyos-kernel.overlays.pinned ]; }
|
# Laptop - desktop environment, no gaming
|
||||||
];
|
laptop = mkHost "laptop";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
75
hosts/README.md
Normal file
75
hosts/README.md
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
# Host Configurations
|
||||||
|
|
||||||
|
This directory contains NixOS configurations for multiple machines.
|
||||||
|
|
||||||
|
## Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
hosts/
|
||||||
|
├── atlas/ # Desktop gaming machine
|
||||||
|
│ ├── configuration.nix # Main config (core + hardware + desktop + dev + gaming + services)
|
||||||
|
│ └── hardware-configuration.nix # Hardware-specific settings
|
||||||
|
├── laptop/ # Laptop with desktop environment
|
||||||
|
│ ├── configuration.nix # Main config (core + hardware + desktop + dev + services)
|
||||||
|
│ └── hardware-configuration.nix # Placeholder - generate on actual machine
|
||||||
|
└── server/ # Headless server
|
||||||
|
├── configuration.nix # Main config (core + hardware[no GPU] + dev + maintenance)
|
||||||
|
└── hardware-configuration.nix # Placeholder - generate on actual machine
|
||||||
|
```
|
||||||
|
|
||||||
|
## Module Assignments
|
||||||
|
|
||||||
|
### All Hosts
|
||||||
|
- **Core**: boot, networking, users, system, localization
|
||||||
|
- **Development**: tools, docker, shell
|
||||||
|
|
||||||
|
### Atlas & Laptop Only
|
||||||
|
- **Hardware**: GPU, audio, storage, power
|
||||||
|
- **Desktop**: window manager, apps, theming, portals
|
||||||
|
- **Services**: printing, avahi, maintenance (navidrome only on atlas)
|
||||||
|
|
||||||
|
### Atlas Only
|
||||||
|
- **Gaming**: steam, gamemode, wine
|
||||||
|
|
||||||
|
### Server Only
|
||||||
|
- Headless - no desktop or gaming
|
||||||
|
- SSH enabled for remote management
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Build a specific host
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build atlas (current desktop)
|
||||||
|
nixos-rebuild switch --flake .#atlas
|
||||||
|
|
||||||
|
# Build server (once hardware-config is ready)
|
||||||
|
nixos-rebuild switch --flake .#server
|
||||||
|
|
||||||
|
# Build laptop (once hardware-config is ready)
|
||||||
|
nixos-rebuild switch --flake .#laptop
|
||||||
|
```
|
||||||
|
|
||||||
|
### Setting up a new machine
|
||||||
|
|
||||||
|
1. Install NixOS on the target machine
|
||||||
|
2. Generate hardware config:
|
||||||
|
```bash
|
||||||
|
sudo nixos-generate-config --show-hardware-config > hardware-configuration.nix
|
||||||
|
```
|
||||||
|
3. Copy that file to `hosts/<hostname>/hardware-configuration.nix` in this repo
|
||||||
|
4. Adjust `hosts/<hostname>/configuration.nix` as needed
|
||||||
|
5. Build and switch:
|
||||||
|
```bash
|
||||||
|
nixos-rebuild switch --flake .#<hostname>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Adding a new host
|
||||||
|
|
||||||
|
1. Create `hosts/<hostname>/` directory
|
||||||
|
2. Copy `configuration.nix` from similar host as template
|
||||||
|
3. Generate `hardware-configuration.nix` on target machine
|
||||||
|
4. Add to `flake.nix`:
|
||||||
|
```nix
|
||||||
|
nixosConfigurations.<hostname> = mkHost "<hostname>";
|
||||||
|
```
|
||||||
23
hosts/atlas/configuration.nix
Normal file
23
hosts/atlas/configuration.nix
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# configuration.nix
|
||||||
|
# Main NixOS configuration entry point for atlas (desktop)
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
lib,
|
||||||
|
username,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./hardware-configuration.nix
|
||||||
|
../../modules/core
|
||||||
|
../../modules/hardware
|
||||||
|
../../modules/desktop
|
||||||
|
../../modules/services
|
||||||
|
../../modules/dev
|
||||||
|
../../modules/gaming
|
||||||
|
../../modules/limine-custom-labels.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
32
hosts/laptop/configuration.nix
Normal file
32
hosts/laptop/configuration.nix
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
# configuration.nix
|
||||||
|
# Laptop NixOS configuration - desktop environment, no gaming
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
lib,
|
||||||
|
username,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./hardware-configuration.nix
|
||||||
|
../../modules/core
|
||||||
|
../../modules/hardware
|
||||||
|
../../modules/desktop
|
||||||
|
../../modules/dev
|
||||||
|
../../modules/services/maintenance.nix
|
||||||
|
../../modules/services/printing.nix
|
||||||
|
../../modules/services/avahi.nix
|
||||||
|
# Uncomment if you want music server on laptop:
|
||||||
|
# ../../modules/services/navidrome.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
# Laptop-specific configuration
|
||||||
|
# Hostname should be set in hardware-configuration.nix or here
|
||||||
|
# networking.hostName = "laptop";
|
||||||
|
|
||||||
|
# Laptop-specific power management tweaks can go here
|
||||||
|
# The power module already enables power-profiles-daemon
|
||||||
|
}
|
||||||
63
hosts/laptop/hardware-configuration.nix
Normal file
63
hosts/laptop/hardware-configuration.nix
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
|
# and may be overwritten by future invocations. Please make changes
|
||||||
|
# to /etc/nixos/configuration.nix instead.
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
modulesPath,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
(modulesPath + "/installer/scan/not-detected.nix")
|
||||||
|
];
|
||||||
|
|
||||||
|
boot.initrd.availableKernelModules = [
|
||||||
|
"xhci_pci"
|
||||||
|
"ahci"
|
||||||
|
"nvme"
|
||||||
|
"usb_storage"
|
||||||
|
"usbhid"
|
||||||
|
"uas"
|
||||||
|
"sd_mod"
|
||||||
|
];
|
||||||
|
boot.initrd.kernelModules = [ ];
|
||||||
|
boot.kernelModules = [ "kvm-amd" ];
|
||||||
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
|
fileSystems."/" = {
|
||||||
|
device = "/dev/mapper/cryptroot";
|
||||||
|
fsType = "xfs";
|
||||||
|
};
|
||||||
|
|
||||||
|
boot.initrd.luks.devices."cryptroot".device =
|
||||||
|
"/dev/disk/by-uuid/ecb02db3-6fe8-499e-9a31-38a8143aa092";
|
||||||
|
|
||||||
|
# ─── Encrypted Swap ───
|
||||||
|
# Include swap keyfile in initramfs (so it's available before root is mounted)
|
||||||
|
boot.initrd.secrets."/var/lib/secrets/swap.key" = /var/lib/secrets/swap.key;
|
||||||
|
|
||||||
|
boot.initrd.luks.devices."cryptswap" = {
|
||||||
|
device = "/dev/disk/by-uuid/0e51324d-5929-4b4c-bd6e-a3130cf8adc2";
|
||||||
|
keyFile = "/var/lib/secrets/swap.key";
|
||||||
|
allowDiscards = true; # Enable TRIM for NVMe SSD
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/boot" = {
|
||||||
|
device = "/dev/disk/by-uuid/614D-6CCA";
|
||||||
|
fsType = "vfat";
|
||||||
|
options = [
|
||||||
|
"fmask=0022"
|
||||||
|
"dmask=0022"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
swapDevices = [
|
||||||
|
{ device = "/dev/mapper/cryptswap"; }
|
||||||
|
];
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||||
|
}
|
||||||
32
hosts/server/configuration.nix
Normal file
32
hosts/server/configuration.nix
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
# configuration.nix
|
||||||
|
# Server NixOS configuration - headless, no desktop environment
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
lib,
|
||||||
|
username,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./hardware-configuration.nix
|
||||||
|
../../modules/core
|
||||||
|
../../modules/hardware/audio.nix
|
||||||
|
../../modules/hardware/storage.nix
|
||||||
|
../../modules/hardware/power.nix
|
||||||
|
../../modules/dev
|
||||||
|
../../modules/services/maintenance.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
# Server-specific overrides
|
||||||
|
# Hostname should be set in hardware-configuration.nix or here
|
||||||
|
# networking.hostName = "server";
|
||||||
|
|
||||||
|
# Enable SSH for remote management
|
||||||
|
services.openssh.enable = true;
|
||||||
|
|
||||||
|
# Server doesn't need the GPU module (usually headless or different GPU)
|
||||||
|
# If server has a GPU, add: ../../modules/hardware/gpu-amd.nix
|
||||||
|
}
|
||||||
63
hosts/server/hardware-configuration.nix
Normal file
63
hosts/server/hardware-configuration.nix
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
|
# and may be overwritten by future invocations. Please make changes
|
||||||
|
# to /etc/nixos/configuration.nix instead.
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
modulesPath,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
(modulesPath + "/installer/scan/not-detected.nix")
|
||||||
|
];
|
||||||
|
|
||||||
|
boot.initrd.availableKernelModules = [
|
||||||
|
"xhci_pci"
|
||||||
|
"ahci"
|
||||||
|
"nvme"
|
||||||
|
"usb_storage"
|
||||||
|
"usbhid"
|
||||||
|
"uas"
|
||||||
|
"sd_mod"
|
||||||
|
];
|
||||||
|
boot.initrd.kernelModules = [ ];
|
||||||
|
boot.kernelModules = [ "kvm-amd" ];
|
||||||
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
|
fileSystems."/" = {
|
||||||
|
device = "/dev/mapper/cryptroot";
|
||||||
|
fsType = "xfs";
|
||||||
|
};
|
||||||
|
|
||||||
|
boot.initrd.luks.devices."cryptroot".device =
|
||||||
|
"/dev/disk/by-uuid/ecb02db3-6fe8-499e-9a31-38a8143aa092";
|
||||||
|
|
||||||
|
# ─── Encrypted Swap ───
|
||||||
|
# Include swap keyfile in initramfs (so it's available before root is mounted)
|
||||||
|
boot.initrd.secrets."/var/lib/secrets/swap.key" = /var/lib/secrets/swap.key;
|
||||||
|
|
||||||
|
boot.initrd.luks.devices."cryptswap" = {
|
||||||
|
device = "/dev/disk/by-uuid/0e51324d-5929-4b4c-bd6e-a3130cf8adc2";
|
||||||
|
keyFile = "/var/lib/secrets/swap.key";
|
||||||
|
allowDiscards = true; # Enable TRIM for NVMe SSD
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/boot" = {
|
||||||
|
device = "/dev/disk/by-uuid/614D-6CCA";
|
||||||
|
fsType = "vfat";
|
||||||
|
options = [
|
||||||
|
"fmask=0022"
|
||||||
|
"dmask=0022"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
swapDevices = [
|
||||||
|
{ device = "/dev/mapper/cryptswap"; }
|
||||||
|
];
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user