{"id":26492993,"url":"https://github.com/fishinthecalculator/gocix","last_synced_at":"2025-07-08T09:39:40.641Z","repository":{"id":253012746,"uuid":"842187847","full_name":"fishinthecalculator/gocix","owner":"fishinthecalculator","description":"This project aims at implementing a Guix native experience for services that are not yet guixable ","archived":false,"fork":false,"pushed_at":"2025-03-19T18:05:53.000Z","size":381,"stargazers_count":8,"open_issues_count":4,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-19T19:23:35.856Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Scheme","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fishinthecalculator.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-13T21:14:57.000Z","updated_at":"2025-03-19T18:05:57.000Z","dependencies_parsed_at":"2024-08-14T00:31:18.919Z","dependency_job_id":"1293fbe8-8f32-44f6-b288-7af0f2395313","html_url":"https://github.com/fishinthecalculator/gocix","commit_stats":null,"previous_names":["fishinthecalculator/gocix"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fishinthecalculator%2Fgocix","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fishinthecalculator%2Fgocix/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fishinthecalculator%2Fgocix/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fishinthecalculator%2Fgocix/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fishinthecalculator","download_url":"https://codeload.github.com/fishinthecalculator/gocix/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244588230,"owners_count":20477282,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2025-03-20T09:37:42.171Z","updated_at":"2025-07-08T09:39:40.625Z","avatar_url":"https://github.com/fishinthecalculator.png","language":"Scheme","funding_links":[],"categories":["Channels"],"sub_categories":[],"readme":"# gocix\n\n 🌿 Welcome to gocix! This project aims at providing a community managed library of Guix services. Code from this channel implements a Guix native experience for services that are not yet guixable, through [OCI backed Shepherd Services](https://guix.gnu.org/manual/devel/en/guix.html#index-oci_002dcontainer_002dservice_002dtype).\n\nThe inclusion of the main piece of this project - `oci-service-type` - into Guix is currently being discussed [in an issue](https://issues.guix.gnu.org/76081).\n\n## Motivation\n\nServices in gocix are supposed to be used to run useful stuff with Guix. They are for the community by the community and there are all the intentions of collaborating with upstream once underlying packages are into Guix proper. To achieve this vision gocix services strive to:\n\n- Separate as much as possible configurations that pertain to the OCI implementation (i.e. ports, volumes, OCI images tags and so on) from application configurations (i.e. whether the application will use https or whatever else). The idea is to make it as little effort as possible upstreaming code from this channel to Guix.\n- Services are configured with sane, secure, privacy aware defaults when possible. This means that each service in this repository is carefully reviewed and analytics are disabled whenever possible.\n\n## Services\n\nThis channel exposes at `(oci services)` a set of Guix System services for many useful applications, such as:\n\n- [Bonfire Social](https://bonfirenetworks.org/app/social/)\n- [Forgejo](https://forgejo.org/)\n- [Grafana](https://grafana.com/)\n- [Matrix Conduit](https://conduit.rs/)\n- [meilisearch](https://www.meilisearch.com/)\n- [Prometheus](https://prometheus.io/)\n- [Prometheus Blackbox Exporter](https://github.com/prometheus/blackbox_exporter)\n- [Tandoor](https://tandoor.dev/)\n- [Traefik whoami](https://traefik.io/)\n- [Vaultwarden](https://github.com/dani-garcia/vaultwarden)\n\nThese services are supposed to feel like services backed by native Guix packages, please report any inconsistency you may find.\n\nHere's how you would use some of the services from this channel in your `operating-system` record:\n\n``` scheme\n(use-modules (oci services prometheus)\n             (oci services grafana))\n\n(operating-system\n (services\n        ;; Blackbox exporter OCI backed Guix System service\n  (list (service oci-blackbox-exporter-service-type\n                 (oci-blackbox-exporter-configuration\n                  (network \"host\")\n                  (file\n                   (plain-file \"modules.yml\"\n                               \"\nmodules:\n  http_2xx:\n    prober: http\n    http:\n      preferred_ip_protocol: ip4\n  http_post_2xx:\n    prober: http\n    http:\n      method: POST\n  icmp:\n    prober: icmp\n  icmp_ttl5:\n    prober: icmp\n    timeout: 5s\n    icmp:\n      ttl: 5\\n\"))))\n\n        ;; Prometheus OCI backed Guix System service\n        (service oci-prometheus-service-type\n                 (oci-prometheus-configuration\n                  (image \"prom/prometheus:v2.45.0\")\n                  (network \"host\")\n                  (record\n                   (prometheus-configuration\n                    (global\n                     (prometheus-global-configuration\n                      (scrape-interval \"30s\")\n                      (scrape-timeout \"12s\")))\n                    (scrape-configs\n                     (list\n                      (prometheus-scrape-configuration\n                       (job-name \"prometheus\")\n                       (static-configs\n                        (list (prometheus-static-configuration\n                               (targets '(\"localhost:9090\"))))))\n                      (prometheus-scrape-configuration\n                       (job-name \"blackbox\")\n                       (static-configs\n                        (list (prometheus-static-configuration\n                               (targets '(\"localhost:9115\"))))))\n                      (prometheus-scrape-configuration\n                       (job-name \"blackbox-icmp\")\n                       (metrics-path \"/probe\")\n                       (extra-content \"    params:\n      module: [icmp]\n    static_configs:\n      - targets:\n        - 1.1.1.1\n    relabel_configs:\n      - source_labels: [__address__]\n        target_label: __param_target\n      - source_labels: [__param_target]\n        target_label: instance\n      - target_label: __address__\n        replacement: localhost:9115 # The blackbox exporter's real hostname:port.\"))))))))\n\n        ;; Grafana OCI backed Guix System service\n        (service oci-grafana-service-type\n                 (oci-grafana-configuration\n                  (image \"bitnami/grafana:10.1.5\")\n                  (network \"host\"))))))\n```\n\n### Migrating to the `oci-service-type`\n\nThe `oci-service-type` deprecates the `ci-container-service-type`: it is\ncompletely backward compatible and now, while deprecated, the\n`oci-container-service-type` is actually implemented extending the\n`oci-service-type` and a Guix Home service.\n\nIt brings additional features, such as: rootless podman support, the ability\nto provision networks and volumes, and better image caching.\n\nTo make the switch in service code you need to change your extension from\n ``` lisp\n(service-extension oci-container-service-type\n                   oci-bonfire-configuration-\u003eoci-container-configuration)\n```\nto\n ``` lisp\n(service-extension oci-service-type\n                   (lambda (config)\n                     (oci-extension\n                      (containers\n                       (list\n                        (oci-bonfire-configuration-\u003eoci-container-configuration config))))))\n```\n\nTo make the switch in `operating-system` records, you need to change from\n\n ``` lisp\n(simple-service 'oci-containers\n                oci-container-service-type\n                (list\n                 (oci-container-configuration\n                  ...)))\n```\nto\n ``` lisp\n(simple-service 'oci-containers\n                oci-service-type\n                (oci-extension\n                 (containers\n                  (list\n                   (oci-container-configuration\n                    ...)))))\n```\n\n## Documentation\n\nThe `gocix` manual [lives in this repository](https://github.com/fishinthecalculator/gocix/blob/main/doc/README.md). It contains API documentation for all services available in the channel.\n\n## What is a Guix channel?\n\nA [channel](https://guix.gnu.org/en/manual/devel/en/guix.html#Channels) is roughly the Guix equivalent of Ubuntu's PPAs or container registries. It's a software repository providing Guix package and service definitions.\n\nYou can search for package and service definitions from this channel and many others at [toys.whereis.social](https://toys.whereis.social).\n\n### Configure\n\nTo configure Guix for using this channel you need to create a `.config/guix/channels.scm` file with the following content:\n\n``` scheme\n(cons* (channel\n        (name 'gocix)\n        (url \"https://github.com/fishinthecalculator/gocix\")\n        (branch \"main\")\n        ;; Enable signature verification:\n        (introduction\n         (make-channel-introduction\n          \"cdb78996334c4f63304ecce224e95bb96bfd4c7d\"\n          (openpgp-fingerprint\n           \"8D10 60B9 6BB8 292E 829B  7249 AED4 1CC1 93B7 01E2\"))))\n       %default-channels)\n```\n\nOtherwise, if you already have a `.config/guix/channels.scm` you can simply prepend this channel to the preexisting ones:\n\n``` scheme\n(cons* (channel\n        (name 'gocix)\n        (url \"https://github.com/fishinthecalculator/gocix\")\n        (branch \"main\")\n        ;; Enable signature verification:\n        (introduction\n         (make-channel-introduction\n          \"cdb78996334c4f63304ecce224e95bb96bfd4c7d\"\n          (openpgp-fingerprint\n           \"8D10 60B9 6BB8 292E 829B  7249 AED4 1CC1 93B7 01E2\"))))\n       (channel\n        (name 'nonguix)\n        (url \"https://gitlab.com/nonguix/nonguix\")\n        ;; Enable signature verification:\n        (introduction\n         (make-channel-introduction\n          \"897c1a470da759236cc11798f4e0a5f7d4d59fbc\"\n          (openpgp-fingerprint\n           \"2A39 3FFF 68F4 EF7A 3D29  12AF 6F51 20A0 22FB B2D5\"))))\n       %default-channels)\n```\n\n## Contributing\n\nIf you have commit access please remember to setup the authentication hook with\n\n```bash\nguix git authenticate --cache-key=channels/gocix cdb78996334c4f63304ecce224e95bb96bfd4c7d '8D10 60B9 6BB8 292E 829B  7249 AED4 1CC1 93B7 01E2'\n```\n\n## License\n\nUnless otherwise stated all the files in this repository are to be considered under the GPL 3.0 terms. You are more than welcome to open issues or send patches.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffishinthecalculator%2Fgocix","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffishinthecalculator%2Fgocix","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffishinthecalculator%2Fgocix/lists"}