{ description = "A simple NixOS flake"; inputs = { # Core inputs nixpkgs.url = "github:NixOS/nixpkgs/nixos-26.05"; unstable.url = "github:NixOS/nixpkgs/nixos-unstable"; moppkgs.url = "git+https://knot.moppu.dev/did:plc:hv3kvjufxykn2w4mriztfkhj/"; sops-nix.url = "github:Mic92/sops-nix"; import-tree.url = "github:denful/import-tree"; catppuccin.url = "github:catppuccin/nix/release-26.05"; home-manager.url = "github:nix-community/home-manager/release-26.05"; nix-index-database.url = "github:nix-community/nix-index-database"; xilinx-ise.url = "github:Mop-u/nix-fpga-tools/dev"; # To be removed in 26.11 niri.url = "git+https://codeberg.org/bananad3v/niri-nix"; noctalia-greeter.url = "github:noctalia-dev/noctalia-greeter"; noctalia.url = "github:noctalia-dev/noctalia"; # To be removed once helix updates past v25.x.x with plugin support helix.url = "github:helix-editor/helix"; # To be removed once zen-browser gets a home-manager module zen-browser.url = "github:0xc000022070/zen-browser-flake"; # Pretty-print build output nix-monitored.url = "github:ners/nix-monitored"; # Access all the vscode extensions nix-vscode-extensions.url = "github:nix-community/nix-vscode-extensions"; # Bleeding-edge VR packages nixpkgs-xr.url = "github:nix-community/nixpkgs-xr"; # More convenient gamescope config scopebuddy.url = "github:OpenGamingCollective/ScopeBuddy"; # OpenGl ES 2.0 support niri-legacy = { url = "github:niri-wm/niri/v25.11"; inputs.nixpkgs.follows = "nixpkgs"; }; # Server inputs tangled.url = "git+https://tangled.org/did:plc:j5hmlfdrwkvtxm7cjmu7j2is"; nix-minecraft.url = "github:Infinidoge/nix-minecraft"; steamcmd-flake = { url = "github:flashgnash/steamcmd-flake"; inputs.nixpkgs.follows = "nixpkgs"; }; # sublime text packages stextPackageControl = { url = "github:wbond/package_control"; flake = false; }; stextCatppuccin = { url = "github:catppuccin/sublime-text"; flake = false; }; }; outputs = { self, ... }@inputs: let inherit (inputs.nixpkgs) lib; hosts = lib.filterAttrs (n: v: v == "directory") (builtins.readDir ./hosts); globalConfig = host: let otherHostNames = lib.filterAttrs (n: v: n != host) hosts; otherHosts = lib.mapAttrsToList (n: v: { inherit (self.nixosConfigurations.${n}) config; }) otherHostNames; homeCfg = ./hosts/${host}/home; systemCfg = ./hosts/${host}/os; in { specialArgs = let inherit (self.nixosConfigurations.${host}.pkgs.stdenv.hostPlatform) system; in { inherit inputs otherHosts; unstable = import inputs.unstable { inherit system; config.allowUnfree = true; }; moppkgs = inputs.moppkgs.packages.${system}; }; modules = [ inputs.catppuccin.nixosModules.catppuccin inputs.home-manager.nixosModules.home-manager inputs.niri.nixosModules.default inputs.nix-monitored.nixosModules.default inputs.noctalia-greeter.nixosModules.default (inputs.import-tree [ ./common/os ./nixosModules systemCfg ]) inputs.sops-nix.nixosModules.default { home-manager.sharedModules = [ (inputs.import-tree ./homeModules) inputs.catppuccin.homeModules.catppuccin inputs.niri.homeModules.default inputs.nix-index-database.homeModules.default inputs.noctalia.homeModules.default inputs.zen-browser.homeModules.default ]; } ( { config, inputs, lib, pkgs, specialArgs, ... }: { nixpkgs = { config.allowUnfree = true; overlays = (import ./overlays.nix) { inherit inputs lib; }; }; networking.hostName = lib.mkDefault host; home-manager = { backupFileExtension = lib.mkDefault "backup"; extraSpecialArgs = specialArgs; sharedModules = [ { nixpkgs = { config = { inherit (config.nixpkgs.config) allowUnfree; }; inherit (config.nixpkgs) overlays; }; catppuccin = { inherit (config.catppuccin) enable accent flavor; }; home.stateVersion = config.system.stateVersion; } ]; users.${config.sidonia.userName} = { imports = [ (inputs.import-tree ./common/hm) ] ++ (lib.optional (lib.pathExists homeCfg) (inputs.import-tree homeCfg)); home = { username = config.sidonia.userName; homeDirectory = "/home/${config.sidonia.userName}"; }; }; }; } ) ]; }; in { nixosConfigurations = builtins.mapAttrs (n: v: lib.nixosSystem (globalConfig n)) hosts; }; }