home-lab/flake.nix
Geir Okkenhaug Jerstad 0efcfba0b3
Some checks are pending
🏠 Home Lab CI/CD Pipeline / 🔍 Validate Configuration (push) Waiting to run
🏠 Home Lab CI/CD Pipeline / 🔨 Build Configurations (push) Blocked by required conditions
🏠 Home Lab CI/CD Pipeline / 🔒 Security Audit (push) Blocked by required conditions
🏠 Home Lab CI/CD Pipeline / 📚 Documentation & Modules (push) Blocked by required conditions
🏠 Home Lab CI/CD Pipeline / 🔄 Update Dependencies (push) Waiting to run
🏠 Home Lab CI/CD Pipeline / 🚀 Deploy Configuration (push) Blocked by required conditions
🏠 Home Lab CI/CD Pipeline / 📢 Notify Results (push) Blocked by required conditions
zshrc moved to nix conf
2025-06-05 10:38:16 +02:00

124 lines
No EOL
3.7 KiB
Nix

{
description = "Home Lab NixOS Configuration - congenital-optimist & sleeper-service";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05";
nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable";
};
outputs = { self, nixpkgs, nixpkgs-unstable, ... }@inputs:
let
system = "x86_64-linux";
# Create unstable package set
unstable = import nixpkgs-unstable {
inherit system;
config.allowUnfree = true;
};
# Shared special arguments for all machines
specialArgs = {
inherit inputs unstable;
};
in {
# NixOS system configurations
nixosConfigurations = {
# congenital-optimist - AMD Threadripper workstation
congenital-optimist = nixpkgs.lib.nixosSystem {
inherit system specialArgs;
modules = [
./machines/congenital-optimist/configuration.nix
./machines/congenital-optimist/hardware-configuration.nix
./modules/common/nix.nix
./modules/common/base.nix
./modules/common/tty.nix
];
};
# sleeper-service - Intel Xeon file server
sleeper-service = nixpkgs.lib.nixosSystem {
inherit system specialArgs;
modules = [
./machines/sleeper-service/configuration.nix
./machines/sleeper-service/hardware-configuration.nix
./modules/common/nix.nix
./modules/common/base.nix
./modules/common/tty.nix
];
};
};
# Custom packages for the home lab
packages.${system} = import ./packages {
pkgs = nixpkgs.legacyPackages.${system};
};
# Development shells for different projects
devShells.${system} = {
default = nixpkgs.legacyPackages.${system}.mkShell {
buildInputs = with nixpkgs.legacyPackages.${system}; [
nixd
alejandra
nixpkgs-fmt
git
emacs
];
shellHook = ''
echo "Home-lab development environment"
echo "Available configurations:"
echo " - congenital-optimist (Threadripper workstation)"
echo " - sleeper-service (Xeon file server)"
echo ""
echo "Build with: nixos-rebuild build --flake .#<config>"
echo "Switch with: nixos-rebuild switch --flake .#<config>"
'';
};
# Dotfiles development shell
dotfiles = nixpkgs.legacyPackages.${system}.mkShell {
buildInputs = with nixpkgs.legacyPackages.${system}; [
emacs
pandoc
starship
nixpkgs-fmt
alejandra
];
shellHook = ''
echo "Literate dotfiles development environment"
echo "Tangle dotfiles with: emacs --batch -l org --eval \"(org-babel-tangle-file \\\"README.org\\\")\""
'';
};
};
# Overlays for package customizations
overlays.default = import ./overlays;
# Applications that can be run directly
apps.${system} = {
# Tangle all user dotfiles
tangle-dotfiles = {
type = "app";
program = "${nixpkgs.legacyPackages.${system}.writeShellScript "tangle-dotfiles" ''
cd users/geir/dotfiles
${nixpkgs.legacyPackages.${system}.emacs}/bin/emacs --batch -l org --eval "(org-babel-tangle-file \"README.org\")"
echo "Dotfiles tangled successfully!"
''}";
};
# Check flake configuration
check-config = {
type = "app";
program = "${nixpkgs.legacyPackages.${system}.writeShellScript "check-config" ''
echo "Checking flake configuration..."
nix flake check
echo "Configuration check complete!"
''}";
};
};
# Formatter for Nix files
formatter.${system} = nixpkgs.legacyPackages.${system}.alejandra;
};
}