diff --git a/tasks.py b/tasks.py
index 25a5b48..f218bf7 100644
--- a/tasks.py
+++ b/tasks.py
@@ -6,7 +6,7 @@ import subprocess
 import sys
 from pathlib import Path
 from tempfile import TemporaryDirectory
-from typing import List
+from typing import Any, List, Union
 
 from deploykit import DeployGroup, DeployHost
 from invoke import task
@@ -42,7 +42,7 @@ def deploy_nixos(hosts: List[DeployHost]) -> None:
 
 
 @task
-def update_sops_files(c):
+def update_sops_files(c: Any) -> None:
     """
     Update all sops yaml and json files according to .sops.yaml rules
     """
@@ -57,7 +57,7 @@ find . \
 
 
 @task
-def print_keys(c, flake_attr: str) -> None:
+def print_keys(c: Any, flake_attr: str) -> None:
     """
     Decrypt host private key, print ssh and age public keys. Use inv print-keys --flake-attr build01
     """
@@ -82,7 +82,7 @@ def print_keys(c, flake_attr: str) -> None:
 
 
 @task
-def update_terraform(c):
+def update_terraform(c: Any) -> None:
     """
     Update terraform devshell flake
     """
@@ -103,7 +103,7 @@ git commit --all --amend -m "${commit}" -m "Terraform updates:" -m "${diff}"
 
 
 @task
-def mkdocs(c):
+def mkdocs(c: Any) -> None:
     """
     Serve docs (mkdoc serve)
     """
@@ -132,15 +132,15 @@ def get_hosts(hosts: str) -> List[DeployHost]:
 
 
 @task
-def deploy(c, hosts=""):
+def deploy(c: Any, hosts: str = "") -> None:
     """
     Deploy to all servers. Use inv deploy --hosts build01 to deploy to a single server
     """
     deploy_nixos(get_hosts(hosts))
 
 
-def decrypt_host_key(flake_attr, tmpdir):
-    def opener(path, flags):
+def decrypt_host_key(flake_attr: str, tmpdir: str) -> None:
+    def opener(path: str, flags: int) -> Union[str, int]:
         return os.open(path, flags, 0o400)
 
     t = Path(tmpdir)
@@ -163,7 +163,7 @@ def decrypt_host_key(flake_attr, tmpdir):
 
 
 @task
-def install(c, flake_attr: str, hostname: str) -> None:
+def install(c: Any, flake_attr: str, hostname: str) -> None:
     """
     Decrypt host private key, install with nixos-anywhere. Use inv install --flake-attr build01 --hostname build01.nix-community.org
     """
@@ -180,7 +180,7 @@ def install(c, flake_attr: str, hostname: str) -> None:
 
 
 @task
-def build_local(c, hosts=""):
+def build_local(c: Any, hosts: str = "") -> None:
     """
     Build all servers. Use inv build-local --hosts build01 to build a single server
     """
@@ -226,7 +226,7 @@ def wait_for_port(host: str, port: int, shutdown: bool = False) -> None:
 
 
 @task
-def reboot(c, hosts=""):
+def reboot(c: Any, hosts: str = "") -> None:
     """
     Reboot hosts. example usage: inv reboot --hosts build01,build02
     """
@@ -235,17 +235,18 @@ def reboot(c, hosts=""):
 
         print(f"Wait for {h.host} to shutdown", end="")
         sys.stdout.flush()
-        wait_for_port(h.host, h.port, shutdown=True)
+        port = h.port or 22
+        wait_for_port(h.host, port, shutdown=True)
         print("")
 
         print(f"Wait for {h.host} to start", end="")
         sys.stdout.flush()
-        wait_for_port(h.host, h.port)
+        wait_for_port(h.host, port)
         print("")
 
 
 @task
-def cleanup_gcroots(c, hosts=""):
+def cleanup_gcroots(c: Any, hosts: str = "") -> None:
     g = DeployGroup(get_hosts(hosts))
     g.run("sudo find /nix/var/nix/gcroots/auto -type s -delete")
     g.run("sudo systemctl restart nix-gc")