Files
Nixos/flake.nix
T
2025-08-16 20:24:46 +02:00

267 lines
6.0 KiB
Nix

{
description = "Susano NixOS Homelab";
inputs = {
# Nixpkgs
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05";
unstable.url = "github:nixos/nixpkgs/nixos-unstable";
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
nixos-generators = {
url = "github:nix-community/nixos-generators";
inputs.nixpkgs.follows = "nixpkgs";
};
disko = {
url = "github:nix-community/disko";
inputs.nixpkgs.follows = "nixpkgs";
};
home-manager = {
url = "github:nix-community/home-manager/release-25.05";
inputs.nixpkgs.follows = "nixpkgs";
};
unstable-home-manager = {
url = "github:nix-community/home-manager/master";
inputs.nixpkgs.follows = "unstable";
};
sops-nix = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
###
# Applications and other
###
copyparty.url = "github:9001/copyparty";
vscode-server.url = "github:nix-community/nixos-vscode-server";
emacs-overlay.url = "github:nix-community/emacs-overlay/master";
stylix = {
url = "github:nix-community/stylix";
inputs.nixpkgs.follows = "unstable";
};
nix-ld = {
url = "github:Mic92/nix-ld";
inputs.nixpkgs.follows = "unstable";
};
hyprland = {
url = "git+https://github.com/hyprwm/Hyprland";
inputs.nixpkgs.follows = "unstable";
};
hyprland-plugins = {
url = "github:hyprwm/hyprland-plugins";
inputs.hyprland.follows = "hyprland";
};
split-monitor-workspaces = {
url = "github:Duckonaut/split-monitor-workspaces";
inputs.hyprland.follows = "hyprland";
};
zen-browser.url = "github:0xc000022070/zen-browser-flake";
minegrub-theme.url = "github:Lxtharia/minegrub-theme";
};
outputs = {
self,
nixpkgs,
nixos-hardware,
nixos-generators,
disko,
home-manager,
sops-nix,
...
} @ inputs: let
inherit (self) outputs;
extraHomeModules = [
./hm-modules
];
upkgs = import inputs.unstable {
system = "x86_64-linux";
config.allowUnfree = true;
};
pkgs = import inputs.nixpkgs {
system = "x86_64-linux";
config.allowUnfree = true;
};
mkComputer = configurationNix: extraModules: username: inputs.nixpkgs.lib.nixosSystem {
specialArgs = { inherit inputs nixos-hardware extraHomeModules username; };
modules = [
disko.nixosModules.disko
home-manager.nixosModules.home-manager
configurationNix
] ++ extraModules;
};
mkUnstableComputer = configurationNix: extraModules: username: inputs.unstable.lib.nixosSystem {
specialArgs = { inherit inputs nixos-hardware extraHomeModules username; };
modules = [
disko.nixosModules.disko
inputs.unstable-home-manager.nixosModules.home-manager
configurationNix
] ++ extraModules;
};
in {
nixosConfigurations = {
###
# Proxmox Homelab Machine
###
susano-minimal = mkComputer
./machines/susano/minimal
[]
"susano";
susano = mkComputer
./machines/susano/main
[
sops-nix.nixosModules.sops
# Applications
inputs.copyparty.nixosModules.default
inputs.vscode-server.nixosModules.default
./modules
]
"susano";
###
# Proxmox Remote Dev Machine
###
izanagi-minimal = mkComputer
./machines/izanagi/minimal
[]
"izanagi";
izanagi = mkComputer
./machines/izanagi/main
[
sops-nix.nixosModules.sops
# Applications
inputs.copyparty.nixosModules.default
inputs.vscode-server.nixosModules.default
./modules
]
"izanagi";
###
# Proxmox CI/CD
###
amaterasu-minimal = mkComputer
./machines/amaterasu/minimal
[]
"amaterasu";
amaterasu = mkComputer
./machines/amaterasu/main
[
sops-nix.nixosModules.sops
# Applications
inputs.copyparty.nixosModules.default
inputs.vscode-server.nixosModules.default
./modules
]
"amaterasu";
###
# Omen Laptop
###
fujin-minimal = mkUnstableComputer
./machines/fujin/minimal
[
nixos-hardware.nixosModules.omen-15-en0010ca
] # Extra modules
"fujin";
fujin = mkUnstableComputer
./machines/fujin/main
[
nixos-hardware.nixosModules.omen-15-en0010ca
sops-nix.nixosModules.sops
# Applications
inputs.copyparty.nixosModules.default
inputs.vscode-server.nixosModules.default
inputs.stylix.nixosModules.stylix
inputs.nix-ld.nixosModules.nix-ld
inputs.minegrub-theme.nixosModules.default
./modules
] # Extra modules
"fujin";
};
packages.x86_64-linux = {
izanami-proxmox = nixos-generators.nixosGenerate {
system = "x86_64-linux";
modules = [
home-manager.nixosModules.home-manager
./iso/proxmox
];
specialArgs = {
inherit inputs;
username = "izanami";
extraHomeModules = [
./hm-modules
];
};
format = "proxmox";
};
izanami-iso = nixos-generators.nixosGenerate {
system = "x86_64-linux";
modules = [
home-manager.nixosModules.home-manager
./iso/iso
];
specialArgs = {
inherit inputs;
username = "izanami";
extraHomeModules = [
./hm-modules
];
};
format = "iso";
};
};
devShells = {
"x86_64-linux" = {
default = upkgs.mkShell {
buildInputs = with upkgs; [
# AI Coding agents
gemini-cli
opencode
claude-code
];
shellHook = ''
'';
};
};
};
};
}