Files
nix-config/flake.nix

829 lines
24 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";
};
# cosmic launcher
desktop-cosmic = {
url = "github:lilyinstarlight/nixos-cosmic";
inputs.nixpkgs.follows = "desktop-nixpkgs";
};
#####################################################
# 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";
};
nas-nixai.url = "github:olafkfreund/nix-ai-help";
nas-nix-vscode-extensions.url = "github:nix-community/nix-vscode-extensions";
#####################################################
# 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";
};
pi5-disko = {
# the fork is needed for partition attributes support
url = "github:nvmd/disko/gpt-attrs";
# url = "github:nix-community/disko";
inputs.nixpkgs.follows = "pi5-nixpkgs";
};
pi5-cosmic = {
url = "github:lilyinstarlight/nixos-cosmic";
inputs.nixpkgs.follows = "pi5-nixpkgs";
};
#####################################################
# 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-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";
};
nixos-raspberrypi.url = "github:nvmd/nixos-raspberrypi";
#####################################################
# 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";
};
#####################################################
# Macbook Nix #
#####################################################
# nixpgs
mac-nixpkgs = {
url = "github:NixOS/nixpkgs/nixos-unstable";
};
mac-nixos-apple-silicon = {
url = "github:nix-community/nixos-apple-silicon";
};
# Home Manager
mac-home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "mac-nixpkgs";
};
# Impermenance
mac-impermanence = {
url = "github:nix-community/impermanence";
};
# Sops-nix
mac-sops-nix = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "mac-nixpkgs";
};
#####################################################
# Common #
#####################################################
nixpkgs-unstable = {
url = "github:NixOS/nixpkgs/nixos-unstable";
};
nixpkgs-stable = {
url = "github:NixOS/nixpkgs/nixos-25.05";
};
};
outputs =
{
self,
# Desktop
desktop-nixpkgs,
desktop-chaotic,
desktop-home-manager,
desktop-impermanence,
desktop-lanzaboote,
desktop-nixos-hardware,
desktop-sops-nix,
desktop-steam-rom-manager,
desktop-cosmic,
# 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,
nas-nixai,
nas-nix-vscode-extensions,
# pi5
pi5-nixpkgs,
pi5-home-manager,
pi5-impermanence,
pi5-nixos-hardware,
pi5-sops-nix,
pi5-disko,
pi5-cosmic,
# pi4
pi4-nixpkgs,
pi4-home-manager,
pi4-impermanence,
pi4-sops-nix,
pi4-nixos-hardware,
pi4-disko,
nixos-raspberrypi,
# 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,
# MacBook Nix
mac-nixpkgs,
mac-nixos-apple-silicon,
mac-home-manager,
mac-impermanence,
mac-sops-nix,
# 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 = [
./hosts/base/base-nogui
./hosts/base/base-gui
./hosts/desktop/configuration.nix
./modules/desktop-environments/gnome
./modules/desktop-environments/cosmic/specialisation.nix
./modules/desktop-environments/hyprland/specialisation.nix
./modules/amd
./modules/gaming
# Lanzaboote
desktop-lanzaboote.nixosModules.lanzaboote
# Chaotic Nyx
desktop-chaotic.nixosModules.default
# Impermanence
desktop-impermanence.nixosModules.impermanence
./modules/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
./modules/home/defaults.nix
./modules/home/git.nix
./modules/home/gnome.nix
./modules/home/librewolf.nix
./modules/home/office.nix
./modules/home/shell.nix
./modules/home/vscode.nix
desktop-steam-rom-manager.homeManagerModules.default
desktop-sops-nix.homeManagerModules.sops
];
};
home-manager.users.root =
{ ... }:
{
imports = [
./modules/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 = [
./hosts/base/base-nogui
./hosts/base/base-gui
./hosts/nas/configuration.nix
./modules/desktop-environments/cosmic
./modules/nvidia
nas-lanzaboote.nixosModules.lanzaboote
nas-impermanence.nixosModules.impermanence
./hosts/nas/impermanence.nix
nas-cosmic.nixosModules.default
# nas-nixai.nixosModules.x86_64-linux.default
nas-home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = false;
home-manager.useUserPackages = true;
home-manager.users.admin =
{ ... }:
{
imports = [
./hosts/nas/home.nix
./modules/home/defaults.nix
./modules/home/git.nix
./modules/home/librewolf.nix
./modules/home/shell.nix
./modules/home/vscode.nix
nas-sops-nix.homeManagerModules.sops
# nas-nixai.homeManagerModules.x86_64-linux.default
];
};
home-manager.users.root =
{ ... }:
{
imports = [
./modules/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-nix-vscode-extensions.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 //
{
inherit outputs;
};
system = "aarch64-linux";
modules = [
./hosts/base/base-nogui
./hosts/base/base-gui
pi5-disko.nixosModules.disko
./hosts/pi5/disko.nix
pi5-cosmic.nixosModules.default
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 = [
./modules/root-user
pi5-sops-nix.homeManagerModules.sops
];
};
}
];
};
# pi4
"pi4" = nixos-raspberrypi.lib.nixosSystem {
specialArgs = inputs //
{
inherit outputs;
};
system = "aarch64-linux";
modules = [
./hosts/base/base-nogui
pi4-disko.nixosModules.disko
./modules/disko/pi-uefi-disko.nix
pi4-nixos-hardware.nixosModules.raspberry-pi-4
{
# Hardware specific configuration, see section below for a more complete
# list of modules
imports = with nixos-raspberrypi.nixosModules; [
raspberry-pi-4.base
raspberry-pi-4.display-vc4
raspberry-pi-4.bluetooth
raspberry-pi-4.case-argonone
];
}
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 = [
./modules/root-user
pi4-sops-nix.homeManagerModules.sops
];
};
}
];
};
"steamdeck" = steamdeck-nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = {
inherit inputs outputs;
};
modules = [
./hosts/base/base-nogui
./hosts/base/base-gui
./hosts/deck/configuration.nix
./modules/desktop-environments/gnome
steamdeck-lanzaboote.nixosModules.lanzaboote
steamdeck-disko.nixosModules.disko
./modules/disko/disko.nix
steamdeck-impermanence.nixosModules.impermanence
./modules/impermanence
steamdeck-home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.users.deck =
{ ... }:
{
imports = [
./hosts/deck/home.nix
./modules/home/defaults.nix
./modules/home/git.nix
./modules/home/gnome.nix
./modules/home/librewolf.nix
./modules/home/office.nix
./modules/home/shell.nix
./modules/home/vscode.nix
steamdeck-sops-nix.homeManagerModules.sops
steamdeck-steam-rom-manager.homeManagerModules.default
];
};
home-manager.users.root =
{ ... }:
{
imports = [
./modules/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
];
};
# MacBook Nix
"macbook-pro-nixos" = mac-nixpkgs.lib.nixosSystem {
system = "aarch64-linux";
specialArgs = {
inherit inputs outputs;
hyprlandSettings = import ./hosts/mac-nixos/hyprland-settings.nix;
};
modules = [
./hosts/base/base-nogui
./hosts/base/base-gui
./hosts/mac-nixos/configuration.nix
./modules/desktop-environments/hyprland
# Apple Silicon Support
mac-nixos-apple-silicon.nixosModules.default
# Impermanence
mac-impermanence.nixosModules.impermanence
./modules/impermanence
mac-sops-nix.nixosModules.sops
# Home Manager
mac-home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.users.matt =
{ ... }:
{
imports = [
./hosts/mac-nixos/home.nix
./modules/home/defaults.nix
./modules/home/git.nix
# ./modules/home/gnome.nix
# ./modules/home/librewolf.nix
./modules/home/office.nix
./modules/home/shell.nix
# ./modules/home/vscode.nix
mac-sops-nix.homeManagerModules.sops
];
};
home-manager.users.root =
{ ... }:
{
imports = [
./modules/root-user
mac-sops-nix.homeManagerModules.sops
];
};
home-manager.backupFileExtension = "backup";
}
];
};
# 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;
}
];
};
};
packages.aarch64-linux.vmware-horizon-fhs =
let
pkgs = import mac-nixpkgs { system = "aarch64-linux"; };
x64 = import mac-nixpkgs { system = "x86_64-linux"; config.allowUnfree = true; };
in
pkgs.buildFHSEnv {
name = "horizon-client-x64";
targetPkgs = _pkgs: with x64; [
vmware-horizon-client gtk3 xorg.libX11 libxml2
];
runScript = "box64 vmware-view";
};
# 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;
};
}