This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
This is the infrastructure repository for Tietokilta (Computer Science Guild), managing Azure cloud resources via Terraform and a NixOS server configuration for pannu.tietokilta.fi.
# Initialize (requires Azure login first)
az login
terraform init
terraform workspace select prod
# Preview changes
terraform plan
# Apply changes (prefer letting CI do this on main branch)
terraform apply
# Format code before committing
terraform fmt -recursive# Enter development shell (provides azure-cli, sops, terraform)
nix develop
# Format all code (Nix, Terraform, YAML)
nix fmt
# Run flake checks including NixOS tests
nix flake check -L
# Build NixOS configuration locally
nix build .#nixosConfigurations.tikpannu.config.system.build.toplevel -L
# Build and run VM for local testing
nix run .#nixosConfigurations.tikpannu.config.system.build.vm
# Manual deployment (prefer CI)
nixos-rebuild switch --target-host root@pannu.tietokilta.fi --flake .#tikpannu./setup-pre-commit.sh # Installs formatter hook- Terraform (
main.tf,modules/): Azure resources for various Tietokilta services - NixOS (
tikpannu-nixos-config/,flake.nix): Server configuration for pannu.tietokilta.fi
main.tf- Root module, provider configuration, module instantiationmodules/- Service-specific modules (ilmo, web, forum, registry, vaultwarden, etc.)modules/common/- Shared resources (resource group, networking)modules/dns/- DNS zone managementmodules/keyvault/- Secret management
Backend state stored in Azure (tikprodterraform storage account).
Hosts: Discourse (vaalit.tietokilta.fi), Telegram bots (TiKbot, WappuPokemonBot, SummerBodyBot)
configuration.nix- Main system configmodules/discourse/- Discourse forum config with sops-nix secretsmodules/tikbots/- Telegram bot servicesmodules/secrets/sops.nix- Secret declarationstests/- NixOS VM tests
Secrets managed via sops-nix. Use sops updatekeys <file> to add new key access.
- terraform.yml: Runs
planon PRs,applyon main (for non-Nix changes) - deploy-pannu.yml: Builds and deploys NixOS config on main (for
*.nixchanges) - format-check.yml: Validates formatting via
nix build .#checks.<system>.formatting
When Terraform tries to create an existing resource:
terraform import module.<foo>.<bar> /subscriptions/<subscription-id>/<path>- Edit
.sops.yamlto add key tokeysandkey_groups - Run
sops updatekeys <secret file>(requires existing access)