{ description = "Nixos config flake"; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11"; nixpkgs-us.url = "github:nixos/nixpkgs/nixos-unstable"; home-manager = { url = "github:nix-community/home-manager/release-25.11"; inputs.nixpkgs.follows = "nixpkgs"; }; disko = { url = "github:nix-community/disko"; inputs.nixpkgs.follows = "nixpkgs"; }; sops-nix = { url = "github:Mic92/sops-nix"; inputs.nixpkgs.follows = "nixpkgs"; }; firefox-addons = { url = "gitlab:rycee/nur-expressions?dir=pkgs/firefox-addons"; inputs.nixpkgs.follows = "nixpkgs"; }; nix-minecraft.url = "github:Infinidoge/nix-minecraft"; #simple-nixos-mailserver.url = "gitlab:simple-nixos-mailserver/nixos-mailserver/nixos-25.11"; hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1"; nixvim.url = "git+https://gitea.esotericbytes.com/Blunkall-Technologies/Moirai"; self.submodules = true; }; outputs = { self, nixpkgs, home-manager, ... } @ inputs: { profiles = let dir = builtins.readDir ./system/profiles; filtered = builtins.filter (x: dir.${x} == "directory") (builtins.attrNames dir); in (builtins.listToAttrs (builtins.map (name: ({ inherit name; value = { ... }: { imports = [ ./system ./system/profiles/${name} ]; }; })) filtered) ); homes = let dir = builtins.readDir ./system/users; filtered = builtins.filter (x: dir.${x} == "directory") (builtins.attrNames dir); in (builtins.listToAttrs (builtins.map (name: ({ inherit name; value = { ... } @ exputs: { imports = [ (./system/users/${name}/home-manager (inputs // exputs)) ]; }; })) filtered) ); iso = (nixpkgs.lib.nixosSystem { system = "x86_64-linux"; specialArgs = { inputs = inputs // { nathan = self.homes.nathan; inherit self; }; }; modules = [ self.profiles.iso ]; }).config.system.build.isoImage; templates = { nixos = { welcomeText = '' #Welcome to Olympus! Have Fun! ''; description = '' Generate this where you want your config. ''; path = ./templates/nixos; }; home-manager = { welcomeText = '' #Welcome to Olympus! Have Fun! ''; description = '' Generate this where you want your config. ''; path = ./templates/home-manager; }; nix-on-droid = { welcomeText = '' #Welcome to Olympus! Have Fun! ''; description = '' Generate this where you want your config. ''; path = ./templates/nix-on-droid; }; machines = let dir = builtins.readDir ./machines; filtered = builtins.filter (x: dir.${x} == "directory") (builtins.attrNames dir); in (builtins.listToAttrs (builtins.map (name: ({ inherit name; value = { welcomeText = '' #Welcome to Olympus! ##Warning: This is a config for ${name}, an established machine! It may require significant alterations to be usable! ''; description = '' Generate this where you want your config. ''; path = ./machines/${name}; }; })) filtered) ); homes = let dir = builtins.readDir ./homes; filtered = builtins.filter (x: dir.${x} == "directory") (builtins.attrNames dir); in (builtins.listToAttrs (builtins.map (name: ({ inherit name; value = { welcomeText = '' #Welcome home, ${name}! Your config is right here. ''; description = '' Generate this where you want your config. ''; path = ./homes/${name}; }; })) filtered) ); default = self.templates.nixos; }; nixosConfigurations = let dir = builtins.readDir ./machines; filtered = builtins.filter (x: dir.${x} == "directory" && x != "android") (builtins.attrNames dir); in (builtins.listToAttrs (builtins.map (name: ({ inherit name; value = nixpkgs.lib.nixosSystem { specialArgs = inputs; modules = [ { sysconfig.host = name; } ./machines/${name} self.profiles.${name} ]; }; })) filtered) ); }; }