{ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; nixpkgs-small.url = "github:NixOS/nixpkgs/nixos-unstable-small"; nixos-hardware.url = "github:NixOS/nixos-hardware"; home-manager.url = "github:nix-community/home-manager"; home-manager.inputs.nixpkgs.follows = "nixpkgs"; emacs-overlay.url = "github:nix-community/emacs-overlay"; emacs-overlay.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"; }; outputs = inputs@ { self , utils , nixpkgs , nixpkgs-small , nixos-hardware , home-manager , secrets , emacs-overlay , agenix , searchix , ... }: 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) ++ [ emacs-overlay.overlay ]; }; inherit modules; extraSpecialArgs = { inherit inputs system; }; }; in { nixosConfigurations.nanopi = nixpkgs-small.lib.nixosSystem { system = utils.lib.system.aarch64-linux; specialArgs = { inherit inputs; }; modules = [ agenix.nixosModules.default nixos-hardware.nixosModules.friendlyarm-nanopi-r5s ./system/nanopi.nix ]; }; nixosConfigurations.linde = nixpkgs-small.lib.nixosSystem { system = utils.lib.system.aarch64-linux; specialArgs = { inherit inputs; }; modules = [ agenix.nixosModules.default searchix.nixosModules.web ./system/linde.nix ]; }; homeConfigurations."alan@nanopi" = mkHomeConfiguration { system = utils.lib.system.aarch64-linux; modules = [ ./user/nanopi.nix (secrets + "/default.nix") ]; }; homeConfigurations."alan@linde" = mkHomeConfiguration { system = utils.lib.system.aarch64-linux; modules = [ ./user/server.nix (secrets + "/default.nix") ]; }; }; }