Files
nix-config/flake.nix
2025-05-30 13:41:10 -05:00

665 lines
19 KiB
Nix
Executable File

{
description = "flake for matt-nixos";
inputs = {
#####################################################
# Desktop #
#####################################################
# nixpgs
desktop-nixpkgs = {
url = "github:NixOS/nixpkgs/nixos-unstable";
};
# Chaotic-nix
desktop-chaotic = {
url = "github:chaotic-cx/nyx/nyxpkgs-unstable";
};
# Home Manager
desktop-home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "desktop-nixpkgs";
};
# Impermenance
desktop-impermanence = {
url = "github:nix-community/impermanence";
};
# Lanzaboote
desktop-lanzaboote = {
url = "github:nix-community/lanzaboote/v0.4.2";
inputs.nixpkgs.follows = "desktop-nixpkgs";
};
# Nix hardware
desktop-nixos-hardware = {
url = "github:NixOS/nixos-hardware/master";
};
# Sops-nix
desktop-sops-nix = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "desktop-nixpkgs";
};
# steam rom manager
desktop-steam-rom-manager = {
url = "github:mjallen18/nix-steam-rom-manager";
inputs.nixpkgs.follows = "desktop-nixpkgs";
inputs.home-manager.follows = "desktop-home-manager";
};
#####################################################
# NAS #
#####################################################
# nixpgs
nas-nixpkgs = {
# url = "github:NixOS/nixpkgs/nixos-24.11";
url = "github:NixOS/nixpkgs/nixos-unstable";
};
nas-nixpkgs-stable = {
url = "github:NixOS/nixpkgs/nixos-24.11";
};
# Authentik
nas-authentik-nix = {
url = "github:nix-community/authentik-nix";
inputs.nixpkgs.follows = "nas-nixpkgs";
};
# cosmic launcher
nas-cosmic = {
url = "github:lilyinstarlight/nixos-cosmic";
inputs.nixpkgs.follows = "nas-nixpkgs-stable";
};
# crowdsec
nas-crowdsec = {
url = "git+https://codeberg.org/kampka/nix-flake-crowdsec.git";
inputs.nixpkgs.follows = "nas-nixpkgs";
};
# Home Manager
nas-home-manager = {
# url = "github:nix-community/home-manager/release-24.11";
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nas-nixpkgs";
};
# Impermenance
nas-impermanence = {
url = "github:nix-community/impermanence";
};
# Lanzaboote
nas-lanzaboote = {
url = "github:nix-community/lanzaboote/v0.4.2";
inputs.nixpkgs.follows = "nas-nixpkgs";
};
# Nix hardware
nas-nixos-hardware = {
url = "github:NixOS/nixos-hardware/master";
};
# Sops-nix
nas-sops-nix = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nas-nixpkgs";
};
#####################################################
# pi5 #
#####################################################
# nixpgs
pi5-nixpkgs = {
url = "github:NixOS/nixpkgs/nixos-unstable";
};
# Home Manager
pi5-home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "pi5-nixpkgs";
};
# Impermenance
pi5-impermanence = {
url = "github:nix-community/impermanence";
};
# Nix hardware
pi5-nixos-hardware = {
url = "github:NixOS/nixos-hardware/master";
};
# Sops-nix
pi5-sops-nix = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "pi5-nixpkgs";
};
nixos-raspberrypi.url = "github:nvmd/nixos-raspberrypi";
#####################################################
# pi4 #
#####################################################
# nixpgs
pi4-nixpkgs = {
url = "github:NixOS/nixpkgs/nixos-unstable";
};
# Home Manager
pi4-home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "pi4-nixpkgs";
};
# Impermenance
pi4-impermanence = {
url = "github:nix-community/impermanence";
};
# Sops-nix
pi4-sops-nix = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "pi4-nixpkgs";
};
# Nix hardware
pi4-nixos-hardware = {
url = "github:NixOS/nixos-hardware/master";
};
pi4-nixos-raspberrypi.url = "github:nvmd/nixos-raspberrypi";
pi4-disko = {
# the fork is needed for partition attributes support
url = "github:nvmd/disko/gpt-attrs";
# url = "github:nix-community/disko";
inputs.nixpkgs.follows = "pi4-nixpkgs";
};
#####################################################
# Steamdeck #
#####################################################
# nixpgs
steamdeck-nixpkgs = {
url = "github:NixOS/nixpkgs/nixos-unstable";
};
# Joviain for steamdeck
steamdeck-jovian = {
url = "github:Jovian-Experiments/Jovian-NixOS";
inputs.nixpkgs.follows = "steamdeck-nixpkgs";
};
# Chaotic-nix
steamdeck-chaotic = {
url = "github:chaotic-cx/nyx/nyxpkgs-unstable";
};
# Impermenance
steamdeck-impermanence = {
url = "github:nix-community/impermanence";
};
# Home Manager
steamdeck-home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "steamdeck-nixpkgs";
};
# Lanzaboote
steamdeck-lanzaboote = {
url = "github:nix-community/lanzaboote/v0.4.2";
inputs.nixpkgs.follows = "steamdeck-nixpkgs";
};
# Sops-nix
steamdeck-sops-nix = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "steamdeck-nixpkgs";
};
# Nix hardware
steamdeck-nixos-hardware = {
url = "github:NixOS/nixos-hardware/master";
};
# steam rom manager
steamdeck-steam-rom-manager = {
url = "github:mjallen18/nix-steam-rom-manager";
inputs.nixpkgs.follows = "steamdeck-nixpkgs";
inputs.home-manager.follows = "steamdeck-home-manager";
};
steamdeck-disko = {
# the fork is needed for partition attributes support
url = "github:nvmd/disko/gpt-attrs";
# url = "github:nix-community/disko";
inputs.nixpkgs.follows = "steamdeck-nixpkgs";
};
#####################################################
# MacBook #
#####################################################
#Apple
nix-darwin = {
url = "github:LnL7/nix-darwin";
inputs.nixpkgs.follows = "desktop-nixpkgs";
};
#####################################################
# Common #
#####################################################
nixpkgs-unstable = {
url = "github:NixOS/nixpkgs/nixos-unstable";
};
nixpkgs-stable = {
url = "github:NixOS/nixpkgs/nixos-24.11";
};
};
outputs =
{
self,
# Desktop
desktop-nixpkgs,
desktop-chaotic,
desktop-home-manager,
desktop-impermanence,
desktop-lanzaboote,
desktop-nixos-hardware,
desktop-sops-nix,
desktop-steam-rom-manager,
# NAS
nas-nixpkgs,
nas-nixpkgs-stable,
nas-authentik-nix,
nas-cosmic,
nas-crowdsec,
nas-home-manager,
nas-impermanence,
nas-lanzaboote,
nas-nixos-hardware,
nas-sops-nix,
# pi5
pi5-nixpkgs,
pi5-home-manager,
pi5-impermanence,
pi5-nixos-hardware,
pi5-sops-nix,
nixos-raspberrypi,
# pi4
pi4-nixpkgs,
pi4-home-manager,
pi4-impermanence,
pi4-sops-nix,
pi4-nixos-hardware,
pi4-nixos-raspberrypi,
pi4-disko,
# Steamdeck
steamdeck-nixpkgs,
steamdeck-chaotic,
steamdeck-home-manager,
steamdeck-impermanence,
steamdeck-jovian,
steamdeck-lanzaboote,
steamdeck-nixos-hardware,
steamdeck-sops-nix,
steamdeck-steam-rom-manager,
steamdeck-disko,
# MacBook
nix-darwin,
# Common
nixpkgs-unstable,
nixpkgs-stable,
}@inputs:
let
inherit (self) outputs;
in
{
overlays = import ./overlays { inherit inputs; };
nixosConfigurations = {
# Desktop
"matt-nixos" = desktop-nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = {
inherit inputs outputs;
};
modules = [
./base/base-nogui
./base/base-gui
./hosts/desktop/configuration.nix
./modules/desktop-environments/gnome
# Lanzaboote
desktop-lanzaboote.nixosModules.lanzaboote
# Chaotic Nyx
desktop-chaotic.nixosModules.default
# Impermanence
desktop-impermanence.nixosModules.impermanence
./share/impermanence
desktop-sops-nix.nixosModules.sops
# Home Manager
desktop-home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.users.matt =
{ ... }:
{
imports = [
./hosts/desktop/home.nix
./share/home/defaults.nix
./share/home/git.nix
./share/home/gnome.nix
./share/home/librewolf.nix
./share/home/office.nix
./share/home/shell.nix
./share/home/vscode.nix
desktop-steam-rom-manager.homeManagerModules.default
desktop-sops-nix.homeManagerModules.sops
];
};
home-manager.users.root =
{ ... }:
{
imports = [
./share/root-user
desktop-sops-nix.homeManagerModules.sops
];
};
home-manager.backupFileExtension = "backup";
}
# nixos hardware
desktop-nixos-hardware.nixosModules.common-cpu-amd
desktop-nixos-hardware.nixosModules.common-cpu-amd-pstate
desktop-nixos-hardware.nixosModules.common-cpu-amd-zenpower
desktop-nixos-hardware.nixosModules.common-gpu-amd
desktop-nixos-hardware.nixosModules.common-hidpi
desktop-nixos-hardware.nixosModules.common-pc
];
};
# NAS
"jallen-nas" = nas-nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = {
inherit inputs outputs;
};
modules = [
./base/base-nogui
./base/base-gui
./hosts/nas/configuration.nix
./modules/desktop-environments/cosmic
nas-lanzaboote.nixosModules.lanzaboote
nas-impermanence.nixosModules.impermanence
./hosts/nas/impermanence.nix
nas-cosmic.nixosModules.default
nas-home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = false;
home-manager.useUserPackages = true;
home-manager.users.admin =
{ ... }:
{
imports = [
./hosts/nas/home.nix
./share/home/defaults.nix
./share/home/git.nix
./share/home/librewolf.nix
./share/home/shell.nix
./share/home/vscode.nix
nas-sops-nix.homeManagerModules.sops
];
};
home-manager.users.root =
{ ... }:
{
imports = [
./share/root-user
nas-sops-nix.homeManagerModules.sops
];
};
home-manager.backupFileExtension = "backup";
}
nas-authentik-nix.nixosModules.default
nas-sops-nix.nixosModules.sops
nas-crowdsec.nixosModules.crowdsec
nas-crowdsec.nixosModules.crowdsec-firewall-bouncer
(
{ ... }:
{
nixpkgs.overlays = [ nas-crowdsec.overlays.default ];
}
)
nas-nixos-hardware.nixosModules.common-pc
nas-nixos-hardware.nixosModules.common-cpu-amd
nas-nixos-hardware.nixosModules.common-cpu-amd-pstate
nas-nixos-hardware.nixosModules.common-cpu-amd-zenpower
nas-nixos-hardware.nixosModules.common-hidpi
];
};
# pi5
"pi5" = nixos-raspberrypi.lib.nixosSystem {
specialArgs = inputs;
system = "aarch64-linux";
modules = [
pi5-impermanence.nixosModules.impermanence
pi5-sops-nix.nixosModules.sops
./hosts/pi5/configuration.nix
pi5-nixos-hardware.nixosModules.raspberry-pi-5
{
# Hardware specific configuration, see section below for a more complete
# list of modules
imports = with nixos-raspberrypi.nixosModules; [
raspberry-pi-5.base
raspberry-pi-5.display-vc4
raspberry-pi-5.bluetooth
];
}
pi5-home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.backupFileExtension = "backup";
home-manager.users.matt =
{ ... }:
{
imports = [
./hosts/pi5/home.nix
pi5-sops-nix.homeManagerModules.sops
];
};
home-manager.users.root =
{ ... }:
{
imports = [
./share/root-user
pi5-sops-nix.homeManagerModules.sops
];
};
}
];
};
# pi4
"pi4" = pi4-nixpkgs.lib.nixosSystem {
# specialArgs = inputs;
specialArgs = {
inherit inputs outputs;
};
system = "aarch64-linux";
modules = [
pi4-disko.nixosModules.disko
./share/disko/pi-uefi-disko.nix
pi4-nixos-hardware.nixosModules.raspberry-pi-4
pi4-impermanence.nixosModules.impermanence
pi4-sops-nix.nixosModules.sops
./hosts/pi4/configuration.nix
pi4-home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.backupFileExtension = "backup";
home-manager.users.matt =
{ ... }:
{
imports = [
./hosts/pi4/home.nix
pi4-sops-nix.homeManagerModules.sops
];
};
home-manager.users.root =
{ ... }:
{
imports = [
./share/root-user
pi4-sops-nix.homeManagerModules.sops
];
};
}
];
};
"steamdeck" = steamdeck-nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = {
inherit inputs outputs;
};
modules = [
./base/base-nogui
./base/base-gui
./hosts/deck/configuration.nix
./modules/desktop-environments/gnome
steamdeck-lanzaboote.nixosModules.lanzaboote
steamdeck-disko.nixosModules.disko
./share/disko/disko.nix
steamdeck-impermanence.nixosModules.impermanence
./share/impermanence
steamdeck-home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.users.deck =
{ ... }:
{
imports = [
./hosts/deck/home.nix
./share/home/defaults.nix
./share/home/git.nix
./share/home/gnome.nix
./share/home/librewolf.nix
./share/home/office.nix
./share/home/shell.nix
./share/home/vscode.nix
steamdeck-sops-nix.homeManagerModules.sops
steamdeck-steam-rom-manager.homeManagerModules.default
];
};
home-manager.users.root =
{ ... }:
{
imports = [
./share/root-user
steamdeck-sops-nix.homeManagerModules.sops
];
};
home-manager.backupFileExtension = "backup";
}
steamdeck-nixos-hardware.nixosModules.common-cpu-amd
steamdeck-nixos-hardware.nixosModules.common-cpu-amd-pstate
steamdeck-nixos-hardware.nixosModules.common-cpu-amd-zenpower
steamdeck-nixos-hardware.nixosModules.common-gpu-amd
steamdeck-nixos-hardware.nixosModules.common-hidpi
steamdeck-nixos-hardware.nixosModules.common-pc
steamdeck-sops-nix.nixosModules.sops
steamdeck-jovian.nixosModules.jovian
steamdeck-chaotic.nixosModules.default
];
};
# home assistant
# "jallen-hass" = nixpkgs-unstable.lib.nixosSystem {
# system = "x86_64-linux";
# modules = [
# impermanence.nixosModules.impermanence
# ./hosts/homeassistant/configuration.nix
# sops-nix.nixosModules.sops
# home-manager.nixosModules.home-manager
# {
# home-manager.useGlobalPkgs = true;
# home-manager.useUserPackages = true;
# home-manager.users.hass-admin = import ./hosts/homeassistant/home.nix;
# }
# ];
# };
};
darwinConfigurations = {
"MacBook-Pro" = nix-darwin.lib.darwinSystem {
system = "aarch64-darwin";
modules = [
./hosts/mac/configuration.nix
desktop-home-manager.darwinModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.users.mattjallen = import ./hosts/mac/home.nix;
}
];
};
};
# Expose the package set, including overlays, for convenience.
darwinPackages = self.darwinConfigurations."MacBook-Pro".pkgs;
# Set Git commit hash for darwin-version.
system.configurationRevision = self.rev or self.dirtyRev or null;
};
}