{ description = "My NixOS system flake"; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; home-manager = { url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; # Hyprland cachix flake hyprland.url = "github:hyprwm/Hyprland"; # NixOS community managed hardware specific features/fixes nixos-hardware.url = "github:NixOS/nixos-hardware"; # Secure boot lanzaboote = { url = "github:nix-community/lanzaboote/v0.4.2"; inputs.nixpkgs.follows = "nixpkgs"; }; # Sops sops-nix = { url = "github:Mic92/sops-nix"; inputs.nixpkgs.follows = "nixpkgs"; }; # Disko disko = { url = "github:nix-community/disko"; inputs.nixpkgs.follows = "nixpkgs"; }; # Secrets nix-secrets = { url = "git+ssh://git@git.dogar.dev/shahab/nix-secrets?shallow=1&ref=main"; flake = false; }; }; outputs = { nixpkgs, ... }@inputs: let inherit (nixpkgs) lib; mkHost = host: { ${host} = nixpkgs.lib.nixosSystem { specialArgs = { inherit inputs; # Extend lib with lib.custom lib = nixpkgs.lib.extend (self: super: { custom = import ./lib { inherit (nixpkgs) lib; }; }); }; modules = [ ./hosts/nixos/${host} ]; }; }; mkHostConfigs = hosts: lib.foldl (acc: set: acc // set) { } (lib.map (host: mkHost host) hosts); readHosts = folder: lib.attrNames (builtins.readDir ./hosts/${folder}); in { nixosConfigurations = mkHostConfigs (readHosts "nixos"); devShell.x86_64-linux = let pkgs = nixpkgs.legacyPackages.x86_64-linux; in pkgs.mkShell { buildInputs = with pkgs; [ nil nixfmt-classic lua-language-server ]; }; }; }