{ description = "Nixos config flake"; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05"; nixpkgs-us.url = "github:nixos/nixpkgs/nixos-unstable"; home-manager = { url = "github:nix-community/home-manager/release-25.05"; 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-24.05"; hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1"; nixvim.url = "git+https://gitea.esotericbytes.com/Blunkall-Technologies/Moirai"; }; 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; }; }; }