{ inputs = { flake-compatish.url = "github:lillecarl/flake-compatish"; nixpkgs.url = "https://channels.nixos.org/nixos-26.05/nixexprs.tar.zst"; nixpkgs-unstable.url = "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.zst"; srvos = { url = "github:nix-community/srvos"; inputs.nixpkgs.follows = "nixpkgs"; }; nixos-hardware = { url = "github:NixOS/nixos-hardware"; }; nanopi = { url = "github:alinnow/nixos-nanopi"; inputs.nixpkgs.follows = "nixpkgs"; }; darwin = { url = "github:lnl7/nix-darwin/nix-darwin-26.05"; inputs.nixpkgs.follows = "nixpkgs"; }; home-manager = { url = "github:nix-community/home-manager/release-26.05"; inputs.nixpkgs.follows = "nixpkgs"; }; elgit.url = "git+https://git.alin.ovh/elgit"; mycal.url = "git+https://git.alin.ovh/mycal"; searchix.url = "git+https://git.alin.ovh/searchix?ref=link-other-instance"; scriptura = { url = "git+https://git.alin.ovh/scriptura"; inputs.nixpkgs.follows = "nixpkgs"; }; iqan = { url = "git+https://nossa.ee/~talya/iqan"; inputs.nixpkgs.follows = "nixpkgs"; }; minimal-emacs = { url = "github:jamescherti/minimal-emacs.d"; flake = false; }; nixvim = { url = "github:nix-community/nixvim/nixos-26.05"; }; agenix = { url = "github:ryantm/agenix"; inputs = { nixpkgs.follows = "srvos/nixpkgs"; darwin.follows = "darwin"; home-manager.follows = "home-manager"; }; }; }; outputs = inputs: with inputs; let # System types to support. supportedSystems = [ "x86_64-linux" "aarch64-linux" "aarch64-darwin" ]; # Helper function to generate an attrset '{ x86_64-linux = f "x86_64-linux"; ... }'. forAllSystems = nixpkgs.lib.genAttrs supportedSystems; overlayedNixpkgs = system: import nixpkgs { inherit system; config = { allowUnfree = true; }; overlays = [ (self: super: { unstable = import nixpkgs-unstable { inherit system; }; personal = import ./packages/overlay.nix self super; }) ]; }; nixosSystem = { system, modules, ... }@args: nixpkgs.lib.nixosSystem ( { inherit system; pkgs = overlayedNixpkgs system; inherit modules; specialArgs = { inherit pkgsUnstable; inherit inputs; }; } // args ); mkHomeConfiguration = { modules, system }: home-manager.lib.homeManagerConfiguration { pkgs = import nixpkgs { inherit system; overlays = [ agenix.overlays.default scriptura.overlays.default (self: super: { personal = import ./packages/overlay.nix self super; iqan = iqan.packages.${system}.iqan; }) ]; }; extraSpecialArgs = { inherit inputs; }; modules = [ nixvim.homeModules.nixvim scriptura.homeModules.scriptura ] ++ modules; }; in { nixosConfigurations = { # build with `nixos-rebuild build-image --image-variant iso-installer` minimal-iso = nixosSystem { system = "x86_64-linux"; modules = [ ./system/hosts/installer.nix ]; }; prefect = nixosSystem { system = "x86_64-linux"; modules = ( with nixos-hardware.nixosModules; [ ./system/hosts/prefect.nix common-cpu-amd-pstate common-cpu-amd-zenpower common-pc-ssd common-pc "${nixos-hardware}/common/gpu/nvidia/ada-lovelace" ] ); }; r5 = nixosSystem { system = "aarch64-linux"; modules = [ agenix.nixosModules.default srvos.nixosModules.server nanopi.nixosModules.r5s ./system/hosts/r5.nix ./system/hosts/r5-hardware.nix ]; }; hasel = nixosSystem { system = "x86_64-linux"; modules = [ srvos.nixosModules.server agenix.nixosModules.default ./packages/modules/nixos/laminar.nix ./packages/modules/nixos/bark.nix ./system/hosts/hasel.nix ]; }; ulme = nixosSystem { system = "x86_64-linux"; modules = [ srvos.nixosModules.server agenix.nixosModules.default ./packages/modules/nixos/bark.nix ./system/hosts/ulme.nix ]; }; }; darwinConfigurations = { marvin = darwin.lib.darwinSystem { system = "aarch64-darwin"; modules = [ srvos.darwinModules.desktop ./system/hosts/marvin.nix ]; }; }; homeConfigurations = { "alin@marvin" = mkHomeConfiguration { system = "aarch64-darwin"; modules = [ ./user/hosts/marvin.nix ./private/ssh.nix ]; }; "alin@prefect" = mkHomeConfiguration { system = "x86_64-linux"; modules = [ ./user/hosts/prefect.nix ./private/ssh.nix ]; }; "alin@r5" = mkHomeConfiguration { system = "aarch64-linux"; modules = [ ./user/hosts/r5.nix ]; }; "alin@hasel" = mkHomeConfiguration { system = "x86_64-linux"; modules = [ ./user/hosts/server.nix { home.stateVersion = "26.05"; } ]; }; }; devShells = forAllSystems ( system: let pkgs = import nixpkgs { inherit system; }; in { default = pkgs.mkShellNoCC { packages = with pkgs; [ just nh nixos-rebuild nixos-option ]; }; secrets = pkgs.mkShellNoCC { packages = [ agenix.packages.${system}.default ]; }; } ); }; }