all repos — nixfiles @ fd02277c6ce575e987052556c03ae8e8f1ab30f0

System and user configuration, managed by nix and home-manager

flake.nix (view raw)

{
  inputs = {
    srvos = {
      url = "github:nix-community/srvos";
    };
    nixos-hardware = {
      url = "github:NixOS/nixos-hardware";
    };

    nixpkgs.follows = "srvos/nixpkgs";
    darwin = {
      url = "github:lnl7/nix-darwin/master";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    home-manager = {
      url = "github:nix-community/home-manager";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    nixos-generators = {
      url = "github:nix-community/nixos-generators";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    nix-rosetta-builder = {
      url = "github:cpick/nix-rosetta-builder";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    nur = {
      url = "github:nix-community/nur";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    angrr.url = "github:linyinfeng/angrr";
    golink.url = "github:tailscale/golink";
    elgit.url = "git+https://git.alin.ovh/elgit?shallow=0";
    mycal.url = "git+https://git.alin.ovh/mycal?shallow=0";
    searchix.url = "git+https://git.alin.ovh/searchix?shallow=0";

    nixvim = {
      url = "github:nix-community/nixvim";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    mac-app-util = {
      url = "github:hraban/mac-app-util";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    agenix = {
      url = "github:ryantm/agenix";
      inputs = {
        nixpkgs.follows = "nixpkgs";
        darwin.follows = "darwin";
        home-manager.follows = "home-manager";
      };
    };
  };

  nixConfig = {
    extra-substituters = [
      "https://cache.lix.systems"
      "https://nix-community.cachix.org"
    ];
  };

  outputs =
    inputs:
    with inputs;
    let
      # System types to support.
      supportedSystems = [
        "x86_64-linux"
        "x86_64-darwin"
        "aarch64-linux"
        "aarch64-darwin"
      ];

      # Helper function to generate an attrset '{ x86_64-linux = f "x86_64-linux"; ... }'.
      forAllSystems = nixpkgs.lib.genAttrs supportedSystems;

      mkHomeConfiguration =
        { modules, system }:
        home-manager.lib.homeManagerConfiguration {
          pkgs = import nixpkgs {
            inherit system;
            overlays = [
              agenix.overlays.default
              nur.overlays.default
              (self: super: {
                personal = import ./packages/overlay.nix self super;
              })
            ];
          };

          modules = [
            nixvim.homeModules.nixvim
          ]
          ++ modules;
        };
    in
    {
      nixosConfigurations.prefect = nixpkgs.lib.nixosSystem {
        system = "x86_64-linux";
        modules = (
          with nixos-hardware.nixosModules;
          [
            ./system/hosts/prefect.nix
            common-cpu-amd
            common-cpu-amd-pstate
            common-pc-ssd
            common-pc
            common-gpu-nvidia-nonprime
          ]
        );
      };
      nixosConfigurations.nano = nixpkgs.lib.nixosSystem {
        system = "aarch64-linux";
        modules = [
          agenix.nixosModules.default
          srvos.nixosModules.server
          srvos.nixosModules.mixins-systemd-boot
          ./system/hosts/nano.nix
          ./system/hosts/nano-hardware.nix
        ];
      };
      nixosConfigurations.linde = nixpkgs.lib.nixosSystem {
        system = "aarch64-linux";
        specialArgs = { inherit searchix; };
        modules = [
          {
            nixpkgs.overlays = [
              nur.overlays.default
              elgit.overlays.default
              searchix.overlays.default
            ];
          }
          srvos.nixosModules.server
          srvos.nixosModules.hardware-hetzner-cloud-arm
          agenix.nixosModules.default
          elgit.nixosModules.elgit
          mycal.nixosModules.mycal
          searchix.nixosModules.web
          golink.nixosModules.default
          ./packages/modules/nixos/laminar.nix
          ./packages/modules/nixos/git-pr.nix
          ./system/hosts/linde.nix
          ./private/calendar.nix
        ];
      };
      darwinConfigurations.marvin = darwin.lib.darwinSystem {
        system = "aarch64-darwin";
        modules = [
          {
            nixpkgs.overlays = [
              angrr.overlays.default
            ];
          }
          nix-rosetta-builder.darwinModules.default
          srvos.darwinModules.desktop
          angrr.darwinModules.angrr
          ./system/hosts/marvin.nix
          ./packages/modules/darwin/caddy
        ];
      };
      homeConfigurations."alan@marvin" = mkHomeConfiguration {
        system = "aarch64-darwin";
        modules = [
          mac-app-util.homeManagerModules.default
          ./user/hosts/marvin.nix
          ./private/ssh.nix
        ];
      };
      homeConfigurations."alin@prefect" = mkHomeConfiguration {
        system = "x86_64-linux";
        modules = [
          ./user/hosts/prefect.nix
          ./private/ssh.nix
        ];
      };
      homeConfigurations."alan@nano" = mkHomeConfiguration {
        system = "aarch64-linux";
        modules = [
          ./user/hosts/nano.nix
        ];
      };
      homeConfigurations."alan@linde" = mkHomeConfiguration {
        system = "aarch64-linux";
        modules = [
          ./user/hosts/server.nix
        ];
      };

      devShells = forAllSystems (
        system:
        let
          pkgs = import nixpkgs { inherit system; };
        in
        {
          default = pkgs.mkShell {
            packages = with pkgs; [
              nixos-rebuild-ng
              (writeShellScriptBin "nixos-rebuild" ''
                exec ${lib.getExe nixos-rebuild-ng} "$@"
              '')
            ];
          };
          secrets = pkgs.mkShell {
            packages = [ agenix.packages.${system}.default ];
          };
        }
      );

      packages = forAllSystems (system: {
        minimal-iso = nixos-generators.nixosGenerate {
          inherit system;
          format = "iso";
          modules = [ ./system/hosts/installer.nix ];
        };
      });
    };
}