{"id":29751665,"url":"https://github.com/sottey/dashuni","last_synced_at":"2025-07-26T14:41:00.430Z","repository":{"id":302382337,"uuid":"1012235011","full_name":"sottey/dashuni","owner":"sottey","description":"You keep one single source of truth about your servers, services, and bookmarks, and Dashuni generates the correct config for your favorite dashboard.","archived":false,"fork":false,"pushed_at":"2025-07-08T01:00:48.000Z","size":55,"stargazers_count":68,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-15T08:04:46.725Z","etag":null,"topics":["cli","dashboard","go","self-hosted","self-hosting","utility"],"latest_commit_sha":null,"homepage":"https://github.com/sottey/dashuni","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sottey.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,"zenodo":null}},"created_at":"2025-07-02T03:11:30.000Z","updated_at":"2025-07-14T13:04:06.000Z","dependencies_parsed_at":"2025-07-02T05:38:57.669Z","dependency_job_id":null,"html_url":"https://github.com/sottey/dashuni","commit_stats":null,"previous_names":["sottey/dashuni"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sottey/dashuni","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sottey%2Fdashuni","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sottey%2Fdashuni/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sottey%2Fdashuni/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sottey%2Fdashuni/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sottey","download_url":"https://codeload.github.com/sottey/dashuni/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sottey%2Fdashuni/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265438370,"owners_count":23765260,"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":["cli","dashboard","go","self-hosted","self-hosting","utility"],"created_at":"2025-07-26T14:40:59.423Z","updated_at":"2025-07-26T14:41:00.411Z","avatar_url":"https://github.com/sottey.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🎨 Dashuni\n\nWelcome to **Dashuni** — your universal *dashboard config converter* for the homelab world!\n\nEver switch from **Dashy** to **Homer** to **Honey** to **Starbase** and think:\n\n\u003e *“I really don’t want to re-enter my 50 services again…”*\n\nDashuni *solves* that. You keep one single source of truth about your servers, services, and bookmarks, and Dashuni generates the correct config for your favorite dashboard.\n\n---\n\n## 🚀 What is Dashuni?\n\nDashuni is a command-line tool written in Go. It takes a **universal JSON** describing your homelab layout and services, then uses **Go templates** to convert that into the native config formats for dozens of popular dashboards.\n\n✅ One source of truth.  \n✅ Export to anything.  \n✅ No more tedious re-entry.\n\n---\n\n## ‼️ What is Dashuni NOT?\n\nDashuni is NOT for ALL dashboards. Because it focuses on writing config files in YAML, JSON, etc., it is not (yet) able to handle dashboards which use MongoDB, Postgres, or another storage mechanism that is not a plain text configuration.\n\n---\n\n## ⭐️ Key Features\n\n✨ Convert your homelab service list to **many dashboards**  \n✨ Templated and **extensible**  \n✨ Supports **icon mapping** (for Font Awesome, MDI, Simple Icons)  \n✨ Easy **CLI** usage  \n✨ Fast and scriptable  \n✨ Bring your *own templates* to add new dashboards!\n\n---\n\n## 📦 Supported Dashboards\n\nOut of the box, Dashuni can generate configs for:\n\n- [**Dashy**](https://github.com/Lissy93/dashy)\n- [**Homer**](https://github.com/bastienwirtz/homer)  \n- [**Honey**](https://github.com/dani3l0/honey)  \n- [**LabDash**](https://github.com/AnthonyGress/lab-dash)  \n- [**MAFL**](https://github.com/hywax/mafl)  \n- [**Starbase**](https://github.com/notclickable-jordan/starbase-80)  \n- [**Hiccup**](https://github.com/ashwin-pc/hiccup)  \n- [**GetHomepage**](https://github.com/gethomepage/homepage)\n- [**Jump**](https://github.com/daledavies/jump)\n- [**Glance**](https://github.com/glanceapp/glance)\n- [**Easy-Gate**](https://github.com/wiredlush/easy-gate)\n- [**Dashlit**](https://github.com/codewec/dashlit)\n\nAnd it’s easy to add more!\n\n---\n\n## 💻 How Does it Work?\n\n1️⃣ You create a **universal JSON** describing your services in a normalized schema.  \n2️⃣ You pick a template for your target dashboard.  \n3️⃣ Dashuni renders the template with your data → you get the correct config format.  \n4️⃣ Paste it into your dashboard and enjoy.\n\n✅ No more manual re-entry.  \n✅ Consistency between all your dashboards.\n\n---\n\n## 🗂️ Example Universal Schema\n\nHere’s a snippet of your **one source of truth**:\n\n```json\n{\n  \"site\": {\n    \"name\": \"My Homelab\",\n    \"description\": \"Central dashboard for all services\",\n    \"theme\": \"auto\",\n    \"pages\": [\n      {\n        \"title\": \"Main\",\n        \"sections\": [\n          {\n            \"title\": \"Servers\",\n            \"items\": [\n              {\n                \"title\": \"Dockge\",\n                \"url\": \"http://192.168.7.2:8080\",\n                \"icon\": \"https://example.com/icons/dockge.png\",\n                \"description\": \"Docker management UI\",\n                \"tags\": [\"docker\", \"admin\"],\n                \"target\": \"_blank\"\n              }\n            ]\n          }\n        ]\n      }\n    ]\n  }\n}\n```\n\nYou maintain this single file. Dashuni does the rest.\n\n---\n\n## ⚙️ Installation\n\nClone the repo:\n\n```bash\ngit clone https://github.com/sottey/dashuni.git\ncd dashuni\n```\n\nBuild the binary:\n\n```bash\ngo build -o dashuni\n```\n\nOr install via Go:\n\n```bash\ngo install github.com/sottey/dashuni@latest\n```\n\n---\n\n## 🧰 CLI Usage\n\nTo convert:\n\n```bash\n./dashuni convert --input mylab.json --mapping mappings/dashy.tmpl --output dashy-config.yml\n```\n\nOptions:\n\n- `--input`: your universal JSON\n- `--mapping`: target dashboard template\n- `--output`: where to save the result\n\nList your available templates:\n\n```bash\n./dashuni list\n```\n\n---\n\n## 🎨 Templating System\n\nDashuni is powered by **Go’s text/template** system.\n\nYour template defines exactly how your universal data maps to the dashboard config.\n\n**Example Dashy Template Snippet:**\n\n```gotemplate\nappConfig:\n  theme: \"{{ .Site.Theme }}\"\nsections:\n{{- range .Site.Pages }}\n  {{- range .Sections }}\n  - name: \"{{ .Title }}\"\n    items:\n      {{- range .Items }}\n      - title: \"{{ .Title }}\"\n        url: \"{{ .URL }}\"\n        icon: \"{{ .Icon }}\"\n      {{- end }}\n  {{- end }}\n{{- end }}\n```\n\n✅ Fully customizable  \n✅ Add your own templates for new dashboards!\n\n---\n\n## 🗺️ Icon Mapping\n\nSome dashboards don’t use raw URLs for icons but want standardized names like **mdi:docker** or **simple-icons:vaultwarden**.\n\n✅ Dashuni supports an optional **fa-mapping.json**:\n\n```json\n{\n  \"Dockge\": \"mdi:docker\",\n  \"FreshRSS\": \"mdi:rss\",\n  \"VaultWarden\": \"simple-icons:vaultwarden\"\n}\n```\n\nYour template can use this to transform service names into correct icon identifiers.\n\n---\n\n## 📌 Note on Icons\n\n**Important:** Not all icon libraries have all services!  \n\nFor example:\n\n- **Simple Icons** only includes popular brands.\n- Self-hosted projects (like Dockge or FreshRSS) often lack official icons.\n\nYou might need to:\n\n- Use **mdi** alternatives\n- Upload custom icons to your dashboard\n- Maintain your own mapping JSON\n\n---\n\n## ⚡️ Adding New Dashboards\n\n✅ Want to support another dashboard?  \n\nJust:\n\n1️⃣ Study the dashboard’s config format  \n2️⃣ Write a new Go template in `mappings/`  \n3️⃣ Use Dashuni to render your universal JSON into the new format\n\nNo code changes required. Templates are *data-driven*.\n\n---\n\n## 🏗️ Building Dashuni\n\n```bash\ngo build -o dashuni\n```\n\nCheck:\n\n```bash\n./dashuni --help\n```\n\n---\n\n## 🤝 Contributions Welcome\n\nWant to help make Dashuni better?\n\n✅ Add new dashboard templates  \n✅ Improve existing mappings  \n✅ Fix bugs  \n✅ Enhance CLI UX  \n✅ Add tests\n\n---\n\n### To contribute:\n\n1. Fork the repo  \n2. Make your changes in a new branch  \n3. Submit a pull request  \n\nLet’s make dashboard switching *painless* for everyone!\n\n---\n\n## 🙏 Credits\n\nDashuni is designed and maintained by **sottey**, with friendly help from ChatGPT (who wrote this readme!).\n\nThanks to:\n\n- All the homelab dashboard developers\n- Go’s powerful `text/template` library\n- Open source communities everywhere\n\n---\n\n## 🪄 License\n\nMIT. See [LICENSE](./LICENSE).\n\n---\n\n\u003e ✨ *Stop rewriting configs. Start enjoying your homelab.*  \n\u003e **Happy dashboarding! 🚀**","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsottey%2Fdashuni","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsottey%2Fdashuni","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsottey%2Fdashuni/lists"}