{ 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"; }; nur = { url = "github:nix-community/nur"; inputs.nixpkgs.follows = "nixpkgs"; }; angrr = { url = "github:linyinfeng/angrr"; inputs.nixpkgs.follows = "nixpkgs"; }; elgit = { url = "git+https://git.alin.ovh/elgit"; inputs.nixpkgs.follows = "nixpkgs"; }; golink = { url = "github:tailscale/golink"; inputs.nixpkgs.follows = "nixpkgs"; }; nix-index-database = { url = "github:Mic92/nix-index-database"; inputs.nixpkgs.follows = "nixpkgs"; }; mycal = { url = "git+https://git.alin.ovh/mycal"; inputs.nixpkgs.follows = "nixpkgs"; }; searchix = { url = "git+https://git.alin.ovh/searchix"; inputs.nixpkgs.follows = "nixpkgs"; }; nixvim = { url = "github:nix-community/nixvim"; inputs.nixpkgs.follows = "nixpkgs"; }; agenix = { url = "github:ryantm/agenix"; inputs = { nixpkgs.follows = "nixpkgs"; darwin.follows = "darwin"; home-manager.follows = "home-manager"; }; }; pre-commit-hooks = { url = "github:cachix/git-hooks.nix"; }; }; 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; readOverlays = path: let content = builtins.readDir path; in map (n: import (path + ("/" + n))) ( builtins.filter ( n: ( builtins.match ".*\\.nix" n != null && # ignore Emacs lock files (.#foo.nix) builtins.match "\\.#.*" n == null ) || builtins.pathExists (path + ("/" + n + "/default.nix")) ) (builtins.attrNames content) ); mkHomeConfiguration = { modules, system }: home-manager.lib.homeManagerConfiguration { pkgs = import nixpkgs { inherit system; overlays = readOverlays (toString ./overlays) ++ [ agenix.overlays.default angrr.overlays.default (self: super: { personal = import ./packages/overlay.nix self super; }) ]; }; modules = [ nix-index-database.homeModules.nix-index nixvim.homeModules.nixvim ] ++ modules; }; in { nixosConfigurations.prefect = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ ./system/prefect.nix ] ++ (with nixos-hardware.nixosModules; [ 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/nano.nix ./system/nano-hardware.nix ]; }; nixosConfigurations.linde = nixpkgs.lib.nixosSystem { system = "aarch64-linux"; modules = [ { nixpkgs.overlays = (readOverlays ./overlays) ++ [ angrr.overlays.default nur.overlays.default elgit.overlays.default searchix.overlays.default ]; } srvos.nixosModules.server srvos.nixosModules.hardware-hetzner-cloud-arm agenix.nixosModules.default angrr.nixosModules.angrr elgit.nixosModules.elgit mycal.nixosModules.mycal searchix.nixosModules.web golink.nixosModules.default ./packages/modules/nixos/laminar.nix ./system/linde.nix ./private/calendar.nix ]; }; darwinConfigurations.marvin = darwin.lib.darwinSystem { system = "aarch64-darwin"; modules = [ { nixpkgs.overlays = [ angrr.overlays.default ]; } srvos.darwinModules.desktop angrr.darwinModules.angrr ./system/marvin.nix ./packages/modules/darwin/caddy ]; }; homeConfigurations."alan@marvin" = mkHomeConfiguration { system = "aarch64-darwin"; modules = [ ./user/marvin.nix ./private/tabnine.nix ./private/ssh.nix ]; }; homeConfigurations."alan@prefect" = mkHomeConfiguration { system = "x86_64-linux"; modules = [ ./user/prefect.nix ./private/tabnine.nix ./private/ssh.nix ]; }; homeConfigurations."alan@nano" = mkHomeConfiguration { system = "aarch64-linux"; modules = [ ./user/nano.nix ]; }; homeConfigurations."alan@linde" = mkHomeConfiguration { system = "aarch64-linux"; modules = [ ./user/server.nix ]; }; } // forAllSystems ( system: let pkgs = import nixpkgs { inherit system; }; in { devShells = { default = pkgs.mkShell { inherit (self.checks.${system}.pre-commit-check) shellHook; buildInputs = self.checks.${system}.pre-commit-check.enabledPackages; packages = with pkgs; [ nixos-rebuild-ng (writeShellScriptBin "nixos-rebuild" '' exec ${lib.getExe nixos-rebuild-ng} "$@" '') agenix.packages.${system}.default ]; }; }; checks = { pre-commit-check = pre-commit-hooks.lib.${system}.run { src = ./.; hooks = { check-executables-have-shebangs.enable = true; check-shebang-scripts-are-executable.enable = true; check-symlinks.enable = true; reuse.enable = true; }; }; }; } ); }