{"id":15950162,"url":"https://github.com/cafkafk/rime","last_synced_at":"2025-04-09T17:26:17.305Z","repository":{"id":204126551,"uuid":"710655813","full_name":"cafkafk/rime","owner":"cafkafk","description":"Nix Flake Input Versioning","archived":false,"fork":false,"pushed_at":"2025-04-04T20:53:40.000Z","size":917,"stargazers_count":70,"open_issues_count":7,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-06T06:13:38.266Z","etag":null,"topics":["axum","conventional-commits","docker","flakes","k8s","kubernetes","linux","nix","nixos","rust","semver"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cafkafk.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"cafkafk","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":null}},"created_at":"2023-10-27T06:48:59.000Z","updated_at":"2025-04-04T08:28:30.000Z","dependencies_parsed_at":"2024-03-03T13:27:05.228Z","dependency_job_id":"9eddf1d7-e179-4751-9366-fb106f4e17f2","html_url":"https://github.com/cafkafk/rime","commit_stats":{"total_commits":129,"total_committers":5,"mean_commits":25.8,"dds":0.5891472868217054,"last_synced_commit":"7425fff61b6a538e37b3537de12230d7259e2fd4"},"previous_names":["cafkafk/rime"],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cafkafk%2Frime","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cafkafk%2Frime/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cafkafk%2Frime/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cafkafk%2Frime/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cafkafk","download_url":"https://codeload.github.com/cafkafk/rime/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248076197,"owners_count":21043730,"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":["axum","conventional-commits","docker","flakes","k8s","kubernetes","linux","nix","nixos","rust","semver"],"created_at":"2024-10-07T12:58:21.862Z","updated_at":"2025-04-09T17:26:17.288Z","avatar_url":"https://github.com/cafkafk.png","language":"Rust","funding_links":["https://github.com/sponsors/cafkafk"],"categories":[],"sub_categories":[],"readme":"\u003c!--\nSPDX-FileCopyrightText: 2023 Christina Sørensen\nSPDX-FileContributor: Christina Sørensen\n\nSPDX-License-Identifier: AGPL-3.0-only\n--\u003e\n\u003cdiv align=\"center\"\u003e\n\n\u003ch1\u003eRIME\u003c/h1\u003e\n\n![Rimed hexagonal snow crystal under electron microscope](docs/images/rime.jpg)\n\nNix Flake Input Versioning\n\n[![Built with Nix](https://img.shields.io/badge/Built_With-Nix-5277C3.svg?logo=nixos\u0026labelColor=73C3D5)](https://nixos.org)\n[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](code_of_conduct.md)\n[![Unit tests](https://github.com/cafkafk/rime/actions/workflows/test.yml/badge.svg)](https://github.com/cafkafk/rime/actions/workflows/test.yml)\n[![REUSE status](https://api.reuse.software/badge/git.fsfe.org/reuse/api)](https://api.reuse.software/info/git.fsfe.org/reuse/api)\n[![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0)\n\n\u003c/div\u003e\n\n\u003e **Warning**\n\u003e RIME is experimental, and its API is subject to change.\n\n## What is rime?\n\nAs Nix and Nix adjacent projects have historically had terrible documentation,\nwe'll be extra clear here: Rime is a decentralized, one to many FOSS AGPLv3\nREUSE compliant middleware REST API for flake inputs.\n\nJust kidding! All that is true, but what rime is actually about is simple. Nix\nhas these things called flakes. Flakes can take other flakes as inputs.\nUsually, you add an input to a flake by adding a link to a git repo. The repo\nyou link, will then be locked to the specific version at that time.\n\nBut that's kinda weird if you think about it. You don't usually download the\nlatest development version of a program do you? No! If you're using a\ndistribution, like nixpkgs, then some people have already added a specific\nversion of that program. And not just any version, you get the latest version\nthat the developer of that program (upstream) has released.\n\nFlakes can't do that, at least not natively. So you get this annoying situation\nthat when you update your flake inputs with `nix flake update`, you get some\nrandom, unstable development version. This design choice leads to a lot of\nproblem, both for user who now are forced to wait for their favourite software\nto be added to nixpkgs (and updated for that matter), but also for developers\nlike me, who run a project like eza that relies on flakes. While flakes\nthemselves are awesome, not having versioned releases for your inputs... isn't\nat all.\n\nSo why doesn't flakes do that? Bureaucracy, partially at least, but as we've\ncome to realize by making rime, there are actually a lot of advantages to it\nnot doing that, because that allows us to do it in a much better way.\n\n## Why rime?\n\nYou see, what rime offers is this: you specify a software forge, like github,\nas well as a user and a repository, and we'll make sure that you get the latest\nreleased version from the developer whenever it is ready.\n\nSounds too good to be true? There's more! We also support a LOT of forges, like:\n\n- Github\n- Gitlab (Including self hosted)\n- Codeberg\n- Forgejo (Including self hosted)\n- Gitea (Including self hosted)\n- Sourcehut (Including self hosted, we think at least \u003e_\u003c)\n- Flakehub (Only tagged versions, for now)\n\n...and we plan to add support for cgit, cgit-pink, and any other forge you can\nthink of (create a feature request issue)!\n\nThis saves users and developers a lot of headaches. And to make it even better,\nwe also support automatically discovering what kind of forge is at an url, and\nplan to support semver requirements, like only getting releases that aren't\nmajor changes, or only getting those between version `2.3.2` and `2.8.9`.\n\nAlso just like, how would you add a input from sourcehut, or a flakehub one? \nNo need to look it up, rimes got you covered!\n\n## How rime???\n\nAnd it gets even better, because rime is very simple, and you could easily run\nyour own version. And if that's not your cup of tea, or you're a developer that\nneeds a hosted version that \"just works\", we also have rime.cx, our own\nkubernetes cluster hosting rime, with plenty of beef to handle all your\nrequests. And if you wanna make your own cluster with a rime deployment, we\nprovided an example of how to do that as well, and a ghcr.io container as part\nof the flake.\n\nEnough talking, wanna see it in action?\n\n## Please show me how to use this already!\n\nIt's as easy as this:\n\n```\nnix run http://rime.cx/v1/github/cafkafk/fortune-kind.tar.gz\n```\n\nThat will run the latest version of\n[fortune-kind](https://github.com/cafkafk/fortune-kind) that I have personally\nreleased. Neat hu?\n\nOf course, you'll need to have `flakes` and the `nix-command` [experimental features](https://nixos.org/manual/nix/stable/contributing/experimental-features)\nenabled. But don't worry, they're not really “experimental”, that's mostly a\nresult of bureaucracy. If you wanna reassure yourself, determinate systems, \na company founded by the guy that created ofborg, and currently employs the \nguy that created Nix in the first place [has this to say about flakes stability](https://determinate.systems/posts/experimental-does-not-mean-unstable).\n\n## What about flake inputs that don't do releases\n\nTwo options, one is to use one of rimes endpoints for branches, versions, or\ntags, like this:\n\n```\nnix run http://rime.cx/v1/codeberg.org/cafkafk/hello/version/v0.0.1.tar.gz\nnix run http://rime.cx/v1/codeberg.org/cafkafk/hello/tag/v0.0.1.tar.gz\nnix run http://rime.cx/v1/codeberg.org/cafkafk/hello/branch/main.tar.gz\n```\n\nAnother option is to use [semnix](https://github.com/semnix), our collection of essential flake inputs that\nwe ourselves need for development, that we release ourselves.\n\nThat means you can have a flake like this:\n\n```nix\n{\n  description = \"Your awesome flake\";\n\n  inputs = {\n    {\n  description = \"rime:  Nix Flake Input Versioning\";\n\n  inputs = {\n    flake-utils.url = \"http://rime.cx/v1/github/semnix/flake-utils.tar.gz\";\n\n    naersk.url = \"http://rime.cx/v1/github/semnix/naersk.tar.gz\";\n      \n    treefmt-nix.url = \"http://rime.cx/v1/github/semnix/treefmt-nix.tar.gz\";\n\n    rust-overlay.url = \"http://rime.cx/v1/github/semnix/rust-overlay.tar.gz\";\n\n    ... your other inputs\n  }\n\n  outputs = {\n    ... all your cool outputs\n  }\n}\n```\n\n# Wow, that's really cool, how do I help this\n\nWell... [donations](https://github.com/sponsors/cafkafk) to cover hosting costs are always much appreciated.\n\nIf you wanna become a rime hacker (and why wouldn't you), I'd like to make you familiar with two very important documents.\nFirstly, you're expected to follow our [code of conduct](https://github.com/cafkafk/rime/blob/main/CODE_OF_CONDUCT.md).\nAfter that, you can have a look at our [CONTRIBUTING.md](https://github.com/cafkafk/rime/blob/main/CONTRIBUTING.md) for more info about actual hacking. Also, while silly branch names are preferred, you're free to name them something professional, we won't judge.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcafkafk%2Frime","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcafkafk%2Frime","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcafkafk%2Frime/lists"}