{ description = "tlater.net host configuration"; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-23.11"; nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable"; disko = { url = "github:nix-community/disko"; inputs.nixpkgs.follows = "nixpkgs"; }; deploy-rs.url = "github:serokell/deploy-rs"; sops-nix = { url = "github:Mic92/sops-nix"; inputs.nixpkgs.follows = "nixpkgs"; }; nvfetcher = { url = "github:berberman/nvfetcher"; inputs.nixpkgs.follows = "nixpkgs"; }; tlaternet-webserver = { url = "git+https://gitea.tlater.net/tlaternet/tlaternet.git"; inputs.nixpkgs.follows = "nixpkgs"; }; foundryvtt = { url = "github:reckenrode/nix-foundryvtt"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { self, nixpkgs, sops-nix, nvfetcher, deploy-rs, ... } @ inputs: let system = "x86_64-linux"; in { ################## # Configurations # ################## nixosConfigurations = { # The actual system definition tlaternet = nixpkgs.lib.nixosSystem { inherit system; specialArgs.flake-inputs = inputs; modules = [ ./configuration ./configuration/hardware-specific/linode ]; }; hetzner-1 = nixpkgs.lib.nixosSystem { inherit system; specialArgs.flake-inputs = inputs; modules = [ ./configuration ./configuration/hardware-specific/hetzner ]; }; }; ############################ # Deployment configuration # ############################ deploy.nodes = { tlaternet = { hostname = "tlater.net"; profiles.system = { user = "root"; path = deploy-rs.lib.${system}.activate.nixos self.nixosConfigurations.tlaternet; }; sshUser = "tlater"; sshOpts = ["-p" "2222" "-o" "ForwardAgent=yes"]; }; hetzner-1 = { hostname = "116.202.158.55"; profiles.system = { user = "root"; path = deploy-rs.lib.${system}.activate.nixos self.nixosConfigurations.tlaternet; }; sshUser = "root"; }; }; ######### # Tests # ######### checks = builtins.mapAttrs (system: deployLib: deployLib.deployChecks self.deploy) deploy-rs.lib; #################### # Helper functions # #################### lib = import ./lib {inherit (nixpkgs) lib;}; ################### # Utility scripts # ################### packages.${system} = let inherit (nixpkgs.legacyPackages.${system}) writeShellScript writeShellScriptBin; vm = nixpkgs.lib.nixosSystem { inherit system; specialArgs.flake-inputs = inputs; modules = [ ./configuration ./configuration/hardware-specific/vm.nix ]; }; in { default = vm.config.system.build.vm; run-vm = let qemuNetOpts = self.lib.makeQemuNetOpts { "2222" = "2222"; "3080" = "80"; "3443" = "443"; "8448" = "8448"; # Matrix "21025" = "21025"; # Starbound }; in writeShellScript "run-vm" '' export QEMU_OPTS="-m 3941 -smp 2 -display curses" export QEMU_NET_OPTS="${qemuNetOpts}" "${vm.config.system.build.vm}/bin/run-tlaternet-vm" ''; update-pkgs = let nvfetcher-bin = "${nvfetcher.packages.${system}.default}/bin/nvfetcher"; in writeShellScriptBin "update-pkgs" '' cd "$(git rev-parse --show-toplevel)/pkgs" ${nvfetcher-bin} -o _sources_pkgs -c nvfetcher.toml ''; update-nextcloud-apps = let nvfetcher-bin = "${nvfetcher.packages.${system}.default}/bin/nvfetcher"; in writeShellScript "update-nextcloud-apps" '' cd "$(git rev-parse --show-toplevel)/pkgs" ${nvfetcher-bin} -o _sources_nextcloud -c nextcloud-apps.toml ''; }; apps.${system} = { default = { type = "app"; program = builtins.toString self.packages.${system}.run-vm; }; update-nextcloud-apps = { type = "app"; program = builtins.toString self.packages.${system}.update-nextcloud-apps; }; }; ########################### # Development environment # ########################### devShells.${system}.default = nixpkgs.legacyPackages.${system}.mkShell { sopsPGPKeyDirs = ["./keys/hosts/" "./keys/users/"]; nativeBuildInputs = [ sops-nix.packages.${system}.sops-import-keys-hook ]; packages = [ sops-nix.packages.${system}.sops-init-gpg-key deploy-rs.packages.${system}.default ]; }; }; }