{"id":28208112,"url":"https://github.com/eighty4/c2","last_synced_at":"2026-02-21T10:11:39.079Z","repository":{"id":288961996,"uuid":"969631767","full_name":"eighty4/c2","owner":"eighty4","description":"Cross-platform developer tooling for cloud-init user data","archived":false,"fork":false,"pushed_at":"2025-10-10T03:15:32.000Z","size":49,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-02T21:17:23.175Z","etag":null,"topics":["cloud-config","cloud-init","devops","linux","user-data"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eighty4.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"docs/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"docs/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":"docs/SUPPORT.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-20T15:37:59.000Z","updated_at":"2025-10-10T03:15:36.000Z","dependencies_parsed_at":"2025-08-27T01:11:38.811Z","dependency_job_id":"c99a0fd7-44a2-4748-91db-08232a04bac5","html_url":"https://github.com/eighty4/c2","commit_stats":null,"previous_names":["eighty4/c2"],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/eighty4/c2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eighty4%2Fc2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eighty4%2Fc2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eighty4%2Fc2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eighty4%2Fc2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eighty4","download_url":"https://codeload.github.com/eighty4/c2/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eighty4%2Fc2/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29679049,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T09:33:50.764Z","status":"ssl_error","status_checked_at":"2026-02-21T09:33:19.949Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloud-config","cloud-init","devops","linux","user-data"],"created_at":"2025-05-17T14:11:43.810Z","updated_at":"2026-02-21T10:11:39.074Z","avatar_url":"https://github.com/eighty4.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cloud Config\n\nBlow up your `cloud-init` developer workflows!\n\nSee the [examples dir](https://github.com/eighty4/c2/tree/main/examples) for\nexamples running on your local machine or deploying to cloud providers.\n\n## Getting started\n\n```shell\nnpm i -g @eighty4/c2\nc2 -h\n```\n\n## Using the CLI program\n\n```\nc2 ./cloud_init_dir\n\n# base64 encode your user data\nc2 --base64 ./cloud_init_dir\n```\n\n## Using the JS API\n\n```\nimport { buildUserData } from '@eighty4/c2'\n\nconst userData: string = await buildUserData('./cloud_init_dir')\n```\n\n## Cloud Config data dir\n\nMultiple user data are ordered by filenames and `01_` numbered prefixes help\ndeclare execution order.\n\n```\nls ./cloud_init_dir\n01_upgrades.yml\n02_security.yml\n03_services.sh\n```\n\nShell scripts are supported as `x-shellscript` and YAML is included as\n`cloud-config` MIME types.\n\n## Evaluating expressions in user data\n\nScripts and YAML support two template functions that can be used in\nexpressions.\n\n### env()\n\nReplaces expression with content of a local environment variable.\n\n```bash\n#!/bin/sh\n\nENV_VAR=\"${{ env('LOCAL_ENV_VAR') }}\"\n```\n\n### file()\n\nLooks up a file from your local filesystem and replaces the expression with\nits content.\n\n```yaml\n#cloud-config\n\nusers:\n    - name: devops-baller\n      ssh_authorized_keys:\n          - ${{ file('~/.ssh/my_ssh_key.pub') }}\n```\n\nRelative, absolute and `~/` paths are supported.\n\n## Contributing\n\nI use `c2` for initializing Debian cloud instances and locally test with QEMU\nand Ubuntu.\n\nFeedback on your use cases and worfklows is greatly appreciated!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feighty4%2Fc2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feighty4%2Fc2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feighty4%2Fc2/lists"}