{"id":29738556,"url":"https://github.com/csh/island-config","last_synced_at":"2025-07-25T19:01:57.142Z","repository":{"id":305471390,"uuid":"1019927303","full_name":"csh/island-config","owner":"csh","description":"BepInEx plugin for configuring mods in Len's Island.","archived":false,"fork":false,"pushed_at":"2025-07-20T08:46:53.000Z","size":2251,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-20T10:24:01.451Z","etag":null,"topics":["bepinex","lens-island","unity"],"latest_commit_sha":null,"homepage":"","language":"ShaderLab","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/csh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"zenodo":null}},"created_at":"2025-07-15T05:05:15.000Z","updated_at":"2025-07-20T09:14:39.000Z","dependencies_parsed_at":"2025-07-20T10:35:56.538Z","dependency_job_id":null,"html_url":"https://github.com/csh/island-config","commit_stats":null,"previous_names":["csh/island-config"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/csh/island-config","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/csh%2Fisland-config","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/csh%2Fisland-config/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/csh%2Fisland-config/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/csh%2Fisland-config/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/csh","download_url":"https://codeload.github.com/csh/island-config/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/csh%2Fisland-config/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267049961,"owners_count":24027405,"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","status":"online","status_checked_at":"2025-07-25T02:00:09.625Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["bepinex","lens-island","unity"],"created_at":"2025-07-25T19:01:09.751Z","updated_at":"2025-07-25T19:01:57.107Z","avatar_url":"https://github.com/csh.png","language":"ShaderLab","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"icon.png\"/\u003e\n\n# IslandConfig\n\nAn *attempt* at creating a nicely styled mod configuration utility for [Len's Island]. \n\n*Disclaimer: I have never worked with Unity's UI system before, so this could be completely crap.*\n\n## For Users\n\n[Manual installation of BepInEx](https://docs.bepinex.dev/articles/user_guide/installation/index.html) is required until mod managers add support for [Len's Island].\n\nTo use IslandConfig for configuring your BepInEx mods ingame:\n1. Download the [latest release](https://github.com/csh/island-config/releases/latest).\n2. Extract the `plugins` folder to the game `BepInEx` folder.\n\nYou only need the `plugins` folder from the ZIP file for manual installation.\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\u003ch2\u003eFor Developers\u003c/h2\u003e\n\u003c/summary\u003e\n\nBy default, IslandConfig will generate appropriate UI elements matching the structure of your BepInEx config bindings.\n\nYou **do not** need to add a dependency on this package unless you wish to have control over how the UI gets generated.\n\n### Add NuGet Feed\n\n```sh\ndotnet nuget add source https://nuget.pkg.github.com/csh/index.json --name \"github/csh\" --username \u003cGITHUB_USERNAME\u003e --password \u003cGITHUB_PAT\u003e\n```\n\nYou must generate a [personal access token (classic)](https://github.com/settings/tokens) with the `read:packages` scope to use this feed.\n\n### Add PackageReference\n\nYou can run the command below or add a `\u003cPackageReference\u003e` to your csproj file, whatever floats your boat.\n\n#### CLI\n\n```sh\ndotnet add package IslandConfig --version 0.1.0\n```\n\n#### PackageReference\n\n```xml\n\u003cPackageReference Include=\"IslandConfig\" Version=\"0.*\" PrivateAssets=\"all\" /\u003e\n```\n\n### Consuming the API\n\nFirst, you will need to add *at least* a soft dependency on IslandConfig to ensure BepInEx loads things in the correct order.\n\nIf you are using a soft dependency you will need to check the [`Chainloader`](https://docs.bepinex.dev/api/BepInEx.Bootstrap.Chainloader.html) for the presence of IslandConfig at runtime.\n\n```csharp\n[BepInDependency(\"com.smrkn.island-config\",  BepInDependency.DependencyFlags.SoftDependency)]\n```\n\nThe example code below uses a hard dependency for simplicity.\n\n```csharp\n[BepInPlugin(\"com.smrkn.example-mod\", \"IslandConfig Example Mod\", \"0.1.0\")]\n[BepInDependency(\"com.smrkn.island-config\")]\npublic class ExampleMod : BaseUnityPlugin\n{\n    public static ConfigEntry\u003cbool\u003e EnableCoolFeature;\n    public static ConfigEntry\u003cbool\u003e EnableDebugMode;\n\n    private void Awake()\n    {\n        /*\n         * Create a configuration file that looks like this:\n         *\n         * [General]\n         * Debug = false\n         * CoolFeature1 = true\n         */\n        EnableDebugMode = Config.Bind(\"General\", \"Debug\", false);\n        EnableCoolFeature = Config.Bind(\"General\", \"CoolFeature1\", true);\n\n        // If changing a value requires more complex logic than an if check somewhere\n        // then you should subscribe to the SettingChanged event\n        EnableCoolFeature.SettingChanged += ToggleCoolFeature;\n        \n        IslandConfig.Register(builder =\u003e\n        {\n            // Only CoolFeature1 will be featured in the generated config UI\n            builder.WithCheckbox(\n                EnableCoolFeature,\n                // Define a custom section for grouping settings in the UI\n                section: \"My First Mod\",\n                // Define a custom label that will appear on the UI\n                label: \"Enable Cool Feature 1\", \n                // Define a custom description that will appear when the setting is hovered in the UI\n                description: \"Enabling this will make something cool happen.\"\n            );\n        });\n    \n        // Your init logic\n    }\n\n    private void ToggleCoolFeature(object sender, EventArgs e)\n    {\n        // Do something in response to the config changing, maybe enable/disable a specific Harmony patch.\n    }\n\n    private void OnDestroy()\n    {\n        /*\n         * Notify IslandConfig that the plugin is being unloaded.\n         *\n         * IslandConfig tracks plugins and configuration entries using weak references so that if\n         * a plugin is unloaded the relevant config entries are disposed of automatically.\n         *\n         * IslandConfig was designed with ScriptEngine from BepInEx.Debug in mind, allowing developers\n         * to rapidly iterate with hot-reload capabilities, however this relies on Unity's garbage collector\n         * disposing of the plugin object before the hot-reload completes to ensure correctness.\n         *\n         * Therefore manually unregistering is preferred, but not *strictly* necessary.\n         */\n        IslandConfig.Unregister();\n        EnableCoolFeature.SettingChanged -= ToggleCoolFeature;\n    }\n}\n```\n\n*More examples will be added in future as the API expands.*\n\u003c/details\u003e\n\n## Attribution\n\n[Island icon created by Freepik - Flaticon](https://www.flaticon.com/free-icons/island \"island icons\")\n\n[Len's Island]: https://store.steampowered.com/app/1335830/Lens_Island/","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcsh%2Fisland-config","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcsh%2Fisland-config","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcsh%2Fisland-config/lists"}