{ description = "testing nix flakes for server deployment"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/release-22.11"; nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; home-manager.url = "github:nix-community/home-manager/release-22.11"; home-manager.inputs.nixpkgs.follows = "nixpkgs"; deploy-rs.url = "github:serokell/deploy-rs"; deploy-rs.inputs.nixpkgs.follows = "nixpkgs"; simple-nixos-mailserver.url = "gitlab:simple-nixos-mailserver/nixos-mailserver/master"; emacs-overlay.url = "gitlab:nix-community/emacs-overlay?rev=d938b780a3d8072aeac0178c46121060079ff217"; rust-overlay.url = "github:oxalica/rust-overlay"; rust-overlay.inputs.nixpkgs.follows = "nixpkgs"; sops-nix.url = "github:Mic92/sops-nix"; sops-nix.inputs.nixpkgs.follows = "nixpkgs-unstable"; sops-nix.inputs.nixpkgs-stable.follows = "nixpkgs"; nix-gleam.url = "github:arnarg/nix-gleam"; uplcg.url = "git+https://stuebinm.eu/git/uplcg?ref=main"; uplcg.flake = false; tracktrain.url = "git+https://stuebinm.eu/git/tracktrain?ref=main"; tracktrain.flake = false; blog.url = "git+ssh://cgit/~/blog"; blog.flake = false; playground.url = "git+https://stuebinm.eu/git/playground"; playground.flake = false; traveltext.url = "git+https://stuebinm.eu/git/traveltext?ref=main"; traveltext.flake = false; showrt.url = "git+https://stuebinm.eu/git/showrt?ref=main"; showrt.flake = false; almanac.url = "git+https://stuebinm.eu/git/forks/almanac"; almanac.flake = false; feeds.url = "path:/home/stuebinm/org/nonpublic.nix"; feeds.flake = false; isabelle-utils.url = "git+https://stuebinm.eu/git/isabelle-utils"; isabelle-utils.flake = false; bahnhof-name.url = "git+https://stuebinm.eu/git/bahnhof.name"; bahnhof-name.flake = false; gtfsBooks.url = "git+https://stuebinm.eu/git/gtfs-books?ref=main"; gtfsBooks.flake = false; walint.url = "git+https://stuebinm.eu/git/walint?ref=playground"; walint.flake = false; }; outputs = { self, deploy-rs, sops-nix, ... }@inputs: let nixpkgs = import inputs.nixpkgs { system = "x86_64-linux"; overlays = [ inputs.rust-overlay.overlays.default inputs.nix-gleam.overlays.default self.overlays.default ]; }; mkConfig = imports: config: inputs.nixpkgs.lib.nixosSystem rec { system = "x86_64-linux"; modules = [ config ] ++ imports; pkgs = nixpkgs; specialArgs = { inherit inputs system; craneLib = inputs.crane.lib.${system}; }; }; mkDesktop = mkConfig [ ./common/desktop.nix ]; mkServer = mkConfig [ ./common/headless.nix sops-nix.nixosModules.sops ]; deploy-vps = hostname: { inherit hostname; profiles.system = { user = "root"; sshUser = "root"; path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.${hostname}; }; }; in { nixosConfigurations = { chaski = mkServer ./chaski/configuration.nix; flora = mkServer ./flora/configuration.nix; abbenay = mkDesktop ./abbenay/configuration.nix; cyberbox = mkDesktop ./cyberbox/configuration.nix; surltesh-echer = mkDesktop ./surltesh-echer/configuration.nix; ilex = mkDesktop ./ilex/configuration.nix; }; deploy.nodes = { chaski = deploy-vps "chaski"; flora = deploy-vps "flora"; parsons = { hostname = "parsons"; profiles.home = { user = "stuebinm"; sshUser = "stuebinm"; path = deploy-rs.lib.x86_64-linux.activate.home-manager self.homeConfigurations.stuebinm-minimal; }; }; }; checks = builtins.mapAttrs (system: deployLib: deployLib.deployChecks self.deploy) deploy-rs.lib; homeConfigurations = let home = root: inputs.home-manager.lib.homeManagerConfiguration rec { pkgs = nixpkgs; modules = [ root ]; extraSpecialArgs = { inherit inputs; system = "x86_64-linux"; }; }; in { stuebinm = home ./home/home.nix; stuebinm-minimal = home ./home/home-minimal.nix; }; home = self.homeConfigurations.stuebinm.activationPackage; home-minimal = self.homeConfigurations.stuebinm-minimal.activationPackage; overlays.default = final: prev: import ./pkgs/overlay.nix { inherit inputs; } final prev; packages.x86_64-linux = { inherit (nixpkgs) galmon-core galmon-full glitchtip typst almanac kijetesantakaluotokieni showrt isabelle-utils isabat emacs29 crs-tools travelynx; }; nixosModules = { glitchtip = import ./modules/glitchtip.nix; }; }; }