{ description = "My NixOS flake"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11"; disko = { url = "github:nix-community/disko/latest"; inputs.nixpkgs.follows = "nixpkgs"; }; home-manager = { url = "github:nix-community/home-manager/release-25.05"; inputs.nixpkgs.follows = "nixpkgs"; }; sops-nix = { url = "github:Mic92/sops-nix"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { self, nixpkgs, disko, home-manager, sops-nix, ... }@inputs: let system = "x86_64-linux"; pkgs = nixpkgs.legacyPackages.${system}; in { nixosConfigurations = let my-r = import ./languages/r.nix { inherit pkgs; }; my-python = import ./languages/python.nix { inherit pkgs; }; T14pModules = [ disko.nixosModules.disko sops-nix.nixosModules.sops home-manager.nixosModules.home-manager ./hosts/T14p/configuration.nix { home-manager.extraSpecialArgs = { inherit inputs my-r my-python; }; home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; home-manager.users.louis = import ./home/full.nix; home-manager.users.root = import ./home/root.nix; } ]; mkT14p = nixpkgs.lib.nixosSystem { inherit system; specialArgs = { inherit inputs; }; modules = T14pModules; }; mkServer = domain: isProd: nixpkgs.lib.nixosSystem { system = "x86_64-linux"; specialArgs = { inherit inputs domain isProd; }; modules = [ inputs.disko.nixosModules.disko sops-nix.nixosModules.sops ./hosts/hetzner/configuration.nix ]; }; in { T14p = mkT14p; hetzner-prod = mkServer "louisclee.com" true; hetzner-test = mkServer "localhost" false; }; apps.${system} = let target = "root@louisclee.com"; deployScript = pkgs.writeShellScriptBin "deploy" '' ${pkgs.nixos-rebuild}/bin/nixos-rebuild switch \ --flake .#hetzner-prod \ --target-host ${target} \ --use-remote-sudo ''; initScript = pkgs.writeShellScriptBin "init" '' nix run github:nix-community/nixos-anywhere -- \ --flake .#hetzner-prod \ --extra-files ./hosts/hetzner/extra-files \ ${target} ''; in { deploy = { type = "app"; program = "${deployScript}/bin/deploy"; }; init = { type = "app"; program = "${initScript}/bin/init"; }; vm = { type = "app"; program = "${self.nixosConfigurations.hetzner-test.config.system.build.vm}/bin/run-webserver-vm"; }; }; }; }