nixos_config/flake.nix
2026-05-29 19:30:07 +02:00

182 lines
4.9 KiB
Nix

{
description = "NixOS configuration for all hosts";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable";
nur = {
url = "github:nix-community/NUR";
inputs.nixpkgs.follows = "nixpkgs";
};
home-manager = {
url = "github:nix-community/home-manager/release-25.11";
inputs.nixpkgs.follows = "nixpkgs";
};
noctalia = {
url = "github:noctalia-dev/noctalia-shell";
inputs.nixpkgs.follows = "nixpkgs";
inputs.noctalia-qs.follows = "noctalia-qs";
};
noctalia-qs = {
url = "github:noctalia-dev/noctalia-qs";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-minecraft.url = "github:Infinidoge/nix-minecraft";
};
outputs = inputs @ {
self,
nixpkgs,
nixpkgs-unstable,
...
}:
let
repoLocalPath =
let
fromEnv = builtins.getEnv "NIXOS_CONFIG_ROOT";
in
if fromEnv != "" then fromEnv else "/home/alisceon/.nixos_config";
overlays = [
inputs.nur.overlays.default
];
mkPkgs = system: import nixpkgs {
inherit system;
config.allowUnfree = true;
flake.setFlakeRegistry = true;
inherit overlays;
};
mkPkgsUnstable = system: import nixpkgs-unstable {
inherit system;
config.allowUnfree = true;
flake.setFlakeRegistry = true;
inherit overlays;
};
mkSharedModules = pkgs: pkgs-unstable: [
./nixos/modules/base.nix
./nixos/modules/services/wireguard-peer.nix
inputs.home-manager.nixosModules.home-manager
({ ... }: {
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = {
inherit pkgs repoLocalPath pkgs-unstable;
repoRoot = self;
};
home-manager.backupFileExtension = "backup";
})
];
mkHost = {
hostName,
system,
nixosModules ? [ ],
hmModules ? [ ],
extraModules ? [ ],
homeManagerUsers ? true,
}:
let
pkgs = mkPkgs system;
pkgs-unstable = mkPkgsUnstable system;
in
nixpkgs.lib.nixosSystem {
inherit system pkgs;
specialArgs = {
inherit repoLocalPath pkgs-unstable;
repoRoot = self;
};
modules =
(mkSharedModules pkgs pkgs-unstable)
++ [ (./nixos/hosts + "/${hostName}/configuration.nix") ]
++ nixosModules
++ extraModules
++ nixpkgs.lib.optionals homeManagerUsers [
{
home-manager.users.alisceon.imports =
[
inputs.noctalia.homeModules.default
./home/profiles/base.nix
]
++ hmModules;
home-manager.users.root.imports = [
./home/users/root/default.nix
];
}
];
};
workstationModules = [
./nixos/modules/profiles/workstation.nix
./nixos/modules/wm/sway.nix
./nixos/modules/theme
];
workstationHomeModules = [
./home/profiles/workstation.nix
./home/modules/wm/sway/default.nix
];
serverModules = [
./nixos/modules/profiles/server.nix
];
serverHomeModules = [ ];
in
{
nixosConfigurations = {
electra = mkHost {
hostName = "electra";
system = "x86_64-linux";
nixosModules = workstationModules;
hmModules = workstationHomeModules ++ [
./home/hosts/alisceon/electra.nix
];
};
tower = mkHost {
hostName = "tower";
system = "x86_64-linux";
nixosModules = workstationModules;
hmModules = workstationHomeModules ++ [
./home/hosts/alisceon/tower.nix
];
};
tesla-nixos = mkHost {
hostName = "tesla-nixos";
system = "x86_64-linux";
nixosModules = serverModules;
hmModules = serverHomeModules;
extraModules = [
inputs.nix-minecraft.nixosModules.minecraft-servers
{ nixpkgs.overlays = [ inputs.nix-minecraft.overlay ]; }
];
};
nuc = mkHost {
hostName = "nuc";
system = "x86_64-linux";
nixosModules = serverModules;
hmModules = serverHomeModules;
};
alisceon-core = mkHost {
hostName = "alisceon-core";
system = "aarch64-linux";
nixosModules = serverModules;
hmModules = serverHomeModules;
};
blogbox = mkHost {
hostName = "blogbox";
system = "x86_64-linux";
nixosModules = serverModules;
hmModules = serverHomeModules;
homeManagerUsers = false;
};
};
};
}