{"id":18564252,"url":"https://github.com/notashelf/renovate","last_synced_at":"2025-04-10T04:31:38.880Z","repository":{"id":184983428,"uuid":"672796302","full_name":"NotAShelf/Renovate","owner":"NotAShelf","description":"A cozy commons library for an unified configuration interface.","archived":true,"fork":false,"pushed_at":"2023-07-31T07:42:54.000Z","size":18,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-17T13:13:18.661Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Nix","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/NotAShelf.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}},"created_at":"2023-07-31T07:27:56.000Z","updated_at":"2024-07-15T08:36:28.000Z","dependencies_parsed_at":"2023-07-31T08:52:50.960Z","dependency_job_id":null,"html_url":"https://github.com/NotAShelf/Renovate","commit_stats":null,"previous_names":["notashelf/renovate"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NotAShelf%2FRenovate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NotAShelf%2FRenovate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NotAShelf%2FRenovate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NotAShelf%2FRenovate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NotAShelf","download_url":"https://codeload.github.com/NotAShelf/Renovate/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248157429,"owners_count":21057012,"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":"2024-11-06T22:14:42.230Z","updated_at":"2025-04-10T04:31:38.599Z","avatar_url":"https://github.com/NotAShelf.png","language":"Nix","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🏠 Renovate\n\n\u003e A cozy commons library for an unified configuration interface.\n\n## What am I looking at?\n\nRenovate is a NixOS module that aims to replace my out-of-place abstractions within my configuration, which usually go something like\n`options.modules.programs.\u003cprogram\u003e.enable = mkEnableOption \"program\"`, which seems to be a common abstraction used by plenty of NixOS users.\n\nRenovate exposes **one** interface, which ~~defines~~ tries to define all programs in once place:\n\n```nix\noptions.renovate.programs = {\n    # a list of mail clients that we want to make available\n    mail = {\n        thunderbird = mkEnableOption \"Thunderbird mail client\";\n        kmail = mkEnableOption \"Kmail mail client\";\n    };\n\n    # a list of various messenger apps that we would like available\n    messenger = {\n        discord = mkEnableOption \"Discord messenger\";\n        hexchat = mkEnableOption \"Hexchat IRC client\";\n    };\n\n    # other applications...\n};\n```\n\nThis interface is then used in various condition checks, so that you may enable programs conditionally\nfrom (ideally) a single file.\n\n```nix\n# configuration.nix\nimports = [ inputs.renovate.nixosModules.default]; # import renovate module\n\nconfig = {\n    renovate.programs = {\n        messenger.discord.enable = true;\n        mail.thunderbird.enable = true;\n    };\n}\n```\n\nThe enable state of the program is then used in any other configuration file, ranging from\nNixOS modules to Home-manager (Hm).\n\n```nix\n# someHmModule.nix\n{osConfig, lib, ...}: let\n    osConfig.renovate.programs.mail.thunderbird\nin; {\n    config = lib.mkIf (cfg.enable) {\n        # this is home-manager's own programs.thunderbird\n        programs.thunderbird = {\n            enable = true;\n            someAttrset = {\n                key = value;\n            };\n        };\n\n        xdg.configFile.\"someFile.conf\".text = ''\n            # some testing config\n        '';\n    };\n}\n```\n\n## Cool, what problem does it solve?\n\nRenovate's purpose is simple: to define conditions from a single interface, so that the system is _fully_ self aware.\nUsing a singular configuration file, be it per host or globally shared, you can easily enable specific modules within your configuration depending on the enable status of programs.\n\n## Todo\n\n- Extend the scope of this project. Instead of just defining enable options, allow for configuration set options.\n- Flake checks and tests\n- More examples\n- Relocate my system abstractions to here\n\n## Contributing\n\nAll contributions are welcome. I will probably not be able to add all programs myself, but if you find this project interesting and decide it is missing a program that you use, feel free to PR or request a module for it.\n\n## License\n\nSee [License](License).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnotashelf%2Frenovate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnotashelf%2Frenovate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnotashelf%2Frenovate/lists"}