{ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; nixpkgs-small.url = "github:NixOS/nixpkgs/nixos-unstable-small"; home-manager.url = "github:nix-community/home-manager"; home-manager.inputs.nixpkgs.follows = "nixpkgs"; secrets = { flake = false; }; utils.url = "github:numtide/flake-utils"; agenix.url = "github:ryantm/agenix"; agenix.inputs.nixpkgs.follows = "nixpkgs"; searchix = { url = "git+https://git.alanpearce.eu/searchix"; inputs.nixpkgs.follows = "nixpkgs-small"; }; golink = { url = "github:tailscale/golink"; inputs.nixpkgs.follows = "nixpkgs-small"; }; }; outputs = inputs@ { self , utils , nixpkgs , nixpkgs-small , home-manager , secrets , agenix , searchix , golink , ... }: let 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); }; inherit modules; extraSpecialArgs = { inherit inputs system; }; }; in { nixosConfigurations.linde = nixpkgs-small.lib.nixosSystem { system = utils.lib.system.aarch64-linux; specialArgs = { inherit inputs; }; modules = [ agenix.nixosModules.default searchix.nixosModules.web golink.nixosModules.default ./system/linde.nix home-manager.nixosModules.home-manager { home-manager = { extraSpecialArgs = { pkgs = import nixpkgs { overlays = readOverlays (toString ./overlays); }; }; users.alan = import ./user/server.nix; }; } ]; }; homeConfigurations."alan@linde" = mkHomeConfiguration { system = utils.lib.system.aarch64-linux; modules = [ ./user/server.nix (secrets + "/default.nix") ]; }; }; }