Applications, as Terraform state.
The someonescomputer provider manages this platform's declarative nouns — applications, their configuration variables, managed services and the bindings between them — over the same stateless bearer /cli contract the sc CLI and sc-tray drive. One wire contract, no forks between consumers.
What it manages
| Resource | Lifecycle | Notes |
|---|---|---|
| someonescomputer_application | create · read · replace · destroy | The platform has no update verb, so slug/name/organization/isolation_level force replacement. force_destroy proceeds while a database is still bound. |
| someonescomputer_variable | create · read · update · destroy | One name × scope. value is write-only — the platform never returns it, so drift on the value cannot be detected. sensitive/scope force replacement. |
| someonescomputer_service | create · read · destroy | A managed database or bucket. engine defaults to the catalogue default; a deprecated engine is created and surfaced as a warning. force_destroy retires it while bound. |
| someonescomputer_service_binding | create · read · destroy | Grants an application the use of a service. Both ends force replacement. |
| Data source | Answers |
|---|---|
| someonescomputer_application | One application by slug, with its deployments |
| someonescomputer_organizations | The caller's organizations and roles |
| someonescomputer_service_engines | The managed-service engine catalogue |
| someonescomputer_me | Who the token belongs to |
Deployments are deliberately not a resource: a deployment is an immutable revision produced by pushing code (sc deploy), not declarative state. Reference them read-only through the someonescomputer_application data source.
Configuring the provider
Credentials resolve explicit attribute → environment → the credential file sc login writes, so a machine that has already run sc login needs no token in the configuration.
terraform {
required_providers {
someonescomputer = {
source = "grey.ooo/grey/someonescomputer"
}
}
}
provider "someonescomputer" {
# endpoint = "https://someones.computer" # or $SC_ENDPOINT (default: hosted)
# token = "…" # or $SC_TOKEN, or `sc login`'s store
# organization = "acme" # default org for resources that omit one
}
Never commit a token; prefer SC_TOKEN or the sc store. Mint one at /settings/api-tokens once you have an account.
Build and install it
The provider is not yet in a public registry, so point Terraform or OpenTofu at a locally built binary with a dev_overrides block in ~/.terraformrc:
provider_installation {
dev_overrides {
"grey.ooo/grey/someonescomputer" = "/path/to/gobin" # dir holding terraform-provider-someonescomputer
}
direct {}
}
go build -o "$(go env GOBIN)/terraform-provider-someonescomputer" .
With a dev_overrides in effect, skip terraform init — plan and apply pick the override up directly. The token comes from sc login, so install the CLI and sign in once first.
The same platform, declared rather than driven
The provider is a fourth client on one contract — the same bearer token, the same tenant rules and the same operations as the CLI, the tray and the control panel. Nothing it does is a thing only it can do; it just lets you say what should exist instead of running the steps to get there.