Compare commits

...

1716 Commits

Author SHA1 Message Date
Alicia Bot 93c2c77f6b 💙 Updates contributor SVG 2024-05-05 02:27:14 +01:00
liss-bot d6af666230 💛 Updates sponsors table 2024-05-05 02:27:10 +01:00
liss-bot beb262871e 💜 Updates contributors list 2024-05-05 02:27:09 +01:00
Tobias a7c15ce36f
Merge pull request #1563 from CrazyWolf13/master
🐳 Revert start cmd Dockerfile
2024-05-01 11:38:58 +02:00
Tobias 2f86b16491 temp revert start cmd 2024-05-01 11:33:01 +02:00
Alicia Sykes 5854db4205
🔀 Merge pull request #1423 from stinkybernie/update-simple-icons
Update 'simple-icons' from v7.19.0 to v10.4.0
Fixes #1254
2024-04-29 01:14:24 +01:00
Alicia Sykes c3aa2b5282
Merge branch 'master' into update-simple-icons 2024-04-29 00:54:02 +01:00
Alicia Sykes d92ae25700
🔀 Merge pull request #1542 from Lissy93/FEAT/3.0.1-improvements
[FEAT] Clearer error messaging and documented user-data dir (3.0.1)
2024-04-28 22:58:57 +01:00
Alicia Sykes 3fb87fa9b8 🔥 Fix DeepScan warn, by removing obsolete param 2024-04-28 22:27:24 +01:00
Alicia Sykes b5415ca5b9 💫 Adds explainer, below loading animation 2024-04-28 22:24:35 +01:00
Alicia Sykes 749f3b21da 🛂 Disable config for guests (#1552) 2024-04-28 22:21:51 +01:00
Alicia Sykes e970fc69c1 🐛 Apply custom headers to fetch request (#1549) 2024-04-28 21:54:16 +01:00
Alicia Sykes a9c46c362d
🔀 Merge pull request #1524 from zcq100/update-chinese-translate
Update chinese translate
2024-04-28 21:14:03 +01:00
Alicia Sykes c6f72ad84a
🔀 Merge pull request #1509 from GuilhermeLCS95/master
I added some translations to portuguese in pt.json
2024-04-28 21:07:09 +01:00
Alicia Sykes 31bf46a406
🔀 Merge pull request #1508 from dyauss/master
Translation for gluetun status sentences in pt.json
2024-04-28 21:06:45 +01:00
Alicia Sykes 83059bc536 Merge branch 'master' of github.com:lissy93/dashy into FEAT/3.0.1-improvements 2024-04-28 20:41:23 +01:00
Alicia Sykes a327bf2349 💫 Increase time between stages on initilization screen 2024-04-28 20:40:57 +01:00
Alicia Sykes 21eb2a604d 🐳 Updates port comment in docker-compose (#1555) 2024-04-28 20:16:15 +01:00
Alicia Sykes db9d7e362d 🛂 Remove page reload on auth failure (#981) 2024-04-28 20:00:17 +01:00
Alicia Sykes 85de40d950 🛂 Adds option for env vars for passwords 2024-04-28 15:08:05 +01:00
Alicia Sykes fd421cda15 🛂 Adds option for env vars for passwords 2024-04-28 15:07:48 +01:00
Alicia Sykes 98b3fda407 🔧 Adds new template vars to .env 2024-04-28 15:07:02 +01:00
Alicia Sykes 27f10d76db 🦺 Update schema validation, disable strict for multi options 2024-04-28 15:05:53 +01:00
Alicia Sykes 29626ebb06 🗃 Updates schema to allow for env vars on user passwords 2024-04-28 15:05:01 +01:00
Alicia Bot f9f365aa3a 💙 Updates contributor SVG 2024-04-28 02:27:13 +01:00
liss-bot 292a46f402 💛 Updates sponsors table 2024-04-28 02:27:07 +01:00
liss-bot f766e990b9 💜 Updates contributors list 2024-04-28 02:27:05 +01:00
Alicia Sykes 25ba708a9f 📝 Add Umbrel asset 2024-04-27 23:20:22 +01:00
Alicia Sykes 0813b796ab 📝 Documents HTTP authorization 2024-04-27 23:17:43 +01:00
Alicia Sykes 1f6b433148 🛂 Implements HTTP authorization client-side 2024-04-27 23:17:23 +01:00
Alicia Sykes 99643acddf 🛂 Adds support for HTTP authorization 2024-04-27 23:16:56 +01:00
Alicia Sykes 9d683dcbf0 🐛 Fix layout and item size buttons 2024-04-27 15:52:40 +01:00
Alicia Sykes 3416615d30 Merge branch 'FEAT/3.0.1-improvements' of github.com:lissy93/dashy into FEAT/3.0.1-improvements 2024-04-27 01:01:48 +01:00
Alicia Sykes db63362327 💬 Translate critical error text, and update styles 2024-04-27 00:45:30 +01:00
Alicia Sykes 9e6fb17d93 🥅 Catch error caused by empty config 2024-04-27 00:32:01 +01:00
Alicia Sykes 4594c99b57 🐛 Fix collapse state persistence (#1546) 2024-04-26 00:29:35 +01:00
Alicia Sykes f77c192e66
📝 Switch Umbrel asset 2024-04-24 11:05:08 +01:00
Alicia Sykes ca96e0c1de
📝 Adds Umbrel sponsor link 2024-04-23 22:25:44 +01:00
Alicia Sykes 1bbb91b3fe 🐳 Change start command in Dockerfile (#1543) 2024-04-22 12:40:46 +01:00
Alicia Sykes d58cde69f6 🐛 Fix page title not being applied (#1544) 2024-04-22 12:25:09 +01:00
Alicia Sykes f68d65264c 🤖 Remove star reminder automation (#1412) 2024-04-21 23:37:03 +01:00
Alicia Sykes 27bbdef6df 🔖 Bump to 3.0.1 2024-04-21 22:33:49 +01:00
Alicia Sykes 94307da70b 🗑 Deleted old img folder 2024-04-21 22:33:24 +01:00
Alicia Sykes d34c4b55f5 💄 Adds another shade of white 2024-04-21 22:30:41 +01:00
Alicia Sykes 915a5dfd38 🥅 Also catch error for sub-pages 2024-04-21 22:30:11 +01:00
Alicia Sykes be513a0952 Shows error details, if a critical error happens 2024-04-21 22:29:32 +01:00
Alicia Sykes 2ce3b29ad2 👔 Adds logic to show dialog on critical error 2024-04-21 22:28:50 +01:00
Alicia Sykes a138602670 📝 Clearer docs for user-data directory (#1538) 2024-04-21 21:39:14 +01:00
Alicia Sykes ecef01b034 🥅 Better error handling when config cannot be found 2024-04-21 14:46:38 +01:00
Alicia Sykes f295958c44 Put config backups in own directory 2024-04-21 14:45:52 +01:00
Alicia Bot 382f8f3ec0 💙 Updates contributor SVG 2024-04-21 02:26:38 +01:00
liss-bot 1e72debe5f 💛 Updates sponsors table 2024-04-21 02:26:32 +01:00
liss-bot 54a00ee099 💜 Updates contributors list 2024-04-21 02:26:30 +01:00
Alicia Sykes fa6d1925b7 🚸 Makes GitHub cards hyperlinks (fixes #1531) 2024-04-20 21:47:51 +01:00
Alicia Sykes 931915f366
🔀 Merge pull request #1528 from Lissy93/FEAT/Dashy-V3
[FEAT] Remove the need for rebuild after config changes
2024-04-20 12:07:26 +01:00
Alicia Sykes ff2be31df4 📝 Add update note to README 2024-04-20 12:06:13 +01:00
Alicia Sykes f1867d3cc0 🔨 Update automations 2024-04-20 12:05:52 +01:00
Alicia Sykes d043c21264 🔧 Fix dup bool check in webpack config 2024-04-20 11:25:36 +01:00
Alicia Sykes 7f011878b4 Copy static files, when running on Vercel, Netlify, etc 2024-04-19 23:09:41 +01:00
Alicia Sykes 6a6fcd4be9 Set IS_SERVER 2024-04-18 23:08:50 +01:00
Alicia Sykes b711f77cf7 🔧 For CDN hosting, ensure user-data is coppied over during build 2024-04-16 21:47:12 +01:00
Alicia Sykes c1f23d2fce 📝 Update port number in docs 2024-04-16 21:24:57 +01:00
Alicia Sykes 23576873de 📝 Update docs for V3 2024-04-16 17:00:22 +01:00
Alicia Sykes 3c9e5bd369 Less confusing handling of local config 2024-04-16 16:50:06 +01:00
Alicia Sykes c456bd6bd6 🔥 Remove now obsolete code 2024-04-15 21:46:30 +01:00
Alicia Sykes 133718972d 💬 Update en text about rebuild 2024-04-15 21:46:10 +01:00
Alicia Sykes a82d10a0c8 💬 Update en text about rebuild 2024-04-15 21:46:02 +01:00
Alicia Sykes f353780ad4 Update widget mixin to use fetch instead of axios 2024-04-15 21:43:49 +01:00
Alicia Sykes 88498d3887 Reordered endpoint priority in server entrypoint 2024-04-15 21:08:56 +01:00
Alicia Sykes 25e774ca79 🔒 Enables sensetive data to be passed by env var 2024-04-14 20:50:03 +01:00
Alicia Sykes 75f65de8f6 Updates parseAsEnvVar to read env vars for widget API keys 2024-04-14 20:49:32 +01:00
Alicia Sykes 27a8c8fa56
🔀 Merge pull request #1438 from zigotica/FEATURE/environment-variables
 Feature: add user defined environment variables
2024-04-14 18:22:49 +01:00
Alicia Sykes f98441644b
Merge branch 'FEAT/Dashy-V3' into FEATURE/environment-variables 2024-04-14 18:22:28 +01:00
Alicia Sykes ca0ec003e7
Merge branch 'master' into FEAT/Dashy-V3 2024-04-14 14:12:40 +01:00
Alicia Bot 6f94ac8764 💙 Makes author list 2024-04-14 02:30:26 +01:00
liss-bot edf2eb8c98 💛 Updates sponsors table 2024-04-14 02:30:02 +01:00
liss-bot 6623127702 💜 Updates contributors list 2024-04-14 02:30:00 +01:00
Alicia Sykes ae8357fa6e 🐳 Remove rm dist/config, no longer needed 2024-04-13 14:40:11 +01:00
Alicia Sykes 5214583ad0 ⬆ Update dependencies 2024-04-13 14:09:42 +01:00
Alicia Sykes 77236779c8 🔨 Remove asset size warning 2024-04-13 14:07:06 +01:00
Alicia Sykes bbb9ce7272 Better spacing in print-message service 2024-04-13 14:06:33 +01:00
Alicia Sykes 4ea77a1015 🐛 Fix config not saving from JSON editor 2024-04-13 14:05:49 +01:00
Alicia Sykes 91e4cfe14d 📝 Update port and directory in readme 2024-04-13 12:43:18 +01:00
Alicia Sykes e1a95405c1 🗑 Remove watch-for-changes script, no longer needed 2024-04-13 12:42:51 +01:00
Alicia Sykes 5b11c0af34 📝 Update port and directory in docs 2024-04-13 12:41:15 +01:00
Alicia Sykes 4d851b6e86 Lint and port update 2024-04-13 12:35:21 +01:00
Alicia Sykes 7f45c29931 🔨 Setup Typescript 2024-04-13 12:33:16 +01:00
Alicia Sykes a6381a4a7e 🐳 Update options and port for Dockerfile 2024-04-13 12:32:17 +01:00
Alicia Sykes 743b5340f8 Minor fixes/adjustments 2024-04-13 12:25:50 +01:00
Alicia Sykes 0a56db5397 🔥 Local saving for multi-page full working 2024-04-13 12:17:40 +01:00
Alicia Sykes 016b6dff09 🎨 Adds glass theme 2024-04-12 20:17:18 +01:00
Alicia Sykes b66ce53669 📡 Make user-data directory configurable 2024-04-10 22:59:35 +01:00
Alicia Sykes a32e76935e 🗑 Delete test asset 2024-04-10 21:45:13 +01:00
Alicia Sykes c1c75f78ba 🗑 Remove commented out code 2024-04-10 21:44:55 +01:00
Alicia Sykes ee735fe342 🔒 Add missing null checks 2024-04-09 20:39:48 +01:00
Alicia Sykes 49eb262465 Makes config location user-configurable 2024-04-09 20:35:25 +01:00
Alicia Sykes 6fa782d6a8 📝 Sync upstream docs 2024-04-09 14:03:02 +01:00
Alicia Sykes 2e38a33fa7 🔂 Resolve conflicts 2024-04-09 14:02:40 +01:00
Alicia Sykes c6ab08f7f0 🔖 Bump to V3.0.0, and update start command, so no watch needed 2024-04-08 20:38:19 +01:00
Alicia Sykes a1bf7a6931 New state options for sub-config 2024-04-08 20:37:33 +01:00
Alicia Sykes 31b40e60f6 🚨 Fix lint warn, by removing console.log 2024-04-08 20:37:09 +01:00
Alicia Sykes 18e2338735 🚨 Fix linter warning 2024-04-08 20:36:35 +01:00
Alicia Sykes fd45aa6bd1 🚚 Update path to config file 2024-04-08 20:36:00 +01:00
Alicia Sykes 5f6aadcb95 Adds mutations for setting sub-config 2024-04-08 20:34:16 +01:00
Alicia Bot d77045bee1 💙 Makes author list 2024-04-07 02:26:38 +01:00
liss-bot b97c48bc35 💛 Updates sponsors table 2024-04-07 02:26:18 +01:00
liss-bot 7cde9fea34 💜 Updates contributors list 2024-04-07 02:26:17 +01:00
Alicia Sykes e2e581de59 Adds new template variables 2024-04-02 19:28:22 +01:00
Alicia Sykes 492bddd192 🗑 Delete .yarn/cache 2024-04-01 13:40:12 +01:00
Alicia Sykes 6547452d1d 💀 Delete old conf.yml 2024-04-01 13:38:50 +01:00
Alicia Sykes 61127b046b ⚰ Remove old footer text 2024-04-01 13:38:32 +01:00
Alicia Sykes ecacd145e0 👷 Config for Vue dev server, to use user-data 2024-04-01 13:38:04 +01:00
Alicia Sykes a9548fe8f4 🍱 user-data is the new assets directory 2024-04-01 13:37:26 +01:00
Alicia Sykes e219296d15 🔂 Merge master into feat 2024-03-31 09:30:36 +01:00
Alicia Bot c24d169511 💙 Makes author list 2024-03-31 02:26:36 +01:00
Alicia Bot a3e703aa8e 💙 Updates contributor SVG 2024-03-31 02:26:21 +01:00
liss-bot c4d7e4907a 💛 Updates sponsors table 2024-03-31 02:26:21 +01:00
liss-bot 62779c1668 💜 Updates contributors list 2024-03-31 02:26:18 +01:00
Alicia Sykes 041e5d8c28 🔂 Merge master into branch 2024-03-30 21:35:46 +00:00
r1a 07391dd4d1
Update chinese translate 2024-03-28 10:04:43 +08:00
Alicia Sykes 5d26f8a607
🔀 Merge pull request #1521 from z3r0l1nk/master
🇷🇴 Romanian translation
2024-03-27 09:56:56 +00:00
Mihai 8656606d46
Update languages.js 2024-03-27 10:08:05 +02:00
Alicia Sykes 60fc852255
🔀 Merge pull request #1510 from Lissy93/FIX/memory-issues-1500
[FIX] Memory issue (WIP)
2024-03-26 18:58:43 +00:00
z3r0l1nk 12d07fd301 🇷🇴 Romanian translation 2024-03-25 11:42:42 +02:00
z3r0l1nk b6ac9ff909 🇷🇴 Romanian translation 2024-03-25 11:41:11 +02:00
Mihai f94ef50b99
Create ro.json 2024-03-25 11:10:43 +02:00
Alicia Bot 0618aaa93e 💙 Makes author list 2024-03-24 01:26:16 +00:00
liss-bot 594beeb5b0 💛 Updates sponsors table 2024-03-24 01:26:04 +00:00
liss-bot 2636d54cc9 💜 Updates contributors list 2024-03-24 01:26:03 +00:00
Alicia Bot 99a2153e9a 💙 Makes author list 2024-03-17 01:25:07 +00:00
liss-bot dcf1107dae 💛 Updates sponsors table 2024-03-17 01:24:52 +00:00
liss-bot b213fa1e18 💜 Updates contributors list 2024-03-17 01:24:51 +00:00
Alicia Sykes 6268584741 🔨 Update build-and-start command 2024-03-14 05:50:19 +00:00
GuilhermeLCS b2e5597e49 I added some translations to portuguese in pt.json 2024-03-13 22:05:43 -03:00
GuilhermeLCS ee3e45a56e I added some portuguese translations in pt.json 2024-03-13 21:32:48 -03:00
Dyauss b55b7f7778 Translation for gluetun status sentences 2024-03-13 21:32:02 -03:00
Alicia Sykes 762c6789b1 🤖 Re-enables docs site build automation 2024-03-10 21:31:08 +00:00
Alicia Sykes 2ca71efa29 🤖 Re-enables docs site build automation 2024-03-10 21:30:22 +00:00
Alicia Sykes a6960a804f
🔀 Merge pull request #1505 from CrazyWolf13/master
Fixed typo's in uptime-kuma docs
2024-03-10 21:26:05 +00:00
Tobias e3f6609b52
Fixed a ")" to much 2024-03-10 22:08:33 +01:00
Tobias e7fbc5c690
Typo in uptime-kuma link 2024-03-10 22:05:18 +01:00
Alicia Sykes 6dd18dfca2 🗑 Removal of domain check (.to domains no longer support full WHOIS) 2024-03-10 16:04:50 +00:00
Alicia Bot 129c6d71de 💙 Makes author list 2024-03-10 01:25:03 +00:00
Alicia Bot ae68f8cddb 💙 Updates contributor SVG 2024-03-10 01:24:55 +00:00
liss-bot fa48ec83b2 💛 Updates sponsors table 2024-03-10 01:24:50 +00:00
liss-bot 2981a677a5 💜 Updates contributors list 2024-03-10 01:24:49 +00:00
Alicia Sykes 8371218c73
🔀 Merge pull request #1501 from imjimmeh/feat/uptime-kuma-widget
feat(widgets):  Add Uptime Kuma Widget
2024-03-09 22:09:22 +00:00
Alicia Sykes 828f25de37
📝 Adds latest commit (re proxmox) back in 2024-03-09 22:08:08 +00:00
Jimmeh c93c041858 chore: undo auto formatting 2024-03-07 23:05:31 +00:00
Alicia Sykes 1eed8e5313 🔨 Submits workflow path fix for docs site sync 2024-03-07 18:35:03 +00:00
Alicia Sykes c2368e1af2
🔀 Merge pull request #1502 from Lissy93/FEAT/automate-documentation-site-update
[FEAT] Adds a GH workflow automation to sync docs to docs site
2024-03-07 18:12:00 +00:00
Alicia Sykes 2de5c8fef5
🔨 Updates automation for syncing website 2024-03-06 22:35:35 +00:00
Alicia Sykes b1892d8c32
🔀 Merge pull request #1497 from CrazyWolf13/master
Add MNDashboard by mahrnet
2024-03-06 22:32:50 +00:00
Alicia Sykes 8a76fc8e34
🖼️ Updated img to higher-def version 2024-03-06 22:32:33 +00:00
Alicia Sykes 0229ad6a76 🔨 Adds a GH workflow automation to sync docs to docs site 2024-03-06 22:15:09 +00:00
Alicia Sykes 02bdbb3dc1 📝 Small docs update 2024-03-06 21:58:54 +00:00
Jimmeh f62f628805 chore: undo more formatting 2024-03-06 19:14:42 +00:00
Jimmeh 4471e316ff chore: Undo accidental formattnig 2024-03-06 19:11:17 +00:00
Jimmeh 98ed7d1190 chore: Linting changes 2024-03-06 19:06:28 +00:00
Jimmeh 59a52c652b docs: Add Uptime Kuma widget to docs 2024-03-06 18:58:53 +00:00
Jimmeh f304cbc74f feat: finish styling, fix errors 2024-03-06 18:58:42 +00:00
Jimmeh e8845d90e3 feat: stylings 2024-03-05 19:58:33 +00:00
Jimmeh 6f937fbe00 feat(widgets): Uptime Kuma widget 2024-03-05 19:29:35 +00:00
Tobias 631883a0d8
typo 2024-03-05 07:01:59 +01:00
Tobias 3f11b0024c
Added MNDashboard by mahrnet 2024-03-05 07:01:16 +01:00
Alicia Sykes 3c5531dcd1
🔀 Merge pull request #1496 from Lissy93/FIX/rebuild-loop
🚑 Hotfix: Use chokidar to watch only for conf.yml changes
2024-03-04 22:17:56 +00:00
Alicia Sykes 147016278a Auto-rebuild script done, with debounce and term logging 2024-03-04 21:29:53 +00:00
Alicia Sykes 1f6bb48463 Implement debounce, to stop dup rebuild when file meta changes in Linux 2024-03-04 20:21:33 +00:00
Alicia Sykes a6a2ee232a 🧱 Writes script to watch for changes and trigger re-build 2024-03-04 20:07:34 +00:00
Alicia Sykes 1ed49c3340 🚑 Hotfix: Use chokidar to watch only for conf.yml changes 2024-03-04 19:34:35 +00:00
Alicia Sykes aef7f785ef
🔀 Merge pull request #1492 from Lissy93/FIX/docker-arm-v7
[FIX] 🐳 Adds back Docker arm/v7 support
2024-03-04 15:16:02 +00:00
Alicia Sykes 427e46a702 Neaten build environment options in Netlify config 2024-03-04 15:13:31 +00:00
Alicia Sykes da12eb65a0 Sets YARN_FLAGS in Netlify config 2024-03-04 13:58:00 +00:00
Alicia Sykes 08e6bc6c27 Update Node version for Netlify deployments 2024-03-04 13:47:15 +00:00
Alicia Sykes 4886e97f2c Remove NODE_OPTIONS from build command, fix Netlify 2024-03-04 13:40:03 +00:00
Alicia Sykes 0d79fcf8a5 🐳 Fix Docker arm/v7 support 2024-03-04 13:00:17 +00:00
Jimmeh 777b2a1319 wip: initial widget 2024-03-03 22:10:46 +00:00
Alicia Sykes 2caec6a8a9 🏗 Adds linux/arm/v7 support 2024-03-03 21:23:03 +00:00
Alicia Sykes 472932806d 🏗 Remove verbose logging, support linux/amd64,linux/arm64 architectures 2024-03-03 21:07:56 +00:00
Alicia Sykes 70651b75f7 🏗 Restricts network concurency to 1 thread, and adds verbose logging to installation command 2024-03-03 20:51:35 +00:00
Alicia Sykes 5600d26d5e 🏗 Remove docker driver 2024-03-03 20:32:14 +00:00
Alicia Sykes 124e86e407 🏗 Re-add arm/v7, set driver type to Docker, no-cache 2024-03-03 20:29:25 +00:00
Alicia Sykes 0abc2584bd 🏗 Temp remove arm/v7 2024-03-03 20:24:59 +00:00
Alicia Sykes 502d34e460 🏗 Updates path to Dockerfile 2024-03-03 20:21:40 +00:00
Alicia Sykes 02923fa64c 🏗 Adds --immutable to yarn installation 2024-03-03 19:24:23 +00:00
Alicia Sykes dbb750d306 🏗 Revert to yarn for package installation 2024-03-03 19:03:17 +00:00
Alicia Sykes 0a8df26914 🏗 Docker container uses npm for install 2024-03-03 19:02:02 +00:00
Alicia Sykes 4fdfb6ecc1 Add yarn cache clean, to remove un-needed cached files 2024-03-03 17:46:09 +00:00
Alicia Sykes d25a80dd48 Add --no-cache to reduce Docker container size 2024-03-03 17:44:36 +00:00
Alicia Sykes 47762390d4 Decrease network timeout 2024-03-03 17:18:35 +00:00
Alicia Sykes e290451040 🚑 Update start command 2024-03-03 16:53:01 +00:00
Alicia Sykes 453f15c8d9 🧵 Temp updates to arm/v7 to get docker publish working 2024-03-03 16:42:58 +00:00
Alicia Sykes 5a029afb52 🔂 Trigger rebuild 2024-03-03 16:31:47 +00:00
Alicia Sykes d4247b4fee
🔀 Merge pull request #1481 from Lissy93/FEAT/2.1.2_dependency-updates-n-fixes
[FEAT] Version 2.1.2 (+dependency updates, bug fixes)
2024-03-03 15:34:03 +00:00
Alicia Sykes 02db1db2ef 🗑 Delete non-essential workflows 2024-03-03 15:23:15 +00:00
Alicia Sykes 0d7051e46e 🏗 Add static start option 2024-03-03 15:21:20 +00:00
repo-visualizer fcd502fb1f 💛 Updates repo diagram 2024-03-03 01:25:06 +00:00
Alicia Bot 8b43ce6213 💙 Makes author list 2024-03-03 01:24:05 +00:00
Alicia Bot 031a956f29 💙 Updates contributor SVG 2024-03-03 01:23:58 +00:00
liss-bot 7785ea761b 💛 Updates sponsors table 2024-03-03 01:23:57 +00:00
liss-bot 4ee08328ea 💜 Updates contributors list 2024-03-03 01:23:55 +00:00
Alicia Sykes df866ba408 New start command, for non-Docker people 2024-03-02 18:51:17 +00:00
Alicia Sykes 48fa5fc21e 🗂 So warnings dont persist, temp add to schema (#1361) 2024-03-02 18:39:14 +00:00
Alicia Sykes b69daeb24a
🔀 Merge pull request #1482 from Kuchenmampfer/master
Update german translation
2024-03-02 11:18:59 +00:00
Tammes Burghard 1d09b61367 prettify json 2024-03-02 12:07:43 +01:00
Tammes Burghard 32f9745bee update german translations 2024-03-02 12:04:12 +01:00
Alicia Sykes 48602bcd40 🔖 Version bump, to 2.1.2 2024-03-02 10:48:47 +00:00
Alicia Sykes dab3440448
🔀 Merge pull request #1476 from CrazyWolf13/fix_hotkeys
[Fix] Hotkeys
2024-02-28 12:34:01 +00:00
Alicia Sykes 417028b185 🗃 Adds optional item.rel attribute (fixes #1477) 2024-02-28 12:06:21 +00:00
Alicia Sykes 27995f8500 👔 Use a 404 status code if page not found (fixes #1136) 2024-02-28 11:57:25 +00:00
Alicia Sykes 938222e1ef 💡 Updates error log 2024-02-27 20:16:14 +00:00
Alicia Sykes a155e2ca2e 🐛 Footer on workspace view (fixes #522) 2024-02-27 20:15:03 +00:00
Alicia Sykes e626c6b0f4 🏗 The Dockerfile now rebuilds automatically again (fixes #1051) 2024-02-27 20:14:19 +00:00
Alicia Sykes dbc758c8b6 🐛 Fix text overflow on long titles (fix #855) 2024-02-27 19:45:20 +00:00
Alicia Sykes f5789a3a25 🐛 Strips out sections[n].filteredItems (#1361) 2024-02-27 19:39:26 +00:00
Tobias 4f56ff663e fixed hotkeys 2024-02-27 20:28:47 +01:00
Alicia Sykes 5b2c0e970f 🐛 Fixes layout and size buttons 2024-02-27 18:59:28 +00:00
Alicia Sykes 1658090008
🔀 Merge pull request #1453 from alydemah/fix-locals-ar
Minor change in arabic locals
2024-02-26 15:21:52 +00:00
Alicia Sykes 97a75b3643 🔂 Resolve conflicts 2024-02-26 14:38:58 +00:00
Alicia Sykes 92f742a48a
🔀 Merge pull request #1434 from clsty/patch-1
Fixes on configuring.md
2024-02-26 14:04:13 +00:00
repo-visualizer c9133cb3c6 💛 Updates repo diagram 2024-02-25 01:25:52 +00:00
Alicia Bot da67e891a2 💙 Makes author list 2024-02-25 01:24:44 +00:00
Alicia Bot fd77a3cab1 💙 Updates contributor SVG 2024-02-25 01:24:34 +00:00
liss-bot cdeb4945c8 💛 Updates sponsors table 2024-02-25 01:24:31 +00:00
liss-bot e385f2f889 💜 Updates contributors list 2024-02-25 01:24:30 +00:00
Alicia Sykes faafa60ed9
🔀 Merge pull request #1474 from CrazyWolf13/master
[Docs] Config not saving troubleshooting
2024-02-24 22:45:41 +00:00
Tobias b05f057c34 included text from c8b3047356 2024-02-24 23:43:05 +01:00
Tobias 13f47d28a1
Merge branch 'Lissy93:master' into master 2024-02-24 23:35:44 +01:00
Alicia Sykes 16e071964c
🔀 Merge pull request #1454 from markxoe/fix/jokes
Fix: Jokes of the day second line not deleted
2024-02-24 22:30:24 +00:00
Alicia Sykes 006eb6c771
🔀 Merge pull request #1460 from alayham/fix-proxmox-widger-sorting
Fixed sorting by vmid in the proxmox widget
2024-02-24 22:29:57 +00:00
Alicia Sykes 8c5cf6feef
🔀 Merge pull request #1462 from FraglyG/master
Add Railway as a deployment method
2024-02-24 22:29:05 +00:00
Tobias a04f05a1bf
typo
Fixed a little typo and added a more specific url
2024-02-24 23:22:30 +01:00
Tobias f2dc237366 include config not saving in docs 2024-02-24 23:18:00 +01:00
Alicia Sykes 65c868693e 🔨 Engine ignore for updated packages 2024-02-24 17:33:52 +00:00
Alicia Sykes ded96b5578 ⬆ Upgrade to Node 20.11.1 LTS 2024-02-24 17:13:48 +00:00
Alicia Sykes b5482ee01d 🗑 Remove webpack-progerss, use native instead 2024-02-24 17:13:16 +00:00
Alicia Sykes 74c61f0bfb ⬆ Updated peer dependencies, fixes warning 2024-02-24 17:06:05 +00:00
Alicia Sykes c8b3047356 📝 Server-side limitations of Vercel deployments (#1465) 2024-02-24 15:32:22 +00:00
Alicia Sykes 73f6145c5f ⬆ Updated all minor versions and backward-compatible dependencies 2024-02-24 14:37:55 +00:00
Alicia Sykes 8d8583fc10
🔀 Merge pull request #1473 from CrazyWolf13/fix_copyright_year
updated copyright years
2024-02-24 14:35:26 +00:00
Tobias 106364d370
Update year dynamically on About.vue 2024-02-24 15:26:09 +01:00
Tobias 27bdcc0ef1
Update year dynamically on AppInfoModal 2024-02-24 15:25:12 +01:00
Tobias 05ef7fa757 fixed all Copyrights 2024-02-24 14:21:50 +01:00
Alicia Sykes 8bc5a15eb2
🔀 Merge pull request #1472 from CrazyWolf13/glances-timezone-guide
Glances timezone guide
2024-02-23 21:47:41 +00:00
Alicia Sykes 90f291581b
🔀 Merge pull request #1471 from CrazyWolf13/master
Fix wrong translation keys inside app-info
2024-02-23 21:46:42 +00:00
Tobias 1169ccf7fa include glances timezone fix 2024-02-23 22:38:02 +01:00
Tobias 7d60ec2f8e Merge branch 'master' of https://github.com/CrazyWolf13/dashy 2024-02-23 21:07:48 +01:00
Tobias 8dca503179 fixed wrong translate literals 2024-02-23 21:07:32 +01:00
Alicia Sykes 644476cc5e
🔀 Merge pull request #1464 from CrazyWolf13/revert-1275-bug/1274-popup-modal-fix
Revert "bug #1274 multi page popup modal fix"
Fixes #1375
2024-02-22 20:23:50 +00:00
Alicia Sykes 1f5274baca
🔀 Merge pull request #1470 from CrazyWolf13/master
reserialize and serialize jsonconfig
Fixes #1361
2024-02-22 20:22:13 +00:00
Tobias 076b1d14b2 reserialize and serialize jsonconfig 2024-02-22 20:57:32 +01:00
repo-visualizer 6da8e7cbad 💛 Updates repo diagram 2024-02-18 01:25:47 +00:00
Alicia Bot 1455035867 💙 Makes author list 2024-02-18 01:24:53 +00:00
Alicia Bot 155736b495 💙 Updates contributor SVG 2024-02-18 01:24:43 +00:00
liss-bot 3637a2ef88 💛 Updates sponsors table 2024-02-18 01:24:38 +00:00
liss-bot c62cfe62a5 💜 Updates contributors list 2024-02-18 01:24:37 +00:00
Alicia Sykes 0894f71056
📝 Updates auth note 2024-02-16 20:26:54 +00:00
Alicia Sykes 804f2c13e6
📝 Updates docs for holiday widget (fixes #1268) 2024-02-11 15:23:32 +00:00
Tobias f2641de0c1
Revert "bug #1274 multi page popup modal fix" 2024-02-11 15:29:47 +01:00
repo-visualizer 8aad120bd8 💛 Updates repo diagram 2024-02-11 01:26:25 +00:00
Alicia Bot 09330f9c3f 💙 Makes author list 2024-02-11 01:25:20 +00:00
liss-bot 0bd9055293 💛 Updates sponsors table 2024-02-11 01:25:14 +00:00
liss-bot da38f289c0 💜 Updates contributors list 2024-02-11 01:25:11 +00:00
Hendrik Strydom e8403bada2
Added Railway Deployment Method 2024-02-09 15:12:33 +02:00
Al Saleh 4a570edaee Added troubleshooting documentation for Proxmox widgets 2024-02-07 11:42:45 +00:00
Al Saleh 05aaa1c9b5 Fixed sorting by vmid 2024-02-06 15:18:38 +00:00
Alicia Sykes b10853fd33
Merge pull request #1456 from CrazyWolf13/patch-1
[Add] Glances on Windows
2024-02-05 00:32:50 +00:00
repo-visualizer 61bd84be73 💛 Updates repo diagram 2024-02-04 01:26:25 +00:00
Alicia Bot f567613182 💙 Makes author list 2024-02-04 01:25:30 +00:00
Alicia Bot dddd96ea70 💙 Updates contributor SVG 2024-02-04 01:25:15 +00:00
liss-bot c56aa85c04 💛 Updates sponsors table 2024-02-04 01:25:12 +00:00
liss-bot da723fde14 💜 Updates contributors list 2024-02-04 01:25:11 +00:00
Tobias 25addadfc3
[Add] Glances on Windows
Added a note in glances sections for windows users to only enable dashy related modules, as glances is not that stable on windows.
2024-02-03 19:21:30 +01:00
markxoe bc94fff775
wip: fix 2024-01-31 11:21:54 +01:00
Aly Mohamed 0baf10911d
Minor change in arabic locals 2024-01-29 05:00:46 +01:00
repo-visualizer 3aabdce82f 💛 Updates repo diagram 2024-01-28 01:26:23 +00:00
Alicia Bot 5c18c92060 💙 Makes author list 2024-01-28 01:25:25 +00:00
Alicia Bot 093d577e31 💙 Updates contributor SVG 2024-01-28 01:25:10 +00:00
liss-bot 50db21bc81 💛 Updates sponsors table 2024-01-28 01:25:05 +00:00
liss-bot 15c7e8c78f 💜 Updates contributors list 2024-01-28 01:25:04 +00:00
Alicia Sykes 297e837b04
📝 Adds link to @vyrtualsynthese's Helm Chart 2024-01-26 13:30:26 +00:00
repo-visualizer 8217dc35b9 💛 Updates repo diagram 2024-01-21 01:29:06 +00:00
Alicia Bot ac4f6f5015 💙 Makes author list 2024-01-21 01:28:17 +00:00
Alicia Bot 6757d17f4e 💙 Updates contributor SVG 2024-01-21 01:27:55 +00:00
liss-bot 260bb75823 💛 Updates sponsors table 2024-01-21 01:27:50 +00:00
liss-bot fd19f2b26a 💜 Updates contributors list 2024-01-21 01:27:49 +00:00
zigotica e818c701b8 🔖 v2.2.0 2024-01-15 18:54:20 +01:00
zigotica 19da2ec829 Add env vars parser to avoid leaking secrets 2024-01-15 18:45:40 +01:00
repo-visualizer d77c188a7e 💛 Updates repo diagram 2024-01-14 01:28:58 +00:00
Alicia Bot 53820acea3 💙 Makes author list 2024-01-14 01:28:04 +00:00
liss-bot 252782066b 💛 Updates sponsors table 2024-01-14 01:27:44 +00:00
liss-bot f61d0db695 💜 Updates contributors list 2024-01-14 01:27:43 +00:00
Celestial.y a4e76a5ef2
Fixes on configuring.md
Please accept this PR because these fixes are really necessary.
Without them, I tried to figure them out by spending hours trying many possibilities, which is really painful.
2024-01-13 09:25:57 +08:00
repo-visualizer 263d8e40f1 💛 Updates repo diagram 2024-01-07 01:28:57 +00:00
Alicia Bot a00127a338 💙 Makes author list 2024-01-07 01:27:59 +00:00
liss-bot bd46e1077a 💛 Updates sponsors table 2024-01-07 01:27:43 +00:00
liss-bot c5326c57de 💜 Updates contributors list 2024-01-07 01:27:41 +00:00
Alicia Sykes a0ad224679
🔀 Merge pull request #1428 from CrazyWolf13/patch-1
[Fix] Broken link
Fixes #1426
2024-01-02 18:58:08 +00:00
Tobias 210f099992
[Fix] Broken link
Fixed a broken link which lead to 
https://dashy.to/docs/development-guides#building-a-widget
instead of 
https://dashy.to/docs/development-guides/#building-a-widget 
resulting in a "not found" page.
2024-01-02 19:42:02 +01:00
Alicia Sykes c9229fde27 🐛 Updates endpoint for APOD (fixes #1172) 2024-01-02 17:13:15 +00:00
Alicia Sykes 604ce976f9
🔀 Merge pull request #1425 from Lissy93/FIX/ticket-fixes-1419
[FIX] Many bug fixes
Updates for #1419
2023-12-31 23:34:11 +00:00
Alicia Sykes 8e3c54f2d0 Merge branch 'master' of github.com:Lissy93/dashy into FIX/ticket-fixes-1419 2023-12-31 23:15:19 +00:00
Alicia Sykes 3e75854520
🔀 Merge pull request #1379 from Lissy93/dependabot/npm_and_yarn/axios-1.6.0
Bump axios from 0.27.2 to 1.6.0
2023-12-31 23:07:38 +00:00
Alicia Sykes 42709dbf32
🔀 Merge pull request #1368 from Lissy93/dependabot/npm_and_yarn/browserify-sign-4.2.2
Bump browserify-sign from 4.2.1 to 4.2.2
2023-12-31 23:06:56 +00:00
Alicia Sykes 85fb8b156b
🔀 Merge pull request #1363 from Lissy93/dependabot/npm_and_yarn/crypto-js-4.2.0
Bump crypto-js from 4.1.1 to 4.2.0
2023-12-31 23:05:51 +00:00
Alicia Sykes 0a3f266134
🔀 Merge pull request #1354 from Lissy93/snyk-upgrade-842f33b7262880be79956113d77fc26e
[Snyk] Upgrade rsup-progress from 3.0.0 to 3.2.0
2023-12-31 23:04:03 +00:00
Alicia Sykes 1e9ba1b747
🔀 Merge pull request #1349 from kt-alt/feature/add-gl-speedometer-widget
💄 add glances speedometer widgets
2023-12-31 23:02:47 +00:00
Alicia Sykes d8c0919afc 🐛 Fix width for gl-current-cpu widget on Safari (#1255) 2023-12-31 22:48:47 +00:00
Alicia Sykes c4b687550d Adds support for lat+lon location (#1142) 2023-12-31 19:41:56 +00:00
Alicia Sykes eb749ebcd0 💚 Increase time till stale, from 30 days to 1 year #1419 2023-12-31 19:18:23 +00:00
Alicia Sykes be1775d3ad 🐛 Fixes allignment for theme buttons #1042 2023-12-31 18:09:25 +00:00
repo-visualizer 9c324db2ae 💛 Updates repo diagram 2023-12-31 01:28:30 +00:00
Alicia Bot 0088fded40 💙 Makes author list 2023-12-31 01:27:39 +00:00
Alicia Bot 7768c73a0a 💙 Updates contributor SVG 2023-12-31 01:27:26 +00:00
liss-bot c50f21c54e 💛 Updates sponsors table 2023-12-31 01:27:21 +00:00
liss-bot 31ef6d4f8c 💜 Updates contributors list 2023-12-31 01:27:19 +00:00
Alicia Sykes c1f4271aa9 📝 Updates Font-Awesome troubleshooting, re #1055 2023-12-30 16:44:22 +00:00
Alicia Sykes 89ea73062e 🐛 Fixed #1004 - text overflow in tooltip 2023-12-30 14:04:58 +00:00
Alicia Sykes e7bc1457d7 Fixed lint warning 2023-12-30 14:04:22 +00:00
Michael D 69caa99c90 ⬆️ - Updated 'simple-icons' from v7.19.0 to v10.4.0 and update API calls 2023-12-29 11:59:59 -08:00
repo-visualizer fd658689e3 💛 Updates repo diagram 2023-12-24 01:28:20 +00:00
Alicia Bot a81b90eb9d 💙 Makes author list 2023-12-24 01:27:12 +00:00
liss-bot fa5267fd46 💛 Updates sponsors table 2023-12-24 01:26:55 +00:00
liss-bot 21eac2c9ab 💜 Updates contributors list 2023-12-24 01:26:53 +00:00
Alicia Sykes dd71683fa9
🔀 Merge pull request #1420 from mmihaly/page-visibility-configuration
Page visibility configuration
2023-12-24 00:25:58 +00:00
Alicia Sykes 777fae2503
🔀 Merge pull request #1418 from oka4shi/japanese-translation
Update the Japanese translation
2023-12-24 00:22:23 +00:00
mmihaly e754fcd98c Updated config schema .
Updated multi-page config editor.
2023-12-22 22:24:38 -07:00
OKAMOTO Shigehiro 696f87a4a5
Update the Japanese translation 2023-12-22 23:48:20 +09:00
mmihaly 3bf58308ff Added page visibility configurability. 2023-12-21 19:19:36 -07:00
Alicia Sykes 40c9b41805
🔀 Merge pull request #1352 from edugof/patch-1
Fix nextcloud widgets reference
2023-12-17 21:34:17 +00:00
Alicia Sykes f69de12705
🔀 Merge pull request #1359 from 5idereal/patch-1
Update zh-TW.json
2023-12-17 21:31:43 +00:00
Alicia Sykes 2d350ae7f2
🔀 Merge pull request #1390 from toddejohnson/REFACTOR/2.1.2_unified-config
Attempt at adding header auth. Ignore Settings #981
2023-12-17 21:30:43 +00:00
Alicia Sykes b7cf4749c6
🔀 Merge pull request #1405 from shazzx/dashy-updated
[Docs] Improved minor errors in development-guides.md file
2023-12-17 21:28:56 +00:00
repo-visualizer 93c213319e 💛 Updates repo diagram 2023-12-17 01:28:58 +00:00
Alicia Bot 45de177ae2 💙 Makes author list 2023-12-17 01:28:01 +00:00
liss-bot 050fda6fe2 💛 Updates sponsors table 2023-12-17 01:27:49 +00:00
liss-bot 1eb4883dfa 💜 Updates contributors list 2023-12-17 01:27:47 +00:00
repo-visualizer 3b64f45c03 💛 Updates repo diagram 2023-12-10 01:28:51 +00:00
Alicia Bot 6bf1c7f100 💙 Makes author list 2023-12-10 01:27:48 +00:00
liss-bot d424471d27 💛 Updates sponsors table 2023-12-10 01:27:37 +00:00
liss-bot f6aa791b5e 💜 Updates contributors list 2023-12-10 01:27:34 +00:00
Alicia Sykes 86e6c898a4
🔀 Merge pull request #1409 from pvillaverde/feat/add-galician-language
🌐 Add language (Galician)
2023-12-07 19:07:45 +00:00
FedelloKirfed ee13b0108c 🌐 Add language (Galician) 2023-12-06 22:01:59 +01:00
repo-visualizer 4324a3a8af 💛 Updates repo diagram 2023-12-03 01:28:36 +00:00
Alicia Bot d133c2eb02 💙 Makes author list 2023-12-03 01:27:28 +00:00
Alicia Bot 82c5f8713c 💙 Updates contributor SVG 2023-12-03 01:27:22 +00:00
liss-bot 6d55e5db05 💛 Updates sponsors table 2023-12-03 01:27:18 +00:00
liss-bot fc30b66c7f 💜 Updates contributors list 2023-12-03 01:27:16 +00:00
Shahzzad Ali 38148e1ef3
[Docs] Improved minor errors in development-guides.md file 2023-11-30 20:05:55 +05:00
Alicia Sykes 945e8c6871
🔀 Merge pull request #1395 from jjmung/jjmung-patch-1
Update ConfigSchema.json
2023-11-30 02:23:27 +00:00
repo-visualizer 737cf0777b 💛 Updates repo diagram 2023-11-26 01:28:23 +00:00
Alicia Bot 3f814b2a6c 💙 Makes author list 2023-11-26 01:27:27 +00:00
Alicia Bot bd1c82f912 💙 Updates contributor SVG 2023-11-26 01:27:19 +00:00
liss-bot 6980789be1 💛 Updates sponsors table 2023-11-26 01:27:18 +00:00
liss-bot 52d541f7c2 💜 Updates contributors list 2023-11-26 01:27:16 +00:00
Todd E Johnson 821ed3433b Add Proxy IP check for header security 2023-11-24 00:11:04 -06:00
Todd E Johnson 756d640d06 Untested documentation for headerAuth 2023-11-23 23:51:36 -06:00
Todd E Johnson 27dfe6219a Make userHeader pull from config 2023-11-23 00:02:08 -06:00
JJ Munguia 0ef0bf0dd5
Update ConfigSchema.json
Updates confusing wordage that aligns with docs
2023-11-21 00:52:30 -06:00
repo-visualizer 1a05b5a910 💛 Updates repo diagram 2023-11-19 01:28:55 +00:00
Alicia Bot 8c0f06da60 💙 Makes author list 2023-11-19 01:27:47 +00:00
Alicia Bot 6c7974a3c1 💙 Updates contributor SVG 2023-11-19 01:27:41 +00:00
liss-bot 290afb949c 💛 Updates sponsors table 2023-11-19 01:27:37 +00:00
liss-bot 57373a2b12 💜 Updates contributors list 2023-11-19 01:27:35 +00:00
Alicia Sykes 718a03dce6
🔀 Merge pull request #1344 from bubylou/master
Update generative icon API
2023-11-17 14:53:54 +00:00
Todd E Johnson 4aa34f66dc WIP: Attempt at adding header auth. Ignore Settings #981 2023-11-17 00:00:48 -06:00
Alicia Sykes e511c2b8f7
🔀 Merge pull request #1384 from stavros-k/patch-1
Fix healthcheck.js without ssl
2023-11-14 20:21:43 +00:00
Alicia Sykes 6a39aaac6b
🔀 Merge pull request #1351 from deneor/issue_1343
[FIX] #1343 Search for items with cyrillic titles dosnt work
Fixes ##1343
2023-11-14 20:19:38 +00:00
Stavros Kois 2839821ab1
Fix healthcheck.js without ssl 2023-11-13 19:12:38 +02:00
repo-visualizer 50dc62373d 💛 Updates repo diagram 2023-11-12 01:27:43 +00:00
Alicia Bot e3a849f2f7 💙 Makes author list 2023-11-12 01:26:32 +00:00
liss-bot e9a287bdd6 💛 Updates sponsors table 2023-11-12 01:26:22 +00:00
liss-bot fe19cbdd0d 💜 Updates contributors list 2023-11-12 01:26:21 +00:00
dependabot[bot] b357de752a
Bump axios from 0.27.2 to 1.6.0
Bumps [axios](https://github.com/axios/axios) from 0.27.2 to 1.6.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.27.2...v1.6.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-11 04:38:01 +00:00
repo-visualizer 282e70dbd0 💛 Updates repo diagram 2023-11-05 01:27:20 +00:00
Alicia Bot 64a563dc40 💙 Makes author list 2023-11-05 01:26:23 +00:00
Alicia Bot b6e431c626 💙 Updates contributor SVG 2023-11-05 01:26:13 +00:00
liss-bot aac275da13 💛 Updates sponsors table 2023-11-05 01:26:06 +00:00
liss-bot 8572eb2a5b 💜 Updates contributors list 2023-11-05 01:26:04 +00:00
Alicia Sykes d2e49494ae
Merge pull request #1275 from ThinkSalat/bug/1274-popup-modal-fix
bug #1274 multi page popup modal fix
2023-11-03 21:21:40 +00:00
repo-visualizer 60e4eb203d 💛 Updates repo diagram 2023-10-29 01:26:31 +00:00
Alicia Bot 7a3ba9acf3 💙 Makes author list 2023-10-29 01:25:36 +00:00
Alicia Bot 4e7fc904f6 💙 Updates contributor SVG 2023-10-29 01:25:27 +00:00
liss-bot 812ad0c996 💜 Updates contributors list 2023-10-29 01:25:17 +00:00
Alicia Sykes 56bd835ccc
🔀 Merge pull request #1369 from sachahjkl/fix/weather
fix(weather forecast): updated widget
Fixes #1321
2023-10-28 23:22:10 +01:00
Sacha FROMENT 5adf9efa17 fix(weather forecast): updated widget
Updated the widget and api route to work with the new (why ?) OpenWeater response format.
2023-10-28 13:52:38 +02:00
dependabot[bot] c231270b05
Bump browserify-sign from 4.2.1 to 4.2.2
Bumps [browserify-sign](https://github.com/crypto-browserify/browserify-sign) from 4.2.1 to 4.2.2.
- [Changelog](https://github.com/browserify/browserify-sign/blob/main/CHANGELOG.md)
- [Commits](https://github.com/crypto-browserify/browserify-sign/compare/v4.2.1...v4.2.2)

---
updated-dependencies:
- dependency-name: browserify-sign
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-27 15:52:55 +00:00
Alicia Sykes 974c11627d
🔀 Merge pull request #1364 from Glitch3dPenguin/patch-1
Update deployment.md
2023-10-26 17:35:46 +01:00
Max Kulik 9b570fa853
Update deployment.md
Remove the option to deploy to CF workers. CF Workers and Pages have changed dramatically over the past 2 years and this feature is no longer compatible.
2023-10-26 11:06:52 -05:00
dependabot[bot] 362d093962
Bump crypto-js from 4.1.1 to 4.2.0
Bumps [crypto-js](https://github.com/brix/crypto-js) from 4.1.1 to 4.2.0.
- [Commits](https://github.com/brix/crypto-js/compare/4.1.1...4.2.0)

---
updated-dependencies:
- dependency-name: crypto-js
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-25 22:32:35 +00:00
5idereal f67940fcf8
Update zh-TW.json 2023-10-24 21:11:08 +08:00
repo-visualizer 23053ab1e7 💛 Updates repo diagram 2023-10-22 01:26:48 +00:00
Alicia Bot 220eacb41c 💙 Makes author list 2023-10-22 02:25:49 +01:00
Alicia Bot a7c4572282 💙 Updates contributor SVG 2023-10-22 02:25:41 +01:00
liss-bot d75da81d24 💜 Updates contributors list 2023-10-22 02:25:34 +01:00
snyk-bot 7990401be6
fix: upgrade rsup-progress from 3.0.0 to 3.2.0
Snyk has created this PR to upgrade rsup-progress from 3.0.0 to 3.2.0.

See this package in npm:


See this project in Snyk:
https://app.snyk.io/org/lissy93/project/564ca11b-8665-48b8-befa-ccd607c3e09a?utm_source=github&utm_medium=referral&page=upgrade-pr
2023-10-19 15:39:09 +00:00
Alicia Sykes 466d99f0de
🔀 Merge pull request #1353 from deneor/issue_1145
Optimized search
2023-10-19 16:29:32 +01:00
Denis Savosin e888adb1c7 optimize search input 2023-10-19 10:37:15 +03:00
Eduardo Gomez 7d3ea067b5
Fix nextcloud widgets reference
The nextcloud notifications and nextcloud php opcache widgets had the wrong type/name in the example block. This change should fix to use the good one.
2023-10-18 14:47:04 +02:00
Denis Savosin 84454b0502 Fix for Search for items with cyrillic titles dosnt work 2023-10-18 11:55:38 +03:00
kt-alt d50c9731e8 💄 add glances speedometer widgets 2023-10-17 16:57:59 -07:00
Alicia Sykes 8a821c2a31
🔀 Merge pull request #1347 from kt-alt/theme/add-tama-theme
add tama theme
2023-10-17 19:56:37 +01:00
kt-alt cf57efb8b1 add tama theme 2023-10-17 02:24:57 -07:00
repo-visualizer 4c906210a0 💛 Updates repo diagram 2023-10-15 01:27:03 +00:00
Alicia Bot 77313bcf9a 💙 Makes author list 2023-10-15 02:25:56 +01:00
Alicia Bot f5513dd14b 💙 Updates contributor SVG 2023-10-15 02:25:44 +01:00
liss-bot e57ec7d21e 💛 Updates sponsors table 2023-10-15 02:25:40 +01:00
liss-bot f55a75e84b 💜 Updates contributors list 2023-10-15 02:25:39 +01:00
Nicholas Malcolm 9bbd8f4ae4
Update generative icon API
Dicebear API has been reorganized and previous endpoint only provides the same generic icon
2023-10-14 15:52:41 -04:00
Alicia Sykes 923c3c4fc5
🔀 Merge pull request #1341 from rokiden/master
Fix Vue's PWA manifestCrossorigin, remove second mainfest from head
2023-10-11 18:56:31 +01:00
rokiden dec5a0820a Fix Vue's PWA manifestCrossorigin, remove second mainfest from head 2023-10-11 16:38:37 +06:00
repo-visualizer 388f482d25 💛 Updates repo diagram 2023-10-08 01:26:52 +00:00
Alicia Bot 1876e914f8 💙 Makes author list 2023-10-08 02:25:41 +01:00
liss-bot 102992df3b 💛 Updates sponsors table 2023-10-08 02:25:25 +01:00
liss-bot 2388955441 💜 Updates contributors list 2023-10-08 02:25:24 +01:00
repo-visualizer 4c75ce6bc4 💛 Updates repo diagram 2023-10-01 01:28:59 +00:00
Alicia Bot 8c5bde658c 💙 Makes author list 2023-10-01 02:28:01 +01:00
Alicia Bot 307dbed137 💙 Updates contributor SVG 2023-10-01 02:27:49 +01:00
liss-bot 88f09c4885 💜 Updates contributors list 2023-10-01 02:27:39 +01:00
Alicia Sykes 99bf9bca4a
🔀 Merge pull request #1326 from rokiden/master
Added BACKUP_DIR env for conf.yml backups
2023-09-28 16:02:33 +01:00
repo-visualizer 9cff2cadd0 💛 Updates repo diagram 2023-09-24 01:25:54 +00:00
Alicia Bot fb3edd66e3 💙 Makes author list 2023-09-24 02:24:46 +01:00
Alicia Bot d3b6af7035 💙 Updates contributor SVG 2023-09-24 02:24:40 +01:00
rokiden 00bc03f257 Added BACKUP_DIR env 2023-09-22 20:27:31 +06:00
repo-visualizer edeeb74c6c 💛 Updates repo diagram 2023-09-17 01:25:33 +00:00
Alicia Bot 20100b5e54 💙 Makes author list 2023-09-17 02:24:37 +01:00
Alicia Bot 77c62555d8 💙 Updates contributor SVG 2023-09-17 02:24:33 +01:00
Alicia Sykes 879effb1cc
📝 Adds Unsupported Digital Envelope Routines to troubleshooting.md 2023-09-10 16:26:15 +01:00
repo-visualizer dd221d7c23 💛 Updates repo diagram 2023-09-10 01:25:38 +00:00
Alicia Bot 005bb1d2a1 💙 Makes author list 2023-09-10 02:24:37 +01:00
Alicia Bot 2aeee1cc9c 💙 Updates contributor SVG 2023-09-10 02:24:19 +01:00
liss-bot 2d2857d3de 💜 Updates contributors list 2023-09-10 02:24:18 +01:00
Alicia Sykes c3542693d7
🔀 Merge pull request #1309 from hubortje/master
Update multi-language-support.md
2023-09-05 13:50:44 +01:00
Harald Töpfer ab450a13e4
Update multi-language-support.md
Fixed the code example in ## Config File

`lang: de` throws a `Validation Warning: .appConfig should NOT have additional property: lang` while `language: de` works as expected.
2023-09-05 14:30:54 +02:00
repo-visualizer 1b99b5e3b6 💛 Updates repo diagram 2023-09-03 01:25:12 +00:00
Alicia Bot e3d47070c1 💙 Makes author list 2023-09-03 02:24:19 +01:00
Alicia Bot 0e3aa0aca4 💙 Updates contributor SVG 2023-09-03 02:23:58 +01:00
liss-bot a8cd6138e6 💛 Updates sponsors table 2023-09-03 02:23:51 +01:00
liss-bot 9d91e33f65 💜 Updates contributors list 2023-09-03 02:23:50 +01:00
Alicia Sykes 4786020741
🔀 Merge pull request #1300 from allozavrr/master
Feature: Ukrainian language
2023-08-27 12:49:55 +01:00
Alicia Sykes 344a109166
🚨 Fix small syntax error in ua.json 2023-08-27 12:47:30 +01:00
repo-visualizer 943b27e6f5 💛 Updates repo diagram 2023-08-27 01:24:49 +00:00
Alicia Bot 986b2d79f6 💙 Makes author list 2023-08-27 02:23:53 +01:00
Alicia Bot 5ddcfd3722 💙 Updates contributor SVG 2023-08-27 02:23:42 +01:00
liss-bot d0fe47ebf9 💛 Updates sponsors table 2023-08-27 02:23:37 +01:00
liss-bot ab2ea32fb6 💜 Updates contributors list 2023-08-27 02:23:36 +01:00
allozavrr 3a32cc4341 Add: Ukrainian language 2023-08-26 09:04:46 +02:00
Alicia Sykes 3e1e42da5f
🔀 Merge pull request #1293 from wozboz/master
Fixed typos in documentation
2023-08-21 23:59:31 +01:00
wozboz a75afcec0f 📝 fixed another small typo 2023-08-20 14:24:04 +02:00
wozboz 225f69cdb3 📝 corrected some typos in the docs 2023-08-20 14:22:23 +02:00
repo-visualizer 766962943b 💛 Updates repo diagram 2023-08-20 01:23:41 +00:00
Alicia Bot cf0c269bec 💙 Makes author list 2023-08-20 02:22:42 +01:00
Alicia Bot a03f94fd25 💙 Updates contributor SVG 2023-08-20 02:22:35 +01:00
liss-bot 59f3b75f4f 💛 Updates sponsors table 2023-08-20 02:22:27 +01:00
liss-bot d9773c9c36 💜 Updates contributors list 2023-08-20 02:22:26 +01:00
Alicia Sykes d4126baa88
🔀 Merge pull request #1278 from wozboz/master
Add new widget for RescueTime
2023-08-13 14:21:17 +01:00
Alicia Sykes c45e05866d
🔥 Removed commented out lines for ResueTime widget (#1278) 2023-08-13 14:18:49 +01:00
Alicia Sykes 39ab92deaa
📝 Removes space between RescueTime title and link (#1278) 2023-08-13 14:17:43 +01:00
repo-visualizer 31f3b2bf57 💛 Updates repo diagram 2023-08-13 01:23:59 +00:00
Alicia Bot ae83e6049b 💙 Makes author list 2023-08-13 02:23:02 +01:00
Alicia Bot e8dbe4c143 💙 Updates contributor SVG 2023-08-13 02:22:52 +01:00
liss-bot e191b275cf 💛 Updates sponsors table 2023-08-13 02:22:50 +01:00
liss-bot 3f42982441 💜 Updates contributors list 2023-08-13 02:22:48 +01:00
wozboz be0f51d46a Merge branch 'master' of https://github.com/wozboz/dashy 2023-08-10 15:46:11 +02:00
wozboz f7a0fb24a9 Added basic RescueTime widget to see time spent on activities 2023-08-10 15:43:05 +02:00
Alicia Sykes ce4e71b4da
🔀 Merge pull request #1277 from zcq100/master
Update chinese translate
2023-08-07 16:52:25 +01:00
zcq100 274ec7fffe
Update chinese translate 2023-08-07 21:37:45 +08:00
repo-visualizer c6f01c2aa3 💛 Updates repo diagram 2023-08-06 01:26:37 +00:00
Alicia Bot be817a29f9 💙 Makes author list 2023-08-06 02:25:40 +01:00
liss-bot 7124b4f16a 💛 Updates sponsors table 2023-08-06 02:25:30 +01:00
liss-bot 86debd7588 💜 Updates contributors list 2023-08-06 02:25:28 +01:00
Shawn Salat c0285d410e use static iframe ref name 2023-08-04 17:23:59 -06:00
repo-visualizer 544f031b10 💛 Updates repo diagram 2023-07-30 01:29:30 +00:00
Alicia Bot c774e81e0a 💙 Makes author list 2023-07-30 02:28:13 +01:00
liss-bot cd5d096479 💛 Updates sponsors table 2023-07-30 02:27:57 +01:00
liss-bot d0fa998502 💜 Updates contributors list 2023-07-30 02:27:56 +01:00
repo-visualizer be5e2cd217 💛 Updates repo diagram 2023-07-23 01:29:58 +00:00
Alicia Bot 66e6b1a5f2 💙 Makes author list 2023-07-23 02:28:49 +01:00
Alicia Bot 7670fe17ea 💙 Updates contributor SVG 2023-07-23 02:28:31 +01:00
liss-bot f4dbbbda67 💜 Updates contributors list 2023-07-23 02:28:28 +01:00
repo-visualizer e341d5f02f 💛 Updates repo diagram 2023-07-16 01:31:46 +00:00
Alicia Bot aeb77c9770 💙 Makes author list 2023-07-16 02:30:14 +01:00
Alicia Bot ce250d0c48 💙 Updates contributor SVG 2023-07-16 02:29:54 +01:00
liss-bot c5e4bb9a7f 💜 Updates contributors list 2023-07-16 02:29:48 +01:00
Alicia Sykes 1b583c3f76
🔀 Merge pull request #1243 from berksmbl/Add-Easypanel-Deployment-Method
docs: Add Easypanel Deployment Method
2023-07-15 12:15:54 +01:00
Alicia Sykes c901288eb1
🔀 Merge pull request #1229 from Juoper/master
Changed url from healthcheck.io to healthchecks.io
2023-07-15 12:15:07 +01:00
Alicia Sykes 1fd7e6b15c
🔀 Merge pull request #1194 from josuablejeru/feature/hackernews-widget
hackernews widget
2023-07-15 12:14:42 +01:00
Alicia Sykes 3c25fb8494
🔀 Merge pull request #1192 from BhasherBEL/master
Add lang option for public holidays
2023-07-15 12:13:29 +01:00
repo-visualizer c7309d4a38 💛 Updates repo diagram 2023-07-09 01:32:13 +00:00
Alicia Bot 2e5eb191f2 💙 Makes author list 2023-07-09 02:29:49 +01:00
Alicia Bot 69990d432f 💙 Updates contributor SVG 2023-07-09 02:29:35 +01:00
liss-bot 3b034c1ac5 💜 Updates contributors list 2023-07-09 02:29:24 +01:00
Alicia Sykes c0b6eee89a
🔀 Merge pull request #1248 from ethan-hann/patch-1
Fixed link and grammar mistake
2023-07-08 20:39:32 +01:00
Ethan Hann 02565d3ef6
Update widgets.md
Fix the link to the development guides for creating a custom widget.
Fix a grammar error .
2023-07-03 00:30:00 -05:00
repo-visualizer ddab65e44a 💛 Updates repo diagram 2023-07-02 01:30:57 +00:00
Alicia Bot fbd80725cf 💙 Makes author list 2023-07-02 02:29:59 +01:00
Berk Sümbül ab83cf4d22 Update deployment.md 2023-06-25 14:28:26 +03:00
Berk Sümbül 06532391e7 Update deployment.md 2023-06-25 14:27:24 +03:00
Berk Sümbül 55cd1324c0 Add Easypanel Deployment Method 2023-06-25 14:22:18 +03:00
Alicia Bot bd7c8c2754 💙 Makes author list 2023-06-25 02:30:48 +01:00
Julian 54b0a05493 Changed url from healthcheck.io to healthchecks.io 2023-06-18 15:52:44 +02:00
repo-visualizer ea04247be0 💛 Updates repo diagram 2023-06-18 01:30:59 +00:00
Alicia Bot 268299b95c 💙 Makes author list 2023-06-18 02:29:54 +01:00
Alicia Sykes 4813d49e42 ⤴ Rebased from master 2023-06-11 11:30:55 +01:00
Alicia Sykes 51a9b4bfbe
🔀 Merge pull request #1221 from Lissy93/FEAT/update-iframe-permissions
[Feature] Allow copy to clipboard within iframe
Closes #1207
2023-06-11 11:08:56 +01:00
Alicia Sykes d469672527 🔒 Enables copy-to-clipboard for sites running in iframe modal / widget (#1207) 2023-06-11 10:58:02 +01:00
repo-visualizer d96297e0f8 💛 Updates repo diagram 2023-06-11 01:31:08 +00:00
Alicia Bot 22e6a5c266 💙 Makes author list 2023-06-11 02:29:51 +01:00
Alicia Bot 579b65a969 💙 Updates contributor SVG 2023-06-11 02:29:45 +01:00
liss-bot e0b5818a88 💛 Updates sponsors table 2023-06-11 02:29:34 +01:00
liss-bot aff8394325 💜 Updates contributors list 2023-06-11 02:29:33 +01:00
Alicia Sykes ece9548b59
🔀 Merge pull request #1219 from Lissy93/FEAT/import-manifest
[FEATURE] Import manifest in index.html
2023-06-10 19:14:28 +01:00
Alicia Sykes 81c612995e 🔍 Import manifest in index.html (#1215) 2023-06-10 19:08:53 +01:00
Alicia Sykes d221844f2f
🔀 Merge pull request #1216 from altearius/FEATURE/documentation
📝 How to register a widget.
2023-06-10 12:22:37 +01:00
Alicia Sykes d718905779
🔀 Merge pull request #1217 from altearius/FEATURE/temporal-plurality
🩹 Singular/plural forms for time counts.
2023-06-10 12:21:13 +01:00
Alicia Sykes 067076f1d4
🔀 Merge pull request #1218 from aviolaris/master
[Localization] Greek Language Added
2023-06-10 12:11:04 +01:00
Andreas Violaris 8e9aec080a Added Greek to the list of supported languages 2023-06-10 12:48:53 +03:00
Andreas Violaris de33ac2a72 Registered Greek language 2023-06-10 12:46:33 +03:00
Andreas Violaris 5977c92235 Added Greek language 2023-06-10 12:43:28 +03:00
Andreas Violaris c50ae1392f Fixed typo 2023-06-10 12:30:40 +03:00
Chris Nielsen 03ae38577e Support for `month` 2023-06-08 23:39:20 +00:00
Chris Nielsen f46bcc2edd 🐛 Correct DeepScan issue. 2023-06-08 23:37:57 +00:00
Chris Nielsen 7280820ba5 🩹 Singular/plural forms for time counts. 2023-06-08 23:16:41 +00:00
Chris Nielsen 1e2854df93 📝 How to register a widget. 2023-06-08 15:49:36 +00:00
Alicia Sykes 020e0ba472 Merge branch 'master' of github.com:lissy93/dashy 2023-06-04 22:37:31 +01:00
Alicia Sykes 2324755e0e
🔀 Merge pull request #1212 from alayham/custom-search
initial commit of the custom search widget
2023-06-04 22:36:11 +01:00
root e1d4adb2ed initial commit of the custom search widget 2023-06-04 17:13:39 +00:00
Alicia Sykes fdd936931e 🚨 Resolves lint errors 2023-06-04 16:21:58 +01:00
Alicia Sykes f1d3547399
🔀 Merge pull request #1210 from alayham/proxmox-lists
initial commit of the proxmox lists widget
2023-06-04 09:14:46 +01:00
repo-visualizer f4c82be988 💛 Updates repo diagram 2023-06-04 01:32:00 +00:00
Alicia Bot fccb0dd890 💙 Makes author list 2023-06-04 02:29:56 +01:00
root b7d7927b7c initial commit of the proxmox lists widget 2023-06-03 17:36:08 +00:00
repo-visualizer ff5b2d5082 💛 Updates repo diagram 2023-05-28 01:30:25 +00:00
Alicia Bot 58a374ce6e 💙 Makes author list 2023-05-28 02:29:08 +01:00
Alicia Bot 086b98b86f 💙 Updates contributor SVG 2023-05-28 02:28:55 +01:00
liss-bot ed0a8bbecf 💛 Updates sponsors table 2023-05-28 02:28:51 +01:00
liss-bot cdd36571b6 💜 Updates contributors list 2023-05-28 02:28:49 +01:00
Josua Blejeru 040b472a05 📝 document post size option in HN widget 2023-05-24 12:31:42 +02:00
Josua Blejeru 2d77a155d5 ⚰️ remove dead css in HN widget 2023-05-24 12:29:19 +02:00
Josua Blejeru 7e1057d059 🚨 ⚰️ remove unused css, fix linting issues in HN 2023-05-24 12:25:03 +02:00
Josua Blejeru 503d662065 📝 document HN trending Widget 2023-05-24 12:16:43 +02:00
Josua Blejeru 098600365a ♻️ rename story type fetch method 2023-05-24 12:16:43 +02:00
Josua Blejeru cfdd4a13e8 basic Widget which fetches the HN posts 2023-05-24 12:16:43 +02:00
Josua Blejeru c1512012f9
Merge branch 'Lissy93:master' into master 2023-05-24 12:16:10 +02:00
Bhasher c418b7b7ae Add lang option for public holidays 2023-05-23 14:22:22 +02:00
Josua Blejeru 1a42a41a53 🚧 Register a Widget to display stories from HN 2023-05-22 21:57:09 +02:00
repo-visualizer 09e61a5fa4 💛 Updates repo diagram 2023-05-21 01:30:06 +00:00
Alicia Bot f91e46369f 💙 Makes author list 2023-05-21 02:29:24 +01:00
Alicia Bot f841e9c33a 💙 Updates contributor SVG 2023-05-21 02:29:04 +01:00
liss-bot 755a4a328b 💛 Updates sponsors table 2023-05-21 02:28:59 +01:00
liss-bot fa41239bb2 💜 Updates contributors list 2023-05-21 02:28:58 +01:00
Alicia Sykes 68d47c25d2
🤖 Increase stale time, from 30 to 90 days
Less annoying notification
2023-05-20 19:45:29 +01:00
Alicia Sykes 79bbc3785a
🔀 Merge pull request #1178 from baifengheixi/master
🔧 Set range of node version in package.json
2023-05-20 19:23:03 +01:00
Alicia Sykes 2ec404121a
🔀 Merge pull request #1181 from huangshaohuai/huangshaohuai-dashy
get the correct tooltip for subitem
2023-05-20 00:26:50 +01:00
Alicia Sykes 9c73bb91b9
🔀 Merge pull request #1182 from altearius/FEATURE/cpu-temp-units
 Permit users to choose Celsius or Fahrenheit.
2023-05-20 00:26:09 +01:00
repo-visualizer 56fd803f93 💛 Updates repo diagram 2023-05-14 01:29:49 +00:00
Alicia Bot 8e41778a38 💙 Makes author list 2023-05-14 02:28:35 +01:00
Alicia Bot caac4a3ffa 💙 Updates contributor SVG 2023-05-14 02:28:28 +01:00
liss-bot 0738eb14c8 💛 Updates sponsors table 2023-05-14 02:28:22 +01:00
liss-bot 744272eaff 💜 Updates contributors list 2023-05-14 02:28:21 +01:00
Chris Nielsen e3360349bb Permit users to choose Celsius or Fahrenheit. 2023-05-12 19:06:32 +00:00
huangshaohuai b615833b5f
get the correct tooltip for subitem 2023-05-12 23:16:14 +08:00
baifengheixi 7feb4f7da6 Update node version in package.json 2023-05-10 21:09:31 +07:00
repo-visualizer c71476d4e8 💛 Updates repo diagram 2023-05-07 01:29:28 +00:00
Alicia Bot 5275f21374 💙 Makes author list 2023-05-07 02:28:29 +01:00
liss-bot e5141a64d8 💛 Updates sponsors table 2023-05-07 02:28:20 +01:00
liss-bot b31ebae953 💜 Updates contributors list 2023-05-07 02:28:18 +01:00
Alicia Sykes 9a416a4653
🔀 Merge pull request #1171 from ssrangisetti/patch-1
Add support searching multiple words.
2023-05-05 21:07:07 +01:00
Alicia Sykes bc9e193a7d
🔀 Merge pull request #1175 from gbrown09/weather-icon-fix
Swapping incorrect icons
2023-05-05 21:06:43 +01:00
Garrett Brown d22b8de524 swapping incorrect icons 2023-05-04 18:50:27 -05:00
ssrangisetti 3f3ffac63b Fixing issues raised by SonarCloud 2023-05-03 23:54:56 +05:30
ssrangisetti 13775b3f57
Add support searching multiple words. 2023-05-03 22:52:49 +05:30
repo-visualizer 62ce3bfe5d 💛 Updates repo diagram 2023-04-30 01:29:27 +00:00
Alicia Bot da2f0eeaca 💙 Makes author list 2023-04-30 02:28:23 +01:00
Alicia Bot 40e3c169b7 💙 Updates contributor SVG 2023-04-30 02:28:13 +01:00
liss-bot e3467a7740 💛 Updates sponsors table 2023-04-30 02:28:08 +01:00
liss-bot 45486a97e6 💜 Updates contributors list 2023-04-30 02:28:07 +01:00
Alicia Sykes 2c3ed81e35
🤖 Automation to mirror to CodeBerg 2023-04-30 00:10:05 +01:00
Alicia Sykes 600eacedeb
📝 Fix link to Healthcheck Status widget 2023-04-29 17:56:54 +01:00
Alicia Sykes ba47fb767d
🔀 Merge pull request #1167 from hockeymikey/master
Add in rss parsing library and option to use it instead of the API
2023-04-29 17:55:03 +01:00
Alicia Sykes 5aea6be90c
🔖 Keep at 2.1.1 2023-04-29 17:54:29 +01:00
hockeymikey 7466ae6c9e Bump version 2023-04-29 10:37:25 -05:00
hockeymikey 7cb6db93f4 Add in rss parsing library and option to use it instead of the API 2023-04-29 10:31:11 -05:00
repo-visualizer 8ca21edd22 💛 Updates repo diagram 2023-04-23 01:30:04 +00:00
Alicia Bot 0805d9ce43 💙 Makes author list 2023-04-23 02:28:38 +01:00
Alicia Bot cecde20ee6 💙 Updates contributor SVG 2023-04-23 02:28:29 +01:00
liss-bot 3e264bf131 💛 Updates sponsors table 2023-04-23 02:28:24 +01:00
liss-bot 96bef092f4 💜 Updates contributors list 2023-04-23 02:28:23 +01:00
repo-visualizer 62b0e6b702 💛 Updates repo diagram 2023-04-16 01:29:57 +00:00
Alicia Bot e8762d5e56 💙 Makes author list 2023-04-16 02:29:09 +01:00
repo-visualizer fd31a66d06 💛 Updates repo diagram 2023-04-09 01:29:22 +00:00
Alicia Bot 6860f132e9 💙 Makes author list 2023-04-09 02:28:19 +01:00
Alicia Bot d7802a279a 💙 Updates contributor SVG 2023-04-09 02:28:08 +01:00
liss-bot 2214c0c63d 💛 Updates sponsors table 2023-04-09 02:28:02 +01:00
liss-bot c088a0cbc3 💜 Updates contributors list 2023-04-09 02:28:00 +01:00
Alicia Sykes c8653e525e
🔀 Merge pull request #1157 from luispabon/sensors
Tweak GlCpuTemp widget to support other sensor units
2023-04-07 13:03:17 +01:00
Luis Pabon df5ada9340 Tweak GlCpuTemp widget to support other sensor units
The current code assumes all sensors report temperature, when in fact glances' sensor plugin also reports rpm (eg fan speeds) and percentages (eg batteries).

Changes:

 * Add support for percentages
 * Add support for rpm

Note: this widget should really be called something like `GlSensors`, but I haven't been able to easily find a way of renaming it without breaking people's existing configs and workflows.
2023-04-03 17:02:18 +01:00
repo-visualizer 9c90814dff 💛 Updates repo diagram 2023-04-02 01:29:22 +00:00
Alicia Bot e26671f86e 💙 Makes author list 2023-04-02 02:28:29 +01:00
repo-visualizer f7face1c79 💛 Updates repo diagram 2023-03-26 01:29:54 +00:00
Alicia Bot cf0bdd8a5a 💙 Makes author list 2023-03-26 02:28:45 +01:00
Alicia Bot cd61df97bf 💙 Updates contributor SVG 2023-03-26 02:28:36 +01:00
liss-bot 8864604e78 💜 Updates contributors list 2023-03-26 02:28:31 +01:00
Alicia Sykes 45e06d2e66
👽️ Updates path to currency-flag assets
Data fetched from: https://github.com/Lissy93/currency-flags
2023-03-19 16:02:40 +00:00
Alicia Sykes 27b835258c
🔀 Merge pull request #1146 from poisonadder7/master
Update GlancesMixin.js - small typo correction
2023-03-19 15:55:52 +00:00
Alicia Bot bb6b980f66 💙 Makes author list 2023-03-19 01:30:06 +00:00
Alicia Bot 992ea92235 💙 Updates contributor SVG 2023-03-19 01:30:00 +00:00
liss-bot 0727ae4a93 💛 Updates sponsors table 2023-03-19 01:29:52 +00:00
liss-bot 04ce19d785 💜 Updates contributors list 2023-03-19 01:29:51 +00:00
poisonadder7 cfc7c29147
Update GlancesMixin.js 2023-03-16 19:28:04 +00:00
repo-visualizer baf9b5a66e 💛 Updates repo diagram 2023-03-12 01:30:29 +00:00
Alicia Bot abe73f2fca 💙 Makes author list 2023-03-12 01:29:45 +00:00
liss-bot ad4d4c2386 💛 Updates sponsors table 2023-03-12 01:29:36 +00:00
liss-bot e6223a4cfa 💜 Updates contributors list 2023-03-12 01:29:34 +00:00
Alicia Sykes 0cc8935b5f
🔀 Merge pull request #1141 from EVOTk/master
Update FR translation
2023-03-11 16:38:28 +00:00
EVOTk 1d419a50ac
Update fr.json 2023-03-09 19:35:27 +01:00
EVOTk a1ac11e66a
Update fr.json 2023-03-09 19:32:53 +01:00
repo-visualizer 50baed7d01 💛 Updates repo diagram 2023-03-05 01:30:55 +00:00
Alicia Bot 2be9ecc02a 💙 Makes author list 2023-03-05 01:29:35 +00:00
Alicia Bot 854efe9de5 💙 Updates contributor SVG 2023-03-05 01:29:26 +00:00
Alicia Sykes 8fbf769a62
🔀 Merge pull request #1106 from m42e/linkding
Added linkding widget
2023-03-02 23:11:42 +00:00
Alicia Sykes 8798dcf5e3
📝 Fixes incorrect value, for enableServiceWorker 2023-03-01 16:40:42 +00:00
Alicia Sykes 0d8d7fc28c
🔀 Merge pull request #1124 from Lissy93/FIX/currency-widget-flags
[FIX] Updates the endpoint for currency flags
Fixes #1096
2023-02-26 22:47:50 +00:00
Alicia Sykes 6651333253 🐛 Updates the endpoint for currency flags (#1096) 2023-02-26 22:41:49 +00:00
Alicia Sykes 794fa57956
🔧 Re-enable GHCR Docker Push 2023-02-26 15:50:26 +00:00
Alicia Sykes a6e685b5e1
🚧 Temp removes GHCR + ACR 2023-02-26 15:21:31 +00:00
Alicia Sykes 4f0af68c5f
🚧 Temporarily removes GHCR 2023-02-26 14:53:29 +00:00
Alicia Sykes 3e35b56414 📌 Updates yarn.lock dependency pins 2023-02-26 14:30:53 +00:00
Alicia Sykes d5b70c1d94
🔀 Merge pull request #1123 from Lissy93/FIX/most-used-last-used-counter
[FIX] Counter for most-used + last-used, and lint warns
Fixes #1056 and #1033 for @hypatia1 and @Zixim
2023-02-26 14:25:40 +00:00
Alicia Sykes 4fc3abf511 🐛 Fix most-used / last-used storage (#1056, #1033) 2023-02-26 14:13:59 +00:00
Alicia Sykes 743232e597 🚨 Fix lint warn, indentation in Mvg widget 2023-02-26 14:10:08 +00:00
Alicia Sykes c3749c6837 🚨 Fix lint warn, single quotes in clock 2023-02-26 14:09:42 +00:00
repo-visualizer e48f8418b9 💛 Updates repo diagram 2023-02-26 01:30:37 +00:00
Alicia Bot ed4898d761 💙 Makes author list 2023-02-26 01:29:36 +00:00
Alicia Bot 34449481a1 💙 Updates contributor SVG 2023-02-26 01:29:29 +00:00
liss-bot bf73117a9f 💛 Updates sponsors table 2023-02-26 01:29:20 +00:00
liss-bot be7fe22b42 💜 Updates contributors list 2023-02-26 01:29:19 +00:00
Alicia Sykes 0319b8b1ed
🔀 Merge pull request #1121 from Lissy93/lang/turkish-bengali-and-refactor
[TRANSLATIONS] Links the Turkish and Bengali locales, and updates lang docs
Thanks @soaibsafi, @imsakg and @zcq100 🙌
2023-02-23 17:46:49 +00:00
Alicia Sykes b4496fb910 🔄 Re-run CI builds 2023-02-23 17:41:58 +00:00
Alicia Sykes 386e688762 🔀 Merge branch 'master' of github.com:lissy93/dashy into lang/turkish-bengali-and-refactor 2023-02-23 17:33:06 +00:00
Alicia Sykes 896b7093f3 🌐 Credits @imsakg for Turkish translations (#1088) 2023-02-23 17:20:37 +00:00
Alicia Sykes f8c74e6b65
🔀 Merge pull request #1119 from zcq100/master
Update zh-CN.json
2023-02-23 17:15:39 +00:00
Alicia Sykes 422be768a0
🔀 Merge pull request #1107 from soaibsafi/master
Add new language (Bengali)
2023-02-23 17:13:01 +00:00
Alicia Sykes fed55a01d3
🔀 Merge pull request #1088 from imsakg/master
added: new language (Turkish).
2023-02-23 17:12:43 +00:00
zcq100 5d8c01d14b
Update zh-CN.json 2023-02-22 17:01:23 +08:00
Alicia Sykes 2e053064d3 🌐 Adds Turkish (thanks @imsakg 🙌 #1188) 2023-02-21 18:27:18 +00:00
Alicia Sykes 7200d87d6a 🌐 Adds Bengali (thanks @Soaibuzzaman 🙌 #1107) 2023-02-21 18:26:08 +00:00
Alicia Sykes 70a6cc6b64 🚚 Sorts languages alphabetically, by code 2023-02-21 18:23:45 +00:00
Alicia Sykes 940879a7a7 📝 Adds missing languages to readme, sorts alphabetically 2023-02-21 18:19:10 +00:00
Alicia Sykes 387d9ee5c3 🚨 Fix lint error (single quotes) in MvgConnection widget 2023-02-21 18:11:01 +00:00
Alicia Sykes 08e5e5b48e
🔀 Merge pull request #1041 from DimitriDR/master
Increasing localization for every element on Dashy
2023-02-19 23:55:43 +00:00
Alicia Sykes b18895b227
🔀 Merge pull request #1068 from itsmejoeeey/BUG/1067_Server-fallback-serve-index
🐛 Serve index.html as fallback to fix #1067
2023-02-19 23:53:40 +00:00
repo-visualizer 64d61fc894 💛 Updates repo diagram 2023-02-19 01:30:45 +00:00
Alicia Bot c17f92a549 💙 Makes author list 2023-02-19 01:29:17 +00:00
Alicia Bot e4f9d617e3 💙 Updates contributor SVG 2023-02-19 01:29:13 +00:00
liss-bot 5e86db0a3c 💜 Updates contributors list 2023-02-19 01:29:05 +00:00
Alicia Sykes 2f0e74d140
📝 Adds stats 2023-02-18 16:25:29 +00:00
Matthias Bilger 281f173d14 Added documentation 2023-02-14 19:05:24 +01:00
soaibsafi 992f2bd2d7 📝Add new language (Bengali) 2023-02-14 00:15:50 +01:00
Matthias Bilger 27e7ae3547 Added linkding widget 2023-02-13 21:21:06 +01:00
Alicia Sykes f7d1eefdff
⬆️ Merge pull request #1104 from Lissy93/snyk-upgrade-b35cba841cc995fca96fae91c42808f6
[Snyk] Upgrade vue-select from 3.18.3 to 3.20.2
2023-02-12 16:32:00 +00:00
Alicia Sykes ba6fa376a5
🔀 Merge pull request #1101 from marekful/FEATURE/pass-idp-hint-to-keycloak-auth
[FEATURE/IMPROVEMENT] Pass 'IdP Hint' to Keycloak
2023-02-12 16:23:24 +00:00
snyk-bot 981be1ca04
fix: upgrade vue-select from 3.18.3 to 3.20.2
Snyk has created this PR to upgrade vue-select from 3.18.3 to 3.20.2.

See this package in npm:


See this project in Snyk:
https://app.snyk.io/org/lissy93/project/564ca11b-8665-48b8-befa-ccd607c3e09a?utm_source=github&utm_medium=referral&page=upgrade-pr
2023-02-12 02:25:34 +00:00
repo-visualizer bdf274d8e1 💛 Updates repo diagram 2023-02-12 01:30:02 +00:00
Alicia Bot 405085edee 💙 Makes author list 2023-02-12 01:28:56 +00:00
Alicia Bot 143a7a7971 💙 Updates contributor SVG 2023-02-12 01:28:47 +00:00
liss-bot c70fc83cb2 💛 Updates sponsors table 2023-02-12 01:28:46 +00:00
liss-bot 94162881df 💜 Updates contributors list 2023-02-12 01:28:44 +00:00
Marcell Fülöp 99fa9bcc32 📝 Add documentation for 'appConfig.auth.keycloak.idpHint' option. 2023-02-09 13:40:31 +00:00
Marcell Fülöp d9740427eb 🩹 Allow Keycloak authentication to pass 'IdP Hint'
* add App Config option for 'IdP Hint' under Keycloak Authentication
* refactor the authentication trigger mechanism to allow direct call
  to keyjclaok-js adapter login() function
* remove `onLoad` from construction options (as it belongs to init())
2023-02-09 12:47:10 +00:00
Marcell Fülöp 3e7b51da33 ⬆️ Upgrade Keycloak-js dependency 2023-02-09 12:38:57 +00:00
repo-visualizer 354fc99af5 💛 Updates repo diagram 2023-02-05 01:30:58 +00:00
Alicia Bot 9f8da93de3 💙 Makes author list 2023-02-05 01:29:16 +00:00
Alicia Bot 53633a2bfd 💙 Updates contributor SVG 2023-02-05 01:29:11 +00:00
liss-bot 7cea06f362 💜 Updates contributors list 2023-02-05 01:29:05 +00:00
Alicia Sykes dc8e651fb9
🔀 Merge pull request #1066 from itsmejoeeey/BUG/1024_Workspace-trailing-slash
🐛 Add trailing slash to quick fix #1064
Fixes #1064
2023-02-04 23:51:39 +00:00
Alicia Sykes b177b7d855
🔀 Merge pull request #1069 from kxenoxx/patch-1
Update fr.json
2023-02-04 23:49:56 +00:00
Alicia Sykes 2772f8fda6
🔀 Merge pull request #1091 from a-mnich/FIX/Authors
👷 bump version:  update-authors GitHub action
2023-02-04 23:43:27 +00:00
Alexander Mnich f17cbc381d
👷 update update-authors action 2023-01-30 11:22:48 +01:00
Alicia Sykes 7080e3c980
🔀 Merge pull request #1058 from BySempron/master
Solve background image resize
2023-01-29 21:33:11 +00:00
Alicia Sykes 221aeb5441
🔀 Merge pull request #1026 from kieraneglin/FIX/add-to-homescreen-404
🐛 Update manifest.json's start_url to bare root path
2023-01-29 21:32:25 +00:00
Alicia Sykes 4d5a79fec9
🔀 Merge pull request #1087 from albcp/master
Fix configuration export
2023-01-29 21:31:29 +00:00
repo-visualizer d44b0c7a6a 💛 Updates repo diagram 2023-01-29 01:30:31 +00:00
Alicia Bot fd232f4ab6 💙 Makes author list 2023-01-29 01:29:16 +00:00
liss-bot f774481fbf 💛 Updates sponsors table 2023-01-29 01:29:12 +00:00
liss-bot d68a03bcf1 💜 Updates contributors list 2023-01-29 01:29:10 +00:00
Sergio c7c4df7a55
Merge branch 'Lissy93:master' into master 2023-01-28 13:18:55 +01:00
liss-bot 8fbffd31bd 💛 Updates sponsors table 2023-01-27 16:16:12 +00:00
liss-bot 61d2562e21 💜 Updates contributors list 2023-01-27 16:16:11 +00:00
Alicia Bot 10828bf2da 💙 Makes author list 2023-01-27 16:13:31 +00:00
Alicia Bot cbde5743c3 💙 Updates contributor SVG 2023-01-27 16:13:22 +00:00
Alicia Sykes f731c0f755
🤖 Update version of Contributor workflow 2023-01-27 16:08:03 +00:00
Mert Sefa AKGUN 382f823e53
added: new language (Turkish). 2023-01-27 15:58:02 +03:00
Alicia Sykes adf56fa334
🔀 Merge pull request #1048 from m42e/healthcheck-fix-errors
Fix HealthChecks linting errors
2023-01-25 16:45:56 +00:00
Alberto 8ef419b767
Merge branch 'Lissy93:master' into master 2023-01-25 16:50:02 +01:00
Alberto Caravaca f3c854378c Correct config export removing leading space 2023-01-25 09:45:59 -06:00
Matthias Bilger c50773e727 Fix HealthChecks linting errors 2023-01-23 19:42:02 +01:00
Alicia Sykes 18c2af774d
🔀 Merge pull request #1047 from m42e/mvg-upstream
Added Mvg Widget
2023-01-23 12:13:07 +00:00
Matthias Bilger 59118a54dd Fixed as suggested 2023-01-22 18:22:24 +01:00
Alicia Sykes a91a283f1b
🔀 Merge pull request #1037 from m42e/drone-io-widget
Drone io widget
2023-01-22 17:00:35 +00:00
Matthias Bilger 75b06f8af8 Fix CodeSonar warnings 2023-01-22 15:51:34 +01:00
Matthias Bilger 1e84f51825 Fixed deepscan analysis warnings 2023-01-22 15:50:02 +01:00
Matthias Bilger 4cb3332e3e Added mvg connection + doc updates 2023-01-22 12:57:02 +01:00
repo-visualizer 39a55333a9 💛 Updates repo diagram 2023-01-22 01:29:53 +00:00
Alicia Bot 8d8dc81793 💙 Makes author list 2023-01-22 01:28:45 +00:00
Alicia Bot 6d63ed8441 💙 Updates contributor SVG 2023-01-22 01:28:38 +00:00
liss-bot 53cd128395 💛 Updates sponsors table 2023-01-22 01:28:36 +00:00
liss-bot 9f0c6af5b4 💜 Updates contributors list 2023-01-22 01:28:34 +00:00
Alicia Sykes b388adcaec
🔀 Merge pull request #1075 from albcp/master
Fixed filtering by productId in cve-vulnerabilities widget
Fixes #1065
2023-01-21 23:08:59 +00:00
Alicia Sykes ddd7c0f4be
🔀 Merge pull request #1076 from rtm516/master
Fix health-check when using SSL
2023-01-21 20:47:13 +00:00
rtm516 3c5177dd70
Update health-check to support SSL properly 2023-01-21 16:36:49 +00:00
rtm516 37f0a669fd
Update healthcheck to 5s timeout 2023-01-21 16:33:11 +00:00
Alberto Caravaca 1ba01ba5f3 Merge branch 'master' of https://github.com/albcp/dashy 2023-01-21 06:26:43 -06:00
Alberto Caravaca 0d9689883c Added productId to the endpoint and improved docs 2023-01-21 06:23:13 -06:00
Alicia Sykes 4a5024ce26
🔀 Merge pull request #1074 from albcp/master
Fixed Pi-Hole widgets adding authentication
2023-01-21 00:01:06 +00:00
Alberto Caravaca c867a90919 Remove trailing space 2023-01-20 15:21:55 -06:00
Alberto Caravaca 5cfc9b1bd8 Added authentication to Pi-Hole widgets 2023-01-20 15:02:55 -06:00
kxenox 678e7119f8
Update fr.json
Added missing character
2023-01-16 23:08:39 +01:00
itsmejoeeey 12eadccfda 🐛 Serve index.html as fallback to fix #1067 2023-01-17 01:30:34 +13:00
itsmejoeeey 8ec5f30a5d 🐛 Add trailing slash to quick fix #1064
* Add trailing slash to switch-view-buttons on Workspace sidebar. This prevents a bug when later using switch view buttons on Default/Minimal view switchers.
2023-01-16 21:34:45 +13:00
Alicia Bot c957ab6cfe 💙 Makes author list 2023-01-15 01:29:30 +00:00
Alicia Bot 53e33dded3 💙 Updates contributor SVG 2023-01-15 01:29:24 +00:00
BySempron 728eb0256e
Solve background image resize 2023-01-10 20:21:51 +01:00
Matthias Bilger b404bb09be Added Mvg Widget
Display mvg departure times for MVG station.
2023-01-10 09:11:04 +01:00
Matthias Bilger db8abb2831 Added skipped icon, use correct status 2023-01-08 23:13:05 +01:00
Matthias Bilger 0948a3f845 updated Format and allow single repo listing 2023-01-08 10:01:37 +01:00
Matthias Bilger 120c351f40 Add update function for DroneCi Widget 2023-01-08 06:17:17 +01:00
Matthias Bilger f43966fdb0 Rename DroneIo to DroneCi
Drone CI is the current term used for the Build System (or just Drone,
which is a bit to unspecific for identification)
2023-01-08 06:13:29 +01:00
Matthias Bilger f14eaf5f0b WIP: updated drone 2023-01-08 06:01:31 +01:00
Matthias Bilger 97ccdd44b2 Use `drone-io` in config and minor doc improvement for drone-io 2023-01-08 05:57:48 +01:00
repo-visualizer f11e6bfd44 💛 Updates repo diagram 2023-01-08 01:30:27 +00:00
Alicia Bot 785976e055 💙 Makes author list 2023-01-08 01:28:42 +00:00
Alicia Bot ae160050be 💙 Updates contributor SVG 2023-01-08 01:28:34 +00:00
liss-bot 0fd28a132f 💛 Updates sponsors table 2023-01-08 01:28:32 +00:00
liss-bot 3df6453e61 💜 Updates contributors list 2023-01-08 01:28:31 +00:00
DimitriDR f214667f51 Adding error messages and splash screen. 2023-01-07 23:28:57 +01:00
Alicia Sykes a5f3c20810
🔀 Merge pull request #1043 from m42e/xkcd-show-alt
XKCD: Use tooltip for alt text
2023-01-07 21:55:11 +00:00
Alicia Sykes 0fc664fb08
🔀 Merge pull request #1039 from m42e/multiple-healthcheck-keys
Allow multiple Project Keys for HealthChecks
2023-01-07 21:53:43 +00:00
Matthias Bilger f0a5c249b0 New Window + update support 2023-01-07 21:12:55 +01:00
DimitriDR d3ced73cf3 Updated localization. Fixed my own bug... 2023-01-07 20:50:07 +01:00
DimitriDR 6b376f1dad Localizable strings for the App Info page
Signed-off-by: DimitriDR <dimitridroeck@gmail.com>
2023-01-07 20:18:57 +01:00
Matthias Bilger d4528a1afe XKCD: Use tooltip for alt text 2023-01-07 19:29:00 +01:00
DimitriDR 3016128cbc Possible to translate footer now.
Signed-off-by: DimitriDR <dimitridroeck@gmail.com>
2023-01-07 17:09:47 +01:00
Matthias Bilger 8e5c378386 Allow multiple Project Keys for HealthChecks 2023-01-07 11:12:49 +01:00
Matthias Bilger 71510eeb93 Added info for Drone Widget 2023-01-07 01:41:58 +01:00
Matthias Bilger 9a70d1cd8d Added Widget for drone.io 2023-01-07 01:25:47 +01:00
Alicia Sykes 9ab6c59f19
⬆️ Merge pull request #994 from Lissy93/snyk-upgrade-9b3202c44d224cdfbceacca91b080839
[Snyk] Upgrade simple-icons from 7.17.0 to 7.19.0
2023-01-01 22:21:07 +00:00
Alicia Sykes 15d7e9936d
🔀 Merge pull request #1030 from a-mnich/FIX/germanLocale
Update German (de) locale
2023-01-01 22:08:13 +00:00
Alicia Sykes f4f2c5f134
🔀 Merge pull request #1029 from Dylan-Bs/master
🌐 Adding Guest translations
2023-01-01 22:06:26 +00:00
repo-visualizer 7841955bc5 💛 Updates repo diagram 2023-01-01 01:30:20 +00:00
Alicia Bot 1b0265c09a 💙 Makes author list 2023-01-01 01:29:21 +00:00
liss-bot fca21c6597 💛 Updates sponsors table 2023-01-01 01:29:04 +00:00
liss-bot 8fa4be9e1b 💜 Updates contributors list 2023-01-01 01:29:03 +00:00
Alexander Mnich 02713110b4 🌐 correct and complete de locale 2022-12-30 18:55:32 +00:00
Dylan-Bs db017c0888
Adding Guest translations 2022-12-30 17:51:48 +01:00
Kieran Eglin da3b5bc4b7 Updated manifest's start_url to bare root path 2022-12-28 10:23:59 -08:00
repo-visualizer 2f3cc1c354 💛 Updates repo diagram 2022-12-25 01:29:51 +00:00
Alicia Bot 8cd2e757f6 💙 Makes author list 2022-12-25 01:29:12 +00:00
Alicia Sykes bf60719035
🔀 Merge pull request #1017 from Tuzi555/feature/add-cs-locale
Feature/add cs locale
2022-12-20 21:54:48 +00:00
Alicia Sykes a5baede11c
🔖 Keep at 2.1.1 2022-12-20 21:53:13 +00:00
Tuzi555 15a09cd83b Added import statement for json with translations 2022-12-20 16:20:16 +01:00
Tuzi555 94247c3c04 Bumped version 2022-12-20 14:38:30 +01:00
Tuzi555 9682446b95 🌐 Added cs locale 2022-12-20 14:33:00 +01:00
repo-visualizer 92d12915de 💛 Updates repo diagram 2022-12-18 01:29:16 +00:00
Alicia Bot aea271a61c 💙 Makes author list 2022-12-18 01:28:15 +00:00
Alicia Bot 805a8bcea1 💙 Updates contributor SVG 2022-12-18 01:28:09 +00:00
liss-bot cb0bc80dd1 💛 Updates sponsors table 2022-12-18 01:28:00 +00:00
liss-bot 857886ab76 💜 Updates contributors list 2022-12-18 01:27:59 +00:00
repo-visualizer 8e71ee73e8 💛 Updates repo diagram 2022-12-11 01:30:24 +00:00
Alicia Bot 6071ca5b1b 💙 Makes author list 2022-12-11 01:29:06 +00:00
Alicia Bot 34b6637b74 💙 Updates contributor SVG 2022-12-11 01:29:01 +00:00
liss-bot e5104a11d9 💛 Updates sponsors table 2022-12-11 01:28:59 +00:00
liss-bot 92aa9643d8 💜 Updates contributors list 2022-12-11 01:28:57 +00:00
Alicia Sykes 5711790b1a
🔀 Merge pull request #1008 from Lissy93/FEATURE/static-widget-update
[FEATURE] Image widget update functionality
Fixes #992
2022-12-10 18:53:20 +00:00
Alicia Sykes 94ce53f80b 📄 Adds docs for image widget dimensions 2022-12-10 18:37:18 +00:00
Alicia Sykes bb8419f077 Improved update support for iframe widget, plus shows loader (#992) 2022-12-10 18:34:10 +00:00
Alicia Sykes f00132d4a3 Adds support for dimensions on Image Widget 2022-12-10 17:36:11 +00:00
Alicia Sykes 71291c1ce9 Adds update support to image widget (#992) 2022-12-09 20:55:49 +00:00
repo-visualizer 286131bec9 💛 Updates repo diagram 2022-12-04 01:30:04 +00:00
Alicia Bot e7423c03ea 💙 Makes author list 2022-12-04 01:28:47 +00:00
Alicia Bot 1141f5f2d7 💙 Updates contributor SVG 2022-12-04 01:28:39 +00:00
liss-bot 01bf72c0f2 💛 Updates sponsors table 2022-12-04 01:28:33 +00:00
liss-bot 8c9987b090 💜 Updates contributors list 2022-12-04 01:28:32 +00:00
snyk-bot e01165ade5
fix: upgrade simple-icons from 7.17.0 to 7.19.0
Snyk has created this PR to upgrade simple-icons from 7.17.0 to 7.19.0.

See this package in npm:


See this project in Snyk:
https://app.snyk.io/org/lissy93/project/564ca11b-8665-48b8-befa-ccd607c3e09a?utm_source=github&utm_medium=referral&page=upgrade-pr
2022-12-01 06:30:03 +00:00
Alicia Sykes 6ee0097152
🐳 Temp remove Azure Registry from Docker build 2022-11-27 21:08:37 +00:00
Alicia Sykes 3f81acd47e
📝 Updates hyperlink to dashboard-icons 2022-11-27 16:04:45 +00:00
Alicia Sykes 8a6ffce179
🔀 Merge pull request #986 from jrobles98/patch-1
Update new pricing policy of Heroku
2022-11-27 11:37:08 +00:00
jrobles98 6f1320449d
Update new pricing policy of Heroku 2022-11-27 12:27:07 +01:00
repo-visualizer 049bcb1786 💛 Updates repo diagram 2022-11-27 01:31:00 +00:00
Alicia Bot 7f7feb4bfa 💙 Makes author list 2022-11-27 01:29:14 +00:00
Alicia Bot 1dc37a10b6 💙 Updates contributor SVG 2022-11-27 01:29:05 +00:00
liss-bot b79f9ade41 💜 Updates contributors list 2022-11-27 01:29:00 +00:00
Alicia Sykes 475a9a1469
🔀 Merge pull request #982 from Totto16/master
- Clock Widget: fix bug, better default Handling for:  use12Hour, showSeconds
2022-11-26 00:44:30 +00:00
Totto16 74370ac557
👌 Code review : implemented the requested changes 2022-11-23 22:41:39 +01:00
Alicia Sykes 77aee8b0ee
🔀 Merge pull request #958 from lordpansar/master
Updated docs + fixed typos
2022-11-23 21:33:06 +00:00
Totto16 96684f57c8
- fixed small bug, that I forgot to port from the previous implementation 2022-11-22 10:58:14 +01:00
Totto16 becb50dc58
update documentation regarding the change 2022-11-22 10:46:31 +01:00
Totto16 49334ae3c1
- Clock Widget: fix bug, better default Handling for:
use12Hour, showSeconds
2022-11-22 10:41:42 +01:00
repo-visualizer 5d5dd0a50e 💛 Updates repo diagram 2022-11-20 01:30:52 +00:00
Alicia Bot 80784d8d8f 💙 Makes author list 2022-11-20 01:30:19 +00:00
Alicia Bot 559adbb458 💙 Updates contributor SVG 2022-11-20 01:30:09 +00:00
liss-bot 331004c18a 💛 Updates sponsors table 2022-11-20 01:30:06 +00:00
liss-bot e08e1642b6 💜 Updates contributors list 2022-11-20 01:30:05 +00:00
repo-visualizer 17ab10bc92 💛 Updates repo diagram 2022-11-13 01:30:23 +00:00
Alicia Bot c7d2ec8dfe 💙 Makes author list 2022-11-13 01:29:23 +00:00
liss-bot aaf690c05d 💛 Updates sponsors table 2022-11-13 01:29:11 +00:00
liss-bot bb137fd93f 💜 Updates contributors list 2022-11-13 01:29:09 +00:00
Alicia Sykes 8a55fc3bf2
🔀 Merge pull request #940 from bskim45/patch-1
Update Korean translations
2022-11-12 16:50:54 +00:00
repo-visualizer 23e4b8b859 💛 Updates repo diagram 2022-11-06 01:31:37 +00:00
Alicia Bot 36679b4b1b 💙 Makes author list 2022-11-06 01:30:34 +00:00
Alicia Bot 7d3bb8f9ce 💙 Updates contributor SVG 2022-11-06 01:30:29 +00:00
liss-bot ccb184e033 💛 Updates sponsors table 2022-11-06 01:30:22 +00:00
liss-bot c19bdbf1b9 💜 Updates contributors list 2022-11-06 01:30:21 +00:00
Alicia Sykes e8b30b9c25
🔀 Merge pull request #926 from dkyeremeh/subdomain-favicon
Allow favicons for subdomains
2022-10-30 16:08:21 +00:00
Alicia Sykes 0eca672c68
🔀 Merge pull request #966 from Lissy93/feature/925_default-icons
[FEATURE] Adds option for default icon
Fixes #925
2022-10-30 14:08:17 +00:00
Alicia Sykes 4d3a25c1bd 🩹 Replaces width fill-availible with stretch 2022-10-30 13:55:27 +00:00
Alicia Sykes 9f07ba0843 🗃 Adds defaultIcon to schema and config list (#925) 2022-10-30 13:53:26 +00:00
Alicia Sykes 3cde47c7b7 📝 Adds docs for using appConfig.defaultIcon (#925) 2022-10-30 13:51:21 +00:00
Alicia Sykes d7d5c0291c Adds option for default icon (#925) 2022-10-30 13:41:48 +00:00
repo-visualizer 71c4936be4 💛 Updates repo diagram 2022-10-30 01:32:44 +00:00
Alicia Bot a903bebc14 💙 Makes author list 2022-10-30 01:31:11 +00:00
liss-bot 0f342629e8 💜 Updates contributors list 2022-10-30 01:30:53 +00:00
Alicia Sykes 20e513a1a5
🔀 Merge pull request #963 from Lissy93/snyk-upgrade-4b92b3e32d0603c1893a3b4bafa48791
[Snyk] Upgrade simple-icons from 7.10.0 to 7.14.0
2022-10-29 21:56:39 +01:00
Alicia Sykes 43c2dfc3d4
🔀 Merge pull request #964 from thomasdissert/patch-1
Fixed comment describing healthcheck
2022-10-29 21:54:25 +01:00
Thomas Dissert 5d11c58ac4
fixed the comment a bit more 2022-10-28 09:55:54 +02:00
Thomas Dissert b658d94adc
Fixed comment describing healthcheck 2022-10-28 09:43:38 +02:00
snyk-bot 79cc7cb06e
fix: upgrade simple-icons from 7.10.0 to 7.14.0
Snyk has created this PR to upgrade simple-icons from 7.10.0 to 7.14.0.

See this package in npm:


See this project in Snyk:
https://app.snyk.io/org/lissy93/project/564ca11b-8665-48b8-befa-ccd607c3e09a?utm_source=github&utm_medium=referral&page=upgrade-pr
2022-10-28 06:22:58 +00:00
Alicia Sykes ba3ce9cb9d
🔀 Merge pull request #955 from DawidPietrykowski/FIX/950_widget-width
Added css width declaration for other browsers
2022-10-25 20:59:57 +01:00
Magnus Sundström 98bc738c55
Fixed typos in en.json 2022-10-23 19:42:57 +02:00
Magnus Sundström c25572612e
Added danish to list of supported languages 2022-10-23 19:34:40 +02:00
repo-visualizer b498d8d0d5 💛 Updates repo diagram 2022-10-23 01:31:05 +00:00
Alicia Bot 436f84f657 💙 Makes author list 2022-10-23 02:30:12 +01:00
Alicia Bot b5ae84340b 💙 Updates contributor SVG 2022-10-23 02:29:54 +01:00
liss-bot ad07ba9fc4 💜 Updates contributors list 2022-10-23 02:29:48 +01:00
Alicia Sykes c05d80bb6f
🔀 Merge pull request #945 from lordpansar/master
Update sv.json + add danish locale
2022-10-22 18:11:20 +01:00
Dawid Pietrykowski 6be5917ced Added css width declaration for other browsers 2022-10-20 16:57:37 +02:00
Magnus Sundström c8de78adf0
Registered danish locale 2022-10-17 08:56:43 +02:00
Magnus Sundström 9b2e8bfbc5
Merge branch 'Lissy93:master' into master 2022-10-17 08:53:32 +02:00
repo-visualizer d60152b719 💛 Updates repo diagram 2022-10-16 01:31:25 +00:00
Alicia Bot 48a100f65c 💙 Makes author list 2022-10-16 02:30:14 +01:00
liss-bot 21f51b1054 💛 Updates sponsors table 2022-10-16 02:30:13 +01:00
liss-bot 271b79db3f 💜 Updates contributors list 2022-10-16 02:30:11 +01:00
Magnus Sundström 91f862836d
Create da.json 2022-10-15 21:42:41 +02:00
Magnus Sundström 19b478617f
Update sv.json
Fixed typos and grammatical errors
2022-10-14 22:03:15 +02:00
Bumsoo Kim 9e013a7a95
Update Korean translation 2022-10-11 01:21:40 +09:00
Alicia Sykes 29eb5d8545
🔀 Merge pull request #934 from rtm516/feature/12h-clock
Add 12 hour option to clock widget
2022-10-09 21:41:59 +01:00
repo-visualizer 502af5b651 💛 Updates repo diagram 2022-10-09 01:32:03 +00:00
Alicia Bot f1a3721a5f 💙 Makes author list 2022-10-09 02:30:26 +01:00
rtm516 b48a341cdd
Add 12 hour option to clock widget 2022-10-08 21:42:15 +01:00
repo-visualizer 29814a9fec 💛 Updates repo diagram 2022-10-02 01:32:30 +00:00
Alicia Bot 21061e982f 💙 Makes author list 2022-10-02 02:31:47 +01:00
Desmond Kyeremeh fe6989cab4 Allow favicons for subdomains 2022-09-29 15:03:56 +00:00
Alicia Sykes c0836acc5e 😆 Change order of served up files, fixes everything :) 2022-09-25 19:44:40 +01:00
repo-visualizer 2ee9534b59 💛 Updates repo diagram 2022-09-25 01:31:41 +00:00
Alicia Bot f8271b26eb 💙 Makes author list 2022-09-25 02:30:02 +01:00
Alicia Bot d34aae35a2 💙 Updates contributor SVG 2022-09-25 02:29:53 +01:00
liss-bot 02842e6c75 💛 Updates sponsors table 2022-09-25 02:29:48 +01:00
liss-bot 5ac0a6bcf5 💜 Updates contributors list 2022-09-25 02:29:47 +01:00
Alicia Sykes 723da99d58
🔀 Merge pull request #900 from Cereal916/disableConfigurationForNonAdmin
Add config option to disable all UI config features for non admin users.
2022-09-18 20:51:11 +01:00
Alicia Sykes e1d9f85aa0
🏷️ Keep at 2.1.1 2022-09-18 20:49:40 +01:00
Alicia Bot 49954b9f08 💙 Makes author list 2022-09-18 02:33:55 +01:00
Alicia Bot a8714a1a02 💙 Updates contributor SVG 2022-09-18 02:33:41 +01:00
liss-bot 1992111a48 💛 Updates sponsors table 2022-09-18 02:33:38 +01:00
liss-bot 7d0d97148e 💜 Updates contributors list 2022-09-18 02:33:37 +01:00
repo-visualizer 49f8199764 💛 Updates repo diagram 2022-09-18 01:32:40 +00:00
kristian 6c3e45c362 bump version 2022-09-11 16:19:30 -07:00
kristian 6d644f5459 Add config option to disable all UI config features for non admin users. 2022-09-11 16:12:10 -07:00
Alicia Sykes 4a90a9de65
🔀 Merge pull request #899 from AmadeusGraves/master
Update Spanish Translation
2022-09-11 22:46:37 +01:00
Alicia Sykes 5f96b6ccf8
🔀 Merge pull request #871 from AaronPorts/master
IframeWidget min-height reduce to 80px
2022-09-11 22:44:29 +01:00
Alicia Sykes c0677c46ea
🔀 Merge pull request #895 from Smexhy/slovak
Add Slovak language
2022-09-11 22:43:27 +01:00
Alicia Sykes 933fb9c4d7
🔀 Merge pull request #896 from Cereal916/localStorageExploitFix
Set user in localStorage when matching auth token is found. When chec…
2022-09-11 22:41:45 +01:00
Ángel Fernández Sánchez b4b298e959
Update es.json 2022-09-11 16:03:53 +02:00
kristian 46420d4f15 Stop checking users once match is found. 2022-09-10 22:04:17 -07:00
kristian 5a3fbe5672 Set user in localStorage when matching auth token is found. When checking guest access, consider if a username is set. Fixes username local storage exploits. 2022-09-10 21:33:45 -07:00
repo-visualizer ef59eb25f4 💛 Updates repo diagram 2022-09-11 01:31:41 +00:00
Alicia Bot 50b05d845b 💙 Makes author list 2022-09-11 02:30:25 +01:00
Alicia Bot 0c68e90da5 💙 Updates contributor SVG 2022-09-11 02:30:22 +01:00
liss-bot 53060d875b 💛 Updates sponsors table 2022-09-11 02:30:18 +01:00
liss-bot 2b8735897b 💜 Updates contributors list 2022-09-11 02:30:17 +01:00
Smexhy ae2e741f6e
Add Slovak language 2022-09-10 23:47:20 +02:00
Alicia Sykes 32c857504f
🔀 Merge pull request #874 from nealian/update_icons_versions
⬆️ Updates optional external icons
2022-09-10 22:30:20 +01:00
Alicia Sykes edf71fd0ad
🔀 Merge pull request #862 from rubenandre/fix/issue-856
Fix issue #856
2022-09-10 22:18:27 +01:00
Alicia Sykes b965989a98
🔀 Merge pull request #880 from imlonghao/patch-1
Fix widget GlDiskSpace 401 unauth
2022-09-10 21:59:39 +01:00
Alicia Sykes e2fb5fcaf5
🔀 Merge pull request #887 from Cereal916/master
with built in auth, if user adds a capital letter to username they ca…
2022-09-10 21:52:41 +01:00
Alicia Sykes 1046b44c99
🔀 Merge pull request #891 from sur1v/master
Removed build watch and tini from container run-time
2022-09-10 21:46:23 +01:00
Alicia Sykes 89a06afe1a
🔀 Merge pull request #892 from Cereal916/dashyAuthTokenUniqueKey
Make auth cookie key more unique to avoid collisions with other apps …
2022-09-10 20:40:36 +01:00
kristian a9adddc0ce Make auth cookie key more unique to avoid collisions with other apps running on the same server. 2022-09-08 07:33:46 -07:00
sur1v 60d0b0329d removed build watch and tini from container run-time 2022-09-07 16:25:11 +01:00
kristian 9c15314af8 with built in auth, if user adds a capital letter to username they can see all items. 2022-09-05 20:40:56 -07:00
Alicia Sykes 8d300d42a4
🔀 Merge pull request #870 from lxjv/master
fixing dashboard icons link
2022-09-05 09:34:14 +01:00
Alicia Sykes 6fcb31f12a
🔀 Merge pull request #875 from cauterize/feat/public_holidays_widget_state_parameter
 Adds state option for PublicHolidays widget
2022-09-04 23:41:14 +01:00
Alicia Sykes 86b56f6b48
✏️ Small refactor endpoint into single string 2022-09-04 23:38:13 +01:00
Alicia Sykes 830a0f3229
🔀 Merge pull request #885 from maximemoreillon/simple-icons-update
simple-icons update to v7.10.0
2022-09-04 22:52:53 +01:00
Maxime Moreillon d268ca2f91 simple-icons update to v7.10.0 2022-09-04 19:51:26 +09:00
repo-visualizer ba879dc2d7 💛 Updates repo diagram 2022-09-04 01:33:05 +00:00
Alicia Bot 7f51ddf302 💙 Makes author list 2022-09-04 02:32:01 +01:00
liss-bot e724d329c9 💛 Updates sponsors table 2022-09-04 02:31:52 +01:00
liss-bot fe37188eac 💜 Updates contributors list 2022-09-04 02:31:51 +01:00
imlonghao a393da96ce
Fix widget GlDiskSpace 401 unauth 2022-08-31 11:33:07 +08:00
repo-visualizer 9cfc1e3e8b 💛 Updates repo diagram 2022-08-28 01:36:23 +00:00
Alicia Bot 105612bb4a 💙 Updates contributor SVG 2022-08-28 02:31:13 +01:00
Alicia Bot c3efcb7b8d 💙 Makes author list 2022-08-28 02:31:12 +01:00
liss-bot 04d824719f 💛 Updates sponsors table 2022-08-28 02:31:02 +01:00
liss-bot 47a54a5d0f 💜 Updates contributors list 2022-08-28 02:31:01 +01:00
cauterize 38ad08a101 🚨 fix lint warning 2022-08-26 20:18:09 +02:00
cauterize 813c475a9c Adds state option for PublicHolidays 2022-08-25 17:23:32 +02:00
Ian Neal ae8a050337 ⬆️ Updates optional external icons 2022-08-24 20:03:55 -07:00
Artyom 8346d393ce
IframeWidget min-height reduce to 80px 2022-08-24 19:06:50 +03:00
laker j.v 3868f427f5
fixing dashboard icons link 2022-08-24 16:33:16 +01:00
Alicia Sykes 2db398c8b0
📝 Merge pull request #866 from Tracreed/doc-fixes
Reformat documentation
2022-08-23 12:35:08 +01:00
David Alasow 2bf51cd03d Fix missed bolding
Missed to make two headers bold.
2022-08-23 11:42:19 +02:00
David Alasow ca8085c482 Fix various typos
Fixed some typos and capitalization errors. Fixed some more formatting.
Changed file name that contained a typo.
2022-08-23 11:22:47 +02:00
David Alasow 2d731d3ed3 Fix inconsistent markdown formatting.
This changes all of the documentation markdown files to follow
the same rules. The rules I've applied are from
https://github.com/DavidAnson/markdownlint/blob/v0.25.1/doc/Rules.md

The reason I felt it was necessary
to change all the files was
that there were a lot inconsistencies in how the markdown was used.
Ranging from header levels to some headers having a new line before
content and some not.
2022-08-23 09:57:02 +02:00
David Alasow 99463413b1 Fix formatting in documentation
Removed trailing whitespaces and extra newlines. Added some missing
punctuation. Replaced unicode characters that aren't commonly used
with the more common character.

The replaced unicode characters are
- ’ (U+2019) to ' (U+0027)
- “ (U+201C) to " (U+0022)
- ” (U+201D) to " (U+0022)
2022-08-22 17:52:07 +02:00
repo-visualizer bb1e6fa7c9 💛 Updates repo diagram 2022-08-21 01:31:33 +00:00
Alicia Bot 66cb6486a7 💙 Makes author list 2022-08-21 02:30:06 +01:00
liss-bot 714834f1b3 💛 Updates sponsors table 2022-08-21 02:29:52 +01:00
liss-bot 34c337a8e5 💜 Updates contributors list 2022-08-21 02:29:50 +01:00
Rúben Silva bb3492c5f2 fix #856
lint

Revert "lint"

This reverts commit 936e5e1cc0e85fe785a97d55bd1dd1df39b55a28.

lint
2022-08-20 14:41:38 +01:00
Alicia Sykes cdf1bb9529 🚧 WIP 2022-08-19 10:04:38 +01:00
Alicia Sykes 0de29d013c
🔀 Merge pull request #851 from walkxcode/patch-1
🚚 Changes Dashboard Icons URL to new location
Fixes #849
2022-08-16 23:04:12 +01:00
Bjorn Lammers 71e6cf0f3d
🚚 Changes Dashboard Icons URL to new location 2022-08-17 00:00:13 +02:00
Alicia Sykes 8f893c36d7 Removed config dependency from searchbar 2022-08-14 20:32:23 +01:00
repo-visualizer ba1fd77509 💛 Updates repo diagram 2022-08-14 01:32:29 +00:00
Alicia Bot 1290f9057d 💙 Makes author list 2022-08-14 02:31:44 +01:00
liss-bot 9360b34b20 💛 Updates sponsors table 2022-08-14 02:31:42 +01:00
liss-bot 0830615281 💜 Updates contributors list 2022-08-14 02:31:40 +01:00
Alicia Bot 12b3331b17 💙 Updates contributor SVG 2022-08-14 02:31:37 +01:00
Alicia Sykes 99892835d1
📝 Adds another ticket ref to troubleshooting 2022-08-07 15:24:38 +01:00
repo-visualizer 6affa43625 💛 Updates repo diagram 2022-08-07 01:31:23 +00:00
Alicia Bot 3d3c028b7f 💙 Makes author list 2022-08-07 02:29:54 +01:00
liss-bot 18361c3f28 💛 Updates sponsors table 2022-08-07 02:29:44 +01:00
liss-bot 3c525f22e2 💜 Updates contributors list 2022-08-07 02:29:42 +01:00
Alicia Sykes c9cd395313 🔀 Rebase from master 2022-08-06 18:53:48 +01:00
Alicia Sykes 18f6e4d268 🚚 Re-writes all theming functionality. Much better now :) 2022-08-06 18:52:54 +01:00
Alicia Sykes 07a81eb075
🔀 Merge pull request #828 from miclav/bug/periodic-check
Only do periodic check when statuscheck is enabled
2022-08-02 16:53:53 +01:00
Michael 623d4d76ad Only do periodic check when statuscheck is enabled
Before all items were requesting status checks
even if status check wasn't enabled for them
creating lots of request to the backend for no reason
2022-08-02 10:29:44 -04:00
Alicia Sykes 0523c1933e 👔 Updates logic for theming 2022-07-31 13:39:25 +01:00
Alicia Sykes 89cf918b9f
⚒️ Adds troubleshooting for unreachable code (#776)
Closes #776
2022-07-31 07:46:54 +01:00
repo-visualizer 60a1242c42 💛 Updates repo diagram 2022-07-31 01:36:35 +00:00
Alicia Bot 4cec2ab193 💙 Makes author list 2022-07-31 02:32:01 +01:00
Alicia Bot d343f2deec 💙 Updates contributor SVG 2022-07-31 02:31:51 +01:00
liss-bot 2b23e8af41 💛 Updates sponsors table 2022-07-31 02:31:50 +01:00
liss-bot 30147cf886 💜 Updates contributors list 2022-07-31 02:31:49 +01:00
Alicia Sykes 8eb08143be 😑 Neatens store. ihml 2022-07-28 21:10:33 +01:00
Alicia Sykes 81073c4c45
🔄 Merge pull request #819 from PrynsTag/patch-1
rename redhat
2022-07-26 09:57:30 +01:00
Prince Carl Velasco 79fe84d732 📝 rename redhat 2022-07-26 01:16:02 +08:00
Alicia Sykes b0c52b53c9 🚚 Neaten footer code 2022-07-24 14:43:40 +01:00
Alicia Sykes d25de1147c 🔀 Merge branch 'master' of github.com:Lissy93/dashy into REFACTOR/2.1.2_unified-config 2022-07-24 14:29:26 +01:00
repo-visualizer 69dded5e58 💛 Updates repo diagram 2022-07-24 01:32:57 +00:00
Alicia Bot 341dbe0a5e 💙 Makes author list 2022-07-24 02:30:03 +01:00
Alicia Bot 76a89bacef 💙 Updates contributor SVG 2022-07-24 02:29:50 +01:00
liss-bot 5eff45f851 💛 Updates sponsors table 2022-07-24 02:29:46 +01:00
liss-bot f95cfb4e63 💜 Updates contributors list 2022-07-24 02:29:45 +01:00
Alicia Sykes 8588ba5772 🔀 Merge branch 'master' of github.com:Lissy93/dashy into REFACTOR/2.1.2_unified-config 2022-07-23 21:45:19 +01:00
Alicia Sykes 311a1607f8
🔀 Merge pull request #813 from Lissy93/FIX/gluetun-widget-lint
[REFACTOR] Lint, error catching and translations for Gluetun Status Widget
2022-07-23 21:44:43 +01:00
Alicia Sykes ac9d585a17 💬 Makes hard-coded text translatable 2022-07-23 14:50:48 +01:00
Alicia Sykes 37954eaeb0 🥅 Catches errors if caused by undefined options 2022-07-23 14:42:26 +01:00
Alicia Sykes ad9df7a67c 🚨 Fix lint errors in Gluetun widget 2022-07-23 14:33:23 +01:00
Alicia Sykes fc09c1d73d
🔀 Merge pull request #812 from Lissy93/snyk-upgrade-86220b195bbb3d2e88bca3a0493ba027
[Snyk] Upgrade vue from 2.6.14 to 2.7.0
2022-07-23 14:29:16 +01:00
Alicia Sykes 57be9d20e2 ⬆ Updates vue and vue-template-compiler to 2.7.0 2022-07-23 14:24:55 +01:00
Alicia Sykes b025fdfb58
📝 Adds troubleshooting for widget inaccurate info 2022-07-23 13:05:45 +01:00
snyk-bot 4705bedc2d
fix: upgrade vue from 2.6.14 to 2.7.0
Snyk has created this PR to upgrade vue from 2.6.14 to 2.7.0.

See this package in npm:


See this project in Snyk:
https://app.snyk.io/org/lissy93/project/564ca11b-8665-48b8-befa-ccd607c3e09a?utm_source=github&utm_medium=referral&page=upgrade-pr
2022-07-23 04:25:08 +00:00
Alicia Sykes efa49a5b25 Merge branch 'master' of github.com:Lissy93/dashy into REFACTOR/2.1.2_unified-config 2022-07-21 22:47:04 +01:00
Alicia Sykes e663fb7639
🔀 Merge pull request #808 from jammo2k5/master
 Gluetun VPN Container Status Widget.
2022-07-21 22:42:37 +01:00
Jammo2k5 4b5dc05c28 Refactor toggles to reduce variable count 2022-07-21 10:02:59 +01:00
Jammo2k5 19e312b777 Fixed image link again... 2022-07-20 22:49:10 +01:00
Jammo2k5 53e3082dc2 Changed image host of Widget Docs 2022-07-20 22:46:31 +01:00
Jammo2k5 bbfe9a9def Fix line feed issues in WidgetBase.vue and removed unused imports in GluetunStatus.vue 2022-07-20 22:38:29 +01:00
Jammo2k5 74fc7419da fix file permissions 2022-07-20 22:20:50 +01:00
Jammo2k5 8d22d88471 added gluetun service status widget 2022-07-20 22:08:30 +01:00
Alicia Sykes 88568e8435 Merge branch 'master' of github.com:Lissy93/dashy into REFACTOR/2.1.2_unified-config 2022-07-19 13:16:01 +01:00
Alicia Sykes 55bde6c78a
📝 Updates link to APOD API
The previous one, PawelPleskaczynski/apod_api is no longer opperational.
I've re-written it at https://github.com/lissy93/go-apod
2022-07-17 22:41:35 +01:00
Alicia Sykes bb01612f1a
Emphasizes read docs first 2022-07-17 13:57:15 +01:00
Alicia Sykes b2ab89ad5a
📝 Adds even more info under weather widget 401 (#803) 2022-07-17 13:14:25 +01:00
repo-visualizer 3402f122db 💛 Updates repo diagram 2022-07-17 01:32:34 +00:00
Alicia Bot feee716d59 💙 Makes author list 2022-07-17 02:30:19 +01:00
liss-bot 38d317c505 💛 Updates sponsors table 2022-07-17 02:30:12 +01:00
liss-bot 409aaf6f10 💜 Updates contributors list 2022-07-17 02:30:09 +01:00
Alicia Sykes deb055b9bc 🚧 Fetch use root config in store (#799) 2022-07-16 16:39:27 +01:00
Alicia Sykes 6be38b9f58 Work in progress, config re-write (#799) 2022-07-15 20:03:55 +01:00
Alicia Sykes e9ff44ac91
🔀 Merge pull request #795 from Lissy93/snyk-upgrade-1fed6dffb9733f101358025654a8e828
[Snyk] Upgrade vue-i18n from 8.27.1 to 8.27.2
2022-07-12 13:47:59 +01:00
snyk-bot 5bedc6fbac
fix: upgrade vue-i18n from 8.27.1 to 8.27.2
Snyk has created this PR to upgrade vue-i18n from 8.27.1 to 8.27.2.

See this package in npm:


See this project in Snyk:
https://app.snyk.io/org/lissy93/project/564ca11b-8665-48b8-befa-ccd607c3e09a?utm_source=github&utm_medium=referral&page=upgrade-pr
2022-07-12 04:31:26 +00:00
Alicia Sykes f3bdcef019
🔀 Merge pull request #790 from alucarddelta/FEATURE/widget-sabnzbd
Feature/widget Sabnzbd
2022-07-10 15:20:42 +01:00
Alucarddelta 6c2a707287 SonarCloud correction, i > em 2022-07-10 22:54:52 +10:00
Alucarddelta 8d33d91362 noofslots_total swapped to noofslots 2022-07-10 22:18:57 +10:00
Alucarddelta b10a88b022 Sabnzbd Widget 2022-07-10 21:36:43 +10:00
repo-visualizer 963fe5d3f8 💛 Updates repo diagram 2022-07-10 03:07:53 +00:00
Alicia Bot abf3af4b47 💙 Makes author list 2022-07-10 04:06:09 +01:00
liss-bot 4c19b1a873 💛 Updates sponsors table 2022-07-10 04:05:58 +01:00
liss-bot bb1b8d2d9e 💜 Updates contributors list 2022-07-10 04:05:57 +01:00
Alicia Sykes cb74ce9c77
🔀 Merge pull request #788 from BRAVO68WEB/fix/disk-calc
Fix storage calculation
2022-07-08 13:32:13 +01:00
Jyotirmoy Bandyopadhayaya 19ed765a82 Fix storage calculation 2022-07-08 15:49:11 +05:30
Alicia Sykes 6ba7d6d918
🔀 Merge pull request #785 from flechaig/patch-1
Allow specifying a host on which to listen even with SSL
2022-07-07 18:09:01 +01:00
Alicia Sykes bd759d63fd
️ Moves host variable below imports 2022-07-07 18:05:34 +01:00
flechaig b4db66f339
Allow specifying a host on which to listen even with SSL
Allow specifying a host on which to listen even with SSL
Grab the IP address from the HOST environment variable and use it to bind the SSL server.
Default to 0.0.0.0
IPv6 compliant.
2022-07-07 17:05:47 +02:00
Alicia Sykes 6f7c89deeb
🔀 Merge pull request #784 from XenonR/master
Update de.json
2022-07-06 14:31:36 +01:00
Steffen Schmidt dfc3b5aa8b
Update de.json
Extend and improve german translation
2022-07-06 15:07:01 +02:00
repo-visualizer 773e1076bf 💛 Updates repo diagram 2022-07-03 01:32:29 +00:00
Alicia Bot 7f8d78c52b 💙 Updates contributor SVG 2022-07-03 02:31:10 +01:00
Alicia Bot 97ee994b37 💙 Makes author list 2022-07-03 02:31:10 +01:00
liss-bot 6bd3a094df 💛 Updates sponsors table 2022-07-03 02:31:00 +01:00
liss-bot 4967719a58 💜 Updates contributors list 2022-07-03 02:30:59 +01:00
Alicia Sykes be5a573185
🔀 Merge pull request #703 from Lissy93/snyk-upgrade-73876dee0790b4ec283dc703784f7468
[Snyk] Upgrade axios from 0.25.0 to 0.27.2
2022-07-02 23:13:01 +01:00
Alicia Sykes edc6f19ab7
🔀 Merge pull request #779 from Lissy93/FEATURE/widget-labeld
[FEATURE] Option for labeled widgets
Closes #769
2022-07-02 22:51:05 +01:00
Lissy93 43239586a6 📝 Adds widget.label to configuring docs 2022-07-02 22:36:02 +01:00
Lissy93 869a5993e8 📝 Adds docs for widget labels (#769) 2022-07-02 22:29:06 +01:00
Lissy93 eff49995b9 Adds option for widget labels (#769) 2022-07-02 22:28:39 +01:00
Lissy93 4210c985b7 🎨 Adds section-specific class names (#769) 2022-07-02 22:28:09 +01:00
Alicia Sykes 113f31a93a
🔀 Merge pull request #775 from Lissy93/REFACTOR/widget-and-docs-improvments
[REFACTOR] Fix themes and widget improvements
2022-07-01 19:00:33 +01:00
Alicia Sykes 338fbbfc56 🔖 Bumps to 2.1.1 and updates changelog 2022-07-01 18:55:42 +01:00
Alicia Sykes 263c5f2c36 🌟 Adds @Dipanghosh's awesome dashboard (#777) 2022-07-01 18:32:47 +01:00
Alicia Sykes 4d38f71c9f 📝 Updates troubleshooting guide 2022-07-01 18:31:56 +01:00
Alicia Sykes eba0c41287 🍱 Update and remove some PWA assets (#679) 2022-07-01 18:31:29 +01:00
Alicia Sykes d9884e64e8 🔀 Merge branch 'master' of github.com:Lissy93/dashy into REFACTOR/widget-and-docs-improvments 2022-07-01 15:37:58 +01:00
Alicia Sykes cc0287d129
:octocat: Updates issue template 2022-07-01 15:36:07 +01:00
Alicia Sykes 6dfec528af
:octocat: Update bug template 2022-07-01 15:30:39 +01:00
Alicia Sykes cc80e6812c 🩹 Fixes status check z-index (#719)
Fixes #719
2022-07-01 14:27:17 +01:00
Alicia Sykes ebf9c1f91a 🐛 Fixes applying local themes to multi-pages (#774) 2022-06-30 23:21:48 +01:00
Alicia Sykes a2442c7349 🐛 Fixes theme not updated (#774) 2022-06-30 18:22:26 +01:00
Alicia Sykes 7e861b71ae 🌟 Adds @Dipanghosh's awesome dashboard (#777)
Closes #777
2022-06-30 16:50:01 +01:00
Alicia Sykes 685c949421 🌟 Reshiffle 2022-06-30 16:40:57 +01:00
Alicia Sykes 9235123f10 🔀 Merge branch 'master' of github.com:Lissy93/dashy into REFACTOR/widget-and-docs-improvments 2022-06-30 15:00:51 +01:00
Alicia Sykes 2daabed9dd
📝 Adds Reset Local Settings to Troubleshooting 2022-06-29 13:36:19 +01:00
Alicia Sykes 7ab32858e2
🔀 Merge pull request #767 from marekful/FIX/stop-status-checks
🩹 Stop status-check when Item is destroyed
2022-06-26 20:27:15 +01:00
Alicia Sykes b876fa10af
🔀 Merge pull request #766 from dougaldhub/FEATURE/improve-tfl-widget
Update TFL Status Widget to include Elizabeth Line/Tram/DLR/Overground
2022-06-26 20:26:11 +01:00
Marcell Fülöp 736f0e95ed 🩹 Stop status-check when Item is destroyed 2022-06-26 17:25:08 +00:00
Doug Lock 4b65fedfe4 Update tflStatus API endpoint to include all modes of transport from the "normal" TFL status updates page here: https://tfl.gov.uk/tube-dlr-overground/status/ 2022-06-26 17:12:57 +01:00
Alicia Bot f9195ac33a 💙 Makes author list 2022-06-26 02:34:55 +01:00
Alicia Bot 5c81d53606 💙 Updates contributor SVG 2022-06-26 02:34:49 +01:00
repo-visualizer cb80dd195c 💛 Updates repo diagram 2022-06-26 01:31:06 +00:00
Alicia Sykes 138ea8bd01
📝 Expands on the 404 fix 2022-06-25 21:14:26 +01:00
Alicia Sykes 51f6e30026
🔀 Merge pull request #760 from marekful/FIX/start-ssl-on-slow-filesystem
🩹 Ensure stat finished before startSSLServer()
2022-06-25 00:00:11 +01:00
Marcell Fülöp 91d4fd55c0 🩹 Ensure stat finished before startSSLServer()
The two chained stat() promises may not have finished by the time
`enableSSL` is evaluated in case of a slow file system (e.g. on a
Raspberry Pi where the only block device is an SD card).
2022-06-24 19:36:00 +00:00
Alicia Sykes a3a26ce063
🔀 Merge pull request #759 from patrickheeney/FIX/Improve-Failed-Load
🩹 Handle failed component load.
2022-06-24 17:12:36 +01:00
patrickheeney 542a9fe9bd 🩹 Handle failed component load. 2022-06-24 08:00:50 -07:00
Alicia Sykes a877ff2f8e
🔀 Merge pull request #758 from patrickheeney/FEATURE/Improve-Widget-Base
 Remove component repetition
2022-06-24 14:23:17 +01:00
patrickheeney 4c87092be5 Remove component repetition 2022-06-23 20:02:19 -07:00
Alicia Sykes 90163dd612
🔀 Merge pull request #752 from marekful/FEATURE/page-theme-override
 Allow pages to override theme
2022-06-23 12:17:57 +01:00
Alicia Sykes 7bb66953d1
🔀 Merge pull request #751 from marekful/FIX/nextcloudstats-and-phpopcache-style-fix
🩹 Add back some styling
2022-06-22 18:40:02 +01:00
Marcell Fülöp 2933df20dd Allow pages to override theme 2022-06-22 17:13:42 +00:00
Alicia Sykes 4172512e88 🎨 Updates color vars for Material theme (#744) -m Fixes #744 2022-06-21 21:09:50 +01:00
Marcell Fülöp f21f44ce21 🩹 Add back some styling
These weren't correctly updated afeter the style refactor
(Stats and PhpOpcache widgets).
2022-06-21 19:22:01 +00:00
Alicia Sykes 0674ad8fe8
🔀 Merge pull request #745 from k073l/FEATURE/735_apod_update
Replace APOD API with new one
Fixes #735
2022-06-21 14:30:24 +01:00
k073l 45900da025 💄 Update Apod.vue to new API 2022-06-21 14:13:24 +02:00
k073l bbb0f16ead
Change APOD API endpoint 2022-06-21 13:02:26 +02:00
Alicia Sykes dbb261c859
🔀 Merge pull request #740 from marekful/FEATURE/nextcloud-widgets
Feature/nextcloud widgets
Credit to @marekful
2022-06-20 21:34:32 +01:00
Marcell Fülöp c9cd8da2d9 💄 Missed style update 2022-06-20 18:59:47 +00:00
Marcell Fülöp 2ee853d33f 📝 Add widget documentation 2022-06-20 18:49:22 +00:00
Marcell Fülöp f00b76299d 💄 Facelifto 2022-06-20 18:43:29 +00:00
Marcell Fülöp 278a6fc7b7 ♻️ Style optimisation + minor refactor
- use consistent css units
- replace hard-coded color values with variables
- update disk quota chart render (to allow for variable colors)
- small style update to the notifications widget
2022-06-20 17:42:45 +00:00
Marcell Fülöp 7d8d3078b2 🔒 Feed input through parseFlot() as means of sanitisation 2022-06-20 17:38:23 +00:00
Marcell Fülöp ee46f2a33e ♻️ Simplify expressiono 2022-06-19 21:04:29 +00:00
Marcell Fülöp 168fe94391 ♻️ Remove MiscHelpers direct dependency 2022-06-19 21:01:59 +00:00
Alicia Sykes 6443d5b6c0
🔁 Merge pull request #741 from markusdd/fix-TLDR-doc
Update readme.md - fix TDLR to TLDR ;)
2022-06-19 20:28:08 +01:00
Markus Krause 6cddee4f8c
Update readme.md
it ain't much, but it's honest work ;)
2022-06-19 19:38:17 +02:00
Marcell Fülöp 3ac0585c5c 🩹 Address Sonar code smell report findings 2022-06-19 16:47:40 +00:00
Marcell Fülöp cf25dbce4a Remove unnecessary null check 2022-06-19 16:39:46 +00:00
Marcell Fülöp 991cf0bf5a 🩹 Move schema to Component.data + remove unnecessary null checks 2022-06-19 16:31:54 +00:00
Marcell Fülöp db0fc0454d 🔥 Remove references to mock data 2022-06-19 16:20:16 +00:00
Marcell Fülöp 4b930939c7 ✏️ Fix typo in translation 2022-06-19 15:21:38 +00:00
Marcell Fülöp 4c015bb25d Add limit option for NextcloudNotifications widget
Limit displayed notifications either by count or by age.
An integer value is interpeted as count limit, a number suffixed
with 'm', 'h' or 'd' is converted to minutes, hours or days,
respectively, and older notifications are not shown.
2022-06-19 13:51:40 +00:00
Marcell Fülöp e76f552830 Add showEmpty option for NextcloudUserStatus widget
When a user status doesn't include a status message, it still
may have a status emoji and it always has a status indicator
(e.g. online). When {showEmpty=true} then statuses without
a message are shown, otherwise hidden. Defaults to {false}.
2022-06-19 13:39:23 +00:00
Marcell Fülöp 821af62426 🚧 Refactor + more widgets
* ♻️ segment into smaller widgets, improve mixin
* ♻️ change NextcloudInfo to NextcloudUser
  * a small widget showing branding and uesr info, including quota
*  add NextcloudNotifications widget
  * show and delete Nextcloud notifications
*  add NextcloudUserStatus widget
  * display user statuses of selected users
*  add NextcloudStats widget (admin only)
  * display Nextcloud usage statistics (users, files, shares)
*  add NextcloudSystem widget (admin only)
  * visualise cpu load and memory utilisation, show server versions
*  add NextcloudPhpOpcache widget (admin only)
  * show statistics about php opcache performance
*  add a misc helper for formatting nunbers
* 🌐 add translations to widget templates
* 🌐 add translation entries for en
* 🍱 add scss styles file, shared by all widgets
2022-06-19 12:06:43 +00:00
repo-visualizer 10bfacb492 💛 Updates repo diagram 2022-06-19 01:33:48 +00:00
Alicia Bot 752a00bbb3 💙 Makes author list 2022-06-19 02:29:20 +01:00
Alicia Bot 3ef80fc132 💙 Updates contributor SVG 2022-06-19 02:29:18 +01:00
liss-bot 8c416bde24 💛 Updates sponsors table 2022-06-19 02:29:12 +01:00
liss-bot 192312e11f 💜 Updates contributors list 2022-06-19 02:29:12 +01:00
Marcell Fülöp a43988f3cd 🚧 Move user processing from widget to mixin
plus
* some template and style tweaking
* improve tooltips
* enforce Nextcloud app-password instead of login password
2022-06-12 12:33:56 +00:00
repo-visualizer ab83d124bd 💛 Updates repo diagram 2022-06-12 01:33:59 +00:00
Alicia Bot ec6207d4e0 💙 Makes author list 2022-06-12 02:30:09 +01:00
Alicia Bot 28f667ba74 💙 Updates contributor SVG 2022-06-12 02:29:58 +01:00
liss-bot 0d71fd818c 💛 Updates sponsors table 2022-06-12 02:29:54 +01:00
liss-bot 07bf39af45 💜 Updates contributors list 2022-06-12 02:29:53 +01:00
Marcell Fülöp caf131df23 🎨 Add HTML comments 2022-06-12 01:10:14 +00:00
Marcell Fülöp ff1bcdbab8 🩹 Handle plural/singular for availabel updates 2022-06-12 00:18:17 +00:00
Marcell Fülöp 0bf6fee180 🎉 Add Nextcloud widget
Add a widget supporting the `capabilites`, `user`
and `serverinfo` Nextcloud APIs.

Basic branding, user and quota information is always displayed
and when the provided credentials are for and admin user then
server information is also displayed.

APIs:
* [capabilities](https://docs.nextcloud.com/server/latest/developer_manual/client_apis/OCS/ocs-api-overview.html#capabilities-api)
* [user](https://docs.nextcloud.com/server/latest/developer_manual/client_apis/OCS/ocs-api-overview.html#user-metadata)
* [serverinfo](https://github.com/nextcloud/serverinfo)
2022-06-11 23:41:40 +00:00
Alicia Sykes 9786c8b554
🤖 Updates bot action for new users 2022-06-11 21:24:19 +01:00
Alicia Sykes e24fa10f0f ↪ REVERT: Heroku set OpenSSL Provider (#723) 2022-06-11 14:21:53 +01:00
Alicia Sykes da72f680b3 🏗 Heroku set OpenSSL Provider (#723) 2022-06-11 14:16:22 +01:00
Alicia Sykes b10b587442 🏗 Updates Heroku build files (#723) 2022-06-11 14:06:31 +01:00
Alicia Sykes 330d812bfd
🛡️ Deletes rogue font import (#521) 2022-06-10 14:36:17 +01:00
Alicia Sykes 2ef5b66e9e 🥅 Adds an option to surpress widget errors 2022-06-09 01:26:45 +01:00
Alicia Sykes 9faab35a57
🔀 Merge pull request #714 from marekful/FEATURE/StatPing-widget-group-filter-and-compact-view
 Optionally allow StatPing widget to filter on group
2022-06-08 23:35:30 +01:00
Marcell Fülöp 2d6c499192 Optionally allow the widget to filter on StatPing Group and to display in a more compact view.
* Add widget option: `groupId`. StatPing services are filtered for the given group.
* Add widget options: `showChart` and `showInfo`. Initially hide the chart and info summary.
* Add buttons to show/hide chart and info sections.
* Update widget documentation.
2022-06-08 19:50:15 +00:00
Alicia Sykes ee27dc8a1a
🔀 Merge pull request #711 from boggy-cs/master
Add Korean translations
2022-06-08 15:28:22 +01:00
Alicia Sykes 41fd411769
💡 Just updates comment Bulgarian --> Korean 2022-06-08 15:25:46 +01:00
bogyeong 8a703cf434 edit languages.js
translation complete
2022-06-08 18:57:29 +09:00
bogyeong 814a8a73c3 Translate complete 2022-06-08 18:46:44 +09:00
bogyeong e51464cf01 Create ko.json
file creation for korean language_support
2022-06-08 17:32:40 +09:00
Alicia Sykes 1114f7d243
🔁 Merge pull request #705 from pablomalo/patch-1
Fix typo in management.md
2022-06-06 23:19:20 +01:00
pablomalo aad252e3d4
Fix typo in management.md
hare => are
2022-06-06 20:34:49 +02:00
snyk-bot 97b25080e0
fix: upgrade axios from 0.25.0 to 0.27.2
Snyk has created this PR to upgrade axios from 0.25.0 to 0.27.2.

See this package in npm:


See this project in Snyk:
https://app.snyk.io/org/lissy93/project/564ca11b-8665-48b8-befa-ccd607c3e09a?utm_source=github&utm_medium=referral&page=upgrade-pr
2022-06-06 02:51:19 +00:00
Alicia Sykes 1777a00bc5
🔀 Merge pull request #702 from zcq100/master
Update Chinese translation.
2022-06-05 16:13:36 +01:00
zcq100 9085c105b8
Update Chinese translation. 2022-06-05 22:32:02 +08:00
repo-visualizer fdfe9cd3a0 💛 Updates repo diagram 2022-06-05 01:32:00 +00:00
Alicia Bot f91e232a2b 💙 Makes author list 2022-06-05 02:29:41 +01:00
Alicia Bot 43f26f51c5 💙 Updates contributor SVG 2022-06-05 02:29:39 +01:00
liss-bot f6a42fa44a 💛 Updates sponsors table 2022-06-05 02:29:31 +01:00
liss-bot b720f59e8e 💜 Updates contributors list 2022-06-05 02:29:30 +01:00
Alicia Sykes b98b85dd50
🔀 🇧🇬 Merge pull request #701 from asenov/bg-translation
Add 🇧🇬  Bulgarian translations
2022-06-04 22:10:55 +01:00
Alicia Sykes e451f86e3e
🔀 Merge pull request #685 from Lissy93/FEATURE/minor-improvments-2.1.0
[FEATURE] AdGuard Widget and QoL Improvments

Closes #493
Closes #669
Closes #680
Closes #681
Closes #682
Closes #688
2022-06-04 21:41:43 +01:00
Alicia Sykes 9575090d5c 🔖 Bumps to 2.1.0 and updates changelog 2022-06-04 21:36:07 +01:00
Alicia Sykes 36eccc2c64 📌 Updates yarn.lock 2022-06-04 21:31:00 +01:00
Alicia Sykes 86f08926b6 🙄 Resolves conflicts 2022-06-04 21:28:44 +01:00
Alicia Sykes 6ad582b469 📌 Updates yarn.lock 2022-06-04 21:23:46 +01:00
Alicia Sykes ac97be20be 🥅 Catch error, if clipboard not enabled (#681) 2022-06-04 21:12:26 +01:00
Alicia Sykes 972e3f7571 Removes obsolete always-true null check 2022-06-04 21:12:26 +01:00
Alicia Sykes 1ad89958bc 📝 Adds docs for AdGuard widgets (#493) 2022-06-04 21:12:26 +01:00
Alicia Sykes 5c896fded5 Remove unused computed val 2022-06-04 21:12:26 +01:00
Alicia Sykes c823a2e9bd Show total query and block count 2022-06-04 21:12:26 +01:00
Alicia Sykes f7bba8068a 🛂 Adds auth to AdGuard widgets 2022-06-04 21:12:26 +01:00
Alicia Sykes b931d4e6cd Adds new AdGuard widgets to base 2022-06-04 21:12:26 +01:00
Alicia Sykes 577de74ac4 AdGuard DNS info widget (#493) 2022-06-04 21:12:26 +01:00
Alicia Sykes dcd72e7763 AdGuard top domains widget (#493) 2022-06-04 21:12:25 +01:00
Alicia Sykes 1c252cc76d Only render non-zero values to chart 2022-06-04 21:12:25 +01:00
Alicia Sykes 072ebbd68a AdGuard filter list widget (#493) 2022-06-04 21:12:25 +01:00
Alicia Sykes 3a65d12e67 Removed unused CSS 2022-06-04 21:12:25 +01:00
Alicia Sykes 7b99e9092b AdGuard block percent widget (#493) 2022-06-04 21:12:25 +01:00
Alicia Sykes b974b68852 🌟 Adds @Brewhack's awesome dash (#680) 2022-06-04 21:12:25 +01:00
Alicia Sykes 51abcf0f17 🌟 Adds missing author attributions 2022-06-04 21:12:25 +01:00
Alicia Sykes 218a76d953 📝 Adds copy to clipboard to troubleshooting guide (#681) 2022-06-04 21:12:25 +01:00
Alicia Sykes d0721cef61 🌟 Re-shuffle showcase order 2022-06-04 21:12:25 +01:00
Alicia Sykes 83dcc37985 🥅 Catch errors caused by null config (#682)
Fixes #682
2022-06-04 21:12:25 +01:00
Alicia Sykes fea51a1a75 📝 Adds docs for domain name monitor widget 2022-06-04 21:12:25 +01:00
Alicia Sykes c8acd6e1bc Adds domain name monitor widget 2022-06-04 21:12:25 +01:00
Alicia Sykes 659d85036b 📌 Updates yarn.lock (#669) 2022-06-04 21:12:21 +01:00
M Asenov 0ca5540372 Add 🇧🇬 Bulgarian translations 2022-06-04 20:33:59 +01:00
Alicia Sykes ef786dbb7c
🔀 Merge pull request #691 from pinarruiz/feature/extend-visibility-items
[FEATURE] Extend visibility to section items
2022-06-03 19:16:37 +01:00
Alejandro Pinar Ruiz 48a367fb25
Merge branch 'Lissy93:master' into feature/extend-visibility-items 2022-06-03 20:14:31 +02:00
Alicia Sykes d470f5b813
🔁 Merge pull request #698 from pinarruiz/fix/update-yarn-lock
[FIX] Update yarn.lock
2022-06-03 18:24:26 +01:00
Alejandro Pinar Ruiz d57138d6f8 Update yarn.lock 2022-06-03 17:00:59 +02:00
Alejandro Pinar Ruiz 8650b8cfb0 Remove unused properties and fix descriptions 2022-06-02 14:12:39 +02:00
Alejandro Pinar Ruiz d0e25dfb52 Add contents urls 2022-06-02 12:49:46 +02:00
Alejandro Pinar Ruiz f4709195c6 Add displayData to section.item 2022-06-02 12:49:42 +02:00
Alejandro Pinar Ruiz 82b2543d9c Fix anchor link 2022-06-02 12:42:59 +02:00
Alejandro Pinar Ruiz 994435677c Expand section hideForKeycloakUsers and showForKeycloakUsers to add item 2022-06-02 12:33:14 +02:00
Alejandro Pinar Ruiz dfd3aabd27 Fix typo on item.displayData and section.displayData for keycloak 2022-06-02 08:12:39 +02:00
Alejandro Pinar Ruiz f13d252443 Add basic documentation 2022-06-02 08:10:42 +02:00
Alejandro Pinar Ruiz d1706689a5 Fix: remove duplicate code 2022-06-01 22:50:01 +02:00
Alejandro Pinar Ruiz 3bc80cfaad Add comment 2022-06-01 21:25:28 +02:00
Alejandro Pinar Ruiz cd72ff06ec Add visible section items 2022-06-01 21:24:10 +02:00
Alejandro Pinar Ruiz c33e03f4f5 Use item visibility to filterTiles 2022-06-01 21:13:00 +02:00
Alejandro Pinar Ruiz 04774c23ed Add displayData on items 2022-06-01 20:50:33 +02:00
Alejandro Pinar Ruiz 18776bd8cb Add CheckItemVisibility util templated from CheckSectionVisibility 2022-06-01 20:33:02 +02:00
Alicia Sykes 052fcfa7ef 🥅 Catch error, if clipboard not enabled (#681) 2022-05-31 18:48:24 +01:00
Alicia Sykes cf002116f8 Removes obsolete always-true null check 2022-05-30 22:21:33 +01:00
Alicia Sykes 5c45f4fbc6 Merge branch 'master' of github.com:Lissy93/dashy into FEATURE/minor-improvments-2.1.0 2022-05-30 17:35:08 +01:00
Alicia Sykes 2df49eb853 📝 Adds docs for AdGuard widgets (#493) 2022-05-30 12:51:40 +01:00
Alicia Sykes 9a0afd7c99 Remove unused computed val 2022-05-30 12:51:12 +01:00
Alicia Sykes 76f22b032d Show total query and block count 2022-05-30 12:06:38 +01:00
Alicia Sykes 59505a0d42 🛂 Adds auth to AdGuard widgets 2022-05-29 23:12:17 +01:00
Alicia Sykes 53292f28fb Adds new AdGuard widgets to base 2022-05-29 23:11:38 +01:00
Alicia Sykes b5e5b566fc AdGuard DNS info widget (#493) 2022-05-29 23:11:05 +01:00
Alicia Sykes 226d958b08 AdGuard top domains widget (#493) 2022-05-29 20:55:44 +01:00
Alicia Sykes 8af15f606d Only render non-zero values to chart 2022-05-29 20:55:05 +01:00
Alicia Sykes 86435fc7d6 AdGuard filter list widget (#493) 2022-05-29 16:51:03 +01:00
Alicia Sykes 97b18e7488
🔀 Merge pull request #684 from dr460nf1r3/master
Add dr460nf1r3's Dashy
2022-05-29 16:34:11 +01:00
dr460nf1r3 ce0a674fbf
Add dr460nf1r3's Dashy 2022-05-29 17:13:42 +02:00
Alicia Sykes 71f87159a4 Removed unused CSS 2022-05-29 15:46:06 +01:00
Alicia Sykes c4d48d64a4 AdGuard block percent widget (#493) 2022-05-29 15:45:33 +01:00
repo-visualizer 30572c0ceb 💛 Updates repo diagram 2022-05-29 01:31:23 +00:00
Alicia Bot 5826817ef6 💙 Makes author list 2022-05-29 02:29:49 +01:00
Alicia Bot b3b069942b 💙 Updates contributor SVG 2022-05-29 02:29:45 +01:00
liss-bot f679da278c 💛 Updates sponsors table 2022-05-29 02:29:43 +01:00
liss-bot 1c53cd9b7d 💜 Updates contributors list 2022-05-29 02:29:42 +01:00
Alicia Sykes 73935ed4bb 🌟 Adds @Brewhack's awesome dash (#680) 2022-05-28 22:00:21 +01:00
Alicia Sykes afdd342533 🌟 Adds missing author attributions 2022-05-28 21:59:14 +01:00
Alicia Sykes c81e6c69d3 📝 Adds copy to clipboard to troubleshooting guide (#681) 2022-05-28 18:39:46 +01:00
Alicia Sykes 1778498e36 🌟 Re-shuffle showcase order 2022-05-28 18:32:11 +01:00
Alicia Sykes bc43caaf96 🥅 Catch errors caused by null config (#682)
Fixes #682
2022-05-28 15:48:10 +01:00
Alicia Sykes c520d8314f 📝 Adds docs for domain name monitor widget 2022-05-28 14:43:44 +01:00
Alicia Sykes 2d49f1cda4 Adds domain name monitor widget 2022-05-28 14:43:26 +01:00
Alicia Sykes c8010f50a7 Merge branch 'master' of github.com:Lissy93/dashy 2022-05-27 21:31:38 +01:00
Alicia Sykes 5ecf86600a
🔀 Merge pull request #676 from pinarruiz/patch-2
Fix: Typo on a word
2022-05-26 19:31:40 +01:00
Alejandro Pinar Ruiz 87d66ae847
Fix: Typo on a word
Typo on a word i found while reading the documentation.
2022-05-26 20:26:40 +02:00
repo-visualizer 5b9a273838 💛 Updates repo diagram 2022-05-22 01:29:49 +00:00
Alicia Bot ff57a9aac2 💙 Makes author list 2022-05-22 02:28:49 +01:00
Alicia Bot a16a96045c 💙 Updates contributor SVG 2022-05-22 02:28:44 +01:00
liss-bot 3a095778a4 💛 Updates sponsors table 2022-05-22 02:28:43 +01:00
liss-bot a0052a9524 💜 Updates contributors list 2022-05-22 02:28:41 +01:00
Alicia Sykes ec39a8bce5
🔀 Merge pull request #671 from PlusaN/patch-1
Add HOST environment
Fixes #667
2022-05-22 01:47:42 +01:00
PlusaN f700f31904
Add HOST environment
This is necessary in order to override which IP the Dashy process will bind to.
2022-05-22 00:58:59 +03:00
Alicia Sykes ac72ad243e 📌 Updates yarn.lock (#669) 2022-05-21 12:20:34 +01:00
Alicia Sykes 78bed0fb92
🔀 Merge pull request #663 from Lissy93/FIX/user-suggestions-fixes-2.0.9
[FIX] User Suggestions & Bug Fixes
Fixes #564
Fixes #590
Fixes #626
Fixes #629
Fixes #632
Fixes #640
Fixes #644
Fixes #645
Fixes #646
Fixes #651
Fixes #654
Fixes #655
Fixes #657
Fixes #659
Fixes #660
2022-05-20 14:07:15 +01:00
Alicia Sykes 6d2e37d007 🔖 Bumped 2.0.9 updated changelog 2022-05-20 13:17:36 +01:00
Alicia Sykes 6ed5cd5b53 📝 Adds sub-items docs 2022-05-20 12:50:34 +01:00
Alicia Sykes 8b5a6054d6 🗃️ Adds ub-items to schema 2022-05-20 12:50:19 +01:00
Alicia Sykes abc102df9f 🐛 Removes dupplicate CSS prop, transition 2022-05-19 13:21:52 +01:00
Alicia Sykes 00b872e671 Removes usage of nullish coalescing operator 2022-05-19 13:19:13 +01:00
Alicia Sykes 7e547e7463 Expand collapse section from context menu (#660) 2022-05-19 01:32:55 +01:00
Alicia Sykes 0ed084c147 Improved collapsible logic 2022-05-19 01:31:02 +01:00
Alicia Sykes 0d66e54b59 🐛 Fixes theme read err 2022-05-18 20:54:46 +01:00
Alicia Sykes 16acf36528 🗑️ Removes KeyboardShortcutInfo tips 2022-05-18 20:07:05 +01:00
Alicia Sykes 4f04e01aec Increased overridden timeout 2022-05-17 19:32:16 +01:00
Alicia Sykes e2b9c15360 🐛 Fixes collapsible sections (#626) 2022-05-17 19:31:50 +01:00
Alicia Sykes 333ee83890 Adds page identifier to secion ID 2022-05-17 19:31:02 +01:00
Alicia Sykes 8c43442b39 🎨 Adds option to hide sports thumbnail (#654) 2022-05-16 21:46:19 +01:00
Alicia Sykes 19b71313d5 🛂 Legacy support op for Keycloak v17 (#564) 2022-05-16 21:45:13 +01:00
Alicia Sykes c04e80b44e 📝 Adds Font-Awesome troubleshooting steps (#659) 2022-05-16 21:34:31 +01:00
Alicia Sykes 75eef87691 Merge branch 'master' of github.com:Lissy93/dashy into FIX/user-suggestions-fixes-2.0.9 2022-05-15 21:54:44 +01:00
Alicia Sykes 3b2ea020fa 📝 Adds attribution to users who contributed translations 2022-05-15 21:54:10 +01:00
Alicia Sykes 33a2693c7f 🔒 Fix, correct call of `isUserAdmin()` M(#590) 2022-05-15 20:48:31 +01:00
Alicia Sykes 9eda048842 Refactored request in RSS widget (#632) 2022-05-15 20:46:19 +01:00
repo-visualizer 545f645e9f 💛 Updates repo diagram 2022-05-15 01:31:56 +00:00
Alicia Bot 7905b9c2e3 💙 Makes author list 2022-05-15 02:29:38 +01:00
Alicia Bot cde8388ace 💙 Updates contributor SVG 2022-05-15 02:29:32 +01:00
liss-bot bad0b697fd 💛 Updates sponsors table 2022-05-15 02:29:27 +01:00
liss-bot 4ca916014d 💜 Updates contributors list 2022-05-15 02:29:26 +01:00
Alicia Sykes e456249515
🔀 Merge pull request #652 from Hellhium/patch-1
fix guest access documentation
2022-05-14 18:03:07 +01:00
Jemy SCHNEPP 8c84f2aaf8
fix guest access documentation 2022-05-14 16:33:05 +02:00
Alicia Sykes 2fe0110762 🐛 Updates mdi text in schema (#640) 2022-05-14 14:30:08 +01:00
Alicia Sykes 3417b46eee 🎨 Adds option to use Adventure theme with own img (#655) 2022-05-14 13:51:28 +01:00
Alicia Sykes 9b33a6e277 Fixes pageInfo not being read in router (#645) 2022-05-14 13:20:53 +01:00
Alicia Sykes 24e487cde5 🐛 Fixes item size/ layout buttons (#629) 2022-05-14 13:12:29 +01:00
Alicia Sykes 064c64465e 🐳 Only re-release Docker image when src changes 2022-05-14 12:18:01 +01:00
Alicia Sykes 7b39bde573 🐛 Fixes status check inheritance (#651) 2022-05-13 10:56:24 +01:00
Alicia Sykes 4287092ea2 Option to hide seconds in Clock (#644) 2022-05-11 10:52:16 +01:00
Alicia Sykes bcb1b70447
📝 Adds note about the system stats widget (#643)
Closed #643
2022-05-10 15:47:14 +01:00
Alicia Sykes 4e0959feff
🔀 Merge pull request #641 from stanly0726/master
add zh-TW(traditional chinese) localization
2022-05-09 20:11:35 +01:00
stanly0726 3fd62e0f48
translation modification 2022-05-09 12:25:53 +08:00
stanly0726 afa3b55061
add in language.js 2022-05-09 12:07:07 +08:00
stanly0726 0b320bc38d
add zh-TW(traditional chinese) localization 2022-05-09 11:54:09 +08:00
repo-visualizer 9a2c65d58d 💛 Updates repo diagram 2022-05-08 01:30:24 +00:00
Alicia Bot 15337a0b19 💙 Makes author list 2022-05-08 02:29:15 +01:00
Alicia Bot 4f3a22106a 💙 Updates contributor SVG 2022-05-08 02:29:10 +01:00
liss-bot 5f9e644783 💜 Updates contributors list 2022-05-08 02:29:05 +01:00
Alicia Sykes 6ec0bd20a1 🐛 Removed default empty stylesheet, Firefox warning 2022-05-06 12:44:29 +01:00
Alicia Sykes 7165a9a913 🚑 Fix section error in Firefox (#633) 2022-05-06 12:43:30 +01:00
Alicia Sykes af5a26b0da 📝 Adds some more common issues to troubleshooting 2022-05-03 20:41:03 +01:00
Alicia Sykes decd3be6b0 🚑 Adds null check for appConfig (#627) 2022-05-03 20:40:30 +01:00
Alicia Sykes 40d1236b2d
🔀 Merge pull request #617 from Lissy93/FEATURE/multi-page-support-2
[FEATURE] Multi-Page Support
2022-05-01 22:50:17 +01:00
Alicia Sykes c87e13cb70 🥅 Catch error if URL not specificed 2022-05-01 22:27:21 +01:00
Alicia Sykes 8c15ab4c84 🔐 Adds local path checking 2022-05-01 22:26:55 +01:00
Alicia Sykes 437ec2eac6 💄 Applies max-width to page path when in footer 2022-05-01 22:06:05 +01:00
Alicia Sykes 7d91d51fa6 🚩 Adds warning and note for local save 2022-05-01 22:05:37 +01:00
Alicia Sykes f107dbfc00 🔖 Bumps to 2.0.8 and updates changelog 2022-05-01 22:04:46 +01:00
Alicia Sykes f6df1e7750 📝 Updates multi-page docs 2022-05-01 22:04:18 +01:00
Alicia Sykes 138003c9b4 💄 Updates themes 2022-05-01 22:02:42 +01:00
Alicia Sykes 854d04afca Merge branch 'master' of github.com:Lissy93/dashy into FEATURE/multi-page-support-2 2022-05-01 21:30:37 +01:00
Alicia Sykes e454f6e0d2
🔀 Merge pull request #625 from LeoColman/master
Finish PT translation
2022-05-01 21:30:25 +01:00
Leonardo Colman Lopes cf5d872703 Finish PT translation 2022-05-01 10:55:31 -03:00
Alicia Bot 5a83004981 💙 Makes author list 2022-05-01 02:34:00 +01:00
Alicia Bot 05cfcf46fa 💙 Updates contributor SVG 2022-05-01 02:33:56 +01:00
liss-bot 600824f403 💜 Updates contributors list 2022-05-01 02:33:53 +01:00
repo-visualizer 9b8d931af2 💛 Updates repo diagram 2022-05-01 01:31:59 +00:00
Alicia Sykes eb9a5abec5 👔 Logic work for multi-page support 2022-04-30 23:28:58 +01:00
Alicia Sykes 52a0ba5a6c 🍱 Adds icon for multi-page editor form 2022-04-30 23:27:30 +01:00
Alicia Sykes 238c51ae64 Merge branch 'master' of github.com:Lissy93/dashy into FEATURE/multi-page-support-2 2022-04-30 23:26:37 +01:00
Alicia Sykes a7a7032b1d 🗃️ Adds pages to schema 2022-04-30 23:25:49 +01:00
Alicia Sykes a9496391cd Use page name for making nav-bar path slug 2022-04-30 23:24:52 +01:00
Alicia Sykes 6bf0ecba34 Adds option for page-specific custom styling 2022-04-30 23:22:02 +01:00
Alicia Sykes 1aecf32466 💬 Adds copy for the multi-page support editor 2022-04-30 22:51:17 +01:00
Alicia Sykes d765eeb7e0 🚚 Use absolue path to loading styles 2022-04-30 22:50:01 +01:00
Alicia Sykes dfb12ec8d2 📝 Updates docs for multi-page support 2022-04-30 22:49:07 +01:00
Alicia Sykes 6018a49bed
🌟 Adds @henkiewie awesome dashboard to showcase (#622)
Closes #622
2022-04-30 15:56:50 +01:00
Alicia Sykes 64a3b5b8e3
📝 Adds note about weather forecast 401 (#621) 2022-04-29 14:38:52 +01:00
Alicia Sykes 493540b949
🔀 Merge pull request #619 from emiran-orange/cssthemes_in_dropdown
[FIX] Make user-defined themes appear in drop-down list
2022-04-29 14:19:54 +01:00
Alicia Sykes 6c47715a02
🔀 Merge pull request #620 from walkxcode/master
 Some very small QoL updates
2022-04-29 13:59:02 +01:00
Walkx 9def34e86c
fix: Multiple QoL updates 2022-04-29 13:01:32 +02:00
Walkx 2ccc89ef30
🛠️ fix: Changes repo link to new organization 2022-04-29 12:43:37 +02:00
Walkx 56fcc3adaf
🛠️ fix: Changes repo link to new organization 2022-04-29 12:42:46 +02:00
Walkx b98c9b5e45
fix: Update copyright dates 2022-04-29 12:40:55 +02:00
Erwan Miran cb35676251 Make user-defined themes appear in drop-down list 2022-04-28 13:51:36 +02:00
Alicia Sykes a0ac7979e4 Put the initialization screen back in 2022-04-27 20:45:21 +01:00
Alicia Sykes d5c5c4fc85 📝 Starts writing multi-page docs 2022-04-26 22:27:02 +01:00
Alicia Sykes bc391e285c 🗃️ Adds pages to config docs 2022-04-26 22:26:27 +01:00
Alicia Sykes 45fa35a384
🐛 Fixes CVE description not showing (#609) 2022-04-26 19:57:28 +01:00
Alicia Sykes 3347dc9f61 🚧 Working on `pages` form in interactive editor 2022-04-25 21:45:14 +01:00
Alicia Sykes 8acb8cd6b2
🔃 Merge pull request #615 from moemoeq/FIX/broken-development-docs-link
✏️ fix broken `Development Docs` link at contributing.md
2022-04-24 19:54:52 +01:00
CHAIYEON CHO 0da8b394a5 ✏️ fix broken `Development Docs` link in contributing.md 2022-04-25 03:22:39 +09:00
Alicia Sykes 9ca11a5f63 Merge branch 'master' of github.com:Lissy93/dashy into FEATURE/multi-page-support-2 2022-04-24 16:28:28 +01:00
Alicia Sykes dd49ad77a5 Adds store value to determine which view being edited 2022-04-24 16:05:05 +01:00
Alicia Sykes 7706041d61 Improved props for router 2022-04-24 16:04:31 +01:00
Alicia Sykes 61761e750a 💄 Displays which config file is being edited 2022-04-24 16:03:45 +01:00
Alicia Sykes 5ab619f195 Adds a parameter to specify which config file to edit 2022-04-24 16:02:14 +01:00
Alicia Sykes f5a8c30257 🚚 Refactored saving logic into mixin 2022-04-24 16:01:30 +01:00
repo-visualizer 7766c0a48c 💛 Updates repo diagram 2022-04-24 01:32:40 +00:00
Alicia Bot 24cf5bc606 💙 Makes author list 2022-04-24 02:29:12 +01:00
Alicia Bot b08c371376 💙 Updates contributor SVG 2022-04-24 02:29:04 +01:00
liss-bot c54efa4fd3 💜 Updates contributors list 2022-04-24 02:29:01 +01:00
Alicia Sykes c678bc5655
🔀 Merge pull request #610 from remygrandin/FEATURE/widget-synology-download
Feature/widget synology download
2022-04-23 22:54:07 +01:00
Alicia Sykes 558690ad98
📝 Fixes docs link to Synology Download Station 2022-04-23 22:53:35 +01:00
Alicia Sykes c6127f852f
🔀 Merge pull request #612 from moemoeq/FIX/611_keep-all-word-break-for-cjk
[FIX] Prevent line breaks in search-label when using CJK languages
2022-04-23 20:03:21 +01:00
CHAIYEON CHO 9d627b1c86 🐛Prevent line breaks in search-label. 2022-04-24 01:51:47 +09:00
Rémy GRANDIN 5aab049a43 🚨 Fix b =>strong as recommendedn by sonarcloud 2022-04-23 14:05:57 +02:00
Rémy GRANDIN 044b7ed94d 📝 Add Synology Download widget documentation 2022-04-23 02:45:46 +02:00
Rémy GRANDIN 6e7b0e4dd5 Add Synology Download Widget 2022-04-23 02:44:49 +02:00
Rémy GRANDIN 1d69fc8617 Add extra option to hide legend in percentageChart 2022-04-23 02:43:38 +02:00
Alicia Sykes 1bc9964374 Updates view switcher to support multiple pages (#584) 2022-04-20 15:52:17 +01:00
Alicia Sykes 036bc008c5 Basic multi-page support working (#584) 2022-04-19 21:16:27 +01:00
Alicia Sykes cf7587b4ee Merge branch 'master' of github.com:Lissy93/dashy into FEATURE/multi-page-support-2 2022-04-18 19:42:30 +01:00
repo-visualizer 05f5d71801 💛 Updates repo diagram 2022-04-17 01:31:00 +00:00
Alicia Bot 86eec6d78f 💙 Makes author list 2022-04-17 02:28:47 +01:00
Alicia Sykes 32ca8996d2 📝 Corrects volume path in compose (#601) 2022-04-15 16:26:45 +01:00
Alicia Sykes 07f6bfeddc 🚧 Display additional routes based on pages object 2022-04-15 14:02:07 +01:00
Alicia Sykes a784a2fe30
🚨 Hotfix: Item target not honored (#581) 2022-04-15 12:06:44 +01:00
Alicia Sykes cc1b9c823b
🔀 Merge pull request #595 from Lissy93/FEATURE/sub-items
[FEATURE] Sub-items and improved item performance + functionality
Closes #586 
Closes #581
2022-04-14 19:28:51 +01:00
Alicia Sykes 252bc164cc 🔥 Removes commented out code 2022-04-14 19:17:35 +01:00
Alicia Sykes 525259bcff 🔖 Bumps to 2.0.7 and updates changelog 2022-04-14 19:11:07 +01:00
Alicia Sykes 0e51416db7 🔀 Rebase 2022-04-14 19:07:58 +01:00
Alicia Sykes 4c713bfce6 Adds Mullvad and IP blacklist check widgets 2022-04-14 19:02:51 +01:00
Alicia Sykes a6f3c90722 Many big improvments to items + sections 2022-04-14 14:34:20 +01:00
Alicia Sykes b1de7bc7e5 🌟 Adds new screenshot to showcase 2022-04-14 14:31:28 +01:00
Alicia Sykes 6c1c2ece84 💄 Adds new cherry-blossom theme 2022-04-14 14:30:51 +01:00
repo-visualizer 83739534ef 💛 Updates repo diagram 2022-04-10 01:32:06 +00:00
Alicia Bot 35479df7b0 💙 Makes author list 2022-04-10 02:29:06 +01:00
liss-bot ab8e9d0be3 💛 Updates sponsors table 2022-04-10 02:28:57 +01:00
liss-bot 3af99664a5 💜 Updates contributors list 2022-04-10 02:28:55 +01:00
Alicia Sykes da297a5e4a
💅 Removes `--outline-color` from colorful theme 2022-04-09 16:16:02 +01:00
Alicia Sykes 099cbbba53 💄 Updates workspace styles in lissy theme 2022-04-06 23:17:40 +01:00
Alicia Sykes e6bc0ee90d 🔐 Updates the Privacy & Security docs 2022-04-06 23:17:04 +01:00
Alicia Sykes 8a6b46b49d 🩹 Don't show add-new-sec on single-sec view 2022-04-06 00:06:24 +01:00
Alicia Sykes 689797a170 Long-press directive ignore right-click 2022-04-06 00:05:28 +01:00
Alicia Sykes 57abd67cf9 Improved layout for items and sub-items 2022-04-06 00:04:47 +01:00
Alicia Sykes 151028c8cf Use absolute path for loading assets 2022-04-06 00:04:07 +01:00
Alicia Sykes ab6e64af58 Merge branch 'master' of github.com:Lissy93/dashy into FEATURE/sub-items 2022-04-03 16:04:35 +01:00
Alicia Sykes 4932a86f3c 🚨 Removes rougue console.log (#581) 2022-04-03 16:04:01 +01:00
Alicia Sykes edad7fde41 Adds right-click support to long-press directive 2022-04-03 15:59:07 +01:00
Alicia Sykes f0cb8fe4f2 🍱 Removes Alberta stencil, replaces with Shrikhand 2022-04-03 15:58:29 +01:00
Alicia Bot 4353654a31 💙 Makes author list 2022-04-03 02:30:15 +01:00
liss-bot d6601a979a 💛 Updates sponsors table 2022-04-03 02:30:03 +01:00
liss-bot 338bb66d03 💜 Updates contributors list 2022-04-03 02:30:02 +01:00
Alicia Sykes 680f5b17ab
🔀 Merge pull request #523 from Lissy93/FEATURE/improved-network-request-controls
[FEATURE] Clearer info on network requests
2022-04-02 13:26:19 +01:00
Alicia Sykes ad677de933 Improved pre-app loading experience 2022-04-01 23:55:54 +01:00
Alicia Sykes d9e04564a0 💄 Adds lissy theme 2022-04-01 23:54:24 +01:00
Alicia Sykes 7102b25216 🚚 Moves clickOutside into directives 2022-04-01 23:53:34 +01:00
Alicia Sykes acfb7f267a ♻️ Refactors item so props is single object 2022-04-01 23:52:29 +01:00
Alicia Sykes 00709acd51
📝 Updates contents of widget docs 2022-03-31 20:49:53 +01:00
Alicia Sykes 51de80a735 📱 Trigger item context menu on long-press (#586) 2022-03-31 15:53:03 +01:00
Alicia Sykes 1187787ef3 📱 Trigger section context menu on long-press (#586) 2022-03-31 15:52:11 +01:00
Alicia Sykes d077b1b9c9 Custom directive for long-press events (#586) 2022-03-31 15:49:59 +01:00
Alicia Sykes 83ce9b8e5c 🚚 Moves ClickOutside into directives directory 2022-03-30 21:54:01 +01:00
Alicia Sykes dda5325528 Merge branch 'master' of github.com:Lissy93/dashy into FEATURE/sub-items 2022-03-29 15:48:04 +01:00
Alicia Sykes 829021aa0f
📝 Troubleshooting: fix widget timeout err (#581) 2022-03-29 15:38:30 +01:00
Alicia Sykes f9fb76a97c
️ Increases default widget timeout 2.5 sec (#581) 2022-03-29 15:27:28 +01:00
Alicia Sykes 3694a3ad03 🔀 Rebased from master 2022-03-29 00:58:44 +01:00
Alicia Sykes c2559bc731 🔑 Use bot token if available in tag workflow 2022-03-28 10:56:42 +01:00
Alicia Sykes 93a531a3f2
🔀 Merge pull request #557 from Lissy93/FEATURE/user-suggestions
[FEATURE] Implementing user suggestions
This PR resolves loads of tickets... Fixes #492, fixes #494, fixes #497, fixes #505, fixes #522, fixes #524, fixes #546, fixes #552, fixes #554, fixes #560, fixes #564, fixes #568, fixes #570, fixes #575 and fixes #576 - Yay 🥳
Celebrating getting out of hospital with 15 bug fixes 🐛 and a beer 🍺
2022-03-28 10:51:32 +01:00
Alicia Sykes 45583ae2a8 🔖 Updates changelog for V 2.0.6 2022-03-28 00:02:29 +01:00
Alicia Sykes 5480f23db7 🍻 Updates changelog, and removes unneded code, ready for merge! 2022-03-27 21:26:37 +01:00
Alicia Sykes 6220f9b7f8 🗃️ Adds widget request timeout to schema and docs 2022-03-27 21:22:26 +01:00
Alicia Sykes 979a776b68 Adds option for request timeout in widgets 2022-03-27 21:21:59 +01:00
Alicia Sykes 56798fbdc4 🐛 Fixes Authorization headers for Glances widget (#546) 2022-03-27 21:21:08 +01:00
Alicia Sykes 730a67435e 🎨 Fix space excess below footer (#522) 2022-03-27 20:33:50 +01:00
Alicia Sykes e616d9043f Allows full-screen for iframes (#524) 2022-03-27 20:10:17 +01:00
Alicia Sykes 3d9c646ad3 🔀 Rebased from master 2022-03-27 20:03:12 +01:00
Alicia Sykes c3c04723fd 🔖 Bumps to 2.0.6 and updates changelog 2022-03-27 19:58:39 +01:00
Alicia Sykes 68b77587ff 🐛 Fixes str.split on tags array (#575) 2022-03-27 17:09:06 +01:00
Alicia Sykes f4443d0077 🌟 Adss new screenshots to showcase (#505) 2022-03-27 16:20:05 +01:00
Alicia Sykes 88d8ee6b1d 🎨 Removes fixed max-width on wide-screens (#554) 2022-03-27 16:18:51 +01:00
repo-visualizer b51935f049 💛 Updates repo diagram 2022-03-27 01:29:32 +00:00
Alicia Bot b353a88927 💙 Updates contributor SVG 2022-03-27 02:28:39 +01:00
Alicia Bot 3a4007004a 💙 Makes author list 2022-03-27 02:28:39 +01:00
liss-bot 772e19dc2f 💜 Updates contributors list 2022-03-27 02:28:29 +01:00
Alicia Sykes 879b3b8f32 👔 Improved opening method logic (#492) 2022-03-26 20:59:33 +00:00
Alicia Sykes 16aa14fcbb 👔 Changes order item size is applied (#576) 2022-03-26 20:40:59 +00:00
Alicia Sykes cd50ceb0a0 🐛 Fixes item size not honored (#576) 2022-03-26 20:40:17 +00:00
Alicia Sykes 1c85d454b9 🐛 Fixes local image path on sub-page (#570) 2022-03-26 20:11:39 +00:00
Alicia Sykes a9ae53ef7c 🗃️ Adds nav link target attribute to docs and schema (#552) 2022-03-26 20:04:51 +00:00
Alicia Sykes b7c84bb1dd Adds target attribute to nav links (#552) 2022-03-26 20:03:54 +00:00
Alicia Sykes fd2b3d831c 🛂 Removes `/auth` from KC path (#564) 2022-03-26 19:38:23 +00:00
Alicia Sykes 1f3ed135de 🚨 Adds missing semmi 2022-03-26 19:34:37 +00:00
Alicia Sykes 6702b9335f 🚨 Fixes bad object comparison 2022-03-26 19:32:41 +00:00
Alicia Sykes 7c6c06bc24 📝 Adds LightHttpd config for setting headers 2022-03-26 19:25:04 +00:00
Alicia Sykes 9a2383c206
🔀 Merge pull request #515 from Lissy93/snyk-upgrade-d175951b59de7fc45810125c5715b19c
[Snyk] Upgrade @sentry/tracing from 6.17.4 to 6.17.5
2022-03-26 17:45:45 +00:00
Alicia Sykes f250890f3b 🐛 Fixes link to @walkxhub homelab icons (#568) 2022-03-21 18:31:16 +00:00
Alicia Sykes 837fa12eeb
🔁 Merge pull request #567 from 0n1cOn3/patch-1
[Deployment Guide] Synology NAS installation steps
2022-03-20 09:55:40 +00:00
0n1cOn3 84b6e9146b
added Synology NAS Steps
Added a way howto install dashy with Synologys GUI + Docker Environemnt
2022-03-20 03:19:36 +01:00
repo-visualizer 7814b59502 💛 Updates repo diagram 2022-03-20 01:29:47 +00:00
Alicia Bot fc36cca2cc 💙 Makes author list 2022-03-20 01:28:30 +00:00
Alicia Bot 925bf8c53b 💙 Updates contributor SVG 2022-03-20 01:28:21 +00:00
liss-bot ad08c6d58f 💛 Updates sponsors table 2022-03-20 01:28:18 +00:00
liss-bot 9ee7e85b0d 💜 Updates contributors list 2022-03-20 01:28:17 +00:00
Alicia Sykes ad8546c858
🔀 Merge pull request #565 from StevKast/master
[FIX] Fixing docker-compose example volume path
2022-03-19 22:53:07 +00:00
Steven Kast 40a56ceb58
Fixing docker-compose example volume path
The container root folder is not needed and causes directory unknown errors.
2022-03-19 16:06:38 -04:00
Alicia Sykes f286487b75 🐛 Adds text/css type attr for custom stylesheets (#560) 2022-03-14 22:16:33 +00:00
Alicia Sykes f39cdb5987
🔀 Merge pull request #559 from Ateroz/fix-several-issues-with-conf-not-loaded
Fix several issues with conf not loaded
2022-03-14 12:54:11 +00:00
aterox b05c6ea069
Bump version 2022-03-13 20:30:00 -04:00
Alicia Sykes 55396e9517
🔁 Merge pull request #558 from alexdelprete/master
Updated Language Section (Italian)
2022-03-14 00:13:41 +00:00
aterox 79754dc1e9
Revert Dockerfile, but ensure only one conf.yml 2022-03-13 19:35:19 -04:00
aterox 38337ed693
Import conf at build time 2022-03-13 19:28:18 -04:00
Alessandro Del Prete ad0c9f1349 Updated Language Section (Italian) 2022-03-14 00:01:04 +01:00
Alicia Bot f87e2fcd78 💙 Makes author list 2022-03-13 22:45:07 +00:00
Alicia Bot 76e76a0558 💙 Updates contributor SVG 2022-03-13 22:45:00 +00:00
liss-bot 8626b3d068 💜 Updates contributors list 2022-03-13 22:44:58 +00:00
Alicia Sykes 0e101b6330 🔧 Adds config file for GitPod env (#497) 2022-03-13 22:37:35 +00:00
Alicia Sykes 9e383e0638 Adds frontend functionality for status checks max redirects (Re@ #494) 2022-03-13 22:01:33 +00:00
Alicia Sykes 5ff099ea1f 🗃 Updates schema and adds maxRedirects to docs (Re: #494) 2022-03-13 22:00:36 +00:00
Alicia Sykes 4779434924 Adds backend support for status check redirects (Re: #494) 2022-03-13 21:58:40 +00:00
Alicia Sykes eae43492a8
🔀 Merge pull request #556 from alexdelprete/master
Italian Translation
2022-03-13 21:33:00 +00:00
Alessandro Del Prete b1ed8c4613 Completed and Updated Italian Translation 2022-03-13 19:11:48 +01:00
repo-visualizer 17209f926b 💛 Updates repo diagram 2022-03-13 01:27:27 +00:00
Alicia Bot aa5b0d8feb 💙 Makes author list 2022-03-13 01:26:23 +00:00
Alicia Bot 8f822d417a 💙 Updates contributor SVG 2022-03-13 01:26:20 +00:00
liss-bot 9dd7636716 💜 Updates contributors list 2022-03-13 01:26:18 +00:00
Alicia Sykes 4c19d8c797
🔧 Bumps uhyo/please-star-first to v1.0.1 2022-03-08 21:20:32 +00:00
Alicia Sykes 2051b20696
🔁 Merge pull request #541 from Ateroz/fix-context-menu-mobile
🐛 Fix context menu on mobile/touch devices
Fixes #508
2022-03-08 15:06:22 +00:00
aterox 8ee7847648 Ensure context menu doesn't clip off the screen 2022-03-08 05:44:39 -05:00
aterox fe0d2d5b55 Add an icon for the context menu 2022-03-08 05:44:20 -05:00
Alicia Sykes 06beb757a4
🔁 Merge pull request #540 from Ateroz/automate-releases
Automate Github Releases
2022-03-08 03:21:08 +00:00
aterox 1c49b79c48 Change to LATEST_CHANGELOG.md 2022-03-07 22:16:14 -05:00
aterox 4e7537f24c Automate Github Releases 2022-03-07 21:33:43 -05:00
Alicia Sykes 55f8ee6d43
📝 Solution for app not starting in 2.0.4 (#539)
Closes #539
2022-03-07 15:06:20 +00:00
Alicia Sykes c1fc473cf2
🔁 Merge pull request #538 from Ateroz/feature/526-http-to-https-redirect
 Add redirection from HTTP to HTTPS
Fixes #526
2022-03-07 13:29:06 +00:00
Alicia Sykes 70810b4d26
🔁 Merge pull request #536 from Ateroz/fix-ui-add-new-section-when-no-sections
🐛 Show Add New Section when no sections exist
2022-03-07 12:31:47 +00:00
aterox a4e5402e5a Fix always true accident 2022-03-07 06:11:06 -05:00
aterox 6ee5286ebf Add redirection from http to https 2022-03-07 05:54:45 -05:00
aterox 955439fcfe Show Add New Section when no sections exist 2022-03-06 23:44:52 -05:00
Alicia Sykes 93911c2520
🔁 Merge pull request #528 from Ateroz/master
Fetch conf.yml from server
2022-03-06 23:32:45 +00:00
aterox d0acd2f75d Include SET_REMOTE_CONFIG 2022-03-06 18:14:00 -05:00
aterox b3c680d462 Update path 2022-03-06 18:13:39 -05:00
aterox 50acc0f711 No longer requires a rebuild 2022-03-06 03:34:05 -05:00
aterox b6a5dfbec1 Update for 2.0.4 2022-03-06 03:31:11 -05:00
aterox 9c35fe4027 Change CMD and copy only dist, not dist and public 2022-03-06 03:22:54 -05:00
aterox 3d4a8ecf6d Replace static conf.yml import 2022-03-06 03:06:05 -05:00
aterox 727f6b1fc0 Get conf.yml on client side 2022-03-06 03:04:41 -05:00
aterox 6553f1463d No longer needed 2022-03-06 03:02:41 -05:00
repo-visualizer e4fb3f6ad3 💛 Updates repo diagram 2022-03-06 01:27:45 +00:00
Alicia Bot a4cbda26af 💙 Makes author list 2022-03-06 01:26:55 +00:00
liss-bot 91b4882a59 💛 Updates sponsors table 2022-03-06 01:26:43 +00:00
liss-bot bb1183f5c6 💜 Updates contributors list 2022-03-06 01:26:41 +00:00
aterox 5c1bfc8855 Bump version to 2.0.4 2022-03-05 19:10:19 -05:00
Alicia Sykes 57c06bde2e
📝 Adds link to configuring headers 2022-03-05 21:59:14 +00:00
aterox 63663c1da0 Merge branch 'master' of https://github.com/Ateroz/dashy 2022-03-05 01:22:37 -05:00
aterox 7c86d6085b Load components after config has been pulled 2022-03-05 01:22:32 -05:00
aterox aeec449dc7 Pull conf.yml from server 2022-03-05 01:22:12 -05:00
Alicia Sykes 45e8444bb2
🔁 Merge pull request #516
⬆️ Updates simple-icons from 6.8.0 to 6.9.0
2022-03-04 20:58:30 +00:00
Alicia Sykes df3e8e6f13
🔁 Merge pull request #525 from tazboyz16/patch-1
Update deployment.md
2022-03-02 22:31:29 +00:00
tazboyz16 72e8087c77
Update deployment.md
fix a misspell on DigitalOcean
2022-03-02 13:51:55 -07:00
Alicia Bot 4c4790ec83 💙 Makes author list 2022-03-02 18:49:47 +00:00
liss-bot f6d3fa42dd 💛 Updates sponsors table 2022-03-02 18:49:06 +00:00
liss-bot 6068375c9e 💜 Updates contributors list 2022-03-02 18:49:03 +00:00
Alicia Sykes 4b7e49e8ab 🔏 Adds link to all requests made, in Privacy docs 2022-03-02 17:59:22 +00:00
Alicia Sykes 7ba5cc23b7 🗃 Adds enableMaterialDesignIcons option to appConfig 2022-03-02 13:27:14 +00:00
Alicia Sykes f7a8395f4a 🔒 Allows disabling of Font-Awesome (#521) 2022-03-02 13:26:13 +00:00
Alicia Sykes 1062251a15
📝 Adds link to setting headers for KC 2022-03-01 14:05:01 +00:00
Alicia Sykes 6bb2298c28
📝 Adds Docker Directory solution and link to docs 2022-03-01 13:47:17 +00:00
Alicia Sykes 36db80fb3f
📝 Updates reverse proxy docs 2022-03-01 13:33:20 +00:00
snyk-bot 0fd5976573
fix: upgrade simple-icons from 6.8.0 to 6.9.0
Snyk has created this PR to upgrade simple-icons from 6.8.0 to 6.9.0.

See this package in npm:


See this project in Snyk:
https://app.snyk.io/org/lissy93/project/564ca11b-8665-48b8-befa-ccd607c3e09a?utm_source=github&utm_medium=referral&page=upgrade-pr
2022-03-01 00:51:04 +00:00
snyk-bot ce5ea35d46
fix: upgrade @sentry/tracing from 6.17.4 to 6.17.5
Snyk has created this PR to upgrade @sentry/tracing from 6.17.4 to 6.17.5.

See this package in npm:


See this project in Snyk:
https://app.snyk.io/org/lissy93/project/564ca11b-8665-48b8-befa-ccd607c3e09a?utm_source=github&utm_medium=referral&page=upgrade-pr
2022-03-01 00:50:59 +00:00
repo-visualizer 2c6f9948b6 💛 Updates repo diagram 2022-02-27 01:31:50 +00:00
Alicia Bot fb7a1e5ce4 💙 Makes author list 2022-02-27 01:26:26 +00:00
liss-bot 1aa63e5a1c 💛 Updates sponsors table 2022-02-27 01:26:13 +00:00
liss-bot 426a4fd652 💜 Updates contributors list 2022-02-27 01:26:12 +00:00
Alicia Sykes f2c5de73bd
️ Merge pull request #501 from Lissy93/revert-495-master
[REVERRT] Add group and user in dockerfile to run container as unprivileged
Fixes: #499
2022-02-20 12:02:25 +00:00
Alicia Sykes 4701eedc3b
Revert "Add group and user in dockerfile to run container as unprivileged" 2022-02-20 11:56:26 +00:00
repo-visualizer 57bbee70c5 💛 Updates repo diagram 2022-02-20 01:27:25 +00:00
Alicia Bot bb40627401 💙 Makes author list 2022-02-20 01:26:35 +00:00
Alicia Bot 2981168082 💙 Updates contributor SVG 2022-02-20 01:26:30 +00:00
liss-bot e1ffb4535b 💛 Updates sponsors table 2022-02-20 01:26:25 +00:00
liss-bot be093a1f68 💜 Updates contributors list 2022-02-20 01:26:24 +00:00
Alicia Sykes 5aff97a09e
🔀 Merge pull request #495 from Singebob/master
Add group and user in dockerfile to run container as unprivileged
Fixes #340
Thank you @Singebob
2022-02-19 21:45:16 +00:00
Jeremy Chauvin bbbcd09b44
🐳 refactor to add user 2022-02-18 08:27:54 +01:00
Alicia Sykes 6a88f4725b 💄 Loading screen shows message on error 2022-02-18 03:17:10 +00:00
Alicia Sykes c7758e8873 🚧 Swithing computers 2022-02-18 03:15:24 +00:00
Alicia Sykes 2e63da041a
📝 Updates widget contributing docs 2022-02-17 18:00:02 +00:00
Singebob 4f4f9963c7
🐳 add user in dockerfile 2022-02-17 15:52:07 +01:00
Alicia Sykes ea760d9772 Merge branch 'master' of github.com:Lissy93/dashy into FEATURE/sub-items 2022-02-15 11:12:42 +00:00
Alicia Sykes 757179d3c6 🚧 Working on sub-items 2022-02-15 11:12:15 +00:00
Alicia Sykes 11c59504dc Moves item reusable methods into mixin 2022-02-15 11:11:40 +00:00
Alicia Sykes bb4658e16c
🐳 Comment out DH description updater 2022-02-14 14:50:26 +00:00
Alicia Sykes 9a21f3919b
🐳 Switches token for updating DockerHub desc 2022-02-14 14:24:36 +00:00
Alicia Sykes 23f2c1af74
🔀 Merge pull request #488 from Lissy93/FIX/general-issues
[FIX] General issues and improvements
Fixes #452
Fixes #454
Fixes #455
Fixes #463
Fixes #479
Fixes #482
Fixes #483
Fixes #485
Fixes #486
Fixes #487
2022-02-14 13:50:53 +00:00
Alicia Sykes 075bca98ce 🔖 Bumps to V 2.0.3 and updates changelog 2022-02-14 13:40:29 +00:00
Alicia Sykes cde8060e23 🐳 Updates comments in Dockerfile 2022-02-13 23:30:34 +00:00
Alicia Sykes 94e6190053 🐳 Updates Docker build action, to set DockerHub readme 2022-02-13 23:26:27 +00:00
Alicia Sykes 7b6815a318 Adds a static image widget (#487) 2022-02-13 23:24:16 +00:00
Alicia Sykes c9283fc3be 📝 Adds example of embedding an image (#487) 2022-02-13 19:01:40 +00:00
Alicia Sykes 8dd392ff8b 🐳 Adds (shorter) readme file for DockerHub 2022-02-13 18:34:43 +00:00
Alicia Sykes 2bf821784d 📝 Adds Kubernetes Keycloak ingress rules into troubleshooting (#479) 2022-02-13 16:59:06 +00:00
Alicia Sykes d2bbca9f38 Merge branch 'master' of github.com:Lissy93/dashy into FIX/general-issues 2022-02-13 15:17:07 +00:00
Alicia Sykes 1626b94285 📊 Adds widget to display CPU temps (#452) 2022-02-13 15:15:04 +00:00
Alicia Sykes 20b7a6b062 👔 Adds function to convery farenheight to celcius 2022-02-13 15:14:11 +00:00
Alicia Sykes c1607cb19b 🛂 Prevent download config when (#455) 2022-02-13 14:10:23 +00:00
Alicia Sykes cfe3a48405 🗃️ Adds disableConfiguration to schema and docs 2022-02-13 14:09:14 +00:00
Alicia Sykes 40045a637c 📝 Adds config write permissions to docs 2022-02-13 14:08:03 +00:00
repo-visualizer ed3cc78184 💛 Updates repo diagram 2022-02-13 01:26:37 +00:00
Alicia Bot 83d1f8ff76 💙 Makes author list 2022-02-13 01:25:42 +00:00
liss-bot 03b7aba66d 💛 Updates sponsors table 2022-02-13 01:25:32 +00:00
liss-bot 406f27b25d 💜 Updates contributors list 2022-02-13 01:25:30 +00:00
Alicia Sykes e2a3195fb4 📄 Adds link to MIT license in About section 2022-02-12 21:32:56 +00:00
Alicia Sykes e83990fa29 📝 Adds guide on permissioning components 2022-02-12 21:30:52 +00:00
Alicia Sykes 17719daae8 💄 Default background for modals 2022-02-12 21:29:49 +00:00
Alicia Sykes fd99837b78 🥅 Catch error if incorrectly configured user 2022-02-12 21:29:08 +00:00
Alicia Sykes 04082763d3 🥅 Catch potential errors 2022-02-12 21:28:27 +00:00
Alicia Sykes ca9498ba4a 🛂 Remove start edditing button, if no permissions (#455) 2022-02-12 21:26:43 +00:00
Alicia Sykes 0146e996cf 🛂 Remove edit from context menu, if no permissions (#455) 2022-02-12 21:25:22 +00:00
Alicia Sykes 0b07abeb18 🛂 Disallow save local/ disk in JSON editr (#485) 2022-02-12 21:24:23 +00:00
Alicia Sykes eb377d287e 🛂 Improvedd access controlls in Store (#485) 2022-02-12 21:23:47 +00:00
Alicia Sykes d5f0c19fbf 🛂 Adds access control options to interatvie editor menu (#485) 2022-02-12 21:23:22 +00:00
Alicia Sykes 20f231c632 🛂 Adds warning msg, for when config disabled (#455) 2022-02-12 20:39:44 +00:00
Alicia Sykes c8ad80b79c 🛂 Adds access control checks in editor forms (#455) 2022-02-12 20:05:14 +00:00
Alicia Sykes 69f709001f 🛂 Disables conf features based on permissions 2022-02-12 15:18:20 +00:00
Alicia Sykes af3343e15a 🛂 Adds permissions object to Store 2022-02-12 15:17:23 +00:00
Alicia Sykes e194d741ac 🩹 Rounds numbers in gl-alerts widget (#454) 2022-02-11 11:17:48 +00:00
Alicia Sykes e8cee3bd4d 🗃️ Adds options to prevent config saving to schema + docs (#485) 2022-02-11 10:21:59 +00:00
Alicia Sykes a65c3c569e Adds option to prevent saving changes locally (#485) 2022-02-11 10:20:45 +00:00
Alicia Sykes 76e5a1b77b Adds option to prevent saving changes to disk (#485) 2022-02-11 09:59:53 +00:00
Alicia Sykes 61bbfcb885 📝 Updes details in configuring and development docs 2022-02-11 09:27:18 +00:00
Alicia Sykes f7c3c80b33 🗃️ Adds option for global useProxy (#486) 2022-02-10 13:23:30 +00:00
Alicia Sykes c3b93e4164 🥅 Clearer info about any errors found in the config
This should make it easier for users to understand exactly where an issue is, and give clear instructions on how to fix it
2022-02-09 20:05:56 +00:00
Alicia Sykes 45edc9731a 🗑️ Deletes Json to Yaml script (#482)
RIP my hand written YAML parser, you served me well. Replaced with the js-yaml node package
2022-02-09 18:30:38 +00:00
Alicia Sykes 86837105cf 🐛 Fix malformed YAML in export menu (#482) 2022-02-09 18:27:48 +00:00
Alicia Sykes c4f1be2b76 🚸 Pressing enter submits login form (#483) 2022-02-09 18:04:16 +00:00
Alicia Sykes 5bc9a5f660 🚧 Started working on sub-items 2022-02-08 16:49:34 +00:00
Alicia Sykes 33855dca40 Merge branch 'master' of github.com:Lissy93/dashy 2022-02-07 18:58:29 +00:00
Alicia Sykes 64bfafd3fa 🐳 Adds a manual trigger to docker-publish (#481) 2022-02-07 18:50:45 +00:00
Alicia Sykes b18db08574
🔀 Merge pull request #480 from Lissy93/FIX/server-welcome-msg-fallback
[FIX] Adds try catch to server welcome msg
2022-02-07 16:05:28 +00:00
Alicia Sykes e5ccdd9e97 🥅 Adds try catch to server welcome msg (#477) 2022-02-07 15:55:35 +00:00
repo-visualizer b0cc37ac33 💛 Updates repo diagram 2022-02-06 01:27:03 +00:00
Alicia Bot 7428838c55 💙 Makes author list 2022-02-06 01:26:06 +00:00
Alicia Bot 8e82e450ec 💙 Updates contributor SVG 2022-02-06 01:26:00 +00:00
liss-bot 7d8c048e3c 💛 Updates sponsors table 2022-02-06 01:25:57 +00:00
liss-bot 137aee21ee 💜 Updates contributors list 2022-02-06 01:25:56 +00:00
Alicia Sykes 1294b43007 🚑 Updates Python to Python3 2022-02-05 05:39:14 +00:00
Alicia Sykes 824082ba8c 🚑 Fixes Alpine base image version 2022-02-05 05:32:39 +00:00
Alicia Sykes 669e1e7566 🚑 Fixes Alpine base image version 2022-02-05 05:30:39 +00:00
Alicia Sykes 6288b32a22 🚑 Fixes Alpine base image version 2022-02-05 05:28:26 +00:00
Alicia Sykes ce7c4eeb8b 🚑 Fixes Alpine base image version 2022-02-05 05:27:00 +00:00
Alicia Sykes cadae7c113
🔀 Merge pull request #471 from Lissy93/SECURITY/dependency-updates
[SECURITY] Dependency Updates
2022-02-05 01:34:12 +00:00
Alicia Sykes 827d3bcc01 🗑️ Removes .nvmrc file 2022-02-05 01:26:42 +00:00
Alicia Sykes d727b9db0f 🔧 Adds environmental params to Netlify config 2022-02-05 01:21:59 +00:00
Alicia Sykes 8ca2c15930
🔧 Set Node runtime to 16.13.2 LTS 2022-02-05 01:20:14 +00:00
Alicia Sykes b2c68bd064 🔧 Sets Node runtime to v16.13.2 for Netlify 2022-02-04 22:49:22 +00:00
Alicia Sykes 4fb910f1fa 🔧 Updates Netlify config file 2022-02-04 22:45:32 +00:00
Alicia Sykes e3a39bc4b5 🔧 Sets Node runtime to 16.13.2 LTS 2022-02-04 22:42:19 +00:00
Alicia Sykes 051ad842ec 🔧 Sets Node runtime to 16.13.2 LTS 2022-02-04 22:36:10 +00:00
Alicia Sykes cd2c7519c0 📝 Updates Node version in readme 2022-02-04 22:23:27 +00:00
Alicia Sykes 2135ed77ca 🐳 Updates Docker images to use latest Node LTS runtime 2022-02-04 22:23:05 +00:00
Alicia Sykes 969679fc49 ⬆️ Upgrade to Node 16 runtime 2022-02-04 22:22:30 +00:00
Alicia Sykes ebae510294 ⬆️ Updates rsup-progress to 3.0.0 2022-02-04 22:06:15 +00:00
Alicia Sykes c55799ad89 ⬆️ Auto-updates compatible dependencies 2022-02-04 21:05:16 +00:00
Alicia Sykes 3d8dc8b472 🔖 Bumps to V 2.0.2 and updates changelog 2022-02-04 21:04:50 +00:00
Alicia Sykes 159ff3db0f
🔀 Merge pull request #399 from Lissy93/snyk-upgrade-63fdc6aad34a5b6928e974dc47fb3a5f
[Snyk] Upgrade keycloak-js from 15.0.2 to 15.1.0
2022-02-03 17:56:03 +00:00
Alicia Sykes f1919af520
🔀 Merge pull request #417 from Lissy93/snyk-upgrade-48764f50a933f6030204a7c397a7f3eb
[Snyk] Upgrade express from 4.17.1 to 4.17.2
2022-02-03 17:55:53 +00:00
Alicia Sykes c9faf78772
🔀 Merge pull request #420 from Lissy93/snyk-upgrade-dabeb22578fcf019c27c2e97914c7df9
[Snyk] Upgrade @sentry/vue from 6.14.1 to 6.16.1
2022-02-03 17:47:57 +00:00
Alicia Sykes e4cf491f36
🔀 Merge pull request #426 from Lissy93/snyk-upgrade-893de7d0c049f4883b0987970c222cf0
[Snyk] Upgrade vue-i18n from 8.26.7 to 8.26.8
2022-02-02 22:17:30 +00:00
Alicia Sykes 4b2d2c5f19
🔀 Merge pull request #460 from Lissy93/snyk-fix-72da044516515d270eb6242a6ec4c07b
[Snyk] Security upgrade node from 14.17.5-alpine to 14.18.2-alpine
2022-02-02 22:14:49 +00:00
Alicia Sykes 56866d5a31
🔀 Merge pull request #468 from rubenandre/fix-putCommasInBigNum-utils
🐛 Fix putCommasInBigNum logic
2022-02-02 22:12:39 +00:00
Alicia Sykes b0c493fb89
🔀 Merge pull request #467 from rubenandre/fix-hardcoded-usd-cryptowatchlist-widget
🐛 Fix hardcoded usd currency
2022-02-02 22:07:49 +00:00
Ruben Silva eb06140fa4 🐛 Fix putCommasInBigNum logic 2022-02-02 19:34:38 +00:00
Ruben Silva e3c7dc0f5d 🐛 Fix hardcoded usd currency 2022-02-02 19:31:58 +00:00
Alicia Sykes 0a639b0f08
🔀 Merge pull request #462 from Lissy93/FIX/section-height
[FIX] Section Height (colourful theme)
2022-02-01 19:53:19 +00:00
Alicia Sykes 947d616f94 🔖 Updates changelog for V 2.0.1 2022-02-01 19:30:30 +00:00
Alicia Sykes a5944c1d06 Adds type checking for section search 2022-02-01 19:15:18 +00:00
Alicia Sykes 11291ae0e6 Improved validation warnings in JSON editor 2022-02-01 18:59:55 +00:00
Alicia Sykes e472d91102 Improved validation warnings in JSON editor 2022-02-01 18:54:19 +00:00
Alicia Sykes ad1fae5b66 🐛 Fixes clearFilterInput Safari bug (#463) (Sentry: 2911601158) 2022-02-01 16:43:09 +00:00
Alicia Sykes d07a5f7e6f Remove empty KeyCloak block from edit appConfig 2022-02-01 16:00:23 +00:00
Alicia Sykes 3ea8fc960e 🔖 Bumps to 2.0.1 and updates changelog 2022-01-31 17:09:48 +00:00
snyk-bot 995720dfe2
fix: Dockerfile to reduce vulnerabilities
The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-ALPINE311-APKTOOLS-1534687
- https://snyk.io/vuln/SNYK-ALPINE311-OPENSSL-1569447
- https://snyk.io/vuln/SNYK-ALPINE311-OPENSSL-1569447
- https://snyk.io/vuln/SNYK-ALPINE311-OPENSSL-1569451
- https://snyk.io/vuln/SNYK-ALPINE311-OPENSSL-1569451
2022-01-30 23:24:09 +00:00
Alicia Sykes e1a78db853
🔀 Merge pull request #451 from Lissy93/REFACTOR/docker-builds-and-small-fixes
[REFACTOR] Architectural Update and Small Fixes, for V 2.0.0
2022-01-30 21:28:02 +00:00
Alicia Sykes 67326ed395 🗃️ Adds `cutToHeight` to schema (#461) 2022-01-30 04:05:10 +00:00
Alicia Sykes 6b9484a0fe 🐛 Removes max height from colorful theme (#461) 2022-01-30 04:04:28 +00:00
repo-visualizer 0edaa2818e 💛 Updates repo diagram 2022-01-30 01:24:21 +00:00
Alicia Bot 2f50261f72 💙 Makes author list 2022-01-30 01:23:30 +00:00
Alicia Bot 86f1a1b0f9 💙 Updates contributor SVG 2022-01-30 01:23:24 +00:00
liss-bot 49dd4d320a 💜 Updates contributors list 2022-01-30 01:23:19 +00:00
Alicia Sykes 73dfd2e2a4 🗑️ Removes storm screenshot, to re-add when ready 2022-01-29 12:05:23 +00:00
Alicia Sykes 0ee25507c1
Merge pull request #458 from icy-comet/patch-1
docs:fix theming title and themes' count
2022-01-29 11:08:28 +00:00
icy-comet b577650fea docs:fix theming title and themes' count 2022-01-29 09:53:13 +05:30
Alicia Sykes 0b354bf4d9 🔖 Bumps to version 2.0.0 and upates changelog 2022-01-29 02:06:36 +00:00
Alicia Sykes 63bd6e21aa :octocat: Updates bug report template, and fixes pending labels action 2022-01-29 01:35:46 +00:00
Alicia Sykes 73c929c8bb 🌟 Adds @stuu3k's dashboard to showcase (#446) 2022-01-29 01:35:10 +00:00
Alicia Sykes 31702a62c3
🔀 Merge pull request #457 from Lissy93/ARCH/docker-multi-arch
[ARCH] Multi-architecture Docker image
2022-01-29 00:56:59 +00:00
Alicia Sykes aa1dc7b300 🐳 Temporarily remove DockerHub description step 2022-01-29 00:45:17 +00:00
Alicia Sykes fd2bf9c887 🗑️ Removes obsolete Docker actions 2022-01-29 00:32:59 +00:00
Alicia Sykes 3f1f284e63 🐳 New and improved multi-architecture Docker image 2022-01-29 00:31:41 +00:00
Alicia Sykes 3d5dbed0b6 🐳 A GH action for building and publishing multi-arch Docker image to various registries 2022-01-29 00:31:02 +00:00
Alicia Sykes 31a3e652c5 🐳 Removes linting from Dockerfile 2022-01-29 00:10:29 +00:00
Alicia Sykes dfa9d7c5e8 🐳 Adds linting to Dockerfile 2022-01-29 00:08:04 +00:00
Alicia Sykes b4a3126134 📝 Updates docs with status check custom response code (#456) 2022-01-28 23:26:40 +00:00
Alicia Sykes 7cc4b26e34 🗃️ Updates schema and config docs (#456) 2022-01-28 23:25:47 +00:00
Alicia Sykes e6ba3243c3 UI implementation of custom response code (#456) 2022-01-28 23:24:10 +00:00
Alicia Sykes 7f67ea6a5f Adds option for custom acceptCodes (#456) 2022-01-28 23:23:16 +00:00
Alicia Sykes eb1bc69155 Refactors NetData widget data requeest 2022-01-28 23:21:30 +00:00
Alicia Sykes 6e2ae6d3fc 🐛 Fixes numbers being removed from tags (#430) 2022-01-28 13:33:41 +00:00
Alicia Sykes 35ccf1bf7b 📝 Updates status check in troubleshooting docs 2022-01-27 07:28:16 +00:00
Alicia Sykes 34e109ddeb 💄 Makes warning color/ yellow darker in light themes 2022-01-26 16:59:51 +00:00
Alicia Sykes 5570cd257f 🐛 Switches recovered and deaths in C19 widget 2022-01-26 16:59:10 +00:00
Alicia Sykes 488cfc1c7b 🐛 Fixes empty section visible in search (#447) 2022-01-26 10:25:23 +00:00
Alicia Sykes 33b132c463 💄 No section full height in mobile + fix Safari (#432, #442) 2022-01-26 09:58:31 +00:00
Alicia Sykes 5f8a83fd47 Merge branch 'master' of github.com:Lissy93/dashy 2022-01-24 17:47:24 +00:00
Alicia Sykes f463fbdf51 🐛 Attempts to fix Safari editor height (#439) 2022-01-24 17:46:50 +00:00
Alicia Bot 2847b66251 💙 Makes author list 2022-01-24 13:43:08 +00:00
Alicia Bot d71c3f4b37 💙 Updates contributor SVG 2022-01-24 13:43:02 +00:00
liss-bot 5e189fc685 💜 Updates contributors list 2022-01-24 13:42:57 +00:00
Alicia Sykes 7f5a5ed861
🔀 Merge pull request #438 from Lissy93/FEATURE/ip-address-widget
[FEATURE] IP Address Widget
Fixes #437 and #427
2022-01-24 13:38:01 +00:00
Alicia Sykes 730280a448 Adds Glances IP address widget (#437) 2022-01-24 13:29:08 +00:00
Alicia Sykes edbd770a2d IP address widget used ipapi.co by default (#437) 2022-01-24 12:37:47 +00:00
Alicia Sykes 5b6e75766d Adds support for fetching IP via HTTPS (#437) 2022-01-24 12:20:16 +00:00
Alicia Sykes 4be9e1f320 ⚗️ Attempts ACR container push 2022-01-24 02:54:09 +00:00
Alicia Sykes 7c9b4ec669 ⚗️ Replaces dockerfile with file 2022-01-23 14:41:30 +00:00
Alicia Sykes 8b7b09005d ⚗️ Adds missing dollar symbol 2022-01-23 13:54:58 +00:00
Alicia Sykes 23f7a748a7
🔀 Merge pull request #393 from Lissy93/ARCH/docker-buildx
[ARCH] Docker Multi-Arch Builds
2022-01-23 13:53:00 +00:00
Alicia Sykes 71325c7f3c 🐳 Attempts new multi-arch Docker action 2022-01-23 13:50:19 +00:00
Alicia Sykes 24793c8108 Merge branch 'master' of github.com:Lissy93/dashy into ARCH/docker-buildx 2022-01-23 12:20:13 +00:00
Alicia Sykes f4697bfffd Merge branch 'master' of github.com:Lissy93/dashy 2022-01-23 12:17:45 +00:00
Alicia Sykes eb3905bb8d 📝 Adds widget troubleshooting guide 2022-01-23 12:16:18 +00:00
repo-visualizer e19c7d9ea7 💛 Updates repo diagram 2022-01-23 01:24:01 +00:00
Alicia Bot b8e6c6da9f 💙 Makes author list 2022-01-23 01:23:12 +00:00
Alicia Bot 11952da5af 💙 Updates contributor SVG 2022-01-23 01:23:06 +00:00
liss-bot 0912a9045f 💜 Updates contributors list 2022-01-23 01:23:03 +00:00
Alicia Sykes f097e1901a
🔀 Merge pull request #431 from Lissy93/REFACTOR/ui-and-docs-updates
[REFACTOR] UI and docs updates
2022-01-23 00:00:26 +00:00
Alicia Sykes 425fd41ed7 🔖 Bumps to V 1.9.9 and updates changelog 2022-01-22 23:51:05 +00:00
Alicia Sykes 407384de63 🎨 Improved cross-theme widget styling and options 2022-01-22 20:46:34 +00:00
Alicia Sykes c3b6d2b0e0 💄 Collapsible sections fill available space 2022-01-22 20:46:03 +00:00
Alicia Sykes 25bc577fb1 Improved section and widget layout for Minimal view 2022-01-22 20:44:31 +00:00
Alicia Sykes 4278764101 📝 Refactors loads of docs
⚰️ Death by Documentation
2022-01-22 20:43:38 +00:00
Alicia Sykes 6cc711ae23 ⚖️ Updates dependency licenses 2022-01-22 20:42:35 +00:00
Alicia Sykes 35dee3e3b2 🚑 HOTFIX, Item save error with widgets 2022-01-21 22:38:47 +00:00
Alicia Sykes 6ddf629c40
🔀 Merge pull request #425 from Lissy93/FEATURE/more-widgets
[FEATURE] Widget Updates
2022-01-21 13:55:10 +00:00
Alicia Sykes 7d52aed2d7 🔖 Bumps to V 1.9.8 and updates changelog 2022-01-21 13:17:41 +00:00
Alicia Sykes bf39553e1d Improved widget error handling, don't fail on error 2022-01-21 13:14:30 +00:00
Alicia Sykes cf98a96a15 Small refactor to glances mixin 2022-01-21 13:02:02 +00:00
Alicia Sykes 2c9ae46207 Adds support for custom headers, body and method in widgt request object 2022-01-21 13:01:33 +00:00
Alicia Sykes 9cd8c21d8e Show real value on hover, percentage chart 2022-01-21 13:00:58 +00:00
Alicia Sykes 6cd9eac49b 🔒 Updates CORS proxy to use res.status 2022-01-21 13:00:26 +00:00
Alicia Sykes 58a085a550 Adds an email widget for AnonAddy 2022-01-21 12:58:15 +00:00
Alicia Sykes b96af21bc9 📦 Builds a toggle switch form element 2022-01-21 12:56:18 +00:00
Alicia Sykes 7953ccf3c8 Merge branch 'master' of github.com:Lissy93/dashy into FEATURE/more-widgets 2022-01-20 16:37:01 +00:00
Alicia Sykes c8f33d85bf 🚧 Adds AnonAddy widget endpoint to defaults 2022-01-20 16:36:54 +00:00
Alicia Sykes 63904366ce Adds widget compatibility into workspace view 2022-01-20 05:41:29 +00:00
Alicia Sykes 7b7c427c97 📝 Reorders widget docs 2022-01-20 05:12:33 +00:00
Alicia Sykes 1f307d3193 📝 Adds Ngrok intro for temp remote access 2022-01-20 05:01:10 +00:00
Alicia Sykes dfea4e317c Refactors all Glances widgets to inherit from parent mixin 2022-01-19 11:43:04 +00:00
snyk-bot 0d9869e6e7
fix: upgrade vue-i18n from 8.26.7 to 8.26.8
Snyk has created this PR to upgrade vue-i18n from 8.26.7 to 8.26.8.

See this package in npm:


See this project in Snyk:
https://app.snyk.io/org/lissy93/project/564ca11b-8665-48b8-befa-ccd607c3e09a?utm_source=github&utm_medium=referral&page=upgrade-pr
2022-01-19 03:24:12 +00:00
Alicia Sykes 987ee2d2f3
🌟 Adds System Monitor Board 2022-01-19 00:12:34 +00:00
Alicia Sykes ea3ffa5d36 🚨 Fixes warnings from DeepScan 2022-01-19 00:06:09 +00:00
Alicia Sykes b3dcc5e43f 🍱 Adds screenshot to widget docs 2022-01-18 23:59:41 +00:00
Alicia Sykes 2e593fcf92 Respect user updateInterval when set to zero 2022-01-18 23:56:29 +00:00
Alicia Sykes 8fd71702c7
🔀 Merge pull request #424 from b1thunt3r/patch-1
Fix formatting typo in README.md
2022-01-18 23:09:29 +00:00
Alicia Sykes 88727cf2e2 Adds a network traffic widget 2022-01-18 23:07:24 +00:00
Ishan Jain 1eba866bba
Fix formatting typo
Make it easier to read the `Searching and Shortcut` section
2022-01-18 20:19:16 +00:00
Alicia Sykes 6d9e34c90f Adds a network interface widget 2022-01-18 19:11:03 +00:00
Alicia Sykes 6b8a5ee086 Adds a system alert widget 2022-01-18 17:16:00 +00:00
Alicia Sykes 9148195b84 Built system load and load history widgets 2022-01-18 16:03:44 +00:00
Alicia Sykes f25aa07d5f 🐛 Check items exist before itterating #415 2022-01-17 19:52:15 +00:00
Alicia Sykes b76b8eb620
🔀 Merge pull request #423 from Lissy93/FEATURE/copy-url-to-clipboard
[FEATURE] Copy URL to Clipboard Option
2022-01-17 19:39:59 +00:00
Alicia Sykes 63a0d18813 Adds a disk IO widget 2022-01-15 21:30:43 +00:00
Alicia Sykes 323123e6c0 🩹 Remove continious update from disk space widget 2022-01-15 21:28:25 +00:00
Alicia Sykes 45700d7875 Adds option to copy item URL to clipboard 2022-01-15 19:29:15 +00:00
Alicia Sykes 967daac95d 📝 Updates docs with copy URL to clipboard option 2022-01-15 19:28:52 +00:00
Alicia Sykes ddf105ee65 🗃️ Updates schema with new clipboard option 2022-01-15 19:28:21 +00:00
Alicia Sykes cd0673013b 💬 Updates text for copy-to-clpiboard 2022-01-15 19:27:13 +00:00
Alicia Sykes b1da435656 🍱 Adds new icon for copy-to-clipboard 2022-01-15 19:26:20 +00:00
Alicia Sykes ce4acc1e1a 🌟 Adds @DylanBeMe's dashboard to showcase (#419) 2022-01-15 07:35:07 +00:00
repo-visualizer e58dde2b01 💛 Updates repo diagram 2022-01-16 01:27:15 +00:00
Alicia Bot f6c307cea9 💙 Makes author list 2022-01-16 01:26:23 +00:00
Alicia Bot b7de536466 💙 Updates contributor SVG 2022-01-16 01:26:13 +00:00
liss-bot 0bee86eb6b 💛 Updates sponsors table 2022-01-16 01:26:11 +00:00
liss-bot 71a1e43c6f 💜 Updates contributors list 2022-01-16 01:26:10 +00:00
Alicia Sykes 8b1282c5e1 🩹 Fixes clock date update delay at midnight (#402) 2022-01-15 05:12:24 +00:00
snyk-bot 4e87acccce
fix: upgrade @sentry/vue from 6.14.1 to 6.16.1
Snyk has created this PR to upgrade @sentry/vue from 6.14.1 to 6.16.1.

See this package in npm:


See this project in Snyk:
https://app.snyk.io/org/lissy93/project/564ca11b-8665-48b8-befa-ccd607c3e09a?utm_source=github&utm_medium=referral&page=upgrade-pr
2022-01-14 02:40:53 +00:00
Alicia Sykes b4fb238243
🔁 Merge pull request #418 from XertDev/FIX/public-holidays-query-format
Query date formatting in PublicHolidays widget
2022-01-10 23:49:11 +00:00
Xert 55a84053e2
🐛Fixes query date formatting in PublicHolidays widget 2022-01-10 21:47:51 +01:00
snyk-bot 24b285a888
fix: upgrade express from 4.17.1 to 4.17.2
Snyk has created this PR to upgrade express from 4.17.1 to 4.17.2.

See this package in npm:


See this project in Snyk:
https://app.snyk.io/org/lissy93/project/564ca11b-8665-48b8-befa-ccd607c3e09a?utm_source=github&utm_medium=referral&page=upgrade-pr
2022-01-10 15:07:39 +00:00
Alicia Sykes c5bbcebe06
🔀 Merge pull request #416 from Lissy93/FIX/add-edit-item
[FIX] Minor UI editor fixes
Fixes #389
Fixes #390
Fixes #415
2022-01-09 15:18:53 +00:00
Alicia Sykes 3d2051b087 🔖 Bumps to 1.9.7 and updates changelog 2022-01-09 15:13:18 +00:00
Alicia Sykes ed158169eb 🐛 Fixes nav links still visible after removing (#389) 2022-01-09 14:24:51 +00:00
Alicia Sykes d10e6a8987 🐛 Fixes unable to add new app bug (#390) 2022-01-09 14:21:52 +00:00
Alicia Sykes 2ec59660de 🐛 Fixes unable to edit item bug (#415) 2022-01-09 14:21:01 +00:00
repo-visualizer fd8a454afd 💛 Updates repo diagram 2022-01-09 01:27:01 +00:00
Alicia Bot c89d69cef3 💙 Makes author list 2022-01-09 01:26:05 +00:00
liss-bot cd579019ea 💛 Updates sponsors table 2022-01-09 01:25:58 +00:00
liss-bot 2fb9f53fa7 💜 Updates contributors list 2022-01-09 01:25:57 +00:00
Alicia Sykes 3a3364f156 Adds file system widget 2022-01-08 17:06:36 +00:00
Alicia Sykes e3b3f3c5a8 Adds current memory history widget 2022-01-08 14:10:04 +00:00
Alicia Sykes 4e64ccff3b Adds current memory usage widget 2022-01-08 13:55:26 +00:00
Alicia Sykes 8349206770 Adds CPU history widget 2022-01-08 13:32:43 +00:00
Alicia Sykes 7fd1cab362 Adds widgets for monitoring CPU usage 2022-01-08 12:00:34 +00:00
Alicia Sykes 9884087975 📦 Adds legend, and customizable height and title to percentage chart component 2022-01-08 11:59:40 +00:00
Alicia Sykes e253a35b05 🎨 Moves widget update logic into mixin 2022-01-08 11:58:38 +00:00
Alicia Sykes 4a14b27cf3 🚧 Working on CPU Usage Widgets 2022-01-07 23:25:32 +00:00
Alicia Sykes 9ebdf67a44 📦 Build a percentage chart component 2022-01-07 21:32:58 +00:00
Alicia Sykes 5a9017cdf7
📝 Updates deployment docs 2022-01-06 17:45:32 +00:00
Alicia Sykes 37e8a003f9 Builds CPU Gauge Chart 2022-01-05 21:22:34 +00:00
Alicia Sykes a889c0e78a 📦 Built an SVG gauge chart component 2022-01-04 22:45:36 +00:00
Alicia Sykes f5c11b3dc6 Adds Covid status widget 2022-01-03 18:31:49 +00:00
Alicia Sykes 710b3ea7ad Adds crypto wallet balance widget 2022-01-03 12:32:00 +00:00
Alicia Sykes 2ee01f603c 🎨 Refactors StatPing widget 2022-01-03 12:31:39 +00:00
Alicia Sykes d516bb02fa 💬 Adds option for clock to have `customCityName` (#402) 2022-01-03 09:39:51 +00:00
Alicia Sykes 1c8021964b 🩹 Fix capitalization in weather widget (#402) 2022-01-03 09:30:51 +00:00
Alicia Sykes 7b030d8e5b Adds current Eth gas price widget 2022-01-02 23:09:31 +00:00
Alicia Bot 3fe287d66d 💙 Makes author list 2022-01-02 03:31:14 +00:00
liss-bot fdca62b336 💛 Updates sponsors table 2022-01-02 03:31:06 +00:00
liss-bot 38998d1504 💜 Updates contributors list 2022-01-02 03:31:05 +00:00
Alicia Sykes d4d8ea5a5f
🔀 Merge pull request #397 from leocov-dev/FEATURE/keycloak-user-data
 Adds Keycloak group and role based visibility
Credit to @leocov-dev
Closes #342
2022-01-02 03:19:27 +00:00
snyk-bot a16d3739c7
fix: upgrade keycloak-js from 15.0.2 to 15.1.0
Snyk has created this PR to upgrade keycloak-js from 15.0.2 to 15.1.0.

See this package in npm:


See this project in Snyk:
https://app.snyk.io/org/lissy93/project/564ca11b-8665-48b8-befa-ccd607c3e09a?utm_source=github&utm_medium=referral&page=upgrade-pr
2022-01-02 02:44:48 +00:00
Leonardo Covarrubias 4a841b90e7 📝 additional keycloak roles/groups documentation 2022-01-01 21:06:30 -05:00
repo-visualizer d715cd97bb 💛 Updates repo diagram 2022-01-02 01:26:33 +00:00
Alicia Bot b73e798f63 💙 Makes author list 2022-01-02 01:25:45 +00:00
Alicia Bot 64a3e2c0c4 💙 Updates contributor SVG 2022-01-02 01:25:41 +00:00
liss-bot b1bb9f5f02 💛 Updates sponsors table 2022-01-02 01:25:38 +00:00
liss-bot 805438c8a2 💜 Updates contributors list 2022-01-02 01:25:37 +00:00
Leonardo Covarrubias 0c8a2c853d 📝 rollback doc file changes 2022-01-01 20:17:00 -05:00
Leonardo Covarrubias 8a5329d50c 📝 fix line endings 2022-01-01 19:56:41 -05:00
Leonardo Covarrubias 37476f1152 📝 additional keycloak roles/groups documentation 2022-01-01 19:48:57 -05:00
Alicia Sykes 64bf1cbfc3
🔀 Merge pull request #398 from BOZG/updated_swedish
Updated Swedish translation
2022-01-01 23:08:02 +00:00
Leonardo Covarrubias dd30099ad8 ❇️ added keycloak logout button 2022-01-01 17:32:48 -05:00
BOZG 158919d882 Updated Swedish translation 2022-01-01 21:53:31 +01:00
Leonardo Covarrubias da98ea5cf2 ❇️ add keycloak group and role based visibility 2022-01-01 15:51:21 -05:00
Alicia Sykes 65ffa0efc4
🔀 Merge pull request #396 from KierenConnell/patch-1
Update widgets.md
2022-01-01 17:47:29 +00:00
Kieren Connell 59694c57cc
Update widgets.md
Remove API key under Widget Usage Guide for weather widget and replace with xx's
2022-01-01 16:16:28 +00:00
Alicia Sykes c56079c7bd
🔀 Merge pull request #369 from kashif-se/master
Docker Multi-Arch GH-Action
2021-12-20 00:10:01 +00:00
Kashif Sohail d6e1cdaf2d
used builtin actions. 2021-12-14 21:07:27 +05:00
Kashif Sohail 058a94aa45
single line multiple platforms 2021-12-14 20:36:45 +05:00
Kashif Sohail e869978516
Multi-arch image push 2021-12-12 20:10:07 +05:00
Kashif Sohail 93a1e6becb
Update docker-image.yml 2021-12-12 19:37:42 +05:00
Kashif Sohail 756a50d054
Update docker-image.yml 2021-12-12 19:33:46 +05:00
Kashif Sohail e4df372427
Create docker-image.yml 2021-12-12 19:13:21 +05:00
Kashif Sohail f0883fbf0a
Update docker-image.yml 2021-12-12 19:09:26 +05:00
Kashif Sohail 502dcfb120
Update docker-image.yml 2021-12-12 19:02:47 +05:00
Kashif Sohail 37f7d685fe
buildx integration 2021-12-12 18:39:15 +05:00
440 changed files with 40247 additions and 17133 deletions

View File

@ -21,4 +21,4 @@ indent_size = 2
[*.md]
trim_trailing_whitespace = false
# Licensed under MIT, (C) 2021 Alicia Sykes <https://aliciasykes.com>
# Licensed under MIT, (C) 2024 Alicia Sykes <https://aliciasykes.com>

103
.env
View File

@ -1,33 +1,70 @@
# Store environmental variables here. All variables are optional.
# Lines beginning in '#' are ignored.
# Can be either development, production or test
# NODE_ENV=production
# The port to expose the running application on
# PORT=4000
# If you've proved SSL certs, then can set HTTPS port
# SSL_PORT=4001
# The host that Dashy is running on, domain or IP
# HOST=localhost
# The default base path for serving up static assets
# BASE_URL=./
# Optionally, specify the path of SSL private + public keys
# SSL_PRIV_KEY_PATH=/etc/ssl/certs/dashy-priv.key
# SSL_PUB_KEY_PATH=/etc/ssl/certs/dashy-pub.pem
# Usually the same as BASE_URL, but accessible in frontend
# VUE_APP_DOMAIN=https://dashy.to
# Should enable SRI for build script and link resources
# INTEGRITY=true
# Computed automatically on build. Indicates if running in container
# IS_DOCKER=true
# Again, set automatically using package.json during build time
# VUE_APP_VERSION=2.0.0
# Store environmental variables here. All variables are optional.
# Lines beginning in '#' are ignored.
# Can be either development, production or test
# NODE_ENV=production
# The port to expose the running application on
# PORT=4000
# If you've proved SSL certs, then can set HTTPS port
# SSL_PORT=4001
# The host that Dashy is running on, domain or IP
# HOST=localhost
# The default base path for serving up static assets
# BASE_URL=./
# Optionally, specify the path of SSL private + public keys
# SSL_PRIV_KEY_PATH=/etc/ssl/certs/dashy-priv.key
# SSL_PUB_KEY_PATH=/etc/ssl/certs/dashy-pub.pem
# If SSL enabled, choose whether or not to redirect http to https
# Defaults to true
# REDIRECT_HTTPS=true
# The path to the user data directory
# USER_DATA_DIR=user-data
# Enable HTTP basic auth to protect your *.yml config files
# ENABLE_HTTP_AUTH=true
# Enable basic HTTP auth to protect your *.yml config files
# BASIC_AUTH_USERNAME
# BASIC_AUTH_PASSWORD
# If you'd like frontend to automatically authenticate when basic auth enabled, set credentials here too
# VUE_APP_BASIC_AUTH_USERNAME
# VUE_APP_BASIC_AUTH_PASSWORD
# Override where the path to the configuration file is, can be a remote URL
# VUE_APP_CONFIG_PATH=/conf.yml
# Usually the same as BASE_URL, but accessible in frontend
# VUE_APP_DOMAIN=https://dashy.to
# Override the page title for the frontend app
# VUE_APP_TITLE=''
# Set the default view to load on startup (can be `minimal`, `workspace` or `home`)
# VUE_APP_STARTING_VIEW=home
# Set the Vue app routing mode (can be 'hash', 'history' or 'abstract')
# VUE_APP_ROUTING_MODE=history
# Should enable SRI for build script and link resources
# INTEGRITY=true
# Computed automatically on build. Indicates if running in container
# IS_DOCKER=true
# Again, set automatically using package.json during build time
# VUE_APP_VERSION=2.0.0
# Directory for conf.yml backups
# BACKUP_DIR=./user-data/config-backups
# Setup any other user defined vars by prepending VUE_APP_ to the var name
# VUE_APP_pihole_ip=http://your.pihole.ip
# VUE_APP_pihole_key=your_pihole_secret_key

178
.github/AUTHORS.txt vendored
View File

@ -1,37 +1,167 @@
0n1cOn3 <0n1cOn3@gmx.ch> - 1 commits
5idereal <nelson22768384@gmail.com> - 1 commits
Alberto <3170731+albcp@users.noreply.github.com> - 1 commits
Alicia <liss-bot@d0h.co> - 1 commits
BOZG <sr@bozg.se> - 1 commits
Aly Mohamed <alydemah@gmail.com> - 1 commits
Artyom <32810520+AaronPorts@users.noreply.github.com> - 1 commits
BRAVO68WEB <jbandyopadhayaya@gmail.com> - 1 commits
Begin <support@begin.com> - 1 commits
Bhasher <github.it@bhasher.com> - 1 commits
Bjorn Lammers <walkxnl@gmail.com> - 1 commits
Bumsoo Kim <bskim45@gmail.com> - 1 commits
BySempron <barquin_rkz@hotmail.com> - 1 commits
Celestial.y <celestial.y@outlook.com> - 1 commits
CrazyWolf13 <CrazyWolf13@users.noreply.github.com> - 1 commits
David <skaarj1989@gmail.com> - 1 commits
DeepSource <o> - 1 commits
Devin <uh> - 1 commits
Dawid Pietrykowski <d.pietrykowski16@gmail.com> - 1 commits
DeepSource Bot <bot@deepsource.io> - 1 commits
Desmond Kyeremeh <elDekyfin@gmail.com> - 1 commits
Devin Buhl <devin.kray@gmail.com> - 1 commits
Doug Lock <doug@douglock.co.uk> - 1 commits
Dylan-Bs <35694107+Dylan-Bs@users.noreply.github.com> - 1 commits
Eduardo Gomez <edugof@users.noreply.github.com> - 1 commits
Erwan Miran <emiran.ext@orange.com> - 1 commits
Ethan Hann <github.q2oay@slmail.me> - 1 commits
FedelloKirfed <fedellokirfed@proton.me> - 1 commits
FormatToday <616099456@qq.com> - 1 commits
Iaroslav <ronski> - 1 commits
Rune <jørnerå> - 1 commits
Ryan <urne> - 1 commits
Shreya <o> - 1 commits
Garrett Brown <gdbrown09@gmail.com> - 1 commits
Harald Töpfer <62364169+hubortje@users.noreply.github.com> - 1 commits
Hendrik Strydom <56320839+FraglyG@users.noreply.github.com> - 1 commits
Ian Neal <wopr@wopr.tech> - 1 commits
Iaroslav Dronskii <iaroslav@dronskii.ru> - 1 commits
Ishan Jain <ishan@jain.se> - 1 commits
JJ Munguia <jj@jjmung.dev> - 1 commits
Jemy SCHNEPP <dev@leethium.fr> - 1 commits
Jeremy Chauvin <jeremychauvin10@gmail.com> - 1 commits
Julian <julian.thanner@gmx.de> - 1 commits
Kieran Eglin <kieran.eglin@gmail.com> - 1 commits
Kieren Connell <Kieren@kierenconnell.com> - 1 commits
Leonardo Colman Lopes <leonardo.dev@colman.com.br> - 1 commits
Luis Pabon <luis.pabon@auronconsulting.co.uk> - 1 commits
M Asenov <m.assenov@gmail.com> - 1 commits
Markus Krause <Krause.Markus@gmx.com> - 1 commits
Max Kulik <pearelectronics@live.com> - 1 commits
Maxime Moreillon <m.moreillon@gmail.com> - 1 commits
Mert Sefa AKGUN <git@msakg.com> - 1 commits
Michael <michaellavaire@gmail.com> - 1 commits
Nicholas Malcolm <bubylou@pm.me> - 1 commits
OKAMOTO Shigehiro <primary@goahi.live> - 1 commits
PlusaN <61884717+PlusaN@users.noreply.github.com> - 1 commits
Prince Carl Velasco <princevelasco16@gmail.com> - 1 commits
Rune Bjørnerås <rune.bjorneras@gmail.com> - 1 commits
Ryan Turner <ryan.e.t@gmail.com> - 1 commits
Rúben Silva <rubensilva945@gmail.com> - 1 commits
Sacha FROMENT <sacha@sacha.house> - 1 commits
Sergio <15928132+BySempron@users.noreply.github.com> - 1 commits
Shahzzad Ali <shazzgit@gmail.com> - 1 commits
Shawn Salat <31082405+ThinkSalat@users.noreply.github.com> - 1 commits
Shreya Roy <shreyaroy.2604@gmail.com> - 1 commits
Singebob <jeremy.chauvin@systeme-u.fr> - 1 commits
Smexhy <roman.bartik@icloud.com> - 1 commits
Stavros Kois <47820033+stavros-k@users.noreply.github.com> - 1 commits
Steffen Schmidt <service.github@nocer.net> - 1 commits
Steven Kast <steven.m.kast@gmail.com> - 1 commits
Xert <xertdev@gmail.com> - 1 commits
allozavrr <razviyarrr@gmail.com> - 1 commits
baifengheixi <98794233+baifengheixi@users.noreply.github.com> - 1 commits
deepsource-io[bot] <deepsource-io[bot]@users.noreply.github.com> - 1 commits
dr460nf1r3 <njcrypted@protonmail.com> - 1 commits
flechaig <flechaig@users.noreply.github.com> - 1 commits
huangshaohuai <huangshaohuai@163.com> - 1 commits
icy-comet <50461557+icy-comet@users.noreply.github.com> - 1 commits
imlonghao <github@esd.cc> - 1 commits
jnach <33467747+jnach@users.noreply.github.com> - 1 commits
Brendan <&#39;Lear> - 2 commits
Dan <ilber> - 2 commits
jrobles98 <jose98_21@hotmail.com> - 1 commits
kxenox <floriandel@msn.com> - 1 commits
laker j.v <la@laker.gay> - 1 commits
markxoe <mark@oude-elberink.de> - 1 commits
pablomalo <paul.gouin50@gmail.com> - 1 commits
poisonadder7 <github.com@loginz.uk> - 1 commits
rtm516 <ryantmilner@hotmail.co.uk> - 1 commits
soaibsafi <soaib.safi@gmail.com> - 1 commits
ssrangisetti <46807508+ssrangisetti@users.noreply.github.com> - 1 commits
ssrangisetti <ssrangisetti@protonmail.com> - 1 commits
sur1v <gsuriv@gmail.com> - 1 commits
tazboyz16 <tazboyz_16@yahoo.com> - 1 commits
zcq100 <zcq100@gmail.com> - 1 commits
Ángel Fernández Sánchez <angelfx19@gmail.com> - 1 commits
Al Saleh <alayham@alayham.com> - 2 commits
Alejandro Pinar Ruiz <37040888+pinarruiz@users.noreply.github.com> - 2 commits
Alessandro Del Prete <alessandro.delprete@gmail.com> - 2 commits
Alexander Mnich <56564725+a-mnich@users.noreply.github.com> - 2 commits
BOZG <sr@bozg.se> - 2 commits
Brendan O&#39;Leary <boleary@gitlab.com> - 2 commits
CHAIYEON CHO <stoutcho21@gmail.com> - 2 commits
Dan Gilbert <ddg@daentech.co.uk> - 2 commits
Denis Savosin <dsavosin@at-consulting.ru> - 2 commits
Mihai <31653632+z3r0l1nk@users.noreply.github.com> - 2 commits
Ruben Silva <rubensilva945@gmail.com> - 2 commits
Tammes Burghard <kde@kuchenmampfer.de> - 2 commits
Thomas Dissert <dissertthomas@gmail.com> - 2 commits
cauterize <cauterize@programmer.net> - 2 commits
hockeymikey <hockeymikey@hockeymikey.com> - 2 commits
itsmejoeeey <9375730+itsmejoeeey@users.noreply.github.com> - 2 commits
k073l <21180271+k073l@users.noreply.github.com> - 2 commits
kt-alt <kiettrang@hotmail.com> - 2 commits
liss-bot <87835202+liss-bot@users.noreply.github.com> - 2 commits
ᗪєνιη <υн> - 2 commits
mmihaly <mmihaly@gmail.com> - 2 commits
patrickheeney <patrickheeney@gmail.com> - 2 commits
rokiden <cheto@bk.ru> - 2 commits
root <root@dashy-dev.alayham.com> - 2 commits
rtm516 <rtm516@users.noreply.github.com> - 2 commits
z3r0l1nk <stroescu.mihai@gmail.com> - 2 commits
zcq100 <m@zcq100.com> - 2 commits
ᗪєνιη ᗷυнʟ <onedr0p@users.noreply.github.com> - 2 commits
Alucarddelta <dreyer.brent@gmail.com> - 3 commits
Berk Sümbül <mail@berksmbl.com> - 3 commits
Tuzi555 <jakub.tuzar@gmail.com> - 3 commits
Walkx <71191962+walkxcode@users.noreply.github.com> - 3 commits
Niklas <abe> - 4 commits
aterox <kenneth@kenneth.church> - 3 commits
bogyeong <boggyhint@gmail.com> - 3 commits
stanly0726 <37040069+stanly0726@users.noreply.github.com> - 3 commits
Andreas Violaris <48277853+aviolaris@users.noreply.github.com> - 4 commits
David Alasow <davidalasow@gmail.com> - 4 commits
DimitriDR <dimitridroeck@gmail.com> - 4 commits
Lissy93 <alicia@omg.lol> - 4 commits
Niklas Zabel <nzabel@Mini-von-Niklas.fritz.box> - 4 commits
Rémy GRANDIN <remy.gr@ndin.fr> - 4 commits
Todd E Johnson <todd@toddejohnson.net> - 4 commits
Totto16 <tobiausgais@gmail.com> - 4 commits
Walkx <walkxnl@gmail.com> - 4 commits
wozboz <philip@iuno.tech> - 4 commits
Alberto Caravaca <3170731+albcp@users.noreply.github.com> - 5 commits
Alicie <gh@d0h.co> - 5 commits
Benjamin Montgomery <bmontgom@montynet.org> - 5 commits
Chris Nielsen <nielsen.chris@gmail.com> - 5 commits
UrekD <urek.denis@gmail.com> - 5 commits
Erik <roo> - 6 commits
Erik Vroon <erik.vroon22@gmail.com> - 6 commits
Jammo2k5 <jammo2k5@hotmail.co.uk> - 6 commits
Leonardo Covarrubias <leos@leocov.com> - 6 commits
Magnus Sundström <kmvsundstrom@gmail.com> - 6 commits
dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> - 6 commits
kristian <kristianbrasel@gmail.com> - 6 commits
liss-bot <liss-bot@users.noreply.github.com> - 6 commits
Kashif <ohai> - 9 commits
Alicia <yke> - 10 commits
Josua Blejeru <josua@blejeru.com> - 8 commits
Tobias <tobias.meier109@gmail.com> - 8 commits
Jimmeh <jimmeh@gmail.com> - 9 commits
Kashif Sohail <kashif.ezone@gmail.com> - 9 commits
Liss-Bot <liss-bot@d0h.co> - 11 commits
Tobias <96661824+CrazyWolf13@users.noreply.github.com> - 12 commits
Alejandro Pinar Ruiz <alejandropinarruiz@gmail.com> - 14 commits
Alicia Sykes <&#x3D;> - 16 commits
github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> - 16 commits
repo-visualizer <repo-visualizer@users.noreply.github.com> - 17 commits
snyk-bot <snyk-bot@users.noreply.github.com> - 18 commits
snyk-bot <snyk-bot@snyk.io> - 20 commits
EVOTk <45015615+EVOTk@users.noreply.github.com> - 22 commits
Alicia <yke> - 23 commits
Alicia <yke> - 28 commits
Alicia <o> - 34 commits
liss-bot <liss-bot@d0h.co> - 46 commits
Matthias Bilger <matthias@bilger.info> - 19 commits
aterox <church.kennetha@gmail.com> - 19 commits
EVOTk <45015615+EVOTk@users.noreply.github.com> - 24 commits
snyk-bot <snyk-bot@snyk.io> - 24 commits
Marcell Fülöp <marekful@protonmail.com> - 27 commits
Alicia Sykes <alicia@futr.ai> - 28 commits
Lissy93 <gh@d0h.co> - 78 commits
Lissy93 <Lissy93@users.noreply.github.com> - 202 commits
Alicia <yke> - 304 commits
Alicia <yke> - 1249 commits
repo-visualizer <repo-visualizer@users.noreply.github.com> - 128 commits
Lissy93 <Lissy93@users.noreply.github.com> - 222 commits
Alicia Bot <87835202+liss-bot@users.noreply.github.com> - 240 commits
liss-bot <liss-bot@d0h.co> - 244 commits
Alicia Sykes <gh@d0h.co> - 439 commits
Alicia Sykes <alicia@omg.lol> - 471 commits
Alicia Sykes <sykes.alicia@gmail.com> - 1488 commits

137
.github/CHANGELOG.md vendored
View File

@ -1,5 +1,142 @@
# Changelog
## ✨ 2.1.1 Improvements [PR #775](https://github.com/Lissy93/dashy/pull/775)
- Stop status checks when item destroyed
- #767 by @marekful
- Add Elizabeth + non-underground lines to TFL widget
- #766 by @dougaldhub
- Ensure first SSL certificate check finished before second
- #760 by @marekful
- Huge improvment to the way widgets are defined
- #758 by @patrickheeney
- Update APOD widget to use https://apod.as93.net
- #745 by @k073l
- Small docs update
- #741 by @markusdd
- A set of awesome NextCloud widgets
- #740 by @marekful
- Option to show / hide detailed info for StatPing widget
- #714 by @marekful
- Korean translations
- #711 by @boggy-cs
- Small docs update
- #705 by @pablomalo
## ✨ 2.0.9 Adds Multi-Page Support [PR #685](https://github.com/Lissy93/dashy/pull/685)
- Adds Widgets for AdGuard
## ✨ 2.0.9 Adds Multi-Page Support [PR #663](https://github.com/Lissy93/dashy/pull/663)
- Fix KeyCloak API URL (#564)
- Fix guest has config access (#590)
- Fix collapsible content in multi-page support (#626)
- Fix layout and item size buttons ( #629)
- Refactor make request in RSS widget (#632)
- Fix material-design-icons header in schema (#640)
- Add option to hide seconds in clock widget (#644)
- Fix pageInfo not being read in router (#645)
- Fix startingView not honored (#646)
- Fix Status Check default (#651)
- Add option to hide image in SportsScores Widget (#654)
- Add Adventure-basic theme (#655)
- Write docs for sub-items (#657)
- Add Font-Awesome displaying as square to troubleshooting guide (#659)
- Show expand / collapse in context menu (#660)
- Only deploy new release when relevant files have changed
## ✨ 2.0.8 Adds Multi-Page Support [PR #617](https://github.com/Lissy93/dashy/pull/617)
- Adds support for multiple pages per-dashboard
- Adds new attribute at root of main config file: `pages`
- Updates router and nav-bar to automatically create paths for both local and remote configs
## ⚡️ 2.0.7 Improves handling of Sections and Items [PR #595](https://github.com/Lissy93/dashy/pull/595)
- Adds functionality for sub-items / item-groups
- Creates an item mixin, for reusing functionality
- Item width calculated based on parent section width
- Improved mobile support, long-press for right-click
- Adds 2 new themes (`lissy` and `charry-blossom`)
- Adds 2 new widgets (`mullvad-status`, and `blacklist-check`)
## 🐛 2.0.6 Fixes user requested issues [PR #557](https://github.com/Lissy93/dashy/pull/557)
- Allows middle click open new tab, Re: #492
- Implements Max redirects for status checks, Re: #494
- Adds Gitpod config for cloud-ready IDE, Re: #497
- Adss new screenshots to showcase, Re: #505
- Fixes excess space below footer, Re: #522
- Allows iframe content to be viewed full-screen, Re: #524
- Fixes Glances widgets with Authorization headers, Re: #546
- Adds target attribute to nav links, Re: #552
- Removes fixed max-width on wide-screens, Re: #554
- Adds missing type attribute to external CSS, Re: #560
- Updates path to Keycloak API, Re: #564
- Fixes link to @walkxhub homelab icons, Re #568
- Fixes local image path on sub-page, Re: #570
- Adds typecheck on edit item tags, Re: #575
- Fixes item size in config not honored, Re: #576
## ✨ 2.0.5 - Bug Fixes and a few New Features
#### Partially revert 2.0.4, fixing several issues caused by `conf.yml` not being loaded at startup.
This change requires a rebuild of the application when several options under `appConfig` are changed.
Fixes #544 #555
#### Several other changes since 2.0.4, including:
The `Add New Section` button on the UI editor now displays if no sections are present. #536
When using SSL, the server can now redirect from HTTP to HTTPS. This is enabled by default when using SSL. #538
Section context menus are now accessible on mobile, and will no longer clip off the screen. #541
Italian translations have been added. #556
## ✨ 2.0.4 - Dynamic Config Loading [PR #528](https://github.com/Lissy93/dashy/pull/528)
- `conf.yml` is now loaded dynamically and the app now only needs a browser refresh on config change, not a full rebuild!
## 🐛 2.0.3 - Bug Fixes [PR #488](https://github.com/Lissy93/dashy/pull/488)
- Press enter to submit login form (Re: #483)
- Allow disabling write to local storage and disk (Re: #485)
- Fix malformed YAML from export config (Re: #482)
- Allow global option for useProxy (Re: #486)
- Look into arrow key navigation error (Re: #463)
- Disallow displaying config (Re: #455)
- Round values in Glances Alerts widget (Re: #454)
- Create a CPU temp widget (Re: #452)
- Add to docs: Keycloak in Kubernetes (Re: #479)
- Add a widget for displaying images (Re: #487)
## ⬆️ 2.0.2 - Dependency Updates [PR #471](https://github.com/Lissy93/dashy/pull/471)
- Updates Alpine version for main Dockerfile
- Updates node_modules to latest stable versions
## 🐛 2.0.1 - Fixes Section Height [PR #462](https://github.com/Lissy93/dashy/pull/462)
- Adds `cutToHeight` to config schema (Re: #461)
- Removes the full-height CSS from colorful theme
- Improved config validation warnings in JSON editor
- Removes empty Keycloak block from appConfig editor
- Adds typechecking to search and clear search for Safari
## ⚡️ 2.0.0 - Small Fixes and Docker Multi-Arch Build [PR #451](https://github.com/Lissy93/dashy/pull/451)
- Fixes full-height sections for mobile and Safari (Re: #432, #442)
- Fixes empty section visible in search (Re: #447)
- Fixes numbers omited from tag names (Re: #430)
- Option for custom status code in status check (Re: #456, #448)
- Adds @stuu3k's dashboard to showcase (Re: #446)
- Switches recover and death count in Covid widget (Re: #148)
- Improved contrast in light material theme
- Adds new script to lint, test, build and publish a multi-architecture Docker image to various registries
## 💄 1.9.9 - Minor UI + Docs Updates [PR #431](https://github.com/Lissy93/dashy/pull/431)
- Improved theme support for widgets
- Better widget layout in Workspace and Minimal views
- Updates lots of the docs
## ✨ 1.9.8 - More Widgets and Widget Improvements [PR #425](https://github.com/Lissy93/dashy/pull/425)
- Fixes several minor widget issues raised by users
- Adds several new widgets, for monitoring system
- Better widget data requests and error handling
- Implements widget support into Workspace view
## 🐛 1.9.7 - Minor UI Editor Bug fixes [PR #416](https://github.com/Lissy93/dashy/pull/416)
- Fixes unable to edit item bug (#415)
- Fixes unable to add new app bug (#390)
- Fixes nav links visibility (#389)
## ⚡️ 1.9.6 - Adds Proxy Support for Widget Requests [PR #392](https://github.com/Lissy93/dashy/pull/392)
- Refactors widget mixin to include data requests, so that code can be shared between widgets
- Adds a Node endpoint for proxying requests server-side, used for APIs that are not CORS enabled

View File

@ -14,14 +14,25 @@ body:
- Self-Hosted (Docker)
- Self-Hosted (Bare Metal)
- Cloud Service (Static)
- Other (Specify below)
validations:
required: true
- type: input
id: system
attributes:
label: System
description: >-
For deployment issues, specify your [distro or OS](https://whatsmyos.com/) and/ or Docker version.
For client-side issues, include your [browser version](https://www.whatsmybrowser.org/)
placeholder: e.g. Firefox 101, Manjaro Linux 21.3.0, Docker 20.10.16
validations:
required: false
- type: input
id: version
attributes:
label: Version
description: What version of Dashy are you running?
placeholder: 1.6.9 ← should look like this (check config menu)
placeholder: 4.2.0 ← should look like this (check config menu)
validations:
required: false
- type: textarea
@ -29,6 +40,7 @@ body:
attributes:
label: Describe the problem
description: Please describe exactly what is not working, include the steps to reproduce, actual result and expected result
placeholder: When doing ABC then DEF, I expect to see XYZ, but I actually see ZYX
validations:
required: true
- type: textarea
@ -45,11 +57,13 @@ body:
label: Please tick the boxes
description: Before submitting, please ensure that
options:
- label: You are using a [supported](https://github.com/Lissy93/dashy/blob/master/.github/SECURITY.md#supported-versions) version of Dashy (check the first two digits of the version number)
- label: You have explained the issue clearly, and included all relevant info
required: true
- label: You are using a [supported](https://github.com/Lissy93/dashy/blob/master/.github/SECURITY.md#supported-versions) version of Dashy
required: true
- label: You've checked that this [issue hasn't already been raised](https://github.com/Lissy93/dashy/issues?q=is%3Aissue)
required: true
- label: You've checked the [docs](https://github.com/Lissy93/dashy/tree/master/docs#readme) and [troubleshooting](https://github.com/Lissy93/dashy/blob/master/docs/troubleshooting.md#troubleshooting) guide
- label: You've checked the [docs](https://github.com/Lissy93/dashy/tree/master/docs#readme) and [troubleshooting](https://github.com/Lissy93/dashy/blob/master/docs/troubleshooting.md#troubleshooting) guide ![important](https://img.shields.io/badge/Important!-F6094E)
required: true
- label: You agree to the [code of conduct](https://github.com/Lissy93/dashy/blob/master/.github/CODE_OF_CONDUCT.md#contributor-covenant-code-of-conduct)
required: true
@ -57,7 +71,9 @@ body:
attributes:
value: |-
## Thanks 🙏
Sorry you are having issues with Dashy, and thank you for raising this ticket - in doing so you are helping to make the app better for everyone 💪
You should expect a reply within the next 48 hours :)
<img align="left" width="160" src="https://i.ibb.co/S5vCnhL/gh-thanks.gif" alt="🐙" />
Thank you for raising this ticket - in doing so you are helping to make the app better for everyone 💪<br>
You should expect a reply within the next 48 hours :)<br>
⭐️ Consider dropping the repo a star if you're enjoying Dashy!<br>
validations:
required: false
required: false

45
.github/LATEST_CHANGELOG.md vendored Normal file
View File

@ -0,0 +1,45 @@
## ✨ 2.1.1 Improvements [PR #775](https://github.com/Lissy93/dashy/pull/775)
#### Bug Fixes 🐛
- Update APOD widget to use https://apod.as93.net
- #745 by @k073l
- Fixes theme applying bug (#774)
#### Improvements ⚡️
- Stop status checks when item destroyed
- #767 by @marekful
- Ensure first SSL certificate check finished before second
- #760 by @marekful
- Huge improvement to the way widgets are defined
- #758 by @patrickheeney
#### Features ✨
- A set of awesome NextCloud widgets
- #740 by @marekful
- Add Elizabeth + non-underground lines to TFL widget
- #766 by @dougaldhub
- Option to show / hide detailed info for StatPing widget
- #714 by @marekful
- Korean translations
- #711 by @boggy-cs
- Adds option to force ignore widget errors
#### Docs 📕
- Small docs update
- #741 by @markusdd
- Small docs update
- #705 by @pablomalo
- Adds Dipanghosh's dash to showcase
---
Big thanks to the above developers, for their awesome work on this release!
V 2.1.2 is in the works, and includes an overhaul of how the config is loaded, so stay tuned for that!
And Happy Friday!

543
.github/LEGAL.md vendored
View File

@ -1,157 +1,18 @@
# 3rd-Party Software for Dashy
---
The following 3rd-party software packages may be used by or distributed with **dashy**. Any information relevant to third-party vendors listed below are collected using common, reasonable means.
Date generated | Revision ID
:------------: | :----------:
10/02/21 | cc7101a871e151a2dea7830d1e492ef6ef05fd53
01/22/22 | cc7101a871e151a2dea7830d1e492ef6ef05fd53
---
## Dependencies
### [@sentry/tracing (6.11.0)](https://www.npmjs.com/package/@sentry/tracing)
#### Declared Licenses
MIT
```
MIT License
Copyright (c) 2020 Sentry (https://sentry.io/) and individual contributors.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```
#### Other Licenses
Apache-2.0
```
Copyright 2020 Google LLC
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and limitations under the License.
```
---
### [@sentry/vue (6.11.0)](https://www.npmjs.com/package/@sentry/vue)
#### Declared Licenses
**Multi-license:**MIT, **Multi-license:**BSD-3-Clause
```
Copyright (c) 2021, @sentry/vue Contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```
```
MIT License
Copyright (c) 2019, Sentry
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
\* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
\* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
\* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```
#### Other Licenses
Apache-2.0
```
Copyright Microsoft Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and limitations under the License.
```
---
### [ajv (8.6.2)](https://www.npmjs.com/package/ajv)
#### Declared Licenses
MIT
```
The MIT License (MIT)
@ -178,16 +39,15 @@ SOFTWARE.
```
#### Other Licenses
---
### [axios (0.21.1)](https://www.npmjs.com/package/axios)
#### Declared Licenses
MIT
```
Copyright (c) 2014-present Matt Zabriskie
@ -211,15 +71,15 @@ THE SOFTWARE.
```
#### Other Licenses
---
### [body-parser (1.19.0)](https://www.npmjs.com/package/body-parser)
#### Declared Licenses
MIT
```
(The MIT License)
@ -246,17 +106,15 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
#### Other Licenses
---
### [connect (3.7.0)](https://www.npmjs.com/package/connect)
#### Declared Licenses
MIT
```
(The MIT License)
@ -286,16 +144,15 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
#### Other Licenses
---
### [crypto-js (4.1.1)](https://www.npmjs.com/package/crypto-js)
#### Declared Licenses
MIT
```
\# License
@ -324,13 +181,12 @@ THE SOFTWARE.
```
#### Other Licenses
BSD-2-Clause
```
Copyright (c) 2021, crypto-js Contributors<<beginOptional>>
Copyright (c) 2022, crypto-js Contributors<<beginOptional>>
All rights reserved.<<endOptional>>
Redistribution and use in source and binary forms, with or without
@ -390,6 +246,7 @@ THE SOFTWARE.
```
#### Other Licenses
---
@ -402,7 +259,7 @@ Apache-2.0
```
Copyright 2016 Red Hat, Inc
Copyright 2016 Red Hat, Inc. and/or its affiliates
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -417,13 +274,12 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and limitations under the License.
```
#### Other Licenses
MIT
**Multi-license:**MIT, **Multi-license:**Apache-2.0 *OR* MIT
```
Copyright (c) 2017 Brett Epps
Copyright (c) 2017 Brett Epps <https://github.com/eppsilon>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
@ -444,7 +300,6 @@ SOFTWARE.
```
---
### [register-service-worker (1.7.2)](https://www.npmjs.com/package/register-service-worker)
@ -479,6 +334,8 @@ THE SOFTWARE.
```
#### Other Licenses
---
@ -489,6 +346,55 @@ THE SOFTWARE.
Apache-2.0 *OR* MIT
```
Copyright 2018 AJ ONeal
This is open source software; you can redistribute it and/or modify it under the
terms of either:
a) the "MIT License"
b) the "Apache-2.0 License"
MIT License
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Apache-2.0 License Summary
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
```
#### Other Licenses
MIT
```
Copyright 2018 AJ ONeal
@ -572,6 +478,150 @@ OTHER DEALINGS IN THE SOFTWARE.
```
#### Other Licenses
---
### [@sentry/tracing (6.11.0)](https://www.npmjs.com/package/@sentry/tracing)
#### Declared Licenses
MIT
```
MIT License
Copyright (c) 2020 Sentry (https://sentry.io/) and individual contributors.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```
#### Other Licenses
Apache-2.0
```
Copyright Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and limitations under the License.
```
---
### [@sentry/vue (6.11.0)](https://www.npmjs.com/package/@sentry/vue)
#### Declared Licenses
BSD-3-Clause *OR* MIT
```
MIT License
Copyright (c) 2019, Sentry
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
\* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
\* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
\* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```
#### Other Licenses
**Multi-license:**Apache-2.0, **Multi-license:**MIT
```
Copyright Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and limitations under the License.
```
```
Copyright (c) 2019 Sentry
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```
---
@ -611,6 +661,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
#### Other Licenses
---
@ -656,126 +707,7 @@ For more information, please see http://creativecommons.org/publicdomain/zero/1.
```
#### Other Licenses
**Multi-license:**Apache-2.0, **Multi-license:**MIT, **Multi-license:**GPL-2.0-or-later, **Multi-license:**GPL-3.0-only, **Multi-license:**W3C, **Multi-license:**GPL-3.0-or-later *OR* W3C, **Multi-license:**GPL-3.0-or-later, **Multi-license:**BSD-3-Clause, **Multi-license:**PHP-3.01
```
Copyright 2021, simple-icons Contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and limitations under the License.
```
```
Copyright (c) 2021, simple-icons Contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```
```
Copyright (C) 2021, simple-icons Contributors
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 or any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
```
```
Copyright (C) 2021, simple-icons Contributors
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/
```
```
Copyright (C) [$date-of-software] World Wide Web Consortium, (Massachusetts Institute of Technology, European Research Consortium for Informatics and Mathematics, Keio University). All Rights Reserved.
This work is distributed under the W3C® Software License in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
```
```
Copyright (C) 2021, simple-icons Contributors
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 or any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/
```
```
Copyright (c) 2021, simple-icons Contributors . All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```
```
Copyright (c) 1999 - 2012 The PHP Group. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, is permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. The name "PHP" must not be used to endorse or promote products derived from this software without prior written permission. For written permission, please contact group@php.net.
4. Products derived from this software may not be called "PHP", nor may "PHP" appear in their name, without prior written permission from group@php.net. You may indicate that your software works in conjunction with PHP by saying "Foo for PHP" instead of calling it "PHP Foo" or "phpfoo"
5. The PHP Group may publish revised and/or new versions of the license from time to time. Each version will be given a distinguishing version number. Once covered code has been published under a particular version of the license, you may always continue to use it under the terms of that version. You may also choose to use such covered code under the terms of any subsequent version of the license published by the PHP Group. No one other than the PHP Group has the right to modify the terms applicable to covered code created under this License.
6. Redistributions of any form whatsoever must retain the following acknowledgment: "This product includes PHP software, freely available from <http://www.php.net/software/>".
THIS SOFTWARE IS PROVIDED BY THE PHP DEVELOPMENT TEAM ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PHP DEVELOPMENT TEAM OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
This software consists of voluntary contributions made by many individuals on behalf of the PHP Group.
The PHP Group can be contacted via Email at group@php.net.
For more information on the PHP Group and the PHP project, please see <http://www.php.net>.
PHP includes the Zend Engine, freely available at <http://www.zend.com>.
```
---
@ -811,6 +743,25 @@ SOFTWARE.
```
#### Other Licenses
Apache-2.0
```
Copyright 2011-2021 Jos de Jong, http://jsoneditoronline.org
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and limitations under the License.
```
---
@ -846,7 +797,7 @@ SOFTWARE.
```
#### Other Licenses
---
@ -882,13 +833,12 @@ THE SOFTWARE.
```
#### Other Licenses
**Multi-license:**Apache-2.0, **Multi-license:**GPL-2.0-or-later
**Multi-license:**Apache-2.0 *OR* GPL-2.0-or-later *OR* MPL-1.1, **Multi-license:**Apache-2.0
```
Copyright 2021, vue Contributors
Copyright 2022, vue Contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -904,14 +854,6 @@ See the License for the specific language governing permissions and limitations
```
```
Copyright (C) 2021, vue Contributors
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 or any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
```
---
### [vue-i18n (8.25.0)](https://www.npmjs.com/package/vue-i18n)
@ -945,6 +887,9 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
#### Other Licenses
---
@ -980,6 +925,7 @@ SOFTWARE.
```
#### Other Licenses
---
@ -1015,6 +961,8 @@ SOFTWARE.
```
#### Other Licenses
---
@ -1050,6 +998,8 @@ SOFTWARE.
```
#### Other Licenses
---
@ -1084,8 +1034,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```
#### Other Licenses
---
@ -1121,6 +1070,8 @@ SOFTWARE.
```
#### Other Licenses
---
### [vue-toasted (1.1.28)](https://www.npmjs.com/package/vue-toasted)
@ -1153,4 +1104,14 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```
#### Other Licenses
---
[FOSSA]: # (Do not touch the comments below)
[FOSSA]: # (==depsig=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855==)

4
.github/SUPPORT.md vendored
View File

@ -12,4 +12,6 @@ If you'd like to help support Dashy's future development, see **[Contributing](h
To get in contact with the author, email me at **`alicia at omg dot lol`** **[[PGP]](https://keybase.io/aliciasykes/pgp_keys.asc?fingerprint=0688f8d34587d954e9e51fb8fedb68f55c0283a7)**.
-Thank you
-Thank you
> <sub>Prior to raising a ticket, please check the [docs](https://github.com/Lissy93/dashy/tree/master/docs#readme), [troubleshooting guide](https://github.com/Lissy93/dashy/blob/master/docs/troubleshooting.md) and [previous issues](https://github.com/Lissy93/dashy/issues?q=is%3Aissue).</sub><br><sup>If you're new here, consider also staring the repo before submitting your ticket.</sup>

View File

@ -1,13 +0,0 @@
# When a PR is merged, any associated issues will have a Done label applied
# The label will depend on the issue type, see: ./github/close-label.yml
name: 💡 Apply Done Label
on:
pull_request:
types: [opened, merged, closed]
jobs:
triage:
runs-on: ubuntu-latest
steps:
- uses: logerfo/close-label@0.0.4
with:
repo-token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}

View File

@ -1,15 +0,0 @@
# Automatically assigns the author as a reviewer to opened PRs and issues
name: 💡 Auto-Assign Author to PR
on:
pull_request:
types: [opened]
issues:
types: [opened]
jobs:
assign-author:
runs-on: ubuntu-latest
steps:
- name: Assign author
uses: technote-space/assign-author@v1
with:
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}

View File

@ -8,15 +8,33 @@ on:
jobs:
tag-pre-release:
runs-on: ubuntu-latest
permissions:
contents: write
outputs:
tag: ${{ steps.autotag.outputs.tagname }}
steps:
- uses: actions/checkout@v2
- uses: butlerlogic/action-autotag@stable
id: autotag
with:
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
strategy: package
commit_message_template: "🔖 {{number}} {{message}} (by {{author}})\nSHA: {{sha}}\n."
github-release:
runs-on: ubuntu-latest
needs: tag-pre-release
if: ${{ needs.tag-pre-release.outputs.tag }}
steps:
- uses: actions/checkout@v2
- uses: ncipollo/release-action@v1
env:
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
with:
tag: ${{ needs.tag-pre-release.outputs.tag }}
bodyFile: ".github/LATEST_CHANGELOG.md"
mark-issue-fixed:
runs-on: ubuntu-latest
if: ${{ github.event_name == 'issues' }}
steps:
- uses: actions/checkout@v2
- name: Label Fixed Issues

View File

@ -1,14 +0,0 @@
# Updates multiple issues with a certain tag, with a comment containing a given message
name: 🎯 Broadcast Message across Issues
on:
workflow_dispatch:
inputs:
message: { required: false }
labels: { required: false }
jobs:
broadcast:
runs-on: ubuntu-latest
steps:
- uses: jenschelkopf/broadcast-action@master
with:
token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}

View File

@ -1,25 +0,0 @@
# This action builds and deploys the master branch
name: 🏗️ Build App to Branch
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout 🛎️
uses: actions/checkout@v2.3.1
- name: Install and Build 🔧
run: |
npm install
npm run build
- name: Deploy 🚀
uses: JamesIves/github-pages-deploy-action@4.1.4
if: ${{ github.repository_owner == 'lissy93' }}
with:
branch: dev-demo
folder: dist

18
.github/workflows/build-docs-site.yml vendored Normal file
View File

@ -0,0 +1,18 @@
# Builds and published Dashy's documentation website
name: 📝 Build Docs Site
on:
workflow_dispatch:
push:
branches: [ WEBSITE/docs-site-source ]
jobs:
deploy:
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/WEBSITE/docs-site-source'
steps:
- uses: actions/checkout@master
- uses: redkubes/docusaurus-deploy-action@v1
with:
source-folder: ./
git-user: ${{ github.actor }}
git-password: ${{ secrets.GITHUB_TOKEN }}
deployment-branch: gh-pages

View File

@ -1,13 +0,0 @@
# Caches artifacts, including NPM dependencies, to speed up build times
name: 🏗️ Caching Artifacts
on: push
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/cache@v2
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-

View File

@ -1,22 +0,0 @@
# Attempts to auto-detect weather an issue is a duplicate, and adds a comment
name: 🎯 Issue Duplicate Check
on:
issues:
types: [opened, edited]
jobs:
check-duplicate:
runs-on: ubuntu-latest
steps:
- uses: wow-actions/potential-duplicates@v1
with:
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
filter: ''
exclude: '[BUG] [QUESTION] [FEEDBACK] [SHOWCASE]'
label: '🕸️ Potential Duplicate'
state: all
threshold: 0.75
reactions: 'eyes'
comment: >
Potential duplicates: {{#issues}}
- [#{{ number }}] {{ title }} ({{ accuracy }}%)
{{/issues}}

View File

@ -13,21 +13,21 @@ jobs:
uses: actions/stale@v4
with:
repo-token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
days-before-stale: 30
days-before-stale: 360
days-before-close: 5
operations-per-run: 30
remove-stale-when-updated: true
enable-statistics: true
stale-issue-message: >
This issue has gone 6 weeks without an update. To keep the ticket open, please indicate that it is still relevant in a comment below.
This issue has gone 3 months without an update. To keep the ticket open, please indicate that it is still relevant in a comment below.
Otherwise it will be closed in 5 working days.
stale-pr-message: >
This PR is stale because it has been open 6 weeks with no activity. Either remove the stale label or comment below with a short update,
otherwise this PR will be closed in 5 days.
close-issue-message: >
This issue was automatically closed because it has been stalled for over 6 weeks with no activity.
This issue was automatically closed because it has been stalled for over 1 year with no activity.
close-pr-message: >
This pull request was automatically closed because it has been stalled for over 6 weeks with no activity.
This pull request was automatically closed because it has been stalled for over 1 year with no activity.
stale-issue-label: '⚰️ Stale'
close-issue-label: '🕸️ Inactive'
stale-pr-label: '⚰️ Stale'
@ -76,4 +76,4 @@ jobs:
close-issue-label: '🕸️ Inactive'
close-pr-label: '🕸️ Inactive'
exempt-issue-labels: '📌 Keep Open'
exempt-pr-labels: '📌 Keep Open'
exempt-pr-labels: '📌 Keep Open'

View File

@ -1,20 +0,0 @@
# Lints code merged into master branch
name: 🌈 Lint Code Base
on:
pull_request:
branches: [master]
jobs:
build:
name: Lint Code Base
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Lint Code Base
uses: github/super-linter@v4
env:
VALIDATE_ALL_CODEBASE: false
DEFAULT_BRANCH: master
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -1,30 +0,0 @@
# Finds typos in the English language within the app, submits a PR with fixes
name: 🌈 Spelling Auto-Fix
on:
push:
branches: [ master ]
pull_request:
types: [opened]
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
if: startsWith(github.head_ref, 'AUTO/') == false
uses: actions/checkout@v2
- name: Spell Check
if: startsWith(github.head_ref, 'AUTO/') == false
uses: sobolevn/misspell-fixer-action@master
- name: Create PR
uses: peter-evans/create-pull-request@v3.10.1
if: startsWith(github.head_ref, 'AUTO/') == false
with:
token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
base: master
commit-message: ':pencil2: Auto-fix typos in text'
title: '[AUTO] Fix spelling and language'
branch: 'AUTO/spelling-corrections'
committer: 'Liss-Bot <alicia-gh-bot@mail.as93.net>'
assignees: Lissy93
reviewers: Lissy93

View File

@ -15,4 +15,3 @@ jobs:
collapsibleThreshold: '25'
failOnDowngrade: 'false'
path: 'yarn.lock'
updateComment: 'true'

View File

@ -0,0 +1,103 @@
# Scans, builds and releases a multi-architecture docker image
name: 🐳 Build + Publish Multi-Platform Image
on:
workflow_dispatch:
push:
branches: ['master']
tags: [v*]
paths:
- '**.js'
- 'src/**'
- 'public/**'
- 'services/**'
- '.github/workflows/docker-build-publish.yml'
- 'Dockerfile'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
packages: write
env:
DH_IMAGE: ${{ secrets.DOCKER_REPO }}
GH_IMAGE: ${{ github.repository_owner }}/${{ github.event.repository.name }}
jobs:
docker:
runs-on: ubuntu-latest
permissions: { contents: read, packages: write }
if: "!contains(github.event.head_commit.message, '[ci-skip]')"
steps:
- name: 🛎️ Checkout Repo
uses: actions/checkout@v2
- name: 🔖 Get App Version
uses: tyankatsu0105/read-package-version-actions@v1
id: package-version
- name: 🗂️ Make Docker Meta
id: meta
uses: docker/metadata-action@v3
with:
images: |
${{ env.DH_IMAGE }}
ghcr.io/${{ env.GH_IMAGE }}
tags: |
type=ref,event=tag,prefix=release-,suffix={{tag}}
type=semver,pattern={{raw}},value=${{ steps.package-version.outputs.version }}
labels: |
maintainer=Lissy93
org.opencontainers.image.title=Dashy
org.opencontainers.image.description=A self-hosted startpage for your server
org.opencontainers.image.documentation=https://dashy.to/docs
org.opencontainers.image.authors=Alicia Sykes
org.opencontainers.image.licenses=MIT
- name: 🔧 Set up QEMU
uses: docker/setup-qemu-action@v1
with:
platforms: linux/amd64,linux/arm64,linux/arm/v7
- name: 🔧 Set up Docker Buildx
uses: docker/setup-buildx-action@v1
id: buildx
with:
driver-opts: image=moby/buildkit:v0.10.6
- name: 👀 Inspect builder
run: |
echo "Name: ${{ steps.buildx.outputs.name }}"
echo "Endpoint: ${{ steps.buildx.outputs.endpoint }}"
echo "Status: ${{ steps.buildx.outputs.status }}"
echo "Flags: ${{ steps.buildx.outputs.flags }}"
echo "Platforms: ${{ steps.buildx.outputs.platforms }}"
- name: 🔑 Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: 🔑 Login to GitHub Container Registry
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: 🚦 Check Registry Status
uses: crazy-max/ghaction-docker-status@v1
- name: ⚒️ Build and push
uses: docker/build-push-action@v2
with:
context: .
file: ./Dockerfile
platforms: linux/amd64,linux/arm64,linux/arm/v7
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
push: true

View File

@ -1,63 +0,0 @@
# Builds a Docker image from with latest tag when master branch is updated
# The publishes it to GitHub container registry as a package
name: 🏗️ Build + Publish Docker Image to GHCR
on:
workflow_dispatch:
push:
branches: ['master']
tags: [v*]
env:
REGISTRY: ghcr.io
IMAGE_NAME: dashy
jobs:
build-and-push-image:
runs-on: ubuntu-latest
if: "!contains(github.event.head_commit.message, '[ci-skip]')"
permissions:
contents: read
packages: write
steps:
# Fetch the code
- name: Checkout repository
uses: actions/checkout@v2
- name: Prepare
id: prep
run: echo ::set-output name=version::${GITHUB_REF##*/}
# Use QEMU for multi-architecture builds
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
with:
platforms: all
# # Use Moby BuildKit
# - name: Set up Docker Buildx
# id: buildx
# uses: docker/setup-buildx-action@v1
# with:
# install: true
# version: latest
# driver-opts: image=moby/buildkit:master
# Login into GH container registry
- name: Log in to registry
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
# Build the image from default Dockerfile
- name: Build image
run: docker build . --file docker/Dockerfile-multi-arch --tag $IMAGE_NAME --label "runnumber=${GITHUB_RUN_ID}"
# Push build image
- name: Push image
run: |
IMAGE_ID=ghcr.io/${{ github.repository_owner }}/$IMAGE_NAME
IMAGE_ID=$(echo $IMAGE_ID | tr '[A-Z]' '[a-z]')
VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,')
[[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//')
[ "$VERSION" == "master" ] && VERSION=latest
echo IMAGE_ID=$IMAGE_ID
echo VERSION=$VERSION
docker tag $IMAGE_NAME $IMAGE_ID:$VERSION
docker push $IMAGE_ID:$VERSION

View File

@ -1,40 +0,0 @@
# Test and build the Docker container after a release
# Then push it to GH container registry if all checks pass
name: Build & Publish Docker Image
on:
release:
types: [published]
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
jobs:
build-and-push-image:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
# Get the code
- name: Checkout repository 🛎️
uses: actions/checkout@v2
# Log into ghcr.io
- name: Log in to the Container registry 🔑
uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
# Get release version, for Docker tag
- name: Extract metadata (tags, labels) for Docker 🗂️
id: meta
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
# Build the container, and push if successful
- name: Build and push Docker image ⚒️
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}

View File

@ -1,33 +0,0 @@
# Checks for any broken links in the docs, and raises an issue if found
name: 🌈 Broken Link Checker
on:
repository_dispatch:
workflow_dispatch:
schedule:
- cron: '0 1 1 * *' # Run monthly
jobs:
link-checker:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Load Excludes
run: |
LYCHEE_EXCLUDE=$(sed -e :a -e 'N;s/\n/ /;ta' .github/.lycheeexclude)
echo "LYCHEE_EXCLUDE=$LYCHEE_EXCLUDE" >> $GITHUB_ENV
- name: Check for Broken Links
uses: lycheeverse/lychee-action@v1.0.8
with:
args: --verbose -a 200,302,304,429 --exclude ${{ env.LYCHEE_EXCLUDE }} --exclude-mail --no-progress **/*.md
env:
GITHUB_TOKEN: ${{secrets.BOT_GITHUB_TOKEN}}
LYCHEE_OUT: .github/broken-link-report.md
- name: Raise an Issue with Results
uses: peter-evans/create-issue-from-file@v3
with:
token: ${{secrets.BOT_GITHUB_TOKEN}}
title: '[DOCS] Broken Links found in Documentation'
content-filepath: .github/broken-link-report.md
labels: '📕 Docs, 👩‍💻 Good First Issue, 💤 Low Priority, 🤖 Auto'

View File

@ -1,43 +0,0 @@
name: 📕 Check Docs Domain Expiry
on:
workflow_dispatch:
schedule:
- cron: '0 1 * * 0' # At 01:00 on Sunday.
jobs:
check-domain:
runs-on: ubuntu-latest
name: Check domain
strategy:
matrix:
domain:
- https://dashy.to
steps:
- name: Check domain SSL and registry expire date
id: check-domain
uses: codex-team/action-check-domain@v1
with:
url: ${{ matrix.domain }}
- name: Raise issue if domain expiring soon
if: ${{ steps.check-domain.outputs.paid-till-days-left && steps.check-domain.outputs.paid-till-days-left < 30 }}
uses: rishabhgupta/git-action-issue@v2
with:
token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
assignees: Lissy93
title: '[WEBSITE] Domain Expiring Soon'
body: >
**Priority Notice**
Domain, ${{ matrix.domain }} will expire in ${{ steps.check-domain.outputs.paid-till-days-left }} days.
@Lissy93 - Please take action immediately to prevent any downtime
- name: Raise issue if SSL Cert expiring soon
if: ${{ steps.check-domain.outputs.ssl-expire-days-left && steps.check-domain.outputs.ssl-expire-days-left < 14 }}
uses: rishabhgupta/git-action-issue@v2
with:
token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
assignees: Lissy93
title: '[WEBSITE] SSL Cert Expiring Soon'
body: >
**Priority Notice**
The SSL Certificate for ${{ matrix.domain }} will expire in ${{ steps.check-domain.outputs.ssl-expire-days-left }} days, on ${{ steps.check-domain.outputs.ssl-expire-date }}.
@Lissy93 - Please take action immediately to prevent any downtime

View File

@ -42,8 +42,8 @@ jobs:
runs-on: ubuntu-latest
name: Inserts contributors into credits.md
steps:
- name: Contribute List - Credits Page
uses: akhilmhdh/contributors-readme-action@v2.2
- name: Contributer List - Credits Page
uses: akhilmhdh/contributors-readme-action@v2.3.6
env:
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
with:
@ -51,6 +51,7 @@ jobs:
readme_path: docs/credits.md
columns_per_row: 6
commit_message: ':purple_heart: Updates contributors list'
collaborators: all
committer_username: liss-bot
committer_email: liss-bot@d0h.co
- name: Sponsors List - Readme
@ -65,18 +66,3 @@ jobs:
committer_username: liss-bot
committer_email: liss-bot@d0h.co
make-author-list:
runs-on: ubuntu-latest
steps:
- name: Checkout 🛎️
uses: actions/checkout@v2
with:
fetch-depth: 0
- uses: wow-actions/update-authors@v1
with:
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
sort: commits
bots: true
path: .github/AUTHORS.txt
commit: ':blue_heart: Makes author list'
template: '{{name}} <{{email}}> - {{commits}} commits'

View File

@ -1,37 +0,0 @@
# Will add a comment and close any new issues opened by
# users who have not yet committed to, or starred the repo
name: 🎯 Issue Spam Control
on:
issues:
types: [opened, reopened]
jobs:
check-user:
if: >
${{
! contains( github.event.issue.labels.*.name, '📌 Keep Open') &&
! contains( github.event.issue.labels.*.name, '🌈 Feedback') &&
! contains( github.event.issue.labels.*.name, '💯 Showcase') &&
github.event.comment.author_association != 'CONTRIBUTOR'
}}
runs-on: ubuntu-latest
name: Close issue opened by non-stargazer
steps:
- name: close
uses: uhyo/please-star-first@v1
with:
token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
message: |
Welcome to Dashy 👋
It's great to have you here, but unfortunately your ticket has been closed to prevent spam. Before reopening this issue, please ensure the following criteria are met.
Issues are sometimes closed when users:
- Have only recently joined GitHub
- Have not yet stared this repository
- Have not previously interacted with the repo
Before you reopen this issue, please also ensure that:
- You have checked that a similar issue does not already exist
- You have checked the documentation for an existing solution
- You have completed the relevant sections in the Issue template
Once you have verified the above standards are met, you may reopen this issue. Sorry for any inconvenience caused, I'm just a bot, and sometimes make mistakes 🤖

View File

@ -1,18 +0,0 @@
# Will translate any issues opened in foraign language, and add the English translation as a comment
name: 🎯 Issue Translator
on:
issue_comment:
types: [created]
issues:
types: [opened]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: tomsun28/issues-translate-action@v2.5
with:
BOT_GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
BOT_LOGIN_NAME: liss-bot
IS_MODIFY_TITLE: true
CUSTOM_BOT_NOTE: It looks like this issue isn't in English - not a problem, here's the translation! 🇬🇧

View File

@ -1,16 +0,0 @@
# Adds a label to any issues raised by a sponsor of Lissy93/Dashy
# In order to allow their request can be prioritized
name: 🎯 Label sponsors
on:
issues:
types: [opened]
jobs:
build:
name: is-sponsor-label
runs-on: ubuntu-latest
steps:
- uses: JasonEtco/is-sponsor-label-action@v1
with:
label: Priority Request - Sponsor 💖
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -1,18 +0,0 @@
# Applies the 'Top Issue' label to tickets with most user reactions
name: 🎯 Label Top Issues
on:
workflow_dispatch:
schedule:
- cron: '0 1 * * *' # Run at 01:00 each day
jobs:
labelTopIssues:
name: Label Top Issues
runs-on: ubuntu-latest
steps:
- name: Label Issues
uses: adamzolyak/top-issues-action@master
env:
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
TOP_NUMBER_OF_ISSUES: 10
TOP_LABEL_NAME: "👍 Top 10 Issue!"
TOP_LABEL_COLOR: FBCA04

View File

@ -19,7 +19,7 @@ jobs:
add-awaiting-author:
runs-on: ubuntu-latest
if: ${{!github.event.issue.pull_request && github.event.comment.author_association != 'COLLABORATOR' && github.event.comment.author_association != 'OWNER' && github.event.issue.state === 'open' }}
if: ${{!github.event.issue.pull_request && github.event.comment.author_association != 'COLLABORATOR' && github.event.comment.author_association != 'OWNER' && github.event.issue.state == 'open' }}
steps:
- name: Add Awaiting Author labels when Updated
uses: actions-cool/issues-helper@v2

View File

@ -1,20 +0,0 @@
# Detects offensive language in comments and takes reaction
name: 🎯 Mind your language
on:
issues:
types: [opened]
issue_comment:
types: [created]
pull_request:
types: [opened]
jobs:
echo_issue_comment:
runs-on: ubuntu-latest
name: profanity check
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Profanity check step
uses: tailaiw/mind-your-language-action@v1.0.3
env:
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}

16
.github/workflows/mirror.yml vendored Normal file
View File

@ -0,0 +1,16 @@
# Pushes the contents of the repo to the Codeberg mirror
name: 🪞 Mirror to Codeberg
on:
workflow_dispatch:
schedule:
- cron: '30 3 * * 0' # At 03:30 on Sunday
jobs:
codeberg:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with: { fetch-depth: 0 }
- uses: pixta-dev/repository-mirroring-action@v1
with:
target_repo_url: git@codeberg.org:alicia/dashy.git
ssh_private_key: ${{ secrets.CODEBERG_SSH }}

View File

@ -1,13 +0,0 @@
# Adds comments to PR, based on which files are modified
name: 💡 PR Commenter
on: [ pull_request_target ]
jobs:
pr-comment:
runs-on: ubuntu-latest
steps:
- uses: exercism/pr-commenter-action@v1.3.0
with:
github-token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
config-file: .github/pr-auto-comments.yml
template-variables: |
{ "prAuthor": "${{ github.event.pull_request.user.login }}" }

View File

@ -1,12 +0,0 @@
# Labels pull requests based on their branch name
name: 💡 PR Branch Labeler
on: pull_request
jobs:
label-pr:
runs-on: ubuntu-latest
steps:
- name: Label PR
if: github.event.action == 'opened'
uses: ffittschen/pr-branch-labeler@v1
with:
repo-token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}

View File

@ -1,13 +0,0 @@
# Finds any TO-DO notes within the code, and opens up an issue for it to be fixed
name: 🌈 Open issue for Todos
on: ["push"]
jobs:
build:
runs-on: "ubuntu-latest"
steps:
- uses: "actions/checkout@master"
- name: "TODO to Issue"
uses: "alstr/todo-to-issue-action@v4.2"
id: "todo"
with:
TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}

View File

@ -10,10 +10,8 @@ jobs:
- uses: apexskier/github-release-commenter@v1
with:
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
label-template: 🛩️ Released {release_tag}, 🔨 Fixed
label-template: 🛩️ Released {release_tag}
comment-template: |
**The fix for this issue has now been released in {release_name} ✨**
**This has now been released in {release_name} ✨**
If you haven't done so already, please [update your instance](https://github.com/Lissy93/dashy/blob/master/docs/management.md#updating) to `{release_tag}` or later. See {release_link} for full info.
Feel free to reach out if you need any more support. If you are enjoying Dashy, consider [supporting the project](https://github.com/Lissy93/dashy/blob/master/docs/contributing.md#contributing).

View File

@ -1,92 +0,0 @@
# Generates series of diagrams and visualizations
name: 📊 Generate Repo Stats
on:
workflow_dispatch: # Manual dispatch
schedule:
- cron: '0 1 * * 0' # At 01:00 on Sunday.
jobs:
# File structure chart
file-structure:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@master
- name: Generate File Structure Diagram
uses: githubocto/repo-visualizer@0.7.1
with:
root_path: 'src/'
output_file: docs/assets/repo-visualization.svg
excluded_paths: dist,node_modules
commit_message: ':yellow_heart: Updates repo diagram'
branch: master
# Hercules git branching stats
git-stats:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@master
with:
fetch-depth: 0
- name: Hercules
uses: src-d/hercules@master
- uses: actions/upload-artifact@master
with:
name: hercules_charts
path: hercules_charts.tar
# Lowlighter metrics community metrics
community-stats:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@master
- name: Generate Repo Metrics
uses: lowlighter/metrics@latest
with:
token: ${{ secrets.LISSY93_PAT }}
committer_token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
committer_branch: master
committer_message: ':purple_heart: Adds repo metrics'
filename: docs/assets/repo-metrics.*
template: classic
user: Lissy93
repo: dashy
delay: 5
- name: Generate License Metrics
uses: lowlighter/metrics@latest
with:
token: ${{ secrets.LISSY93_PAT }}
committer_token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
committer_branch: master
committer_message: ':purple_heart: Adds license metrics'
filename: docs/assets/license-metrics.*
template: repository
user: Lissy93
repo: dashy
delay: 5
plugin_licenses: yes
plugin_licenses_setup: yarn build
plugin_licenses_ratio: yes
plugin_licenses_legal: yes
- name: Generate Contributor Metrics
uses: lowlighter/metrics@latest
with:
token: ${{ secrets.LISSY93_PAT }}
committer_token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
committer_branch: master
committer_message: ':purple_heart: Adds contributor metrics'
filename: docs/assets/controbutor-metrics.*
user: Lissy93
repo: dashy
delay: 5
plugin_contributors: yes
plugin_contributors_base: ""
plugin_contributors_head: master
plugin_contributors_ignored: bot
plugin_contributors_contributions: yes
plugin_contributors_sections: contributors

View File

@ -1,15 +0,0 @@
name: 📊 Save Repo Analytics
on:
workflow_dispatch:
schedule:
- cron: '0 1 * * 0' # At 01:00 on Sunday.
jobs:
gen-stats:
runs-on: ubuntu-latest
steps:
- name: Repo Analytics
uses: jgehrcke/github-repo-stats@HEAD
with:
repository: lissy93/dashy
databranch: DATA/repo-stats
ghtoken: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}

View File

@ -1,19 +0,0 @@
# Uses Snyk to check for potential vulnerabilities, then sends results to GH security tab
name: 💡 Vulnerability Scanning
on: push
jobs:
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: Run Snyk to check for vulnerabilities
uses: snyk/actions/node@master
continue-on-error: true
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
args: --sarif-file-output=snyk.sarif
- name: Upload result to GitHub Code Scanning
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: snyk.sarif

View File

@ -1,17 +0,0 @@
# Expands any raw pasted link in comments. Useful so people know what they're clicking
name: 🎯 Unfurl Links
on:
issues:
types: [opened]
issue_comment:
types: [created]
pull_request:
types: [opened]
jobs:
run:
runs-on: ubuntu-latest
steps:
- uses: wow-actions/unfurl-links@v1
with:
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
raw: true

58
.github/workflows/update-docs-site.yml vendored Normal file
View File

@ -0,0 +1,58 @@
name: 📝 Update Documentation
# This will run whenever the /docs directory in master branch is updated,
# or if the workflow is manually dispatched, plus a sync check on Sun at 03:30 UTC
on:
workflow_dispatch:
schedule:
- cron: '30 3 * * 0'
push:
branches:
- master
paths:
- 'docs/**'
# Jobs to be run:
# 1. Checkout master branch
# 2. Checkout website source code branch
# 3. Install Python
# 4. Copy /docs from master to website branch
# 5. Run the script which processes documentation
# 6. Commit and push updated docs to the website source code branch
jobs:
update-docs:
runs-on: ubuntu-latest
steps:
- name: Checkout master branch 🛎️
uses: actions/checkout@v2
with:
path: 'master-docs'
- name: Checkout WEBSITE/docs-site-source branch 🛎️
uses: actions/checkout@v2
with:
ref: 'WEBSITE/docs-site-source'
path: 'website-docs'
- name: Install Python 🐍
uses: actions/setup-python@v2
with:
python-version: '3.x'
- name: Run script to update documentation 🪄
working-directory: website-docs
run: |
cp -r ../master-docs/docs ./
python ./do-markdown-magic.py
- name: Commit changes 🚀
run: |
cd website-docs
git config --local user.email "liss-bot@d0h.co"
git config --local user.name "Liss-Bot"
git add docs
git commit -m "Update documentation" || echo "No changes to commit"
git push
env:
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}

29
.gitpod.yml Normal file
View File

@ -0,0 +1,29 @@
# Config for running Dashy in GitPod's cloud dev environment
# Docs: https://www.gitpod.io/docs/references/gitpod-yml
# Commands to start on workspace startup
tasks:
- init: yarn install
command: yarn dev
# Ports to expose on workspace startup
ports:
- port: 8080 # Default dev server
visibility: private
onOpen: open-preview
- port: 4000 # Default prod server
visibility: public
onOpen: open-preview
prebuilds:
# Adds 'Open in GitPod' to PRs
addBadge: true
addComment: false
vscode:
# Adds Vue.js and formatting extensions
extensions:
- octref.vetur
- dbaeumer.vscode-eslint
- streetsidesoftware.code-spell-checker
- PKief.material-icon-theme
- wix.vscode-import-cost
- oderwat.indent-rainbow
- eamodio.gitlens

1
.yarnrc.yml Normal file
View File

@ -0,0 +1 @@
nodeLinker: node-modules

View File

@ -1,31 +1,51 @@
FROM node:lts-alpine3.14
FROM node:18.19.1-alpine AS BUILD_IMAGE
# Set the platform to build image for
ARG TARGETPLATFORM
ENV TARGETPLATFORM=${TARGETPLATFORM:-linux/amd64}
# Install additional tools needed if on arm64 / armv7
RUN \
case "${TARGETPLATFORM}" in \
'linux/arm64') apk add --no-cache python3 make g++ ;; \
'linux/arm/v7') apk add --no-cache python3 make g++ ;; \
esac
# Create and set the working directory
WORKDIR /app
# Install app dependencies
COPY package.json yarn.lock ./
RUN yarn install --ignore-engines --immutable --no-cache --network-timeout 300000 --network-concurrency 1
# Copy over all project files and folders to the working directory
COPY . ./
# Build initial app for production
RUN yarn build --mode production
# Production stage
FROM node:20.11.1-alpine3.19
# Define some ENV Vars
ENV PORT=80 \
ENV PORT=8080 \
DIRECTORY=/app \
IS_DOCKER=true
# Create and set the working directory
WORKDIR ${DIRECTORY}
# Copy over both 'package.json' and 'package-lock.json' (if available)
COPY package*.json ./
COPY yarn.lock ./
# Update tzdata for setting timezone
RUN apk add --no-cache tzdata
# Install project dependencies
RUN yarn
# Copy over all project files and folders to the working directory
COPY . .
# Build initial app for production
RUN yarn build
# Expose given port
EXPOSE ${PORT}
# Copy built application from build phase
COPY --from=BUILD_IMAGE /app ./
# Finally, run start command to serve up the built application
CMD [ "yarn", "build-and-start"]
CMD [ "yarn", "build-and-start" ]
# Run simple healthchecks every 5 mins, to check the Dashy's everythings great
HEALTHCHECK --interval=5m --timeout=2s --start-period=30s CMD yarn health-check
# Expose the port
EXPOSE ${PORT}
# Run simple healthchecks every 5 mins, to check that everythings still great
HEALTHCHECK --interval=5m --timeout=5s --start-period=30s CMD yarn health-check

View File

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2021 Alicia Sykes <https://aliciasykes.com>
Copyright (c) 2021-2024 Alicia Sykes <https://aliciasykes.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@ -1,4 +1 @@
# Heroku config - Specifies the commands to execute when the app starts
# See docs for more info: https://devcenter.heroku.com/articles/procfile
web: node server.js
web: npm run build-and-start

427
README.md
View File

@ -5,30 +5,23 @@
<br/>
<img width="120" src="https://i.ibb.co/yhbt6CY/dashy.png" />
<br/>
<b><a href="https://github.com/Lissy93/dashy/blob/master/docs/showcase.md">User Showcase</a></b> | <b><a href="https://demo.dashy.to">Live Demo</a></b> | <b><a href="https://github.com/Lissy93/dashy/blob/master/docs/quick-start.md">Getting Started</a></b> | <b><a href="https://dashy.to/docs">Documentation</a></b> | <b><a href="https://github.com/Lissy93/dashy">GitHub</a></b>
<br/><br/>
<a href="https://github.com/awesome-selfhosted/awesome-selfhosted#personal-dashboards">
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome Self-Hosted">
</a>
<a href="https://github.com/Lissy93/dashy/blob/master/LICENSE">
<img src="https://img.shields.io/badge/License-MIT-0aa8d2?logo=opensourceinitiative&logoColor=fff" alt="License MIT">
</a>
<a href="https://github.com/Lissy93/dashy/blob/master/.github/CHANGELOG.md">
<img src="https://img.shields.io/github/package-json/v/lissy93/dashy?logo=azurepipelines&amp;color=0aa8d2" alt="Current Version">
</a>
<a href="https://hub.docker.com/r/lissy93/dashy">
<img src="https://img.shields.io/docker/pulls/lissy93/dashy?logo=docker&color=0aa8d2&logoColor=fff" alt="Docker Pulls">
</a>
<a href="http://as93.link/dashy-build-status">
<img src="https://badgen.net/github/status/lissy93/dashy?icon=github" alt="GitHub Status">
</a>
<a href="https://snyk.io/test/github/lissy93/dashy">
<img src="https://snyk.io/test/github/lissy93/dashy/badge.svg" alt="Known Vulnerabilities">
</a>
<b><a href="./docs/showcase.md">User Showcase</a></b> | <b><a href="https://demo.dashy.to">Live Demo</a></b> | <b><a href="./docs/quick-start.md">Getting Started</a></b> | <b><a href="https://dashy.to/docs">Documentation</a></b> | <b><a href="https://github.com/Lissy93/dashy">GitHub</a></b>
</p>
<p align="center">
<br>
<sup>Dashy is kindly sponsored by <a href="https://umbrel.com?ref=dashy">Umbrel</a> - the personal home cloud and OS for self-hosting</sup><br>
<a href="https://umbrel.com?ref=dashy">
<img width="400" src="https://github.com/Lissy93/dashy/blob/WEBSITE/docs-site-source/static/umbrel-banner.jpg?raw=true" />
</a>
</p>
> [!NOTE]
> Version [3.0.0](https://github.com/Lissy93/dashy/releases/tag/3.0.0) has been released, and requires some changes to your setup, see [#1529](https://github.com/Lissy93/dashy/discussions/1529) for details.
<details>
<summary><b>Contents</b></summary>
<summary><b>Table of Contents</b></summary>
<p>
- **Getting Started**
@ -41,18 +34,17 @@
- [🧸 Icons](#icons-)
- [🚦 Status Indicators](#status-indicators-)
- [📊 Widgets](#widgets-)
- [💂 Authentication](#authentication-)
- [🖱️ Opening Methods](#opening-methods-%EF%B8%8F)
- [🔐 Authentication](#authentication-)
- [👓 Alternate Views](#alternate-views-)
- [🖱️ Opening Methods](#opening-methods-)
- [🔎 Searching and Shortcuts](#searching-and-shortcuts-)
- [⚙️ Config Editor](#config-editor-%EF%B8%8F)
- [⚙️ Config Editor](#config-editor-)
- [☁ Cloud Backup & Sync](#cloud-backup--sync-)
- [🌎 Language Switching](#language-switching-)
- [🌳 Dashboard Info](#setting-dashboard-info-)
- [📃 Multi-Page Support](#multi-page-support-)
- **Community**
- [📊 System Requirements](#system-requirements-)
- [🙋‍♀️ Getting Help](#getting-help-%EF%B8%8F)
- [🐛 Raising Issues](#raising-issues-)
- [🙋‍♀️ Support](#support-)
- [💖 Supporting Dashy](#supporting-dashy-)
- [🏆 Credits](#credits-)
- [🧱 Developing](#developing-)
@ -66,18 +58,18 @@
</details>
## Features 🌈
- 🔎 Instant search by name, domain, or tags + customizable hotkeys & keyboard shortcuts
- 🎨 Multiple built-in color themes, with UI color editor and support for custom CSS
- 🧸 Many icon options - Font-Awesome, homelab icons, auto-fetching Favicon, images, emojis, etc.
- 🚦 Status monitoring for each of your apps/links for basic availability and uptime checking
- 📃 Support for multiple pages
- 🚦 Real-time status monitoring for each of your apps/links
- 📊 Use widgets to display info and dynamic content from self-hosted services
- 🔎 Instant search by name, domain, or tags + customizable hotkeys & keyboard shortcuts
- 🎨 Many built-in color themes, with UI color editor and support for custom CSS
- 🧸 Many icon options - Font-Awesome, homelab icons, auto-fetching Favicon, images, emojis, etc.
- 💂 Optional authentication with multi-user access, configurable privileges, and SSO support
- 🌎 Multi-language support, with 10+ human-translated languages, and more on the way
- ☁ Optional, encrypted, free off-site cloud backup and restore feature available
- 💼 A workspace view, for easily switching between multiple apps simultaneously
- 🛩️ A minimal view, for use as a fast-loading browser Startpage
- 🖱️ Choose app launch method, either new tab, same tab, a pop-up modal, or in the workspace view
- 🖱️ Choose app launch methods: new tab, same tab, clipboard, pop-up modal, or open in workspace view
- 📏 Customizable layout, sizes, text, component visibility, sort order, behavior, etc.
- 🖼️ Options for a full-screen background image, custom nav-bar links, HTML footer, title, etc.
- 🚀 Easy to setup with Docker, or on bare metal, or with 1-Click cloud deployment
@ -88,13 +80,15 @@
- 🔐 Strong focus on privacy
- 🌈 And loads more...
**[⬆️ Back to Top](#dashy)**
## Demo ⚡
**Live Instances**: [Demo 1](https://demo.dashy.to) (Live Demo) ┆ [Demo 2](https://live.dashy.to) (Dashy Links) ┆ [Demo 3](https://dev.dashy.to) (Dev Preview)
**Screenshots**: Checkout the [Showcase](./docs/showcase.md), to see example dashboards from the community
**Spin up your own demo**: [![One-Click Deploy with PWD](https://img.shields.io/badge/Play--with--Docker-Deploy-2496ed?style=flat-square&logo=docker)](https://labs.play-with-docker.com/?stack=https://raw.githubusercontent.com/Lissy93/dashy/master/docker-compose.yml) or [`docker run -p 8080:80 lissy93/dashy`](./docs/quick-start.md)
**Spin up your own demo**: [![One-Click Deploy with PWD](https://img.shields.io/badge/Play--with--Docker-Deploy-2496ed?style=flat-square&logo=docker)](https://labs.play-with-docker.com/?stack=https://raw.githubusercontent.com/Lissy93/dashy/master/docker-compose.yml) or [`docker run -p 8080:8080 lissy93/dashy`](./docs/quick-start.md)
<p align="center">
@ -106,7 +100,7 @@
---
## Getting Started 🛫
## Getting Started 🚀
> For full setup instructions, see: [**Deployment**](./docs/deployment.md)
@ -115,46 +109,48 @@
You will need [Docker](https://docs.docker.com/get-docker/) installed on your system
```
docker run -p 8080:80 lissy93/dashy
docker run -p 8080:8080 lissy93/dashy
```
Or
```docker
docker run -d \
-p 4000:80 \
-v /root/my-local-conf.yml:/app/public/conf.yml \
-p 4000:8080 \
-v /root/my-local-conf.yml:/app/user-data/conf.yml \
--name my-dashboard \
--restart=always \
lissy93/dashy:latest
```
[![Dashy on Docker Hub](https://dockeri.co/image/lissy93/dashy)](https://hub.docker.com/r/lissy93/dashy)
See also examples [with Docker Compose](./docs/deployment.md#using-docker-compose). Dashy is also available via GHCR, and tags for other architectures (`arm32v7`, `arm64v8`, etc.) and set versions are supported
See also: [examples with Docker Compose](./docs/deployment.md#using-docker-compose). Dashy is also available via GHCR, and tags for other architectures (`arm32v7`, `arm64v8`, etc.) and set versions are supported
> Once you've got Dashy running, see [App Management Docs](./docs/management.md) for info on using health checks, updating, backups, web-server configs, logs, performance, security, and more.
### Deploying from Source 🚀
### Deploying from Source 🔨
You will need [git](https://git-scm.com/downloads), the latest or LTS version of [Node.js](https://nodejs.org/) and (optionally) [Yarn](https://yarnpkg.com/) installed on your system.
You will need [git](https://git-scm.com/downloads), the latest or LTS version of [Node.js](https://nodejs.org/) and _(optionally)_ [Yarn](https://yarnpkg.com/) installed on your system.
- Get Code: `git clone https://github.com/Lissy93/dashy.git` and `cd dashy`
- Configuration: Fill in your settings in `./public/conf.yml`
- Clone the Repo: `git clone https://github.com/Lissy93/dashy.git` and `cd dashy`
- Configuration: Fill in your settings in `./user-data/conf.yml`
- Install dependencies: `yarn`
- Build: `yarn build`
- Run: `yarn start`
> See docs [Full list of Dashy's commands](./docs/management.md#basic-commands)
> See docs: [Full list of Dashy's commands](./docs/management.md#basic-commands)
### Deploy to the Cloud ☁️
Dashy supports 1-Click deployments on several popular cloud platforms. To spin up a new instance, just click a link below:
Dashy supports **1-Click deployments** on several popular cloud platforms. To spin up a new instance, just click a link below:
- [<img src="https://i.ibb.co/ZxtzrP3/netlify.png" width="18"/> Deploy to Netlify](https://app.netlify.com/start/deploy?repository=https://github.com/lissy93/dashy)
- [<img src="https://i.ibb.co/d2P1WZ7/heroku.png" width="18"/> Deploy to Heroku](https://heroku.com/deploy?template=https://github.com/Lissy93/dashy)
- [<img src="https://i.ibb.co/Ld2FZzb/vercel.png" width="18"/> Deploy to Vercel](https://vercel.com/new/project?template=https://github.com/lissy93/dashy)
- [<img src="https://i.ibb.co/xCHtzgh/render.png" width="18"/> Deploy to Render](https://render.com/deploy?repo=https://github.com/lissy93/dashy/tree/deploy_render)
- [<img src="https://railway.app/brand/logo-light.png" width="18"/> Deploy to Railway](https://railway.app/template/MtdjAQ?referralCode=app)
- [<img src="https://i.ibb.co/J7MGymY/googlecloud.png" width="18"/> Deploy to GCP](https://deploy.cloud.run/?git_repo=https://github.com/lissy93/dashy.git)
- [<img src="https://i.ibb.co/HVWVYF7/docker.png" width="18"/> Deploy to PWD](https://labs.play-with-docker.com/?stack=https://raw.githubusercontent.com/Lissy93/dashy/master/docker-compose.yml)
- [<img src="https://i.ibb.co/7NxnM2P/easypanel.png" width="18"/> Deploy to Easypanel](https://easypanel.io/docs/templates/dashy)
> For more 1-click cloud deployments, see [Cloud Deployment](./docs/deployment.md#deploy-to-cloud-service)
@ -166,7 +162,7 @@ Dashy supports 1-Click deployments on several popular cloud platforms. To spin u
> For full configuration documentation, see: [**Configuring**](./docs/configuring.md)
Dashy is configured through a YAML file, located at `./public/conf.yml`. In addition, you can find a complete list of available options in the [Configuring Docs](/docs/configuring.md). The config can also be edited and saved directly through the UI.
Dashy is configured through a YAML file, located at `./user-data/conf.yml`. In addition, you can find a complete list of available options in the [Configuring Docs](./docs/configuring.md). The config can also be edited and saved directly through the UI.
**[⬆️ Back to Top](#dashy)**
@ -176,7 +172,7 @@ Dashy is configured through a YAML file, located at `./public/conf.yml`. In addi
> For full theming documentation, see: [**Theming**](./docs/theming.md)
Dashy comes pre-bundled with several built-in themes, which you can preview, applied and edit through the UI. With the theme configurator and support for custom CSS, everything is in place to quickly develop your unique-looking dashboard.
Dashy comes pre-bundled with several built-in themes, which you can preview, apply and edit through the UI. With the theme configurator and support for custom CSS, everything is in place to quickly develop your own unique-looking dashboard.
<p align="center">
<a href="https://i.ibb.co/BVSHV1v/dashy-themes-slideshow.gif">
@ -257,7 +253,7 @@ You can display dynamic content from services in the form of widgets. There are
---
## Authentication 💂
## Authentication 🔐
> For full authentication documentation, see: [**Authentication**](./docs/authentication.md)
@ -312,8 +308,11 @@ There are several different ways you can launch apps. You can specify the defaul
- `newtab` - The app will be launched in a new tab (or use Ctrl + Click)
- `modal` - Launch app in a resizable/ movable popup modal on the current page (or use Alt + Click)
- `workspace` - Changes to Workspace view and launches app
- `clipboard` - Copy the app's URL to your system clipboard
- `top` - Opens in the top-most browsing context, useful if you're accessing Dashy through an iframe
**[⬆️ Back to Top](#dashy)**
---
## Searching and Shortcuts 🔎
@ -328,7 +327,7 @@ For apps that you use regularly, you can set a custom keybinding. Use the `hotke
You can also add custom tags to a given item to make finding them based on keywords easier. For example, in the following example, searching for 'Movies' will show 'Plex'
"`yaml
```yaml
items:
- title: Plex
hotkey: 8
@ -396,25 +395,36 @@ All data is fully E2E encrypted before being sent to the backend (done in [`Clou
## Language Switching 🌎
> For full internationalization documentation, see: [**Multi-Language Support**](./docs/multi-language-support.md)
Dashy supports multiple languages and locales. When available, your language should be automatically detected and applied on load. But you can also select a language through the UI (under config --> Switch Language) or set `appConfig.language` to your language (specified as a 2-digit [ISO 639-1 code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)).
Dashy supports multiple languages and locales. When available, your language should be automatically detected and applied on load. But you can also select a language through the UI (under config --> Switch Language) or set `appConfig.language` to your language (specified as a 2-digit [ISO 639-1 code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)), as seen below, e.g. `language: de`.
#### Supported Languages
- 🇬🇧 **English**: `en` - _Default_
- 🇦🇪 **Arabic**: `ar` - _Auto-generated_
- 🇧🇩 **Bengali**: `bn` - Contributed by **[@soaibsafi](https://github.com/soaibsafi)**
- 🇧🇬 **Bulgarian**: `bg` - Contributed by **[@asenov](https://github.com/asenov)**
- 🇨🇳 **Chinese**: `cn` - Contributed by **[@FormatToday](https://github.com/FormatToday)**
- 🇨🇿 **Czech**: `cs` - Contributed by **[@Tuzi555](https://github.com/Tuzi555)**
- 🇩🇰 **Danish**: `da` - Contributed by **[@lordpansar](https://github.com/lordpansar)**
- 🇳🇱 **Dutch**: `nl` - Contributed by **[@evroon](https://github.com/evroon)**
- 🇲🇫 **French**: `fr` - Contributed by **[@EVOTk](https://github.com/EVOTk)**
- 🇫🇷 **French**: `fr` - Contributed by **[@EVOTk](https://github.com/EVOTk)**
- 🇩🇪 **German**: `de` - Contributed by **[@Niklashere](https://github.com/Niklashere)**
- 🇬🇷 **Greek**: `el` - Contributed by **[@aviolaris](https://github.com/aviolaris)**
- 🇮🇳 **Hindi**: `hi` - _Auto-generated_
- 🇮🇹 **Italian**: `it` - Contributed by **[@alexdelprete](https://github.com/alexdelprete)**
- 🇯🇵 **Japanese**: `ja` - _Auto-generated_
- 🇰🇷 **Korean**: `ko` - Contributed by **[@boggy-cs](https://github.com/boggy-cs)**
- 🇳🇴 **Norwegian Bokmål**: `nb` - Contributed by **[@rubjo](https://github.com/rubjo)**
- 🇵🇱 **Polish**: `pl` - Contributed by **[@skaarj1989](https://github.com/skaarj1989)**
- 🇪🇸 **Spanish**: `es` - Contributed by **[@lu4t](https://github.com/lu4t)**
- 🇵🇹 **Portuguese**: `pt` - Contributed by **[@LeoColman](https://github.com/LeoColman)**
- 🛰️ **Galician**: `gl` - Contributed by **[@pvillaverde](https://github.com/pvillaverde)**
- 🇷🇺 **Russian**: `ru` - _Auto-generated_
- 🇸🇰 **Slovak**: `sk` - Contributed by **[@Smexhy](https://github.com/Smexhy)**
- 🇸🇮 **Slovenian**: `sl` - Contributed by **[@UrekD](https://github.com/UrekD)**
- 🇪🇸 **Spanish**: `es` - Contributed by **[@lu4t](https://github.com/lu4t)**
- 🇸🇪 **Swedish**: `sv` - Contributed by **[@BOZG](https://github.com/BOZG)**
- 🇮🇹 **Italian**: `it` - Machine Translated *(awaiting human review)*
- 🇵🇹 **Portuguese**: `pt` - Machine Translated *(awaiting human review)*
- 🇷🇺 **Russian**: `ru` - Contributed by Anon
- 🇦🇪 **Arabic**: `ar` - Contributed by Anon
- 🇮🇳 **Hindi**: `hi` - Contributed by Anon
- 🇯🇵 **Japanese**: `ja` - Contributed by Anon
- 🇹🇼 **Traditional Chinese**: `zh-TW` - Contributed by **[@stanly0726](https://github.com/stanly0726)**
- 🇹🇷 **Turkish**: `tr` - Contributed by **[@imsakg](https://github.com/imsakg)**
- 🏴‍☠️ **Pirate**: `pirate` - Contributed by **[@Lissy93](https://github.com/lissy93)**
#### Add your Language
I would love Dashy to be available to everyone without language being a barrier to entry. If you've got a few minutes to spare, consider adding translations for your language. It's a quick task, and all text is in [a single JSON file](https://github.com/Lissy93/dashy/tree/master/src/assets/locales). Since any missing text will fall back to English, you don't need to translate it all.
@ -423,9 +433,41 @@ I would love Dashy to be available to everyone without language being a barrier
---
## Multi-Page Support 📃
> For full multi-page documentation, see: [**Pages & Sections**](./docs/pages-and-sections.md)
Within your dashboard, you can have as many sub-pages as you require. To load additional pages, specify a name, and path to a config file under `pages`. The config file can be either local (stored in `/public`), or remote (located anywhere accessible).
```yaml
pages:
- name: Networking Services
path: 'networking.yml'
- name: Work Stuff
path: 'work.yml'
```
Or
```yaml
pages:
- name: Getting Started
path: 'https://snippet.host/tvcw/raw'
- name: Homelab
path: 'https://snippet.host/tetp/raw'
- name: Browser Startpage
path: 'https://snippet.host/zcom/raw'
```
---
## System Requirements 📊
The hardware requirements vary depending on where and how you are running Dashy. Generally speaking, on a bare-metal system or Docker container, 1GB of memory should be more than enough, and depending on whether you are using your own assets, then 1GB of disk space should be sufficient.
If running on bare metal, Dashy requires [Node](https://nodejs.org/en/) V 16.0.0 or later, LTS (16.13.2) is recommended.
If running in Docker container, the recommended base image is Alpine (3.15)
The hardware requirements vary depending on where and how you are running Dashy. Generally speaking, on a bare-metal system or Docker container, 1GB of memory should be more than enough, and depending on whether you are using your own assets, then 1GB of disk space should be sufficient.
If you are using one of the 1-click cloud deployment methods, serving the app through a CDN or using a static hosting provider, then there are no specific requirements, as the built app is just a series of static JS files, and so is very light-weight.
@ -434,7 +476,9 @@ Dashy also wells run on low-powered ARM-based single board computers, such as a
**Browser Support**
![Chrome](https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png) | ![Firefox](https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png) | ![IE](https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png) | ![Opera](https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png) | ![Safari](https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png)
--- | --- | --- | --- | --- |
Latest ✔ | Latest ✔ | 10+ ✔ | Latest ✔ | 6.1+ ✔ |
Latest ✔ | Latest ✔ | 10+ ✔ | Latest ✔ | 6.1+ ❌ |
**[⬆️ Back to Top](#dashy)**
---
@ -462,7 +506,7 @@ Several areas that we need a bit of help with at the moment are:
- Complete a [short survey](https://survey.typeform.com/to/gl0L68ou) to have your say about future features
- Share your dashboard in the [Showcase](https://github.com/Lissy93/dashy/blob/master/docs/showcase.md#dashy-showcase-), to inspire others
- Spread the word by sharing Dashy or a screenshot of your dashboard to help new users discover it
- Submit a PR to add a new feature, fix a bug, update the docs, add a theme, or something else
- Submit a PR to add a new feature, fix a bug, update the docs, add a theme, widget or something else
- Star Dashy on GitHub/ DockerHub or leave an upvote / review on [these platforms](https://github.com/Lissy93/dashy/blob/master/docs/contributing.md#star-upvote-or-leave-a-review)
[![Sponsor Lissy93 on GitHub](./docs/assets/sponsor-button.svg)](https://github.com/sponsors/Lissy93)
@ -482,25 +526,183 @@ Huge thanks to the sponsors helping to support Dashy's development!
<table>
<tr>
<td align="center">
<a href="https://github.com/BOZG">
<img src="https://avatars.githubusercontent.com/u/6022344?u=a52f42b946a1e1156f7bb9d7f65e9e28bb2da89f&v=4" width="80;" alt="BOZG"/>
<a href="https://github.com/undefined">
<img src="" width="80;" alt="undefined"/>
<br />
<sub><b>Stephen Rigney</b></sub>
<sub><b>Undefined</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/Robert-Ernst">
<img src="https://avatars.githubusercontent.com/u/9050259?u=7253b4063f1ffe3b5a894263c8b2056151802508&v=4" width="80;" alt="Robert-Ernst"/>
<a href="https://github.com/koconder">
<img src="https://avatars.githubusercontent.com/u/25068?u=582657b23622aaa3dfe68bd028a780f272f456fa&v=4" width="80;" alt="koconder"/>
<br />
<sub><b>Robert Ernst</b></sub>
<sub><b>Vincent Koc</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/Admonstrator">
<img src="https://avatars.githubusercontent.com/u/69824?u=1e226d7a36cdd661c3e4cd486fea140d045b7d57&v=4" width="80;" alt="Admonstrator"/>
<br />
<sub><b>Aaron Viehl</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/tbjers">
<img src="https://avatars.githubusercontent.com/u/1117052?v=4" width="80;" alt="tbjers"/>
<br />
<sub><b>Torgny Bjers</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/emlazzarin">
<img src="https://avatars.githubusercontent.com/u/1141361?u=714e3487a3f2e0df721b01a0133945f075d3ff68&v=4" width="80;" alt="emlazzarin"/>
<br />
<sub><b>Eddy Lazzarin</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/AnandChowdhary">
<img src="https://avatars.githubusercontent.com/u/2841780?u=747e554b3a7f12eb20b7910e1c87d817844f714f&v=4" width="80;" alt="AnandChowdhary"/>
<br />
<sub><b>Anand Chowdhary</b></sub>
</a>
</td></tr>
<tr>
<td align="center">
<a href="https://github.com/shrippen">
<img src="https://avatars.githubusercontent.com/u/2873570?v=4" width="80;" alt="shrippen"/>
<br />
<sub><b>Shrippen</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/bile0026">
<img src="https://avatars.githubusercontent.com/u/5022496?u=aec96ad173c0ea9baaba93807efa8a848af6595c&v=4" width="80;" alt="bile0026"/>
<br />
<sub><b>Zach Biles</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/UlisesGascon">
<img src="https://avatars.githubusercontent.com/u/5110813?u=3c41facd8aa26154b9451de237c34b0f78d672a5&v=4" width="80;" alt="UlisesGascon"/>
<br />
<sub><b>Ulises Gascón</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/digitalarche">
<img src="https://avatars.githubusercontent.com/u/6546135?u=564756d7f44ab2206819eb3148f6d822673f5066&v=4" width="80;" alt="digitalarche"/>
<br />
<sub><b>Digital Archeology</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/InDieTasten">
<img src="https://avatars.githubusercontent.com/u/7047377?u=8d8f8017628b38bc46dcbf3620e194b01d3fb2d1&v=4" width="80;" alt="InDieTasten"/>
<br />
<sub><b>InDieTasten</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/araguaci">
<img src="https://avatars.githubusercontent.com/u/7318668?v=4" width="80;" alt="araguaci"/>
<br />
<sub><b>Araguaci</b></sub>
</a>
</td></tr>
<tr>
<td align="center">
<a href="https://github.com/bmcgonag">
<img src="https://avatars.githubusercontent.com/u/7346620?u=2a0f9284f3e12ac1cc15288c254d1ec68a5081e8&v=4" width="80;" alt="bmcgonag"/>
<br />
<sub><b>Brian McGonagill</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/vlad-timofeev">
<img src="https://avatars.githubusercontent.com/u/11474041?v=4" width="80;" alt="vlad-timofeev"/>
<img src="https://avatars.githubusercontent.com/u/11474041?u=eee43705b54d2ec9f51fc4fcce5ad18dd17c87e4&v=4" width="80;" alt="vlad-timofeev"/>
<br />
<sub><b>Vlad Timofeev</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/helixzz">
<img src="https://avatars.githubusercontent.com/u/12218889?u=d06d0c103dfbdb99450623064f7da3c5a3675fb6&v=4" width="80;" alt="helixzz"/>
<br />
<sub><b>HeliXZz</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/patvdv">
<img src="https://avatars.githubusercontent.com/u/12430107?u=e8911c2fb91af4d30432f76da8c40927b2830bd7&v=4" width="80;" alt="patvdv"/>
<br />
<sub><b>Patrick Van Der Veken</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/plgonzalezrx8">
<img src="https://avatars.githubusercontent.com/u/19900049?u=48a58d2da520a9d712184c6e6e99927ff3cbf179&v=4" width="80;" alt="plgonzalezrx8"/>
<br />
<sub><b>Pedro Gonzalez</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/mryesiller">
<img src="https://avatars.githubusercontent.com/u/24632172?u=0d20f2d615158f87cd60a3398d3efb026c32f291&v=4" width="80;" alt="mryesiller"/>
<br />
<sub><b>Göksel Yeşiller</b></sub>
</a>
</td></tr>
<tr>
<td align="center">
<a href="https://github.com/allesauseinerhand">
<img src="https://avatars.githubusercontent.com/u/32039836?v=4" width="80;" alt="allesauseinerhand"/>
<br />
<sub><b>Allesauseinerhand</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/lamtrinhdev">
<img src="https://avatars.githubusercontent.com/u/49742151?u=c5eaca5aa6841a80605cf4f7d0e861a9e6339ef3&v=4" width="80;" alt="lamtrinhdev"/>
<br />
<sub><b>LamTrinh.Dev</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/Bastii717">
<img src="https://avatars.githubusercontent.com/u/53431819?u=604977bed6ad6875ada890d0d3765a4cacc2fa14&v=4" width="80;" alt="Bastii717"/>
<br />
<sub><b>Bastii717</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/M2TD">
<img src="https://avatars.githubusercontent.com/u/85460457?v=4" width="80;" alt="M2TD"/>
<br />
<sub><b>M2TD</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/frankdez93">
<img src="https://avatars.githubusercontent.com/u/87549420?v=4" width="80;" alt="frankdez93"/>
<br />
<sub><b>Frankdez93</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/NixyJuppie">
<img src="https://avatars.githubusercontent.com/u/138570196?u=b102c222487905728b858704962d32759df29ebe&v=4" width="80;" alt="NixyJuppie"/>
<br />
<sub><b>Nixy</b></sub>
</a>
</td></tr>
<tr>
<td align="center">
<a href="https://github.com/nrvo">
<img src="https://avatars.githubusercontent.com/u/151435968?u=e1dcb307fd0efdc45cddbe9490a7b956e4da6835&v=4" width="80;" alt="nrvo"/>
<br />
<sub><b>Nrvo</b></sub>
</a>
</td></tr>
</table>
<!-- readme: sponsors -end -->
@ -508,6 +710,9 @@ Huge thanks to the sponsors helping to support Dashy's development!
#### Contributors
[![Auto-generated contributors](https://raw.githubusercontent.com/Lissy93/dashy/master/docs/assets/CONTRIBUTORS.svg)](./docs/credits.md)
#### Stats
[![Stats](https://repobeats.axiom.co/api/embed/48546e3c768d38c450ba136e32c0992bcf58ad73.svg "Repobeats analytics image")](https://github.com/Lissy93/dashy/blob/master/docs/credits.md)
**[⬆️ Back to Top](#dashy)**
---
@ -526,8 +731,9 @@ To set up the development environment:
1. Get Code: `git clone https://github.com/Lissy93/dashy.git` and `cd dashy`
2. Install dependencies: `yarn`
3. Start dev server: `yarn dev`
4. Open the browser: `http://localhost:8080`
Hot reload is enabled, so changes will be automatically detected, compiled and, refreshed.
When you're ready, you can build the production app with `yarn build`, and then run it with `yarn start`
If you're new to web development, I've put together a short [list of resources](https://github.com/Lissy93/dashy/blob/master/docs/developing.md#resources-for-beginners) to help beginners get started
@ -542,22 +748,6 @@ If you're new to web development, I've put together a short [list of resources](
---
## Release Schedule 🗞️
> For full release, automation and CI documentation, see: [**Releases & Workflows**](./docs/release-workflow.md)
Dashy is under active development, with features, improvements, and changes pushed almost daily.
We're using [Semantic Versioning](https://semver.org/) to indicate major, minor, and patch versions. You can find the current version number in the readme and check the version of your app under the config menu. The version number is pulled from the [package.json](https://github.com/Lissy93/dashy/blob/master/package.json#L3) file.
Typically there is a new major release every 2 - 4 weeks, usually on Sunday, and you can view these under the [Releases Page](https://github.com/Lissy93/dashy/releases) and [on DockerHub](https://hub.docker.com/r/lissy93/dashy/tags). In addition, new minor versions are pushed several times a week and are [tagged here](https://github.com/Lissy93/dashy/tags).
For a full breakdown of each change, you can view the [Changelog](https://github.com/Lissy93/dashy/blob/master/.github/CHANGELOG.md). In addition, each new feature or significant change needs to be submitted through [a pull request](https://github.com/Lissy93/dashy/pulls?q=is%3Apr), which makes it easy to review and track these changes, and roll back if needed.
**[⬆️ Back to Top](#dashy)**
---
## Documentation 📘
> For full docs, see: **[Documentation Contents](./docs/readme.md)**
#### Running Dashy
@ -567,6 +757,17 @@ For a full breakdown of each change, you can view the [Changelog](https://github
- 💻 [Management](/docs/management.md) - Managing your app, updating, security, web server configuration, etc
- 🚒 [Troubleshooting](/docs/troubleshooting.md) - Common errors and problems, and how to fix them
#### Feature Docs
- 🛡️ [Authentication](/docs/authentication.md) - Guide to setting up authentication to protect your dashboard
- 🌈 [Alternate Views](/docs/alternate-views.md) - Outline of available pages / views and item opening methods
- 💾 [Backup & Restore](/docs/backup-restore.md) - Guide to backing up config with Dashy's cloud sync feature
- 🧸 [Icons](/docs/icons.md) - Outline of all available icon types for sections and items, with examples
- 🌐 [Multi-Language Support](/docs/multi-language-support.md) - Switching languages, and adding a new locales
- 🚦 [Status Indicators](/docs/status-indicators.md) - Using Dashy to monitor uptime and status of your apps
- 🔍 [Searching & Shortcuts](/docs/searching.md) - Searching, launching methods + keyboard shortcuts
- 🎨 [Theming](/docs/theming.md) - Complete guide to applying, writing and modifying themes + styles
- 📊 [Widgets](/docs/widgets.md) - List of all dynamic content widgets, with usage guides and examples
#### Development and Contributing
- 🧱 [Developing](/docs/developing.md) - Running Dashy development server locally, and general workflow
- 🛎️ [Development Guides](/docs/development-guides.md) - Common development tasks, to help new contributors
@ -575,16 +776,6 @@ For a full breakdown of each change, you can view the [Changelog](https://github
- 🏆 [Credits](/docs/credits.md) - Shout out to the amazing people who have contributed so far
- 🗞️ [Release Workflow](/docs/release-workflow.md) - Info about releases, CI and automated tasks
#### Feature Docs
- 🛡️ [Authentication](/docs/authentication.md) - Guide to setting up authentication to protect your dashboard
- 🧿 [Alternate Views](/docs/alternate-views.md) - Outline of available pages / views and item opening methods
- 💾 [Backup & Restore](/docs/backup-restore.md) - Guide to Dashy's cloud sync feature
- 🧸 [Icons](/docs/icons.md) - Outline of all available icon types for sections and items
- 🌐 [Language Switching](/docs/multi-language-support.md) - How to change language, add a language, or update text
- 🚦 [Status Indicators](/docs/status-indicators.md) - Using Dashy to monitor uptime and status of your apps
- 🔍 [Searching & Shortcuts](/docs/searching.md) - Finding and launching your apps, and using keyboard shortcuts
- 🎨 [Theming](/docs/theming.md) - Complete guide to applying, writing and modifying themes and styles
#### Misc
- 🔐 [Privacy & Security](/docs/privacy.md) - List of requests, potential issues, and security resources
- 📄 [License](/LICENSE) - Copy of the MIT License
@ -598,14 +789,11 @@ For a full breakdown of each change, you can view the [Changelog](https://github
## Roadmap 🛣️
> For past and future app updates, see: [**Changelog**](/.github/CHANGELOG.md)
For upcoming features that will be released in the near future, see the [**Current Roadmap**](https://github.com/Lissy93/dashy/discussions/405)
The following features and tasks are planned for the near future.
- Widget support- cards showing live stats and interactive content from your self-hosted services
- ✅ UI editor and visual configurator
- Replacement of Node backend with Go
**[⬆️ Back to Top](#dashy)**
For past updates, see the [**Changelog**](/.github/CHANGELOG.md)
**[⬆️ Back to Top](#dashy)**
---
@ -628,7 +816,7 @@ A few self-hosted web apps serve a similar purpose to Dashy. If you're looking f
Dashy is Licensed under [MIT X11](https://en.wikipedia.org/wiki/MIT_License)
```
Copyright © 2021 Alicia Sykes <https://aliciasykes.com>
Copyright © 2021-2024 Alicia Sykes <https://aliciasykes.com>
Permission is hereby granted, free of charge, to any person obtaining a copy of this
software and associated documentation files (the "Software"), to deal in the Software
@ -663,16 +851,25 @@ For more info, see TLDR Legal's [Explanation of MIT](https://tldrlegal.com/licen
---
<p align="center">
<br>
<a href="https://dashboard.trackgit.com/token/ks0bx7bb14lsvbwoc3ik">
<img src="https://us-central1-trackgit-analytics.cloudfunctions.net/token/ping/ks0bx7bb14lsvbwoc3ik?style=flat-square" />
</a>
<br><br>
<a href="https://github.com/Lissy93/dashy">
<img src="https://github.githubassets.com/images/icons/emoji/octocat.png" />
</a>
<br><br>
<i>Thank you for Visiting</i>
<!-- License + Copyright -->
<p align="center">
<i>© <a href="https://aliciasykes.com">Alicia Sykes</a> 2024</i><br>
<i>Licensed under <a href="https://gist.github.com/Lissy93/143d2ee01ccc5c052a17">MIT</a></i><br>
<a href="https://github.com/lissy93"><img src="https://i.ibb.co/4KtpYxb/octocat-clean-mini.png" /></a><br>
<sup>Thanks for visiting :)</sup>
</p>
<!-- Dinosaurs are Awesome -->
<!--
. - ~ ~ ~ - .
.. _ .-~ ~-.
//| \ `..~ `.
|| | } } / \ \
(\ \\ \~^..' | } \
\`.-~ o / } | / \
(__ | / | / `.
`- - ~ ~ -._| /_ - ~ ~ ^| /- _ `.
| / | / ~-. ~- _
|_____| |_____| ~ - . _ _~_-_
-->

View File

@ -1,5 +1,6 @@
{
"name": "Dashy",
"website": "https://dashy.to/",
"description": "A Dashboard for your Homelab 🚀",
"repository": "https://github.com/lissy93/dashy",
"logo": "https://raw.githubusercontent.com/Lissy93/dashy/master/docs/assets/logo.png",
@ -13,4 +14,4 @@
"lissy93"
],
"stack": "heroku-20"
}
}

View File

@ -12,21 +12,17 @@ services:
# To build from source, replace 'image: lissy93/dashy' with 'build: .'
# build: .
# Or, to use a Dockerfile for your archtecture, uncomment the following
# context: .
# dockerfile: ./docker/Dockerfile-arm32v7
# You can also use an image with a different tag, or pull from a different registry, e.g:
# image: ghcr.io/lissy93/dashy or image: lissy93/dashy:arm64v8
# image: ghcr.io/lissy93/dashy or image: lissy93/dashy:3.0.0
# Pass in your config file below, by specifying the path on your host machine
# volumes:
# - /path/to/my-config.yml:/app/public/conf.yml
# - /path/to/item-icons:/app/public/item-icons
# - /path/to/my-config.yml:/app/user-data/conf.yml
# - /path/to/item-icons:/app/user-data/item-icons/
# Set port that web service will be served on. Keep container port as 80
# Set port that web service will be served on. Keep container port as 8080
ports:
- 4000:80
- 4000:8080
# Set any environmental variables
environment:

View File

@ -1,50 +0,0 @@
FROM node:14.17.5-alpine AS BUILD_IMAGE
ARG TARGETPLATFORM
ENV TARGETPLATFORM=${TARGETPLATFORM:-linux/amd64}
# Install additional tools needed on arm64 and armv7
RUN \
case "${TARGETPLATFORM}" in \
'linux/arm64') apk add --no-cache python make g++ ;; \
'linux/arm/v7') apk add --no-cache python make g++ ;; \
esac
# Create and set the working directory
WORKDIR /app
COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile --network-timeout 1000000
# Copy over all project files and folders to the working directory
COPY . ./
# Build initial app for production
RUN yarn build
# Build the final image
FROM node:14.17.5-alpine
# Define some ENV Vars
ENV PORT=80 \
DIRECTORY=/app \
IS_DOCKER=true
# Create and set the working directory
WORKDIR ${DIRECTORY}
# Install tini and tzdata
RUN apk add --no-cache tzdata tini
# copy from build image
COPY --from=BUILD_IMAGE /app ./
# Finally, run start command to serve up the built application
ENTRYPOINT [ "/sbin/tini", "--" ]
CMD [ "yarn", "build-and-start" ]
# Expose given port
EXPOSE ${PORT}
# Run simple healthchecks every 5 mins, to check the Dashy's everythings great
HEALTHCHECK --interval=5m --timeout=2s --start-period=30s CMD yarn health-check

31
docker/Dockerfile-old Normal file
View File

@ -0,0 +1,31 @@
FROM node:lts-alpine3.14
# Define some ENV Vars
ENV PORT=80 \
DIRECTORY=/app \
IS_DOCKER=true
# Create and set the working directory
WORKDIR ${DIRECTORY}
# Copy over both 'package.json' and 'package-lock.json' (if available)
COPY package*.json ./
COPY yarn.lock ./
# Install project dependencies
RUN yarn
# Copy over all project files and folders to the working directory
COPY . .
# Build initial app for production
RUN yarn build
# Expose given port
EXPOSE ${PORT}
# Finally, run start command to serve up the built application
CMD [ "yarn", "build-and-start"]
# Run simple healthchecks every 5 mins, to check the Dashy's everythings great
HEALTHCHECK --interval=5m --timeout=2s --start-period=30s CMD yarn health-check

136
docker/docker-readme.md Normal file
View File

@ -0,0 +1,136 @@
<h1 align="center">Dashy</h1>
<p align="center">
<i>Dashy helps you organize your self-hosted services by making them accessible from a single place</i>
<br/>
<img width="120" src="https://i.ibb.co/yhbt6CY/dashy.png" />
<br/>
<b><a href="https://github.com/Lissy93/dashy/blob/master/docs/showcase.md">User Showcase</a></b> | <b><a href="https://demo.dashy.to">Live Demo</a></b> | <b><a href="https://github.com/Lissy93/dashy/blob/master/docs/quick-start.md">Getting Started</a></b> | <b><a href="https://dashy.to/docs">Documentation</a></b> | <b><a href="https://github.com/Lissy93/dashy">GitHub</a></b>
<br/><br/>
<a href="https://github.com/awesome-selfhosted/awesome-selfhosted#personal-dashboards">
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome Self-Hosted">
</a>
<a href="https://github.com/Lissy93/dashy/blob/master/LICENSE">
<img src="https://img.shields.io/badge/License-MIT-0aa8d2?logo=opensourceinitiative&logoColor=fff" alt="License MIT">
</a>
<a href="https://github.com/Lissy93/dashy/blob/master/.github/CHANGELOG.md">
<img src="https://img.shields.io/github/package-json/v/lissy93/dashy?logo=azurepipelines&amp;color=0aa8d2" alt="Current Version">
</a>
<a href="https://hub.docker.com/r/lissy93/dashy">
<img src="https://img.shields.io/docker/pulls/lissy93/dashy?logo=docker&color=0aa8d2&logoColor=fff" alt="Docker Pulls">
</a>
<a href="http://as93.link/dashy-build-status">
<img src="https://badgen.net/github/status/lissy93/dashy?icon=github" alt="GitHub Status">
</a>
<a href="https://snyk.io/test/github/lissy93/dashy">
<img src="https://snyk.io/test/github/lissy93/dashy/badge.svg" alt="Known Vulnerabilities">
</a>
</p>
## Features 🌈
- 🔎 Instant search by name, domain, or tags + customizable hotkeys & keyboard shortcuts
- 🎨 Multiple built-in color themes, with UI color editor and support for custom CSS
- 🧸 Many icon options - Font-Awesome, homelab icons, auto-fetching Favicon, images, emojis, etc.
- 🚦 Status monitoring for each of your apps/links for basic availability and uptime checking
- 📊 Widgets for displaying info and dynamic content from your self-hosted services
- 💂 Optional authentication with multi-user access, configurable privileges, and SSO support
- 🌎 Multi-language support, with 10+ human-translated languages, and more on the way
- ☁ Optional, encrypted, free off-site cloud backup and restore feature available
- 💼 A workspace view, for easily switching between multiple apps simultaneously
- 🛩️ A minimal view, for use as a fast-loading browser Startpage
- 🖱️ Choose app launch method, either new tab, same tab, a pop-up modal, or in the workspace view
- 📏 Customizable layout, sizes, text, component visibility, sort order, behavior, etc.
- 🖼️ Options for a full-screen background image, custom nav-bar links, HTML footer, title, etc.
- 🚀 Easy to setup with Docker, or on bare metal, or with 1-Click cloud deployment
- ⚙️ Easy configuration, either through the UI, or using a YAML file
- ✨ Under active development with improvements and new features added regularly
- 🤏 Small bundle size, fully responsive UI, and PWA for basic offline access
- 🆓 100% free and open-source
- 🔐 Strong focus on privacy
- 🌈 And loads more...
## Demo ⚡
**Live Instances**: [Demo 1](https://demo.dashy.to) (Live Demo) ┆ [Demo 2](https://live.dashy.to) (Dashy Links) ┆ [Demo 3](https://dev.dashy.to) (Dev Preview)
**Screenshots**: Checkout the [Showcase](https://github.com/Lissy93/dashy/blob/master/docs/showcase.md), to see example dashboards from the community
**Spin up your own demo**: [![One-Click Deploy with PWD](https://img.shields.io/badge/Play--with--Docker-Deploy-2496ed?style=flat-square&logo=docker)](https://labs.play-with-docker.com/?stack=https://raw.githubusercontent.com/Lissy93/dashy/master/docker-compose.yml) or [`docker run -p 8080:8080 lissy93/dashy`](./docs/quick-start.md)
<p align="center">
<img width="800" src="https://i.ibb.co/L8YbNNc/dashy-demo2.gif" alt="Demo" />
</p>
**[⬆️ Back to Top](#dashy)**
---
## Getting Started 🛫
To deploy Dashy with Docker, just run `docker run -p 8080:8080 lissy93/dashy`, then open `http://localhost:8080`
For full list of options and a Docker compose file, see the [Deployment Docs](https://github.com/Lissy93/dashy/blob/master/docs/deployment.md).
Dashy can also be run on bare metal using Node.js, or deployed to a cloud service, using the 1-Click deploy script.
---
## Documentation 📝
#### Running Dashy
- **[Quick Start](https://github.com/Lissy93/dashy/blob/master/docs/quick-start.md)** - TDLR guide on getting Dashy up and running
- **[Deployment](https://github.com/Lissy93/dashy/blob/master/docs/deployment.md)** - Full guide on deploying Dashy either locally or online
- **[Configuring](https://github.com/Lissy93/dashy/blob/master/docs/configuring.md)** - Complete list of all available options in the config file
- **[App Management](https://github.com/Lissy93/dashy/blob/master/docs/management.md)** - Managing your app, updating, security, web server configuration, etc
- **[Troubleshooting](https://github.com/Lissy93/dashy/blob/master/docs/troubleshooting.md)** - Common errors and problems, and how to fix them
#### Feature Docs
- **[Authentication](https://github.com/Lissy93/dashy/blob/master/docs/authentication.md)** - Guide to setting up authentication to protect your dashboard
- **[Alternate Views](https://github.com/Lissy93/dashy/blob/master/docs/alternate-views.md)** - Outline of available pages / views and item opening methods
- **[Backup & Restore](https://github.com/Lissy93/dashy/blob/master/docs/backup-restore.md)** - Guide to backing up config with Dashy's cloud sync feature
- **[Icons](https://github.com/Lissy93/dashy/blob/master/docs/icons.md)** - Outline of all available icon types for sections and items, with examples
- **[Language Switching](https://github.com/Lissy93/dashy/blob/master/docs/multi-language-support.md)** - Details on how to switch language, or add a new locale
- **[Status Indicators](https://github.com/Lissy93/dashy/blob/master/docs/status-indicators.md)** - Using Dashy to monitor uptime and status of your apps
- **[Searching & Shortcuts](https://github.com/Lissy93/dashy/blob/master/docs/searching.md)** - Searching, launching methods + keyboard shortcuts
- **[Theming](https://github.com/Lissy93/dashy/blob/master/docs/theming.md)** - Complete guide to applying, writing and modifying themes + styles
- **[Widgets](https://github.com/Lissy93/dashy/blob/master/docs/widgets.md)** - List of all dynamic content widgets, with usage guides and examples
#### Development and Contributing
- **[Developing](https://github.com/Lissy93/dashy/blob/master/docs/developing.md)** - Running Dashy development server locally, and general workflow
- **[Development Guides](https://github.com/Lissy93/dashy/blob/master/docs/development-guides.md)** - Common development tasks, to help new contributors
- **[Contributing](https://github.com/Lissy93/dashy/blob/master/docs/contributing.md)** - How you can help keep Dashy alive
- **[Showcase](https://github.com/Lissy93/dashy/blob/master/docs/showcase.md)** - See how others are using Dashy, and share your dashboard
- **[Credits](https://github.com/Lissy93/dashy/blob/master/docs/credits.md)** - List of people and projects that have made Dashy possible
- **[Release Workflow](https://github.com/Lissy93/dashy/blob/master/docs/release-workflow.md)** - Info about releases, CI and automated tasks
---
## License 📜
Dashy is Licensed under [MIT X11](https://en.wikipedia.org/wiki/MIT_License)
```
Copyright © 2024 Alicia Sykes <https://aliciasykes.com>
Permission is hereby granted, free of charge, to any person obtaining a copy of this
software and associated documentation files (the "Software"), to deal in the Software
without restriction, including without limitation the rights to use, copy, modify, merge,
publish, distribute, sublicense, and/or sell copies of the Software, and to permit
persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE OR THE USE
OR OTHER DEALINGS IN THE SOFTWARE.
Except as contained in this notice, Dashy shall not be used in advertising or otherwise
to promote the sale, use, or other dealings in this Software without prior written
authorization from the repo owner.
```

View File

@ -1,10 +1,18 @@
# Alternate Views & Opening Methods
## Views
As well as the default start view, Dashy has several other start pages, for different tasks. You can switch views with the view-switcher button in the top-right, or set a default starting view using the `appConfig.startingView` attribute (can be `default`, `minimal` or `workspace`).
Dashy has three different views:
- Default View - This is the main homepage with sections in a grid layout
- Workspace View - Items displayed on the side, and are launched within Dashy
- Minimal View - A clean + simple tabbed view
You can switch between views using the dropdown in the top-right corner. Set your chosen Starting View with `appConfig.startingView`. Click the page title at any time to go back to your selected starting view.
### Default
This is the main page that you will land on when you first launch the application. Here all of your sections and items will be visible, you can modify settings and search + launch your applications.
This is the main page that you will land on when you first launch the application. Here all of your sections (with items + widgets) are visible in a grid layout.
<p align="center">
<b>Example of Default View</b><br>
@ -12,11 +20,12 @@ This is the main page that you will land on when you first launch the applicatio
</p>
### Workspace
The workspace view displays your links in a sidebar on the left-hand side, and apps are launched within Dashy. This enables you to use all of your self-hosted apps from one place, and makes multi-tasking easy.
In the workspace view, you can opt to keep previously opened websites/ apps open in the background, by setting `appConfig.enableMultiTasking: true`. This comes at the cost of performance, but does mean that your session with each app is preserved, enabling you to quickly switch between your apps.
The workspace view displays your links in a sidebar on the left-hand side, and apps are launched inside an iframe without having to leave Dashy. This enables you to use all of your self-hosted apps from one place, and makes multi-tasking easy.
You can also specify a default app to be opened when you land on the workspace, by setting `appConfig.workspaceLandingUrl: https://app-to-open/`. If this app exists within your sections.items, then the corresponding section will also be expanded.
You can specify a default app to be opened when you land on the workspace, by setting `appConfig.workspaceLandingUrl: https://app-to-open/`. If this app exists within your sections.items, then the corresponding section will also be expanded.
You can also opt to keep previously opened websites/ apps open in the background, by setting `appConfig.enableMultiTasking: true`. This comes at the cost of performance, but does mean that your session with each app is preserved, enabling you to quickly switch between them.
<p align="center">
<b>Example of Workspace View</b><br>
@ -24,7 +33,8 @@ You can also specify a default app to be opened when you land on the workspace,
</p>
### Minimal View
The minimal view aims to be super fast and simple, and can be used as a browser startpage. Items are grouped into a tab view, and the last opened tab will be remembered. Similar to the main view, you can search and launch items just by typing, and right-clicking will show more options.
The minimal view aims to be super fast and simple, and can be used as a browser startpage. Items are grouped into a tab view, and the last opened tab will be remembered. Similar to the main view, you can search and launch items just by typing, and right-clicking will show more options (like open in modal, workspace or new tab).
<p align="center">
<b>Example of Minimal View</b><br>
@ -33,20 +43,22 @@ The minimal view aims to be super fast and simple, and can be used as a browser
## Opening Methods
Dashy supports several different ways to launch your apps. The default opening method for each app can be specified using the `target` attribute, with a value of one of the following:
Dashy supports several different ways to launch your apps. The primary opening method for each app can be specified using the `target` attribute, with a value of one of the following:
- `sametab` - The app will be launched in the current tab
- `newtab` - The app will be launched in a new tab
- `top` - Opens in the top-most browsing context, useful if your accessing Dashy through an iframe
- `top` - Opens in the top-most browsing context, useful if you're accessing Dashy through an iframe
- `modal` - Launch app in a resizable/ movable popup modal on the current page
- `workspace` - Changes to Workspace view, and launches app
You can also set the default opening method, which will be applied to all items that don't have a specified target, using `appConfig.defaultOpeningMethod`, to one of the above values.
You can also set a default opening method, which will be applied to all items that don't have a specified target, using `appConfig.defaultOpeningMethod`, to one of the above values.
Even if the target is not set (or is set to `sametab`), you can still launch any given app in an alternative method: Alt + Click will open the modal, and Ctrl + Click will open in a new tab. You can also right-click on any item to see all options (as seen in the screenshot below). This custom context menu can be disabled by setting `appConfig.disableContextMenu: true`.
Even if the target is not set (or is set to `sametab`), you can still launch any given app in an alternative method. Either right-click to see all options, or use one of the keyboard shortcuts: Alt + Click will open the modal, and Ctrl + Click will open in a new tab.
<p align="center">
<img width="500" src="https://i.ibb.co/vmZdSRt/dashy-context-menu-2.png" />
</p>
If you don't like the custom context menu, it can be disabled by setting `appConfig.disableContextMenu: true`.
If you get a 'Refused to Connect' error in the modal or workspace views, then the target app has it's X-Frame-Options HTTP set to block requests from embedded content. You can easily fix this by setting this header to ALLOW, for instructions on how to do so, see the [Troubleshooting Docs](/docs/troubleshooting.md#refused-to-connect-in-modal-or-workspace-view).

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 3.3 MiB

After

Width:  |  Height:  |  Size: 30 MiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 94 KiB

View File

@ -1,278 +1,407 @@
# Authentication
- [Basic Auth](#built-in-auth)
- [Setting Up Authentication](#setting-up-authentication)
- [Hash Password](#hash-password)
- [Logging In and Out](#logging-in-and-out)
- [Guest Access](#enabling-guest-access)
- [Per-User Access](#granular-access)
- [Security Considerations](#security)
- [Keycloak Auth](#keycloak)
- [Deploying Keycloak](#1-deploy-keycloak)
- [Setting up Keycloak](#2-setup-keycloak-users)
- [Configuring Dashy for Keycloak](#3-enable-keycloak-in-dashy-config-file)
- [Alternative Authentication Methods](#alternative-authentication-methods)
- [VPN](#vpn)
- [IP-Based Access](#ip-based-access)
- [Web Server Authentication](#web-server-authentication)
- [OAuth Services](#oauth-services)
- [Auth on Cloud Hosting Services](#static-site-hosting-providers)
## Built-In Auth
Dashy has a basic login page included, and frontend authentication. You can enable this by adding users to the `auth` section under `appConfig` in your `conf.yml`. If this section is not specified, then no authentication will be required to access the app, and it the homepage will resolve to your dashboard.
### Setting Up Authentication
The `auth` property takes an array of users. Each user needs to include a username, hash and optional user type (`admin` or `normal`). The hash property is a [SHA-256 Hash](https://en.wikipedia.org/wiki/SHA-2) of your desired password.
For example:
```yaml
appConfig:
auth:
users:
- user: alicia
hash: 4D1E58C90B3B94BCAD9848ECCACD6D2A8C9FBC5CA913304BBA5CDEAB36FEEFA3
type: admin
- user: bob
hash: 5E884898DA28047151D0E56F8DC6292773603D0D6AABBDD62A11EF721D1542D8
```
### Hash Password
Dashy uses [SHA-256 Hash](https://en.wikipedia.org/wiki/Sha-256), a 64-character string, which you can generate using an online tool, such as [this one](https://passwordsgenerator.net/sha256-hash-generator/) or [CyberChef](https://gchq.github.io/CyberChef/) (which can be self-hosted/ ran locally).
A hash is a one-way cryptographic function, meaning that it is easy to generate a hash for a given password, but very hard to determine the original password for a given hash. This means, that so long as your password is long, strong and unique, it is safe to store it's hash in the clear. Having said that, you should never reuse passwords, hashes can be cracked by iterating over known password lists, generating a hash of each.
### Logging In and Out
Once authentication is enabled, so long as there is no valid token in cookie storage, the application will redirect the user to the login page. When the user enters credentials in the login page, they will be checked, and if valid, then a token will be generated, and they can be redirected to the home page. If credentials are invalid, then an error message will be shown, and they will remain on the login page. Once in the application, to log out the user can click the logout button (in the top-right), which will clear cookie storage, causing them to be redirected back to the login page.
### Enabling Guest Access
With authentication setup, by default no access is allowed to your dashboard without first logging in with valid credentials. Guest mode can be enabled to allow for read-only access to a secured dashboard by any user, without the need to log in. A guest user cannot write any changes to the config file, but can apply modifications locally (stored in their browser). You can enable guest access, by setting `appConfig.enableGuestAccess: true`.
### Granular Access
You can use the following properties to make certain sections only visible to some users, or hide sections from guests.
- `hideForUsers` - Section will be visible to all users, except for those specified in this list
- `showForUsers` - Section will be hidden from all users, except for those specified in this list
- `hideForGuests` - Section will be visible for logged in users, but not for guests
For Example:
```yaml
- name: Code Analysis & Monitoring
icon: fas fa-code
displayData:
cols: 2
hideForUsers: [alicia, bob]
items:
...
```
```yaml
- name: Deployment Pipelines
icon: fas fa-rocket
displayData:
hideForGuests: true
items:
...
```
### Security
Since all authentication is happening entirely on the client-side, it is vulnerable to manipulation by an adversary. An attacker could look at the source code, find the function used generate the auth token, then decode the minified JavaScript to find the hash, and manually generate a token using it, then just insert that value as a cookie using the console, and become a logged in user. Therefore, if you need secure authentication for your app, it is strongly recommended to implement this using your web server, or use a VPN to control access to Dashy. The purpose of the login page is merely to prevent immediate unauthorized access to your homepage.
Addressing this is on the todo list, and there are several potential solutions:
1. Encrypt all site data against the users password, so that an attacker can not physically access any data without the correct decryption key
2. Use a backend service to handle authentication and configuration, with no user data returned from the server until the correct credentials are provided. However, this would require either Dashy to be run using it's Node.js server, or the use of an external service
3. ~~Implement authentication using a self-hosted identity management solution, such as [Keycloak for Vue](https://www.keycloak.org/securing-apps/vue)~~ **This is now implemented, and released in PR #174 of V 1.6.5!**
**[⬆️ Back to Top](#authentication)**
---
## Keycloak
Dashy also supports using a [Keycloack](https://www.keycloak.org/) authentication server. The setup for this is a bit more involved, but it gives you greater security overall, useful for if your instance is exposed to the internet.
[Keycloak](https://www.keycloak.org/about.html) is a Java-based [open source](https://github.com/keycloak/keycloak), high-performance, secure authentication system, supported by [RedHad](https://www.redhat.com/en). It is easy to setup ([with Docker](https://quay.io/repository/keycloak/keycloak)), and enables you to secure multiple self-hosted applications with single-sign on using standard protocols (OpenID Connect, OAuth 2.0, SAML 2.0 and social login). It's also very customizable, you can write or use custom [themes](https://wjw465150.gitbooks.io/keycloak-documentation/content/server_development/topics/themes.html), [plugins](https://www.keycloak.org/extensions.html), [password policies](https://wjw465150.gitbooks.io/keycloak-documentation/content/server_admin/topics/authentication/password-policies.html) and more.
The following guide will walk you through setting up Keycloak with Dashy. If you already have a Keycloak instance configured, then skip to Step 3.
### 1. Deploy Keycloak
First thing to do is to spin up a new instance of Keycloak. You will need [Docker installed](https://docs.docker.com/engine/install/), and can then choose a tag, and pull the container from [quay.io/keycloak/keycloak](https://quay.io/repository/keycloak/keycloak)
Use the following run command, replacing the attributes (default credentials, port and name), or incorporate this into your docker-compose file.
```bash
docker run -d \
-p 8081:8080 \
--name auth-server \
-e KEYCLOAK_USER=admin \
-e KEYCLOAK_PASSWORD=admin \
quay.io/keycloak/keycloak:15.0.2
```
If you need to pull from DockerHub, a non-official image is available [here](https://registry.hub.docker.com/r/jboss/keycloak). Or if you would prefer not to use Docker, you can also directly install Keycloak from source, following [this guide](https://www.keycloak.org/docs/latest/getting_started/index.html).
You should now be able to access the Keycloak web interface, using the port specified above (e.g. `http://127.0.0.1:8081`), login with the default credentials, and when prompted create a new password.
### 2. Setup Keycloak Users
Before we can use Keycloak, we must first set it up with some users. Keycloak uses Realms (similar to tenants) to create isolated groups of users. You must create a Realm before you will be able to add your first user.
1. Head over to the admin console
2. In the top-left corner there is a dropdown called 'Master', hover over it and then click 'Add Realm'
3. Give your realm a name, and hit 'Create'
You can now create your first user.
1. In the left-hand menu, click 'Users', then 'Add User'
2. Fill in the form, including username and hit 'Save'
3. Under the 'Credentials' tab, give the new user an initial password. They will be prompted to change this after first login
The last thing we need to do in the Keycloak admin console is to create a new client
1. Within your new realm, navigate to 'Clients' on the left-hand side, then click 'Create' in the top-right
2. Choose a 'Client ID', set 'Client Protocol' to 'openid-connect', and for 'Valid Redirect URIs' put a URL pattern to where you're hosting Dashy (if you're just testing locally, then * is fine), and do the same for the 'Web Origins' field
3. Make note of your client-id, and click 'Save'
### 3. Enable Keycloak in Dashy Config File
Now that your Keycloak instance is up and running, all that's left to do is to configure Dashy to use it. Under `appConfig`, set `auth.enableKeycloak: true`, then fill in the details in `auth.keycloak`, including: `serverUrl` - the URL where your Keycloak instance is hosted, `realm` - the name you gave your Realm, and `clientId` - the Client ID you chose.
For example:
```yaml
appConfig:
...
auth:
enableKeycloak: true
keycloak:
serverUrl: 'http://localhost:8081'
realm: 'alicia-homelab'
clientId: 'dashy'
```
Your app is now secured :) When you load Dashy, it will redirect to your Keycloak login page, and any user without valid credentials will be prevented from accessing your dashboard.
From within the Keycloak console, you can then configure things like user permissions, time outs, password policies, access, etc. You can also backup your full Keycloak config, and it is recommended to do this, along with your Dashy config. You can spin up both Dashy and Keycloak simultaneously and restore both applications configs using a `docker-compose.yml` file, and this is recommended.
---
## Alternative Authentication Methods
If you are self-hosting Dashy, and require secure authentication to prevent unauthorized access, then you can either use Keycloak, or one of the following options:
- [Authentication Server](#authentication-server) - Put Dashy behind a self-hosted auth server
- [VPN](#vpn) - Use a VPN to tunnel into the network where Dashy is running
- [IP-Based Access](#ip-based-access) - Disallow access from all IP addresses, except your own
- [Web Server Authentication](#web-server-authentication) - Enable user control within your web server or proxy
- [OAuth Services](#oauth-services) - Implement a user management system using a cloud provider
- [Password Protection (for cloud providers)](#static-site-hosting-providers) - Enable password-protection on your site
### Authentication Server
##### Authelia
[Authelia](https://www.authelia.com/) is an open-source full-featured authentication server, which can be self-hosted and either on bare metal, in a Docker container or in a Kubernetes cluster. It allows for fine-grained access control rules based on IP, path, users etc, and supports 2FA, simple password access or bypass policies for your domains.
- `git clone https://github.com/authelia/authelia.git`
- `cd authelia/examples/compose/lite`
- Modify the `users_database.yml` the default username and password is authelia
- Modify the `configuration.yml` and `docker-compose.yml` with your respective domains and secrets
- `docker-compose up -d`
For more information, see the [Authelia docs](https://www.authelia.com/docs/)
### VPN
A catch-all solution to accessing services running from your home network remotely is to use a VPN. It means you do not need to worry about implementing complex authentication rules, or trusting the login implementation of individual applications. However it can be inconvenient to use on a day-to-day basis, and some public and corporate WiFi block VPN connections. Two popular VPN protocols are [OpenVPN](https://openvpn.net/) and [WireGuard](https://www.wireguard.com/)
### IP-Based Access
If you have a static IP or use a VPN to access your running services, then you can use conditional access to block access to Dashy from everyone except users of your pre-defined IP address. This feature is offered by most cloud providers, and supported by most web servers.
##### Apache
In Apache, this is configured in your `.htaccess` file in Dashy's root folder, and should look something like:
```
Order Deny,Allow
Deny from all
Allow from [your-ip]
```
##### NGINX
In NGINX you can specify [control access](https://docs.nginx.com/nginx/admin-guide/security-controls/controlling-access-proxied-http/) rules for a given site in your `nginx.conf` or hosts file. For example:
```
server {
listen 80;
server_name www.dashy.example.com;
location / {
root /path/to/dashy/;
passenger_enabled on;
allow [your-ip];
deny all;
}
}
```
##### Caddy
In Caddy, [Request Matchers](https://caddyserver.com/docs/caddyfile/matchers) can be used to filter requests
```
dashy.site {
@public_networks not remote_ip [your-ip]
respond @public_networks "Access denied" 403
}
```
### Web Server Authentication
Most web servers make password protecting certain apps very easy. Note that you should also set up HTTPS and have a valid certificate in order for this to be secure.
##### Apache
First crate a `.htaccess` file in Dashy's route directory. Specify the auth type and path to where you want to store the password file (usually the same folder). For example:
```
AuthType Basic
AuthName "Please Sign into Dashy"
AuthUserFile /path/dashy/.htpasswd
require valid-user
```
Then create a `.htpasswd` file in the same directory. List users and their hashed passwords here, with one user on each line, and a colon between username and password (e.g. `[username]:[hashed-password]`). You will need to generate an MD5 hash of your desired password, this can be done with an [online tool](https://www.web2generators.com/apache-tools/htpasswd-generator). Your file will look something like:
```
alicia:$apr1$jv0spemw$RzOX5/GgY69JMkgV6u16l0
```
##### NGINX
NGINX has an [authentication module](https://nginx.org/en/docs/http/ngx_http_auth_basic_module.html) which can be used to add passwords to given sites, and is fairly simple to set up. Similar to above, you will need to create a `.htpasswd` file. Then just enable auth and specify the path to that file, for example:
```
location / {
auth_basic "closed site";
auth_basic_user_file conf/htpasswd;
}
```
##### Caddy
Caddy has a [basic-auth](https://caddyserver.com/docs/caddyfile/directives/basicauth) directive, where you specify a username and hash. The password hash needs to be base-64 encoded, the [`caddy hash-password`](https://caddyserver.com/docs/command-line#caddy-hash-password) command can help with this. For example:
```
basicauth /secret/* {
alicia JDJhJDEwJEVCNmdaNEg2Ti5iejRMYkF3MFZhZ3VtV3E1SzBWZEZ5Q3VWc0tzOEJwZE9TaFlZdEVkZDhX
}
```
For more info about implementing a single sign on for all your apps with Caddy, see [this tutorial](https://joshstrange.com/securing-your-self-hosted-apps-with-single-signon/)
##### Lighttpd
You can use the [mod_auth](https://doc.lighttpd.net/lighttpd2/mod_auth.html) module to secure your site with Lighttpd. Like with Apache, you need to first create a password file listing your usersnames and hashed passwords, but in Lighttpd, it's usually called `.lighttpdpassword`.
Then in your `lighttpd.conf` file (usually in the `/etc/lighttpd/` directory), load in the mod_auth module, and configure it's directives. For example:
```
server.modules += ( "mod_auth" )
auth.debug = 2
auth.backend = "plain"
auth.backend.plain.userfile = "/home/lighttpd/.lighttpdpassword"
$HTTP["host"] == "dashy.my-domain.net" {
server.document-root = "/home/lighttpd/dashy.my-domain.net/http"
server.errorlog = "/var/log/lighttpd/dashy.my-domain.net/error.log"
accesslog.filename = "/var/log/lighttpd/dashy.my-domain.net/access.log"
auth.require = (
"/docs/" => (
"method" => "basic",
"realm" => "Password protected area",
"require" => "user=alicia"
)
)
}
```
Restart your web server for changes to take effect.
### OAuth Services
There are also authentication services, such as [Ory.sh](https://www.ory.sh/), [Okta](https://developer.okta.com/), [Auth0](https://auth0.com/), [Firebase](https://firebase.google.com/docs/auth/). Implementing one of these solutions would involve some changes to the [`Auth.js`](https://github.com/Lissy93/dashy/blob/master/src/utils/Auth.js) file, but should be fairly straight forward.
### Static Site Hosting Providers
If you are hosting Dashy on a cloud platform, you will probably find that it has built-in support for password protected access to web apps. For more info, see the relevant docs for your provider, for example: [Netlify Password Protection](https://docs.netlify.com/visitor-access/password-protection/), [Cloudflare Access](https://www.cloudflare.com/teams/access/), [AWS Cognito](https://aws.amazon.com/cognito/), [Azure Authentication](https://docs.microsoft.com/en-us/azure/app-service/scenario-secure-app-authentication-app-service) and [Vercel Password Protection](https://vercel.com/docs/platform/projects#password-protection).
**[⬆️ Back to Top](#authentication)**
# Authentication
- [Basic Auth](#built-in-auth)
- [Setting Up Authentication](#setting-up-authentication)
- [Hash Password](#hash-password)
- [Logging In and Out](#logging-in-and-out)
- [Guest Access](#enabling-guest-access)
- [Per-User Access](#granular-access)
- [Using Environment Variables for Passwords](#using-environment-variables-for-passwords)
- [Adding HTTP Auth to Configuration](#adding-http-auth-to-configuration)
- [Security Considerations](#security)
- [HTTP Auth](#http-auth)
- [Keycloak Auth](#keycloak)
- [Deploying Keycloak](#1-deploy-keycloak)
- [Setting up Keycloak](#2-setup-keycloak-users)
- [Configuring Dashy for Keycloak](#3-enable-keycloak-in-dashy-config-file)
- [Alternative Authentication Methods](#alternative-authentication-methods)
- [VPN](#vpn)
- [IP-Based Access](#ip-based-access)
- [Web Server Authentication](#web-server-authentication)
- [OAuth Services](#oauth-services)
- [Auth on Cloud Hosting Services](#static-site-hosting-providers)
> [!IMPORTANT]
> Dashy's built-in auth is not indented to protect a publicly hosted instance against unauthorized access. Instead you should use an auth provider compatible with your reverse proxy, or access Dashy via your VPN, or implement your own SSO logic.
>
> In cases where Dashy is only accessibly within your home network, and you just want to add a login page, then the built-in auth may be sufficient, but keep in mind that configuration can still be accessed.
## Built-In Auth
Dashy has a basic login page included, and frontend authentication. You can enable this by adding users to the `auth` section under `appConfig` in your `conf.yml`. If this section is not specified, then no authentication will be required to access the app, and the homepage will resolve to your dashboard.
> [!NOTE]
> Since the auth is initiated in the main app entry point (for security), a rebuild is required to apply changes to the auth configuration.
> You can trigger a rebuild through the UI, under Config --> Rebuild, or by running `yarn build` in the root directory.
### Setting Up Authentication
The `auth` property takes an array of users. Each user needs to include a username, hash and optional user type (`admin` or `normal`). The hash property is a [SHA-256 Hash](https://en.wikipedia.org/wiki/SHA-2) of your desired password.
For example:
```yaml
appConfig:
auth:
users:
- user: alicia
hash: 4D1E58C90B3B94BCAD9848ECCACD6D2A8C9FBC5CA913304BBA5CDEAB36FEEFA3
type: admin
- user: bob
hash: 5E884898DA28047151D0E56F8DC6292773603D0D6AABBDD62A11EF721D1542D8
```
### Hash Password
Dashy uses [SHA-256 Hash](https://en.wikipedia.org/wiki/Sha-256), a 64-character string, which you can generate using an online tool, such as [this one](https://passwordsgenerator.net/sha256-hash-generator/) or [CyberChef](https://gchq.github.io/CyberChef/) (which can be self-hosted/ ran locally).
A hash is a one-way cryptographic function, meaning that it is easy to generate a hash for a given password, but very hard to determine the original password for a given hash. This means, that so long as your password is long, strong and unique, it is safe to store its hash in the clear. Having said that, you should never reuse passwords, hashes can be cracked by iterating over known password lists, generating a hash of each.
### Logging In and Out
Once authentication is enabled, so long as there is no valid token in cookie storage, the application will redirect the user to the login page. When the user enters credentials in the login page, they will be checked, and if valid, then a token will be generated, and they can be redirected to the home page. If credentials are invalid, then an error message will be shown, and they will remain on the login page. Once in the application, to log out: the user can click the logout button (in the top-right), which will clear cookie storage, causing them to be redirected back to the login page.
### Enabling Guest Access
With authentication set up, by default no access is allowed to your dashboard without first logging in with valid credentials. Guest mode can be enabled to allow for read-only access to a secured dashboard by any user, without the need to log in. A guest user cannot write any changes to the config file, but can apply modifications locally (stored in their browser). You can enable guest access, by setting `appConfig.auth.enableGuestAccess: true`.
### Granular Access
You can use the following properties to make certain pages, sections or items only visible to some users, or hide pages, sections and items from guests.
- `hideForUsers` - Page, Section or Item will be visible to all users, except for those specified in this list
- `showForUsers` - Page, Section or Item will be hidden from all users, except for those specified in this list
- `hideForGuests` - Page, Section or Item will be visible for logged in users, but not for guests
For Example:
```yaml
pages:
- name: Home Lab
path: home-lab.yml
displayData:
showForUsers: [admin]
- name: Intranet
path: intranet.yml
displayData:
hideForGuests: true
hideForUsers: [alicia, bob]
```
```yaml
- name: Code Analysis & Monitoring
icon: fas fa-code
displayData:
cols: 2
hideForUsers: [alicia, bob]
items:
...
```
```yaml
- name: Deployment Pipelines
icon: fas fa-rocket
displayData:
hideForGuests: true
items:
- title: Hide Me
displayData:
hideForUsers: [alicia, bob]
```
### Permissions
Any user who is not an admin (with `type: admin`) will not be able to write changes to disk.
You can also prevent any user from writing changes to disk, using `preventWriteToDisk`. Or prevent any changes from being saved locally in browser storage, using `preventLocalSave`. Both properties can be found under [`appConfig`](./docs/configuring.md#appconfig-optional).
To disable all UI config features, including View Config, set `disableConfiguration`. Alternatively you can disable UI config features for all non admin users by setting `disableConfigurationForNonAdmin` to true.
### Using Environment Variables for Passwords
If you don't want to hash your password, you can instead leave out the `hash` attribute, and replace it with `password` which should have the value of an environmental variable name you wish to use.
Note that env var must begin with `VUE_APP_`, and you must set this variable before building the app.
For example:
```yaml
auth:
users:
- user: bob
password: VUE_APP_BOB
```
Just be sure to set `VUE_APP_BOB='my super secret password'` before build-time.
### Adding HTTP Auth to Configuration
If you'd also like to prevent direct visit access to your configuration file, you can set the `ENABLE_HTTP_AUTH` environmental variable.
### Security
With basic auth, all logic is happening on the client-side, which could mean a skilled user could manipulate the code to view parts of your configuration, including the hash. If the SHA-256 hash is of a common password, it may be possible to determine it, using a lookup table, in order to find the original password. Which can be used to manually generate the auth token, that can then be inserted into session storage, to become a valid logged in user. Therefore, you should always use a long, strong and unique password, and if you instance contains security-critical info and/ or is exposed directly to the internet, and alternative authentication method may be better. The purpose of the login page is merely to prevent immediate unauthorized access to your homepage.
**[⬆️ Back to Top](#authentication)**
---
## HTTP Auth
If you'd like to protect all your config files from direct access, you can set the `BASIC_AUTH_USERNAME` and `BASIC_AUTH_PASSWORD` environmental variables. You'll then be prompted to enter these credentials when visiting Dashy.
Then, if you'd like your frontend to automatically log you in, without prompting you for credentials, then also specify `VUE_APP_BASIC_AUTH_USERNAME` and `VUE_APP_BASIC_AUTH_PASSWORD`. This is useful for when you're hosting Dashy on a private server, and you want to prevent unauthorized access to your config files, while still allowing the frontend to access them. Note that a rebuild is required for these changes to take effect.
**[⬆️ Back to Top](#authentication)**
---
## Keycloak
Dashy also supports using a [Keycloak](https://www.keycloak.org/) authentication server. The setup for this is a bit more involved, but it gives you greater security overall, useful for if your instance is exposed to the internet.
[Keycloak](https://www.keycloak.org/about.html) is a Java-based [open source](https://github.com/keycloak/keycloak), high-performance, secure authentication system, supported by [RedHat](https://www.redhat.com/en). It is easy to setup ([with Docker](https://quay.io/repository/keycloak/keycloak)), and enables you to secure multiple self-hosted applications with single-sign-on using standard protocols (OpenID Connect, OAuth 2.0, SAML 2.0 and social login). It's also very customizable, you can write or use custom [themes](https://wjw465150.gitbooks.io/keycloak-documentation/content/server_development/topics/themes.html), [plugins](https://www.keycloak.org/extensions.html), [password policies](https://wjw465150.gitbooks.io/keycloak-documentation/content/server_admin/topics/authentication/password-policies.html) and more.
The following guide will walk you through setting up Keycloak with Dashy. If you already have a Keycloak instance configured, then skip to Step 3.
### 1. Deploy Keycloak
First thing to do is to spin up a new instance of Keycloak. You will need [Docker installed](https://docs.docker.com/engine/install/), and can then choose a tag, and pull the container from [quay.io/keycloak/keycloak](https://quay.io/repository/keycloak/keycloak)
Use the following run command, replacing the attributes (default credentials, port and name), or incorporate this into your docker-compose file.
```bash
docker run -d \
-p 8081:8080 \
--name auth-server \
-e KEYCLOAK_USER=admin \
-e KEYCLOAK_PASSWORD=admin \
quay.io/keycloak/keycloak:15.0.2
```
If you need to pull from DockerHub, a non-official image is available [here](https://registry.hub.docker.com/r/jboss/keycloak). Or if you would prefer not to use Docker, you can also directly install Keycloak from source, following [this guide](https://www.keycloak.org/docs/latest/getting_started/index.html).
You should now be able to access the Keycloak web interface, using the port specified above (e.g. `http://127.0.0.1:8081`), login with the default credentials, and when prompted create a new password.
### 2. Setup Keycloak Users
Before we can use Keycloak, we must first set it up with some users. Keycloak uses Realms (similar to tenants) to create isolated groups of users. You must create a Realm before you will be able to add your first user.
1. Head over to the admin console
2. In the top-left corner there is a dropdown called 'Master', hover over it and then click 'Add Realm'
3. Give your realm a name, and hit 'Create'
You can now create your first user.
1. In the left-hand menu, click 'Users', then 'Add User'
2. Fill in the form, including username and hit 'Save'
3. Under the 'Credentials' tab, give the new user an initial password. They will be prompted to change this after first login
The last thing we need to do in the Keycloak admin console is to create a new client
1. Within your new realm, navigate to 'Clients' on the left-hand side, then click 'Create' in the top-right
2. Choose a 'Client ID', set 'Client Protocol' to 'openid-connect', and for 'Valid Redirect URIs' put a URL pattern to where you're hosting Dashy (if you're just testing locally, then * is fine), and do the same for the 'Web Origins' field
3. Make note of your client-id, and click 'Save'
### 3. Enable Keycloak in Dashy Config File
Now that your Keycloak instance is up and running, all that's left to do is to configure Dashy to use it. Under `appConfig`, set `auth.enableKeycloak: true`, then fill in the details in `auth.keycloak`, including: `serverUrl` - the URL where your Keycloak instance is hosted, `realm` - the name you gave your Realm, and `clientId` - the Client ID you chose.
For example:
```yaml
appConfig:
...
auth:
enableKeycloak: true
keycloak:
serverUrl: 'http://localhost:8081'
realm: 'alicia-homelab'
clientId: 'dashy'
```
Note that if you are using Keycloak V 17 or older, you will also need to set `legacySupport: true` (also under `appConfig.auth.keycloak`). This is because the API endpoint was updated in later versions.
If you use Keycloak with an external Identity Provier, you can set the `idpHint: 'alias-of-kc-idp'` option to allow the IdP Hint to be passed to Keycloak. This will cause Keycloak to skip its login page and redirect the user directly to the specified IdP's login page. Set to the value of the 'Alias' field of the desired IdP as defined in Keycloak under 'Identity Providers'.
### 4. Add groups and roles (Optional)
Keycloak allows you to assign users roles and groups. You can use these values to configure who can access various sections or items in Dashy.
Keycloak server administration and configuration is a deep topic; please refer to the [server admin guide](https://www.keycloak.org/docs/latest/server_admin/index.html#assigning-permissions-and-access-using-roles-and-groups) to see details about creating and assigning roles and groups.
Once you have groups or roles assigned to users you can configure access under each section or item `displayData.showForKeycloakUser` and `displayData.hideForKeycloakUser`.
Both show and hide configurations accept a list of `groups` and `roles` that limit access. If a users data matches one or more items in these lists they will be allowed or excluded as defined.
```yaml
sections:
- name: DeveloperResources
displayData:
showForKeycloakUsers:
roles: ['canViewDevResources']
hideForKeycloakUsers:
groups: ['ProductTeam']
items:
- title: Not Visible for developers
displayData:
hideForKeycloakUsers:
groups: ['DevelopmentTeam']
```
Depending on how you're hosting Dashy and Keycloak, you may also need to set some HTTP headers, to prevent a CORS error. This would typically be the `Access-Control-Allow-Origin [URL-of Dashy]` on your Keycloak instance. See the [Setting Headers](https://github.com/Lissy93/dashy/blob/master/docs/management.md#setting-headers) guide in the management docs for more info.
Your app is now secured :) When you load Dashy, it will redirect to your Keycloak login page, and any user without valid credentials will be prevented from accessing your dashboard.
From within the Keycloak console, you can then configure things like time-outs, password policies, etc. You can also backup your full Keycloak config, and it is recommended to do this, along with your Dashy config. You can spin up both Dashy and Keycloak simultaneously and restore both applications configs using a `docker-compose.yml` file, and this is recommended.
---
## Alternative Authentication Methods
If you are self-hosting Dashy, and require secure authentication to prevent unauthorized access, then you can either use Keycloak, or one of the following options:
- [Authentication Server](#authentication-server) - Put Dashy behind a self-hosted auth server
- [VPN](#vpn) - Use a VPN to tunnel into the network where Dashy is running
- [IP-Based Access](#ip-based-access) - Disallow access from all IP addresses, except your own
- [Web Server Authentication](#web-server-authentication) - Enable user control within your web server or proxy
- [OAuth Services](#oauth-services) - Implement a user management system using a cloud provider
- [Password Protection (for cloud providers)](#static-site-hosting-providers) - Enable password-protection on your site
### Authentication Server
#### Authelia
[Authelia](https://www.authelia.com/) is an open-source full-featured authentication server, which can be self-hosted and either on bare metal, in a Docker container or in a Kubernetes cluster. It allows for fine-grained access control rules based on IP, path, users etc, and supports 2FA, simple password access or bypass policies for your domains.
- `git clone https://github.com/authelia/authelia.git`
- `cd authelia/examples/compose/lite`
- Modify the `users_database.yml` the default username and password is authelia
- Modify the `configuration.yml` and `docker-compose.yml` with your respective domains and secrets
- `docker-compose up -d`
For more information, see the [Authelia docs](https://www.authelia.com/docs/)
### VPN
A catch-all solution to accessing services running from your home network remotely is to use a VPN. It means you do not need to worry about implementing complex authentication rules, or trusting the login implementation of individual applications. However it can be inconvenient to use on a day-to-day basis, and some public and corporate WiFi block VPN connections. Two popular VPN protocols are [OpenVPN](https://openvpn.net/) and [WireGuard](https://www.wireguard.com/)
### IP-Based Access
If you have a static IP or use a VPN to access your running services, then you can use conditional access to block access to Dashy from everyone except users of your pre-defined IP address. This feature is offered by most cloud providers, and supported by most web servers.
#### Apache
In Apache, this is configured in your `.htaccess` file in Dashy's root folder, and should look something like:
```text
Order Deny,Allow
Deny from all
Allow from [your-ip]
```
#### NGINX
In NGINX you can specify [control access](https://docs.nginx.com/nginx/admin-guide/security-controls/controlling-access-proxied-http/) rules for a given site in your `nginx.conf` or hosts file. For example:
```text
server {
listen 8080;
server_name www.dashy.example.com;
location / {
root /path/to/dashy/;
passenger_enabled on;
allow [your-ip];
deny all;
}
}
```
#### Caddy
In Caddy, [Request Matchers](https://caddyserver.com/docs/caddyfile/matchers) can be used to filter requests
```text
dashy.site {
@public_networks not remote_ip [your-ip]
respond @public_networks "Access denied" 403
}
```
### Web Server Authentication
Most web servers make password protecting certain apps very easy. Note that you should also set up HTTPS and have a valid certificate in order for this to be secure.
#### Apache
First crate a `.htaccess` file in Dashy's route directory. Specify the auth type and path to where you want to store the password file (usually the same folder). For example:
```text
AuthType Basic
AuthName "Please Sign into Dashy"
AuthUserFile /path/dashy/.htpasswd
require valid-user
```
Then create a `.htpasswd` file in the same directory. List users and their hashed passwords here, with one user on each line, and a colon between username and password (e.g. `[username]:[hashed-password]`). You will need to generate an MD5 hash of your desired password, this can be done with an [online tool](https://www.web2generators.com/apache-tools/htpasswd-generator). Your file will look something like:
```text
alicia:$apr1$jv0spemw$RzOX5/GgY69JMkgV6u16l0
```
#### NGINX
NGINX has an [authentication module](https://nginx.org/en/docs/http/ngx_http_auth_basic_module.html) which can be used to add passwords to given sites, and is fairly simple to set up. Similar to above, you will need to create a `.htpasswd` file. Then just enable auth and specify the path to that file, for example:
```text
location / {
auth_basic "closed site";
auth_basic_user_file conf/htpasswd;
}
```
#### Caddy
Caddy has a [basic-auth](https://caddyserver.com/docs/caddyfile/directives/basicauth) directive, where you specify a username and hash. The password hash needs to be base-64 encoded, the [`caddy hash-password`](https://caddyserver.com/docs/command-line#caddy-hash-password) command can help with this. For example:
```text
basicauth /secret/* {
alicia JDJhJDEwJEVCNmdaNEg2Ti5iejRMYkF3MFZhZ3VtV3E1SzBWZEZ5Q3VWc0tzOEJwZE9TaFlZdEVkZDhX
}
```
For more info about implementing a single sign on for all your apps with Caddy, see [this tutorial](https://joshstrange.com/securing-your-self-hosted-apps-with-single-signon/)
#### Lighttpd
You can use the [mod_auth](https://doc.lighttpd.net/lighttpd2/mod_auth.html) module to secure your site with Lighttpd. Like with Apache, you need to first create a password file listing your usernames and hashed passwords, but in Lighttpd, it's usually called `.lighttpdpassword`.
Then in your `lighttpd.conf` file (usually in the `/etc/lighttpd/` directory), load in the mod_auth module, and configure it's directives. For example:
```text
server.modules += ( "mod_auth" )
auth.debug = 2
auth.backend = "plain"
auth.backend.plain.userfile = "/home/lighttpd/.lighttpdpassword"
$HTTP["host"] == "dashy.my-domain.net" {
server.document-root = "/home/lighttpd/dashy.my-domain.net/http"
server.errorlog = "/var/log/lighttpd/dashy.my-domain.net/error.log"
accesslog.filename = "/var/log/lighttpd/dashy.my-domain.net/access.log"
auth.require = (
"/docs/" => (
"method" => "basic",
"realm" => "Password protected area",
"require" => "user=alicia"
)
)
}
```
Restart your web server for changes to take effect.
### OAuth Services
There are also authentication services, such as [Ory.sh](https://www.ory.sh/), [Okta](https://developer.okta.com/), [Auth0](https://auth0.com/), [Firebase](https://firebase.google.com/docs/auth/). Implementing one of these solutions would involve some changes to the [`Auth.js`](https://github.com/Lissy93/dashy/blob/master/src/utils/Auth.js) file, but should be fairly straightforward.
### Static Site Hosting Providers
If you are hosting Dashy on a cloud platform, you will probably find that it has built-in support for password protected access to web apps. For more info, see the relevant docs for your provider, for example: [Netlify Password Protection](https://docs.netlify.com/visitor-access/password-protection/), [Cloudflare Access](https://www.cloudflare.com/teams/access/), [AWS Cognito](https://aws.amazon.com/cognito/), [Azure Authentication](https://docs.microsoft.com/en-us/azure/app-service/scenario-secure-app-authentication-app-service) and [Vercel Password Protection](https://vercel.com/docs/platform/projects#password-protection).
**[⬆️ Back to Top](#authentication)**

View File

@ -1,4 +1,6 @@
### Cloud Backup and Restore
# Cloud Backup and Restore
Beyond the cloud backup/restore service, there are several other self-hosted options you can use to backup Dashy, and any other Docker container data. These are outlined in the Management docs, at: [Docker Backup Options](/docs/management.md#backing-up).
Dashy has a built-in feature for securely backing up your config to a hosted cloud service, and then restoring it on another instance. This feature is totally optional, and if you do not enable it, then Dashy will not make any external network requests.
@ -8,18 +10,19 @@ This is useful not only for backing up your configuration off-site, but it also
<img src="https://i.ibb.co/p4pxSqX/dashy-backup-restore.png" width="600" />
</p>
### How it Works
## How it Works
All data is encrypted before being sent to the backend. In Dashy, this is done in [`CloudBackup.js`](https://github.com/Lissy93/dashy/blob/master/src/utils/CloudBackup.js), using [crypto.js](https://github.com/brix/crypto-js)'s AES method, using the users chosen password as the key. The data is then sent to a [Cloudflare worker](https://developers.cloudflare.com/workers/learning/how-workers-works) (a platform for running serverless functions), and stored in a [KV](https://developers.cloudflare.com/workers/learning/how-kv-works) data store.
## Creating a Backup
### Creating a Backup
Once you've got Dashy configured to your preference, open the Backup & Restore menu (click the Cloud icon in the top-right corner). Here you will be prompted to choose a password, which will be used to encrypt your data. If you forget this password, there will be no way to recover your config. After clicking 'Backup' your data will be encrypted, compressed and sent to the hosted cloud service. A backup ID will be returned (in the format of xxxx-xxxx-xxxx-xxxx), this is what you use, along with your password to restore the backup on another system, so take note of it. To update a backup, return to this menu, enter your password, and click 'Update Backup'.
### Restoring a Backup
To restore a backup, navigate to the Backup & Restore menu, and under restore, enter your backup ID, and the password you chose. Your config file will be downloaded, decrypted and applied to local storage.
## Restoring a Backup
### Privacy & Security
To restore a backup, navigate to the Backup & Restore menu, and under restore, enter your backup ID, and the password you chose. Your config file will be downloaded, decrypted and applied to local storage.
## Privacy & Security
Data is only ever sent to the cloud when the user actively triggers a backup. All transmitted data is first encrypted using [AES](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard). Your selected password never leaves your device, and is hashed before being compared. It is only possible to restore a configuration if you have both the backup ID and decryption password.
@ -27,24 +30,23 @@ Because the data is encrypted on the client-side (before being sent to the cloud
Having said that, although the code uses robust security libraries and is open source- it was never intended to be a security product, and has not been audited, and therefore cannot be considered totally secure - please keep that in mind.
### Fair Use Policy
## Fair Use Policy
Maximum of 24mb of storage per user. Please do not repeatedly hit the endpoint, as if the quota is exceeded the service may become less available to other users. Abuse may result in your IP being temporarily banned by Cloudflare.
---
### Self-Hosting the Backup Server
## Self-Hosting the Backup Server
### Quick Start
#### Quick Start
- Install Wrangler CLI Tool: `npm i -g @cloudflare/wrangler`
- Log into Cloudflare account: `wrangler login`
- Create a new project: ` wrangler generate my-project`
- Create a new project: `wrangler generate my-project`
- Install dependencies: `cd my-project` && `npm i`
### Populate `wrangler.toml`
#### Populate `wrangler.toml`
- Add your `account_id` (found on the right sidebar of the Workers or Overview Dashboard)
- Add your `zone_id` (found in the Overview tab of your desired domain on Cloudflare)
- Add your `route`, which should be a domain or host, supporting a wildcard
@ -63,10 +65,11 @@ kv_namespaces = [
]
```
#### Complete `index.js`
### Complete `index.js`
- Write code to handle your requests, and interact with any other data sources in this file
- Generally, this is done within an event listener for 'fetch', and returns a promise
- For Example:
- For Example:
```javascript
addEventListener('fetch', event => {
@ -82,28 +85,28 @@ async function handleRequest(request) {
- For the code used for Dashy's cloud service, see [here](https://gist.github.com/Lissy93/d19b43d50f30e02fa25f349cf5cb5ed8#file-index-js)
### Commands
#### Commands
- `wrangler dev` - To start the wrangler development server
- `wrangler publish` - To publish to your cloudflare account (first run `wrangler login`)
### API
## API
There are four endpoints, and to keep things simple, they all use the same base URL/ route.
- **`GET`** - Get config for a given user
- `backupId` - The ID of the desired encrypted object
- `subHash` - The latter half of the password hash, to verify ownership
- `backupId` - The ID of the desired encrypted object
- `subHash` - The latter half of the password hash, to verify ownership
- **`POST`** - Save a new config object, and returns `backupId`
- `userData` - The encrypted, compressed and stringified user config
- `subHash` - The latter half of the password hash, to verify ownership
- `userData` - The encrypted, compressed and stringified user config
- `subHash` - The latter half of the password hash, to verify ownership
- **`PUT`** - Update an existing config object
- `backupId` - The ID of the object to update
- `subHash` - Part of the hash, to verify ownership of said object
- `userData` - The new data to store
- `backupId` - The ID of the object to update
- `subHash` - Part of the hash, to verify ownership of said object
- `userData` - The new data to store
- **`DELETE`** - Delete a specified config object
- `backupId` - The ID of the object to be deleted
- `subHash` - Part of the password hash, to verify ownership of the object
- `backupId` - The ID of the object to be deleted
- `subHash` - Part of the password hash, to verify ownership of the object
For more info, see the [API Docs](https://documenter.getpostman.com/view/2142819/TzXumzce).

View File

@ -1,56 +1,72 @@
# Configuring
All app configuration is specified in [`/public/conf.yml`](https://github.com/Lissy93/dashy/blob/master/public/conf.yml) which is in [YAML Format](https://yaml.org/) format. Changes can also be made [directly through the UI](#editing-config-through-the-ui) and previewed live, from here you can also export, backup, reset, validate and download your configuration file.
All app configuration is specified in [`/user-data/conf.yml`](https://github.com/Lissy93/dashy/blob/master/user-data/conf.yml) which is in [YAML Format](https://yaml.org/) format. If you're using Docker, this file can be passed in as a volume. Changes can either be made directly to this file, or done [through the UI](#editing-config-through-the-ui). From the UI you can also export, backup, reset, validate and download your configuration file.
## There are three ways to edit the config
- **Directly in the YAML file** _(5/5 reliability, 3/5 usability)_
- Write changes directly to the conf.yml file, optionally using one of the templates provided. This can be done in your favorite editor and uploading to your server, or directly editing the file via SSH, but the easiest method would be to use [Code Server](https://github.com/coder/code-server)
- **UI JSON Editor** _(4/5 reliability, 4/5 usability)_
- From the UI, under the config menu there is a JSON editor, with built-in validation, documentation and advanced options
- **UI Visual Editor** _(3/5 reliability, 5/5 usability)_
- From the UI, enter the Interactive Edit Mode, then click any part of the page to edit. Changes are previewed live, and then saved to disk
- **REST API** _(Coming soon)_
- Programmatically edit config either through the command line, using a script or a third-party application
## Tips
- You may find it helpful to look at some sample config files to get you started, a collection of which can be found [here](https://gist.github.com/Lissy93/000f712a5ce98f212817d20bc16bab10)
- You can check that your config file fits the schema, by running `yarn validate-config`
- After modifying your config, the app needs to be recompiled, by running `yarn build` - this happens automatically if you're using Docker
- It is recommended to keep a backup of your config file. You can download it under Config menu, or use the [Cloud Backup](./docs/backup-restore.md) feature.
- You can make use of YAML features, like anchors, comments, multi-line strings, etc to reuse attributes and keep your config file readable
- Once you have finished configuring your dashboard, you can choose to [disable UI config](#preventing-changes) if you wish
- All fields are optional, unless otherwise stated.
The following file provides a reference of all supported configuration options.
---
#### Contents
## Contents
- [**`pageInfo`**](#pageinfo) - Header text, footer, title, navigation, etc
- [`navLinks`](#pageinfonavlinks-optional) - Navigation bar items and links
- [`navLinks`](#pageinfonavlinks-optional) - Links to display in the navigation bar
- [**`pages`**](#pages-optional) - List of additional config files, for multi-page dashboards
- [**`appConfig`**](#appconfig-optional) - Main application settings
- [`webSearch`](#appconfigwebsearch-optional) - Configure web search engine options
- [`hideComponents`](#appconfighidecomponents-optional) - Show/ hide page components
- [`auth`](#appconfigauth-optional) - Built-in authentication setup
- [`users`](#appconfigauthusers-optional) - Setup for simple auth
- [`keycloak`](#appconfigauthkeycloak-optional) - Auth using Keycloak
- [`webSearch`](#appconfigwebsearch-optional) - Configure web search engine options
- [`hideComponents`](#appconfighidecomponents-optional) - Show/ hide page components
- [`auth`](#appconfigauth-optional) - Built-in authentication setup
- [`users`](#appconfigauthusers-optional) - List or users (for simple auth)
- [`keycloak`](#appconfigauthkeycloak-optional) - Auth config for Keycloak
- [`headerAuth`](#appconfigauthheaderauth-optional) - Auth config for HeaderAuth
- [**`sections`**](#section) - List of sections
- [`displayData`](#sectiondisplaydata-optional) - Section display settings
- [`icon`](#sectionicon-and-sectionitemicon) - Icon for a section
- [`items`](#sectionitem) - List of items
- [`icon`](#sectionicon-and-sectionitemicon) - Icon for an item
- [`displayData`](#sectiondisplaydata-optional) - Section display settings
- [`show/hideForKeycloakUsers`](#sectiondisplaydatahideforkeycloakusers-sectiondisplaydatashowforkeycloakusers-itemdisplaydatahideforkeycloakusers-and-itemdisplaydatashowforkeycloakusers) - Set user controls
- [`icon`](#sectionicon-and-sectionitemicon) - Icon for a section
- [`items`](#sectionitem) - List of items
- [`icon`](#sectionicon-and-sectionitemicon) - Icon for an item
- [`displayData`](#itemdisplaydata-optional) - Item display settings
- [`show/hideForKeycloakUsers`](#sectiondisplaydatahideforkeycloakusers-sectiondisplaydatashowforkeycloakusers-itemdisplaydatahideforkeycloakusers-and-itemdisplaydatashowforkeycloakusers) - Set user controls
- [`widgets`](#sectionwidget-optional) - List of widgets
- [**Notes**](#notes)
- [Editing Config through the UI](#editing-config-through-the-ui)
- [About YAML](#about-yaml)
- [Config Saving Methods](#config-saving-methods)
- [Preventing Changes](#preventing-changes-being-written-to-disk)
- [About YAML](#about-yaml)
- [Config Saving Methods](#config-saving-methods)
- [Preventing Changes](#preventing-changes)
- [Example](#example)
---
Tips:
- You may find it helpful to look at some sample config files to get you started, a collection of which can be found [here](https://gist.github.com/Lissy93/000f712a5ce98f212817d20bc16bab10)
- You can check that your config file fits the schema, by running `yarn validate-config`
- After modifying your config, the app needs to be recompiled, by running `yarn build` - this happens automatically whilst the app is running if you're using Docker
- It is recommended to make and keep a backup of your config file. You can download your current config through the UI either from the Config menu, or using the `/download` endpoint. Alternatively, you can use the [Cloud Backup](./docs/backup-restore.md) feature.
- The config can also be modified directly through the UI, validated and written to the conf.yml file.
- All fields are optional, unless otherwise stated.
---
### Top-Level Fields
## Top-Level Fields
**Field** | **Type** | **Required**| **Description**
--- | --- | --- | ---
**`pageInfo`** | `object` | Required | Basic meta data like title, description, nav bar links, footer text. See [`pageInfo`](#pageinfo)
**`appConfig`** | `object` | _Optional_ | Settings related to how the app functions, including API keys and global styles. See [`appConfig`](#appconfig-optional)
**`sections`** | `array` | Required | An array of sections, each containing an array of items, which will be displayed as links. See [`section`](#section)
**`pages`** | `array` | _Optional_ | An array additional config files, used for multi-page dashboards. See [`pages`](#pages-optional)
**[⬆️ Back to Top](#configuring)**
### `PageInfo`
## `PageInfo`
**Field** | **Type** | **Required**| **Description**
--- | --- | --- | ---
@ -62,30 +78,42 @@ Tips:
**[⬆️ Back to Top](#configuring)**
### `pageInfo.navLinks` _(optional)_
## `pageInfo.navLinks` _(optional)_
**Field** | **Type** | **Required**| **Description**
--- | --- | --- | ---
**`title`** | `string` | Required | The text to display on the link button
**`path`** | `string` | Required | The URL to navigate to when clicked. Can be relative (e.g. `/about`) or absolute (e.g. `https://example.com` or `http://192.168.1.1`)
**`target`** | `string` | _Optional_ | The opening method (external links only). Can be either `newtab`, `sametab`, `top` or `parent`. Defaults to `newtab`
**[⬆️ Back to Top](#configuring)**
### `appConfig` _(optional)_
## `pages[]` _(optional)_
**Field** | **Type** | **Required**| **Description**
--- | --- | --- | ---
**`name`** | `string` | Required | A unique name for that page
**`path`** | `string` | Required | The path (local or remote) to the config file to use.<br>For files located within `/public`, you only need to specify filename, for externally hosted files you must include the full URL
**[⬆️ Back to Top](#configuring)**
## `appConfig` _(optional)_
**Field** | **Type** | **Required**| **Description**
--- | --- | --- | ---
**`language`** | `string` | _Optional_ | The 2 (or 4-digit) [ISO 639-1 code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) for your language, e.g. `en` or `en-GB`. This must be a language that the app has already been [translated](https://github.com/Lissy93/dashy/tree/master/src/assets/locales) into. If your language is unavailable, Dashy will fallback to English. By default Dashy will attempt to auto-detect your language, although this may not work on some privacy browsers.
**`startingView`** | `enum` | _Optional_ | Which page to load by default, and on the base page or domain root. You can still switch to different views from within the UI. Can be either `default`, `minimal` or `workspace`. Defaults to `default`
**`defaultOpeningMethod`** | `enum` | _Optional_ | The default opening method for items, if no `target` is specified for a given item. Can be either `newtab`, `sametab`, `top`, `parent`, `modal` or `workspace`. Defaults to `newtab`
~~**`startingView`**~~ | `enum` | _Optional_ | Which page to load by default, and on the base page or domain root. You can still switch to different views from within the UI. Can be either `default`, `minimal` or `workspace`. Defaults to `default`. NOTE: This has been replaced by an environmental variable: `VUE_APP_STARTING_VIEW` in V3 onwards
**`defaultOpeningMethod`** | `enum` | _Optional_ | The default opening method for items, if no `target` is specified for a given item. Can be either `newtab`, `sametab`, `modal`, `workspace`, `clipboard`, `top` or `parent`. Defaults to `newtab`
**`statusCheck`** | `boolean` | _Optional_ | When set to `true`, Dashy will ping each of your services and display their status as a dot next to each item. This can be overridden by setting `statusCheck` under each item. Defaults to `false`
**`statusCheckInterval`** | `boolean` | _Optional_ | The number of seconds between checks. If set to `0` then service will only be checked on initial page load, which is usually the desired functionality. If value is less than `10` you may experience a hit in performance. Defaults to `0`
**`statusCheckInterval`** | `number` | _Optional_ | The number of seconds between checks. If set to `0` then service will only be checked on initial page load, which is usually the desired functionality. If value is less than `10` you may experience a hit in performance. Defaults to `0`
**`webSearch`** | `object` | _Optional_ | Configuration options for the web search feature, set your default search engine, opening method or disable web search. See [`webSearch`](#appconfigwebsearch-optional)
**`backgroundImg`** | `string` | _Optional_ | Path to an optional full-screen app background image. This can be either remote (http) or local (/). Note that this will slow down initial load
**`enableFontAwesome`** | `boolean` | _Optional_ | Where `true` is enabled, if left blank font-awesome will be enabled only if required by 1 or more icons
**`backgroundImg`** | `string` | _Optional_ | Path to an optional full-screen app background image. This can be either remote (http) or local (relative to /app/public/item-icons/ inside the container). Note that this will slow down initial load
**`enableFontAwesome`** | `boolean` | _Optional_ | If set to `true` font-awesome will be loaded, if set to `false` they will not be. if left blank font-awesome will be enabled only if required by 1 or more icons
**`enableMaterialDesignIcons`** | `boolean` | _Optional_ | If set to `true` mdi icons will be loaded, if set to `false` they will not be. Where `true` is enabled, if left blank material design icons will be enabled only if required by 1 or more icons
**`fontAwesomeKey`** | `string` | _Optional_ | If you have a font-awesome key, then you can use it here and make use of premium icons. It is a 10-digit alpha-numeric string from you're FA kit URL (e.g. `13014ae648`)
**`faviconApi`** | `enum` | _Optional_ | Only applicable if you are using favicons for item icons. Specifies which service to use to resolve favicons. Set to `local` to do this locally, without using an API. Services running locally will use this option always. Available options are: `local`, `faviconkit`, `iconhorse`, `google`, `clearbit`, `webmasterapi` and `allesedv`. Defaults to `faviconkit`. See [Icons](/docs/icons.md#favicons) for more info
**`auth`** | `object` | _Optional_ | All settings relating to user authentication. See [`auth`](#appconfigauth-optional)
**`defaultIcon`** | `string` | _Optional_ | An icon to be applied to any items, which don't already have an icon set. See [Icon Docs](/docs/icons.md#default-icon) for more info
**`layout`** | `enum` | _Optional_ | Layout for homepage, either `horizontal`, `vertical` or `auto`. Defaults to `auto`. This specifies the layout and direction of how sections are positioned on the home screen. This can also be modified and overridden from the UI.
**`iconSize`** | `enum` | _Optional_ | The size of link items / icons. Can be either `small`, `medium,` or `large`. Defaults to `medium`. This can also be set directly from the UI.
**`colCount`** | `number` | _Optional_ | The number of columns of sections displayed on the homepage, using the default view. Should be in integer between `1` and `8`. Note that by default this is applied responsively, based on current screen size, and specifying a value here will override this behavior, which may not be desirable.
@ -98,30 +126,45 @@ Tips:
**`routingMode`** | `string` | _Optional_ | Can be either `hash` or `history`. Determines the URL format for sub-pages, hash mode will look like `/#/home` whereas with history mode available you have nice clean URLs, like `/home`. For more info, see the [Vue docs](https://router.vuejs.org/guide/essentials/history-mode.html#example-server-configurations). If you're hosting Dashy with a custom BASE_URL, you will find that a bit of extra server config is necessary to get history mode working, so here you may want to instead use `hash` mode.Defaults to `history`.
**`enableMultiTasking`** | `boolean` | _Optional_ | If set to true, will keep apps open in the background when in the workspace view. Useful for quickly switching between multiple sites, and preserving their state, but comes at the cost of performance.
**`workspaceLandingUrl`** | `string` | _Optional_ | The URL or an app, service or website to launch when the workspace view is opened, before another service has been launched
**`allowConfigEdit`** | `boolean` | _Optional_ | Should prevent / allow the user to write configuration changes to the conf.yml from the UI. When set to `false`, the user can only apply changes locally using the config editor within the app, whereas if set to `true` then changes can be written to disk directly through the UI. Defaults to `true`. Note that if authentication is enabled, the user must be of type `admin` in order to apply changes globally.
**`preventWriteToDisk`** | `boolean` | _Optional_ | If set to `true`, users will be prevented from saving config changes to disk through the UI
**`preventLocalSave`** | `boolean` | _Optional_ | If set to `true`, users will be prevented from applying config changes to local storage
**`disableConfiguration`** | `boolean` | _Optional_ | If set to true, no users will be able to view or edit the config through the UI
**`disableConfigurationForNonAdmin`** | `boolean` | _Optional_ | If set to true, only admin users will be able to view or edit the config through the UI. disableConfiguration must not be set to true.
**`widgetsAlwaysUseProxy`** | `boolean` | _Optional_ | If set to `true`, requests made by widgets will always be proxied, same as setting `useProxy: true` on each widget. Note that this may break some widgets.
**`showSplashScreen`** | `boolean` | _Optional_ | If set to `true`, a loading screen will be shown. Defaults to `false`.
**`enableErrorReporting`** | `boolean` | _Optional_ | Enable reporting of unexpected errors and crashes. This is off by default, and **no data will ever be captured unless you explicitly enable it**. Turning on error reporting helps previously unknown bugs get discovered and fixed. Dashy uses [Sentry](https://github.com/getsentry/sentry) for error reporting. Defaults to `false`.
**`sentryDsn`** | `boolean` | _Optional_ | If you need to monitor errors in your instance, then you can use Sentry to collect and process bug reports. Sentry can be self-hosted, or used as SaaS, once your instance is setup, then all you need to do is pass in the DSN here, and enable error reporting. You can learn more on the [Sentry DSN Docs](https://docs.sentry.io/product/sentry-basics/dsn-explainer/). Note that this will only ever be used if `enableErrorReporting` is explicitly enabled.
**`disableSmartSort`** | `boolean` | _Optional_ | For the most-used and last-used app sort functions to work, a basic open-count is stored in local storage. If you do not want this to happen, then disable smart sort here, but you wil no longer be able to use these sort options. Defaults to `false`.
**`disableUpdateChecks`** | `boolean` | _Optional_ | If set to true, Dashy will not check for updates. Defaults to `false`.
**`enableServiceWorker`** | `boolean` | _Optional_ | Service workers cache web applications to improve load times and offer basic offline functionality, and are enabled by default in Dashy. The service worker can sometimes cause older content to be cached, requiring the app to be hard-refreshed. If you do not want SW functionality, or are having issues with caching, set this property to `true` to disable all service workers.
**`enableServiceWorker`** | `boolean` | _Optional_ | Service workers cache web applications to improve load times and offer basic offline functionality, and are enabled by default in Dashy. The service worker can sometimes cause older content to be cached, requiring the app to be hard-refreshed. If you do not want SW functionality, or are having issues with caching, set this property to `false` to disable all service workers.
**`disableContextMenu`** | `boolean` | _Optional_ | If set to `true`, the custom right-click context menu will be disabled. Defaults to `false`.
**[⬆️ Back to Top](#configuring)**
### `appConfig.auth` _(optional)_
## `appConfig.auth` _(optional)_
> [!NOTE]
> Since the auth is initiated in the main app entry point (for security), a rebuild is required to apply changes to the auth configuration.
> You can trigger a rebuild through the UI, under Config --> Rebuild, or by running `yarn build` in the root directory.
> [!WARNING]
> Built-in auth should **not be used** for security-critical applications, or if your Dashy instance is publicly accessible.
> For these, it is recommended to use an [alternate authentication method](/docs/authentication.md#alternative-authentication-methods).
**Field** | **Type** | **Required**| **Description**
--- | --- | --- | ---
**`users`** | `array` | _Optional_ | An array of objects containing usernames and hashed passwords. If this is not provided, then authentication will be off by default, and you will not need any credentials to access the app. See [`appConfig.auth.users`](#appconfigauthusers-optional). <br>**Note** this method of authentication is handled on the client side, so for security critical situations, it is recommended to use an [alternate authentication method](/docs/authentication.md#alternative-authentication-methods).
**`enableKeycloak`** | `boolean` | _Optional_ | If set to `true`, then authentication using Keycloak will be anabled. Note that you need to have an instance running, and have also configured `auth.keycloak`. Defaults to `false`
**`enableKeycloak`** | `boolean` | _Optional_ | If set to `true`, then authentication using Keycloak will be enabled. Note that you need to have an instance running, and have also configured `auth.keycloak`. Defaults to `false`
**`keycloak`** | `object` | _Optional_ | Config options to point Dashy to your Keycloak server. Requires `enableKeycloak: true`. See [`auth.keycloak`](#appconfigauthkeycloak-optional) for more info
**`enableHeaderAuth`** | `boolean` | _Optional_ | If set to `true`, then authentication using HeaderAuth will be enabled. Note that you need to have your web server/reverse proxy running, and have also configured `auth.headerAuth`. Defaults to `false`
**`headerAuth`** | `object` | _Optional_ | Config options to point Dashy to your headers for authentication. Requires `enableHeaderAuth: true`. See [`auth.headerAuth`](#appconfigauthheaderauth-optional) for more info
**`enableGuestAccess`** | `boolean` | _Optional_ | When set to `true`, an unauthenticated user will be able to access the dashboard, with read-only access, without having to login. Requires `auth.users` to be configured. Defaults to `false`.
For more info, see the **[Authentication Docs](/docs/authentication.md)**
**[⬆️ Back to Top](#configuring)**
### `appConfig.auth.users` _(optional)_
## `appConfig.auth.users` _(optional)_
**Field** | **Type** | **Required**| **Description**
--- | --- | --- | ---
@ -131,17 +174,27 @@ For more info, see the **[Authentication Docs](/docs/authentication.md)**
**[⬆️ Back to Top](#configuring)**
### `appConfig.auth.keycloak` _(optional)_
## `appConfig.auth.keycloak` _(optional)_
**Field** | **Type** | **Required**| **Description**
--- | --- | --- | ---
**`serverUrl`** | `string` | Required | The URL (or URL/ IP + Port) where your keycloak server is running
**`realm`** | `string` | Required | The name of the realm (must already be created) that you want to use
**`clientId`** | `string` | Required | The Client ID of the client you created for use with Dashy
**`legacySupport`** | `boolean` | _Optional_ | If using Keycloak 17 or older, then set this to `true`
**[⬆️ Back to Top](#configuring)**
### `appConfig.webSearch` _(optional)_
## `appConfig.auth.headerAuth` _(optional)_
**Field** | **Type** | **Required**| **Description**
--- | --- | --- | ---
**`userHeader`** | `string` | _Optional_ | The Header name which contains username (default: REMOTE_USER). Case insensitive
**`proxyWhitelist`** | `array` | Required | An array of Upstream proxy servers to expect authencticated requests from
**[⬆️ Back to Top](#configuring)**
## `appConfig.webSearch` _(optional)_
**Field** | **Type** | **Required**| **Description**
--- | --- | --- | ---
@ -151,22 +204,21 @@ For more info, see the **[Authentication Docs](/docs/authentication.md)**
**`openingMethod`** | `string` | _Optional_ | Set your preferred opening method for search results: `newtab`, `sametab`, `workspace`. Defaults to `newtab`
**`searchBangs`** | `object` | _Optional_ | A key-value-pair set of custom search _bangs_ for redirecting query to a specific app or search engine. The key of each should be the bang you will type (typically starting with `/`, `!` or `:`), and value is the destination, either as a search engine key (e.g. `reddit`) or a URL with search parameters (e.g. `https://en.wikipedia.org/w/?search=`)
**[⬆️ Back to Top](#configuring)**
### `appConfig.hideComponents` _(optional)_
## `appConfig.hideComponents` _(optional)_
**Field** | **Type** | **Required**| **Description**
--- | --- | --- | ---
**`hideHeading`** | `boolean` | _Optional_ | If set to `true`, the page title & sub-title will not be visible. Defaults to `false`
**`hideNav`** | `boolean` | _Optional_ | If set to `true`, the navigation menu will not be visible. Defaults to `false`
**`hideSearch`** | `boolean` | _Optional_ | If set to `true`, the search bar will not be visible. Defaults to `false`
**`hideSettings`** | `boolean` | _Optional_ | If set to `true`, the settings menu will not be visible. Defaults to `false`
**`hideSettings`** | `boolean` | _Optional_ | If set to `true`, the settings menu will be initially collapsed. Defaults to `false`
**`hideFooter`** | `boolean` | _Optional_ | If set to `true`, the footer will not be visible. Defaults to `false`
**[⬆️ Back to Top](#configuring)**
### `section`
## `section`
**Field** | **Type** | **Required**| **Description**
--- | --- | --- | ---
@ -174,11 +226,11 @@ For more info, see the **[Authentication Docs](/docs/authentication.md)**
**`icon`** | `string` | _Optional_ | An single icon to be displayed next to the title. See [`section.icon`](#sectionicon-and-sectionitemicon)
**`items`** | `array` | _Optional_ | An array of items to be displayed within the section. See [`item`](#sectionitem). Sections must include either 1 or more items, or 1 or more widgets.
**`widgets`** | `array` | _Optional_ | An array of widgets to be displayed within the section. See [`widget`](#sectionwidget-optional)
**`displayData`** | `object` | _Optional_ | Meta-data to optionally overide display settings for a given section. See [`displayData`](#sectiondisplaydata-optional)
**`displayData`** | `object` | _Optional_ | Meta-data to optionally override display settings for a given section. See [`displayData`](#sectiondisplaydata-optional)
**[⬆️ Back to Top](#configuring)**
### `section.item`
## `section.item`
**Field** | **Type** | **Required**| **Description**
--- | --- | --- | ---
@ -186,20 +238,36 @@ For more info, see the **[Authentication Docs](/docs/authentication.md)**
**`description`** | `string` | _Optional_ | Additional info about an item, which is shown in the tooltip on hover, or visible on large tiles
**`url`** | `string` | Required | The URL / location of web address for when the item is clicked
**`icon`** | `string` | _Optional_ | The icon for a given item. Can be a font-awesome icon, favicon, remote URL or local URL. See [`item.icon`](#sectionicon-and-sectionitemicon)
**`target`** | `string` | _Optional_ | The opening method for when the item is clicked, either `newtab`, `sametab`, `top`, `parent`, `modal` or `workspace`. Where `newtab` will open the link in a new tab, `sametab` will open it in the current tab, and `modal` will open a pop-up modal and `workspace` will open in the Workspace view. Defaults to `newtab`
**`target`** | `string` | _Optional_ | The opening method for when the item is clicked, either `newtab`, `sametab`, `modal`, `workspace`, `clipboard`, `top` or `parent`. Where `newtab` will open the link in a new tab, `sametab` will open it in the current tab, and `modal` will open a pop-up modal, `workspace` will open in the Workspace view and `clipboard` will copy the URL to system clipboard (but not launch app). Defaults to `newtab`
**`hotkey`** | `number` | _Optional_ | Give frequently opened applications a numeric hotkey, between `0 - 9`. You can then just press that key to launch that application.
**`tags`** | `string[]` | _Optional_ | A list of tags, which can be used for improved search
**`statusCheck`** | `boolean` | _Optional_ | When set to `true`, Dashy will ping the URL associated with the current service, and display its status as a dot next to the item. The value here will override `appConfig.statusCheck` so you can turn off or on checks for a given service. Defaults to `appConfig.statusCheck`, falls back to `false`
**`statusCheckUrl`** | `string` | _Optional_ | If you've enabled `statusCheck`, and want to use a different URL to what is defined under the item, then specify it here
**`statusCheckHeaders`** | `object` | _Optional_ | If you're endpoint requires any specific headers for the status checking, then define them here
**`statusCheckHeaders`** | `object` | _Optional_ | If you're endpoint requires any specific headers for the status checking, then define them here
**`statusCheckAllowInsecure`** | `boolean` | _Optional_ | By default, any request to insecure content will be blocked. Setting this option to `true` will disable the `rejectUnauthorized` option, enabling you to ping non-HTTPS services for the current item. Defaults to `false`
**`statusCheckAcceptCodes`** | `string` | _Optional_ | If your service's response code is anything other than 2xx, then you can opt to specify an alternative success code. E.g. if you expect your server to return 403, but still want the status indicator to be green, set this value to `403`
**`statusCheckMaxRedirects`** | `number` | _Optional_ | If your service redirects to another page, and you would like status checks to follow redirects, then specify the maximum number of redirects here. Defaults to `0` / will not follow redirects
**`color`** | `string` | _Optional_ | An optional color for the text and font-awesome icon to be displayed in. Note that this will override the current theme and so may not display well
**`rel`** | `string` | _Optional_ | The value of the `rel` attribute for the link. Useful for specifying the relationship between the target link/document and Dashy. Defaults to `noopener noreferrer`
**`backgroundColor`** | `string` | _Optional_ | An optional background fill color for the that given item. Again, this will override the current theme and so might not display well against the background
**`provider`** | `string` | _Optional_ | The name of the provider for a given service, useful for when including hosted apps. In some themes, this is visible under the item name
**`displayData`** | `object` | _Optional_ | Meta-data to optionally override display settings for a given item. See [`displayData`](#itemdisplaydata-optional)
**[⬆️ Back to Top](#configuring)**
### `section.widget` _(optional)_
## `item.displayData` _(optional)_
**Field** | **Type** | **Required**| **Description**
--- | --- | --- | ---
**`hideForUsers`** | `string[]` | _Optional_ | Current item will be visible to all users, except for those specified in this list
**`showForUsers`** | `string[]` | _Optional_ | Current item will be hidden from all users, except for those specified in this list
**`hideForGuests`** | `boolean` | _Optional_ | Current item will be visible for logged in users, but not for guests (see `appConfig.enableGuestAccess`). Defaults to `false`
**`hideForKeycloakUsers`** | `object` | _Optional_ | Current item will be visible to all keycloak users, except for those configured via these groups and roles. See `hideForKeycloakUsers`
**`showForKeycloakUsers`** | `object` | _Optional_ | Current item will be hidden from all keycloak users, except for those configured via these groups and roles. See `showForKeycloakUsers`
**[⬆️ Back to Top](#configuring)**
## `section.widgets` _(optional)_
**Field** | **Type** | **Required**| **Description**
--- | --- | --- | ---
@ -207,35 +275,49 @@ For more info, see the **[Authentication Docs](/docs/authentication.md)**
**`options`** | `object` | _Optional_ | Some widgets accept either optional or required additional options. Again, see the [Widget Docs](/docs/widgets.md) for full list of options
**`updateInterval`** | `number` | _Optional_ | You can keep a widget constantly updated by specifying an update interval, in seconds. See [Continuous Updates Docs](/docs/widgets.md#continuous-updates) for more info
**`useProxy`** | `boolean` | _Optional_ | Some widgets make API requests to services that are not CORS-enabled. For these instances, you will need to route requests through a proxy, Dashy has a built in CORS-proxy, which you can use by setting this option to `true`. Defaults to `false`. See the [Proxying Requests Docs](/docs/widgets.md#proxying-requests) for more info
**`timeout`** | `number` | _Optional_ | Request timeout in milliseconds, defaults to ½ a second (`500`)
**`ignoreErrors`** | `boolean` | _Optional_ | Prevent an error message being displayed, if a network request or something else fails. Useful for false-positives
**`label`** | `string` | _Optional_ | Add custom label to a given widget. Useful for identification, if there are multiple of the same type of widget in a single section
**[⬆️ Back to Top](#configuring)**
### `section.displayData` _(optional)_
## `section.displayData` _(optional)_
**Field** | **Type** | **Required**| **Description**
--- | --- | --- | ---
**`sortBy`** | `string` | _Optional_ | The sort order for items within the current section. By default items are displayed in the order in which they are listed in within the config. The following sort options are supported: `most-used` (most opened apps first), `last-used` (the most recently used apps), `alphabetical`, `reverse-alphabetical`, `random` and `default`
**`collapsed`** | `boolean` | _Optional_ | If true, the section will be collapsed initially, and will need to be clicked to open. Useful for less regularly used, or very long sections. Defaults to `false`
**`collapsed`** | `boolean` | _Optional_ | If true, the section will be collapsed initially, and will need to be clicked to open. Useful for less regularly used, or very long sections. Defaults to `false`
**`cutToHeight`** | `boolean` | _Optional_ | By default, sections will fill available space. Set this option to true to match section height with content height
**`rows`** | `number` | _Optional_ | Height of the section, specified as the number of rows it should span vertically, e.g. `2`. Defaults to `1`. Max is `5`.
**`cols`** | `number` | _Optional_ | Width of the section, specified as the number of columns the section should span horizontally, e.g. `2`. Defaults to `1`. Max is `5`.
**`itemSize`** | `string` | _Optional_ | Specify the size for items within this group, either `small`, `medium` or `large`. Note that this will overide any settings specified through the UI
**`itemSize`** | `string` | _Optional_ | Specify the size for items within this group, either `small`, `medium` or `large`. Note that this will override any settings specified through the UI
**`color`** | `string` | _Optional_ | A custom accent color for the section, as a hex code or HTML color (e.g. `#fff`)
**`customStyles`** | `string` | _Optional_ | Custom CSS properties that should be applied to that section, e.g. `border: 2px dashed #ff0000;`
**`sectionLayout`** | `string` | _Optional_ | Specify which CSS layout will be used to responsivley place items. Can be either `auto` (which uses flex layout), or `grid`. If `grid` is selected, then `itemCountX` and `itemCountY` may also be set. Defaults to `auto`
**`sectionLayout`** | `string` | _Optional_ | Specify which CSS layout will be used to responsively place items. Can be either `auto` (which uses flex layout), or `grid`. If `grid` is selected, then `itemCountX` and `itemCountY` may also be set. Defaults to `auto`
**`itemCountX`** | `number` | _Optional_ | The number of items to display per row / horizontally. If not set, it will be calculated automatically based on available space. Can only be set if `sectionLayout` is set to `grid`. Must be a whole number between `1` and `12`
**`itemCountY`** | `number` | _Optional_ | The number of items to display per column / vertically. If not set, it will be calculated automatically based on available space. If `itemCountX` is set, then `itemCountY` can be calculated automatically. Can only be set if `sectionLayout` is set to `grid`. Must be a whole number between `1` and `12`
**`hideForUsers`** | `string[]` | _Optional_ | Current section will be visible to all users, except for those specified in this list
**`showForUsers`** | `string[]` | _Optional_ | Current section will be hidden from all users, except for those specified in this list
**`hideForGuests`** | `boolean` | _Optional_ | Current section will be visible for logged in users, but not for guests (see `appConfig.enableGuestAccess`). Defaults to `false`
**`hideForKeycloakUsers`** | `object` | _Optional_ | Current section will be visible to all keycloak users, except for those configured via these groups and roles. See `hideForKeycloakUsers`
**`showForKeycloakUsers`** | `object` | _Optional_ | Current section will be hidden from all keycloak users, except for those configured via these groups and roles. See `showForKeycloakUsers`
**[⬆️ Back to Top](#configuring)**
### `section.icon` and `section.item.icon`
## `section.icon` and `section.item.icon`
**Field** | **Type** | **Required**| **Description**
--- | --- | --- | ---
**`icon`** | `string` | _Optional_ | The icon for a given item or section. See [Icon Docs](/docs/icons.md) for all available supported icon types. To auto-fetch icon from a services URL, aet to `favicon`. To use font-awesome, specify the category, followed by the icon name, e.g. `fas fa-rocket`, `fab fa-monero` or `fal fa-duck`. Similarly, for branded icons, you can use [simple-icons](https://simpleicons.org/) by setting icon to `si-[icon-name]` or [material-design-icons](https://dev.materialdesignicons.com/icons) by setting icon to `mdi-[icon-name]`. If set to `generative`, then a unique icon is generated from the apps URL or IP. You can also use hosted any by specifying it's URL, e.g. `https://i.ibb.co/710B3Yc/space-invader-x256.png`. To use a local image, first store it in `./public/item-icons/` (or `-v /app/public/item-icons/` in Docker) , and reference it by name and extension - e.g. set `image.png` to use `./public/item-icon/image.png`, you can also use sub-folders if you have a lot of icons, to keep them organised.
**`icon`** | `string` | _Optional_ | The icon for a given item or section. <br>See [Icon Docs](/docs/icons.md) for all available supported icon types, including: auto-fetched favicons, generative icons, emoji icons, home-lab service logos, font-awesome, simple-icons, material icons, and icons specified by URL
**[⬆️ Back to Top](#configuring)**
## `section.displayData.hideForKeycloakUsers`, `section.displayData.showForKeycloakUsers`, `item.displayData.hideForKeycloakUsers` and `item.displayData.showForKeycloakUsers`
**Field** | **Type** | **Required**| **Description**
--- |------------| --- | ---
**`groups`** | `string[]` | _Optional_ | Current Section or Item will be hidden or shown based on the user having any of the groups in this list
**`roles`** | `string[]` | _Optional_ | Current Section or Item will be hidden or shown based on the user having any of the roles in this list
**[⬆️ Back to Top](#configuring)**
@ -254,21 +336,29 @@ Config can be modified directly through the UI, and then written to disk, or app
</a>
<br>
<a href="https://ibb.co/zRv542H">
<b>Raw Editor</b><br>
<b>JSON Editor</b><br>
<img alt="Config Editor demo" src="https://raw.githubusercontent.com/Lissy93/dashy/master/docs/assets/config-editor-demo.gif" width="600" />
</a>
</p>
### About YAML
If you're new to YAML, it's pretty straight-forward. The format is exactly the same as that of JSON, but instead of using curly braces, structure is denoted using whitespace. This [quick guide](https://linuxhandbook.com/yaml-basics/) should get you up to speed in a few minutes, for more advanced topics take a look at this [Wikipedia article](https://en.wikipedia.org/wiki/YAML).
### Config Saving Methods
When updating the config through the JSON editor in the UI, you have two save options: **Local** or **Write to Disk**.
- Changes saved locally will only be applied to the current user through the browser, and will not apply to other instances - you either need to use the cloud sync feature, or manually update the conf.yml file.
- On the other-hand, if you choose to write changes to disk, then your main `conf.yml` file will be updated, and changes will be applied to all users, and visible across all devices. For this functionality to work, you must be running Dashy with using the Docker container, or the Node server. A backup of your current configuration will also be saved in the same directory.
### Preventing Changes being Written to Disk
To disallow any changes from being written to disk via the UI config editor, set `appConfig.allowConfigEdit: false`. If you are using users, and have setup `auth` within Dashy, then only users with `type: admin` will be able to write config changes to disk.
When updating the config through the JSON editor in the UI, you have two save options: **Local** or **Write to Disk**.
- Changes saved locally will only be applied to the current user through the browser, and will not apply to other instances - you either need to use the cloud sync feature, or manually update the conf.yml file.
- On the other-hand, if you choose to write changes to disk, then your main `conf.yml` file will be updated, and changes will be applied to all users, and visible across all devices. For this functionality to work, you must be running Dashy with using the Docker container, or the Node server. A backup of your current configuration will also be saved in the same directory.
### Preventing Changes
If you have authentication set up, then any user who is not an admin (with `type: admin`) will not be able to write changes to disk.
You can also prevent changes from any user being written to disk, using `preventWriteToDisk`. Or prevent any changes from being saved locally in browser storage, using `preventLocalSave`.
To disable all UI config features, set `disableConfiguration`. Alternatively you can disable UI config features for all non Admin users by setting `disableConfigurationForNonAdmin` to true.
### Example
@ -290,7 +380,7 @@ sections: # An array of sections
- title: Demo
description: A live demo
icon: far fa-rocket
url: https://dashy-demo-1.netlify.app
url: https://dashy-demo-1.netlify.app
- name: Section 2 - Local Services
items:
- title: Firewall
@ -308,4 +398,3 @@ If you need any help, feel free to [Raise an Issue](https://github.com/Lissy93/d
Happy Configuring 🤓🔧
**[⬆️ Back to Top](#configuring)**

View File

@ -1,120 +1,137 @@
# Contributing
First off, thank you for considering contributing towards Dashy! 🙌
There are several ways that you can help out (but don't feel you have to).
Any contributions, however small will always be very much appreciated, and you will be appropriately credited in the readme - huge thank you to [everyone who has helped](/docs/credits.md) so far 💞
## Submit a PR
Contributing to the code or documentation is super helpful. You can fix a bug, add a new feature or improve an existing one. I've written [several guides](https://github.com/Lissy93/dashy/blob/master/docs/development-guides.md) to help you get started. For setting up the development environment, outline of the standards, and understanding the PR flow, see the [Development Docs](https://github.com/Lissy93/dashy/blob/master/docs/development.md). I've tried to keep the code neat and documentation thorough, so understanding what everything does should be fairly straight forward, but feel free to ask if you have any questions.
## Add Translations
If you speak another language, then adding translations would be really helpful, and you will be credited in the readme for your work. Multi-language support makes Dashy accessible for non-English speakers, which I feel is important. This is a very quick and easy task, as all application text is located in [`locales/en.json`](https://github.com/Lissy93/dashy/blob/master/src/assets/locales/en.json), so adding a new language is as simple as copying this file and translating the values. You don't have to translate it all, as any missing attributes will just fallback to English. For a full tutorial, see the [Multi-Language Support Docs](https://github.com/Lissy93/dashy/blob/master/docs/multi-language-support.md).
## Take a 2-minute survey
Help improve Dashy by taking a very short, 6-question survey. This will give me a better understanding of what is important to you, so that I can make Dashy better in the future :)
[![Take the Survey](https://img.shields.io/badge/Take_the-Survey-%231a86fd?style=for-the-badge&logo=buddy)](https://survey.typeform.com/to/gl0L68ou)
## Share your dashboard
Dashy now has a [Showcase](https://github.com/Lissy93/dashy/blob/master/docs/showcase.md#dashy-showcase-) where you can show off a screenshot of your dashboard, and get inspiration from other users. I also really enjoy seeing how people are using Dashy. To [submit your dashboard](https://github.com/Lissy93/dashy/blob/master/docs/showcase.md#submitting-your-dashboard), please either open a PR or raise an issue.
## Improve the Docs
Found a typo, or something that isn't as clear as it could be? Maybe I've missed something off altogether, or you hit a roadblock that took you a while to figure out. Submitting a pull request to add to or improve the documentation will help future users get Dashy up and running more easily.
All content is located either in the [`./README.md`](/README.md) or [`/docs/`](/docs) directory, and synced to the Wiki and website using a GH [action](/actions/workflows/wiki-sync.yml).
## Raise a bug
If you've found a bug, then please do raise it as an issue. This will help me know if there's something that needs fixing. Try and include as much detail as possible, such as your environment, steps to reproduce, any console output and maybe an example screenshot or recording if necessary.
[![Raise a Bug](https://img.shields.io/badge/Raise_a-Bug-%23dc2d76?style=for-the-badge&logo=dependabot)](https://github.com/Lissy93/dashy/issues/new?assignees=lissy93&labels=%F0%9F%90%9B+Bug&template=bug.yml&title=%5BBUG%5D+%3Ctitle%3E)
## Join the discussion
I've enabled the discussion feature on GitHub, here you can share tips and tricks, useful information, or your dashboard. You can also ask questions, and offer basic support to other users.
[![Join the Discussion on GitHub](https://img.shields.io/badge/Join_the-Discussion-%23ffd000?style=for-the-badge&logo=livechat)](https://github.com/Lissy93/dashy/discussions)
## Spread the word
Dashy is still a relatively young project, and as such not many people know of it. It would be great to see more users, and so it would be awesome if you could consider sharing on social platforms.
[![Share Dashy on Mastodon](https://img.shields.io/badge/Share-Mastodon-%232b90d9?style=for-the-badge&logo=mastodon)](https://mastodon.social/?text=Check%20out%20Dashy%2C%20the%20privacy-friendly%2C%20self-hosted%20startpage%20for%20organizing%20your%20life%3A%20https%3A%2F%2Fgithub.com%2FLissy93%2Fdashy%20-%20By%20%40lissy93%40mastodon.social)
[![Share Dashy on Reddit](https://img.shields.io/badge/Share-Reddit-%23FF5700?style=for-the-badge&logo=reddit)](http://www.reddit.com/submit?url=https://github.com/Lissy93/dashy&title=Dashy%20-%20The%20self-hosted%20dashboard%20for%20your%20homelab%20%F0%9F%9A%80)
[![Share Dashy on Twitter](https://img.shields.io/badge/Share-Twitter-%231DA1F2?style=for-the-badge&logo=twitter)](https://twitter.com/intent/tweet?url=https://github.com/lissy93/dashy&text=Check%20out%20Dashy%20by%20@Lissy_Sykes,%20the%20self-hosted%20dashboard%20for%20your%20homelab%20%F0%9F%9A%80)
[![Share Dashy on Facebook](https://img.shields.io/badge/Share-Facebook-%234267B2?style=for-the-badge&logo=facebook)](https://www.facebook.com/sharer/sharer.php?u=https://github.com/lissy93/dashy)
[![Share Dashy on LinkedIn](https://img.shields.io/badge/Share-LinkedIn-%230077b5?style=for-the-badge&logo=linkedin)](https://www.linkedin.com/shareArticle?mini=true&url=https://github.com/lissy93/dashy)
[![Share Dashy on Pinterest](https://img.shields.io/badge/Share-Pinterest-%23E60023?style=for-the-badge&logo=pinterest)](https://pinterest.com/pin/create/button/?url=https://github.com/lissy93/dashy&media=https://raw.githubusercontent.com/Lissy93/dashy/master/docs/showcase/1-home-lab-material.png&description=Check%20out%20Dashy,%20the%20self-hosted%20dashboard%20for%20your%20homelab%20%F0%9F%9A%80)
[![Share Dashy on VK](https://img.shields.io/badge/Share-VK-%234C75A3?style=for-the-badge&logo=vk)](https://vk.com/share.php?url=https%3A%2F%2Fgithub.com%2Flissy93%2Fdashy%2F&title=Check%20out%20Dashy%20-%20The%20Self-Hosted%20Dashboard%20for%20your%20Homelab%20%F0%9F%9A%80)
[![Share Dashy via Viber](https://img.shields.io/badge/Share-Viber-%238176d6?style=for-the-badge&logo=viber)](viber://forward?text=https%3A%2F%2Fgithub.com%2Flissy93%2Fdashy%0ACheck%20out%20Dashy%2C%20the%20self-hosted%20dashboard%20for%20your%20homelab%20%F0%9F%9A%80)
[![Share Dashy via Telegram](https://img.shields.io/badge/Share-Telegram-%230088cc?style=for-the-badge&logo=telegram)](https://t.me/share/url?url=https%3A%2F%2Fgithub.com%2Flissy93%2Fdashy&text=Check%20out%20Dashy%2C%20the%20self-hosted%20dashboard%20for%20your%20homelab%20%F0%9F%9A%80)
[![Share Dashy via Email](https://img.shields.io/badge/Share-Email-%238A90C7?style=for-the-badge&logo=protonmail)](mailto:info@example.com?&subject=Check%20out%20Dashy%20-%20The%20self-hosted%20dashboard%20for%20your%20homelab%20%F0%9F%9A%80&cc=&bcc=&body=https://github.com/lissy93/dashy)
## Star, Upvote or Leave a Review
Dashy is on the following platforms, and if you could spare a few seconds to give it an upvote or review, this will also help new users find it.
[![ProductHunt](https://img.shields.io/badge/Review-ProductHunt-%23b74424?style=for-the-badge&logo=producthunt)](https://www.producthunt.com/posts/dashy)
[![AlternativeTo](https://img.shields.io/badge/Review-AlternativeTo-%235581a6?style=for-the-badge&logo=abletonlive)](https://alternativeto.net/software/dashy/about/)
[![Slant](https://img.shields.io/badge/Review-Slant-%2346a1df?style=for-the-badge&logo=capacitor)](https://www.slant.co/improve/topics/27783/viewpoints/1/~self-hosted-homelab-startpage~dashy)
[![Star on GitHub](https://img.shields.io/github/stars/Lissy93/Dashy?color=ba96d6&label=Star%20-%20GitHub&logo=github&style=for-the-badge)](https://github.com/Lissy93/dashy/stargazers)
[![Star on DockerHub](https://img.shields.io/docker/stars/lissy93/dashy?color=4cb6e0&label=Star%20-%20Docker&logo=docker&style=for-the-badge)](https://hub.docker.com/r/lissy93/dashy)
## Make a small donation
Please only do this is you can definitely afford to. Don't feel any pressure to donate anything, as Dashy and my other projects will always be 100% free, for everyone, for ever.
[![Sponsor Lissy93 on GitHub](./assets/sponsor-button.svg)](https://github.com/sponsors/Lissy93)
Sponsoring will give you several perks, from $1 / £0.70 per month, as well as a sponsor badge on your profile, you can also be credited on the readme, with a link to your website/ profile/ socials, get priority support, have your feature ideas implemented, plus lots more. For more info, see [@Lissy93's Sponsor Page](https://github.com/sponsors/Lissy93).
<details>
<summary>You can also send a one-off small contribution using crypto</summary>
<p>
[![Donate with BTC](https://en.cryptobadges.io/badge/big/3853bSxupMjvxEYfwGDGAaLZhTKxB2vEVC)](https://en.cryptobadges.io/donate/3853bSxupMjvxEYfwGDGAaLZhTKxB2vEVC)[![Donate with Ethereum](https://en.cryptobadges.io/badge/big/0x0fc98cBf8bea932B4470C46C0FbE1ed1f6765017)](https://en.cryptobadges.io/donate/0x0fc98cBf8bea932B4470C46C0FbE1ed1f6765017)
- **BTC**: `3853bSxupMjvxEYfwGDGAaLZhTKxB2vEVC`
- **ETH**: `0x0fc98cBf8bea932B4470C46C0FbE1ed1f6765017` / `aliciasykes.eth`
- **XMR**: `471KZdxb6N63aABR4WYwMRjTVkc1p1x7wGsUTEF7AMYzL8L94A5pCuYWkosgJQ5Ze8Y2PscVCGZFJa3hDPg6MaDq47GUm8r`
- **LTC**: `MAuck6Ea1qaNihwKfXutkR1R6BorMth86H`
- **ZEC**: `t1bw1SefijsXRDQVxC9w64XsRK8hBhtQohQ`
</p>
</details>
## Request a feature via BountySource
BountySource is a platform for sponsoring the development of certain features on open source projects. If there is a feature you'd like implemented into Dashy, but either isn't high enough priority or is deemed to be more work than it's worth, then you can instead contribute a bounty towards it's development. You won't pay a penny until your proposal is fully built, and you are satisfied with the result. This helps support the developers, and makes Dashy better for everyone.
[![Request a Feature on BountySource](https://img.shields.io/badge/BountySource-Dashy-%23F67909?style=for-the-badge&logo=openbugbounty)](https://www.bountysource.com/teams/dashy)
## Enable Anonymous Bug Reports
[Sentry](https://github.com/getsentry/sentry) is an open source error tracking and performance monitoring tool, which enables the identification any errors which occur in the production app (only if you enable it). It helps me to discover bugs I was unaware of, and then fix them, in order to make Dashy more reliable long term. This is a simple, yet really helpful step you can take to help improve Dashy.
To enable error reporting:
```yaml
appConfig:
enableErrorReporting: true
```
All reporting is **disabled** by default, and no data will ever be sent to any external endpoint without your explicit consent. In fact, the error tracking package will not even be imported unless you have actively enabled it. All statistics are anonomized and stored securely. For more about privacy and security, see the [Sentry Docs](https://sentry.io/security/).
## Follow for More
If you've enjoyed Dashy, you can follow the me to get updates about other projects that I am working on.
[![Alicia Sykes on Twitter](https://img.shields.io/twitter/follow/Lissy_Sykes?style=social&logo=twitter)](https://twitter.com/Lissy_Sykes)
[![Alicia Sykes on GitHub](https://img.shields.io/github/followers/lissy93?label=Lissy93&style=social)](https://github.com/Lissy93)
[![Alicia Sykes on Mastodon](https://img.shields.io/mastodon/follow/1032965?domain=https%3A%2F%2Fmastodon.social)](https://mastodon.social/web/accounts/1032965)
[![Alicia Sykes on Keybase](https://img.shields.io/badge/aliciasykes--lightgrey?style=social&logo=Keybase)](https://keybase.io/aliciasykes)
[![Alicia Sykes's PGP](https://img.shields.io/badge/PGP--lightgrey?style=social&logo=Let%E2%80%99s%20Encrypt)](https://keybase.io/aliciasykes/pgp_keys.asc)
[![Alicia Sykes's Website](https://img.shields.io/badge/aliciasykes.com--lightgrey?style=social&logo=Tencent%20QQ)](https://aliciasykes.com)
[![Alicia Sykes's Blog](https://img.shields.io/badge/Blog--lightgrey?style=social&logo=micro.blog)](https://notes.aliciasykes.com/)
If you like, you could also consider [subscribing to my mailing list](https://notes.aliciasykes.com/subscribe) for very occasional blog post updates.
---
### Contributors
For a full list of Dashy's contributors, see the [Credits Page](/docs/credits.md)
[![Auto-generated contributors](https://raw.githubusercontent.com/Lissy93/dashy/master/docs/assets/CONTRIBUTORS.svg)](/docs/credits.md)
### Star-Gazers Over Time
[![Stargazers](https://starchart.cc/Lissy93/dashy.svg)](https://seladb.github.io/StarTrack-js/#/preload?r=Lissy93,dashy)
# Contributing
First off, thank you for considering contributing towards Dashy! 🙌
There are several ways that you can help out, and any contributions, however small will always be very much appreciated.
You will be appropriately credited in the readme - huge thank you to [everyone who has helped](/docs/credits.md) so far 💞
## Take a 2-minute survey
Help improve Dashy by taking a very short, 6-question survey. This will give me a better understanding of what is important to you, so that I can make Dashy better in the future :)
[![Take the Survey](https://img.shields.io/badge/Take_the-Survey-%231a86fd?style=for-the-badge&logo=buddy)](https://survey.typeform.com/to/gl0L68ou)
## Share your dashboard
Dashy now has a [Showcase](https://github.com/Lissy93/dashy/blob/master/docs/showcase.md#dashy-showcase-) where you can show off a screenshot of your dashboard, and get inspiration from other users (and I really love seeing how people are using Dashy). To [submit your dashboard](https://github.com/Lissy93/dashy/blob/master/docs/showcase.md#submitting-your-dashboard), either open a PR or raise an issue.
[![Add your Dashboard to the Showcase](https://img.shields.io/badge/Add_your_Dashboard-Showcase-%238616ee?style=for-the-badge&logo=feathub&logoColor=8616ee)](https://github.com/Lissy93/dashy/issues/new?assignees=&labels=%F0%9F%92%AF+Showcase&template=showcase-addition.yml&title=%5BSHOWCASE%5D+%3Ctitle%3E)
## Make a small donation
Donations help to cover server costs, development time and caffeine ;)
Don't feel any pressure to donate anything, as Dashy and my other projects will always be 100% free, for everyone, for ever.
[![Sponsor Lissy93 on GitHub](https://img.shields.io/badge/Sponsor_on_GitHub-Lissy93-%23ff4dda?style=for-the-badge&logo=githubsponsors&logoColor=ff4dda)](https://github.com/sponsors/Lissy93)
Sponsoring will give you several perks - for $1 / £0.75 per month, you'll get a sponsor badge on your profile, be credited on the Dashy's readme, with a link to your website/ profile/ socials, get priority support, have your feature ideas implemented, plus lots more. For more info, see [@Lissy93's Sponsor Page](https://github.com/sponsors/Lissy93).
<details>
<summary>You can also send a one-off small contribution using crypto</summary>
<p>
[![Donate with BTC](https://en.cryptobadges.io/badge/big/3853bSxupMjvxEYfwGDGAaLZhTKxB2vEVC)](https://en.cryptobadges.io/donate/3853bSxupMjvxEYfwGDGAaLZhTKxB2vEVC)[![Donate with Ethereum](https://en.cryptobadges.io/badge/big/0x0fc98cBf8bea932B4470C46C0FbE1ed1f6765017)](https://en.cryptobadges.io/donate/0x0fc98cBf8bea932B4470C46C0FbE1ed1f6765017)
- **BTC**: `3853bSxupMjvxEYfwGDGAaLZhTKxB2vEVC`
- **ETH**: `0x0fc98cBf8bea932B4470C46C0FbE1ed1f6765017` / `aliciasykes.eth`
- **XMR**: `471KZdxb6N63aABR4WYwMRjTVkc1p1x7wGsUTEF7AMYzL8L94A5pCuYWkosgJQ5Ze8Y2PscVCGZFJa3hDPg6MaDq47GUm8r`
- **LTC**: `MAuck6Ea1qaNihwKfXutkR1R6BorMth86H`
- **ZEC**: `t1bw1SefijsXRDQVxC9w64XsRK8hBhtQohQ`
</p>
</details>
## Enable Anonymous Bug Reports
Bug reports helps me to discover bugs I was unaware of, and then fix them, in order to make Dashy more reliable long term. This is a simple, yet really helpful step you can take to help improve Dashy. [Sentry](https://github.com/getsentry/sentry) is an open source error tracking and performance monitoring tool, which enables the identification any errors which occur in the production app (only if you enable it).
To enable error reporting:
```yaml
appConfig:
enableErrorReporting: true
```
All reporting is **disabled** by default, and no data will ever be sent to any external endpoint without your explicit consent. All statistics are anonymized and stored securely. For more about privacy and security, see the [Sentry Security Docs](https://sentry.io/security/).
## Add Translations
If you speak another language, then adding translations will help make Dashy available to non-native English speakers. This is a very quick and easy task, as all application text is located in [`locales/en.json`](https://github.com/Lissy93/dashy/blob/master/src/assets/locales/en.json), so adding a new language is as simple as copying this file and translating the values. You don't have to translate it all, as any missing attributes will just fallback to English. For a full tutorial, see the [Multi-Language Support Docs](https://github.com/Lissy93/dashy/blob/master/docs/multi-language-support.md).
## Submit a PR
Contributing to the code or docs is super helpful. You can fix a bug, add a new feature or improve an existing one. If you've built your own custom widget, theme or view, consider sharing it in a PR. I've written [several guides](/docs/development-guides.md) to help you get started, and the steps for setting up the development environment are outlined in the [Development Docs](/docs/developing.md). Feel free to ask if you have any questions.
## Improve the Docs
Found a typo, or something that isn't as clear as it could be? Maybe I've missed something off altogether, or you hit a roadblock that took you a while to figure out. Submitting a pull request to add to or improve the documentation will help future users get Dashy up and running more easily.
All content is located either in the [`./README.md`](/README.md) or [`/docs/`](/docs) directory, and synced to the Wiki and website using a GH [action](/actions/workflows/wiki-sync.yml).
## Raise a bug
If you've found a bug, then please do raise it as an issue. This will help me know if there's something that needs fixing. Try and include as much detail as possible, such as your environment, steps to reproduce, any console output and maybe an example screenshot or recording if necessary.
[![Raise a Bug](https://img.shields.io/badge/Raise_a-Bug-%23dc2d76?style=for-the-badge&logo=dependabot)](https://github.com/Lissy93/dashy/issues/new?assignees=lissy93&labels=%F0%9F%90%9B+Bug&template=bug.yml&title=%5BBUG%5D+%3Ctitle%3E)
## Join the discussion
I've enabled the discussion feature on GitHub, here you can share tips and tricks, useful information, or your dashboard. You can also ask questions, and offer basic support to other users.
[![Join the Discussion on GitHub](https://img.shields.io/badge/Join_the-Discussion-%23ffd000?style=for-the-badge&logo=livechat)](https://github.com/Lissy93/dashy/discussions)
## Request a feature via BountySource
BountySource is a platform for sponsoring the development of certain features on open source projects. If there is a feature you'd like implemented into Dashy, but either isn't high enough priority or is deemed to be more work than it's worth, then you can instead contribute a bounty towards it's development. You won't pay a penny until your proposal is fully built, and you are satisfied with the result. This helps support the developers, and makes Dashy better for everyone.
[![Request a Feature on BountySource](https://img.shields.io/badge/BountySource-Dashy-%23F67909?style=for-the-badge&logo=openbugbounty)](https://www.bountysource.com/teams/dashy)
## Spread the word
Dashy is still a relatively young project, and as such not many people know of it. It would be great to see more users, and so it would be awesome if you could consider sharing with your friends or on social platforms.
[![Share Dashy on Mastodon](https://img.shields.io/badge/Share-Mastodon-%232b90d9?style=flat-square&logo=mastodon)](https://mastodon.social/?text=Check%20out%20Dashy%2C%20the%20privacy-friendly%2C%20self-hosted%20startpage%20for%20organizing%20your%20life%3A%20https%3A%2F%2Fgithub.com%2FLissy93%2Fdashy%20-%20By%20%40lissy93%40mastodon.social)
[![Share Dashy on Reddit](https://img.shields.io/badge/Share-Reddit-%23FF5700?style=flat-square&logo=reddit)](http://www.reddit.com/submit?url=https://github.com/Lissy93/dashy&title=Dashy%20-%20The%20self-hosted%20dashboard%20for%20your%20homelab%20%F0%9F%9A%80)
[![Share Dashy on Twitter](https://img.shields.io/badge/Share-Twitter-%231DA1F2?style=flat-square&logo=twitter)](https://twitter.com/intent/tweet?url=https://github.com/lissy93/dashy&text=Check%20out%20Dashy%20by%20@Lissy_Sykes,%20the%20self-hosted%20dashboard%20for%20your%20homelab%20%F0%9F%9A%80)
[![Share Dashy on Facebook](https://img.shields.io/badge/Share-Facebook-%234267B2?style=flat-square&logo=facebook)](https://www.facebook.com/sharer/sharer.php?u=https://github.com/lissy93/dashy)
[![Share Dashy on LinkedIn](https://img.shields.io/badge/Share-LinkedIn-%230077b5?style=flat-square&logo=linkedin)](https://www.linkedin.com/shareArticle?mini=true&url=https://github.com/lissy93/dashy)
[![Share Dashy on Pinterest](https://img.shields.io/badge/Share-Pinterest-%23E60023?style=flat-square&logo=pinterest)](https://pinterest.com/pin/create/button/?url=https://github.com/lissy93/dashy&media=https://raw.githubusercontent.com/Lissy93/dashy/master/docs/showcase/1-home-lab-material.png&description=Check%20out%20Dashy,%20the%20self-hosted%20dashboard%20for%20your%20homelab%20%F0%9F%9A%80)
[![Share Dashy on VK](https://img.shields.io/badge/Share-VK-%234C75A3?style=flat-square&logo=vk)](https://vk.com/share.php?url=https%3A%2F%2Fgithub.com%2Flissy93%2Fdashy%2F&title=Check%20out%20Dashy%20-%20The%20Self-Hosted%20Dashboard%20for%20your%20Homelab%20%F0%9F%9A%80)
[![Share Dashy via Viber](https://img.shields.io/badge/Share-Viber-%238176d6?style=flat-square&logo=viber)](viber://forward?text=https%3A%2F%2Fgithub.com%2Flissy93%2Fdashy%0ACheck%20out%20Dashy%2C%20the%20self-hosted%20dashboard%20for%20your%20homelab%20%F0%9F%9A%80)
[![Share Dashy via Telegram](https://img.shields.io/badge/Share-Telegram-%230088cc?style=flat-square&logo=telegram)](https://t.me/share/url?url=https%3A%2F%2Fgithub.com%2Flissy93%2Fdashy&text=Check%20out%20Dashy%2C%20the%20self-hosted%20dashboard%20for%20your%20homelab%20%F0%9F%9A%80)
[![Share Dashy via Email](https://img.shields.io/badge/Share-Email-%238A90C7?style=flat-square&logo=protonmail)](mailto:info@example.com?&subject=Check%20out%20Dashy%20-%20The%20self-hosted%20dashboard%20for%20your%20homelab%20%F0%9F%9A%80&cc=&bcc=&body=https://github.com/lissy93/dashy)
## Star, Upvote or Leave a Review
Dashy is on the following platforms, and if you could spare a few seconds to give it an upvote or review, this will also help new users discover Dashy
[![ProductHunt](https://img.shields.io/badge/Review-ProductHunt-%23b74424?style=flat-square&logo=producthunt)](https://www.producthunt.com/posts/dashy)
[![AlternativeTo](https://img.shields.io/badge/Review-AlternativeTo-%235581a6?style=flat-square&logo=abletonlive)](https://alternativeto.net/software/dashy/about/)
[![Slant](https://img.shields.io/badge/Review-Slant-%2346a1df?style=flat-square&logo=capacitor)](https://www.slant.co/improve/topics/27783/viewpoints/1/~self-hosted-homelab-startpage~dashy)
[![Star on GitHub](https://img.shields.io/github/stars/Lissy93/Dashy?color=ba96d6&label=Star%20-%20GitHub&logo=github&style=flat-square)](https://github.com/Lissy93/dashy/stargazers)
[![Star on DockerHub](https://img.shields.io/docker/stars/lissy93/dashy?color=4cb6e0&label=Star%20-%20Docker&logo=docker&style=flat-square)](https://hub.docker.com/r/lissy93/dashy)
## Follow for More
If you've enjoyed Dashy, you can follow the me to get updates about other projects that I am working on.
[![Alicia Sykes on Twitter](https://img.shields.io/twitter/follow/Lissy_Sykes?style=social&logo=twitter)](https://twitter.com/Lissy_Sykes)
[![Alicia Sykes on GitHub](https://img.shields.io/github/followers/lissy93?label=Lissy93&style=social)](https://github.com/Lissy93)
[![Alicia Sykes on Mastodon](https://img.shields.io/mastodon/follow/1032965?domain=https%3A%2F%2Fmastodon.social)](https://mastodon.social/web/accounts/1032965)
[![Alicia Sykes on Keybase](https://img.shields.io/badge/aliciasykes--lightgrey?style=social&logo=Keybase)](https://keybase.io/aliciasykes)
[![Alicia Sykes's Website](https://img.shields.io/badge/aliciasykes.com--lightgrey?style=social&logo=Tencent%20QQ)](https://aliciasykes.com)
[![Alicia Sykes's Blog](https://img.shields.io/badge/Blog--lightgrey?style=social&logo=micro.blog)](https://notes.aliciasykes.com/)
[![Alicia Sykes's PGP](https://img.shields.io/badge/PGP--lightgrey?style=social&logo=Let%E2%80%99s%20Encrypt)](https://keybase.io/aliciasykes/pgp_keys.asc)
If you like, you could also consider [subscribing to my mailing list](https://notes.aliciasykes.com/subscribe) for occasional blog post updates.
---
### Contributors
For a full list of Dashy's contributors, see the [Credits Page](/docs/credits.md)
[![Auto-generated contributors](https://raw.githubusercontent.com/Lissy93/dashy/master/docs/assets/CONTRIBUTORS.svg)](https://github.com/Lissy93/dashy/blob/master/docs/credits.md)
### Star-Gazers Over Time
[![Stargazers](https://starchart.cc/Lissy93/dashy.svg)](https://seladb.github.io/StarTrack-js/#/preload?r=Lissy93,dashy)

File diff suppressed because it is too large Load Diff

View File

@ -1,270 +1,380 @@
# Deployment
Welcome to Dashy, so glad you're here :) Deployment is super easy, and there are several methods available depending on what type of system you're using. If you're self-hosting, then deploying with Docker (or similar container engine) is the recommended approach.
#### Quick Start
If you want to skip the fuss, and [get straight down to it](/docs/quick-start.md), then you can spin up a new instance of Dashy by running:
```
docker run -p 8080:80 lissy93/dashy
```
See [Management Docs](/docs/management.md) for info about securing, monitoring, updating, health checks, auto starting, web server configuration, etc
Once you've got Dashy up and running, you'll want to configure it with your own content, for this you can reference the [configuring docs](/docs/configuring.md).
## Deployment Methods
- [Deploy with Docker](#deploy-with-docker)
- [Using Docker Compose](#using-docker-compose)
- [Build from Source](#build-from-source)
- [Hosting with CDN](#hosting-with-cdn)
- [Run as executable](#run-as-executable)
- [Install with NPM](#install-with-npm)
- [Deploy to cloud service](#deploy-to-cloud-service)
- [Use managed instance](#use-managed-instance)
### Deploy with Docker
**Container Info**: [
![Docker Supported Architecture](https://img.shields.io/badge/Architectures-amd64%20|%20arm32v7%20|%20arm64v8-6ba6e5)
![Docker Base Image](https://img.shields.io/badge/Base_Image-Alpine_3.14-6ba6e5)
![Docker Hosted on](https://img.shields.io/badge/Hosted_on-DockerHub-6ba6e5)
](https://hub.docker.com/r/lissy93/dashy)<br>
**Status**: [
![Docker Build Status](https://img.shields.io/docker/cloud/build/lissy93/dashy?label=Docker%20Build)
![Docker Pulls](https://img.shields.io/docker/pulls/lissy93/dashy?color=ecb2f7)
![Docker Stars](https://img.shields.io/docker/stars/lissy93/dashy?color=f7f754&label=Docker%20Stars)
![Docker Image Size](https://img.shields.io/docker/image-size/lissy93/dashy/latest?color=1eea76)
![Docker Cloud Build](https://img.shields.io/docker/cloud/automated/lissy93/dashy?color=f4a966&label=Docker%20Build)
](https://hub.docker.com/r/lissy93/dashy)
Dashy has a built container image hosted on [Docker Hub](https://hub.docker.com/r/lissy93/dashy). You will need [Docker](https://docs.docker.com/get-docker/) installed on your system.
```docker
docker run -d \
-p 8080:80 \
-v /root/my-local-conf.yml:/app/public/conf.yml \
--name my-dashboard \
--restart=always \
lissy93/dashy:latest
```
Explanation of the above options:
- `-d` Detached mode (not running in the foreground of your terminal)
- `-p` The port that should be exposed, and the port it should be mapped to in your host system `[host-port][container-port]`, leave the container port as is
- `-v` Specify volumes, to pass data from your host system to the container, in the format of `[host-path]:[container-path]`, you can use this to pass your config file, directory of assets (like icons), custom CSS or web assets (like favicon.ico, manifest.json etc)
- `--name` Give your container a human-readable name
- `--restart=always` Spin up the container when the daemon starts, or after it has been stopped
- `lissy93/dashy:latest` This last option is the image the container should be built from, you can also use a specific version or architecture type, by replacing `:latest` with one of the [tags](https://hub.docker.com/r/lissy93/dashy/tags)
For all available options, and to learn more, see the [Docker Run Docs](https://docs.docker.com/engine/reference/commandline/run/)
Dashy is also available through GHCR: `docker pull ghcr.io/lissy93/dashy:latest`
If you're deploying Dashy on a modern ARM-based board, such as a Raspberry Pi (2+), then you'll need to use one of Dashy's ARM images. Set the base image + tag to either `lissy93/dashy:arm64v8` or `lissy93/dashy:arm32v7`, depending on your system architecture. You can also use the `multi-arch` image, which should work on all system architectures.
The image defaults to `:latest`, but you can instead specify a specific version, e.g. `docker pull lissy93/dashy:release-1.5.0`
### Using Docker Compose
Using Docker Compose can be useful for saving your specific config in files, without having to type out a long run command each time. Save compose config as a YAML file, and then run `docker compose up -d` (optionally use the `-f` flag to specify file location, if it isn't located at `./docker-compose.yml`), `-d` is detached mode (not running in the foreground of your terminal). Compose is also useful if you are using clusters, as the format is very similar to stack files, used with Docker Swarm.
The following is a complete example of a [`docker-compose.yml`](https://github.com/Lissy93/dashy/blob/master/docker-compose.yml) for Dashy. Run it as is, or uncomment the additional options you need.
```yaml
---
version: "3.8"
services:
dashy:
# To build from source, replace 'image: lissy93/dashy' with 'build: .'
# build: .
image: lissy93/dashy
container_name: Dashy
# Pass in your config file below, by specifying the path on your host machine
# volumes:
# - /root/my-config.yml:/app/public/conf.yml
ports:
- 4000:80
# Set any environmental variables
environment:
- NODE_ENV=production
# Specify your user ID and group ID. You can find this by running `id -u` and `id -g`
# - UID=1000
# - GID=1000
# Specify restart policy
restart: unless-stopped
# Configure healthchecks
healthcheck:
test: ['CMD', 'node', '/app/services/healthcheck']
interval: 1m30s
timeout: 10s
retries: 3
start_period: 40s
```
You can use a different tag, by for example setting `image: lissy93/dashy:arm64v8`, or pull from GHCR instead by setting `image: ghcr.io/lissy93/dashy`.
If you are building from source, and would like to use one of the [other Dockerfiles](https://github.com/Lissy93/dashy/tree/master/docker), then under `services.dashy` first set `context: .`, then specify the the path to the dockerfile, e.g. `dockerfile: ./docker/Dockerfile-arm32v7`
### Build from Source
If you do not want to use Docker, you can run Dashy directly on your host system. For this, you will need both [git](https://git-scm.com/downloads) and the latest or LTS version of [Node.js](https://nodejs.org/) installed, and optionally [yarn](https://yarnpkg.com/)
1. Get Code: `git clone https://github.com/Lissy93/dashy.git` and `cd dashy`
2. Configuration: Fill in you're settings in `./public/conf.yml`
3. Install dependencies: `yarn`
4. Build: `yarn build`
5. Run: `yarn start`
### Deploy to cloud service
If you don't have a home server, then fear not - Dashy can be deployed to pretty much any cloud provider. The above Docker and NPM guides will work exactly the same on a VPS, but I've also setup some 1-Click deploy links for 10+ of the most common cloud providers, to make things easier. Note that if your instance is exposed to the internet, it will be your responsibility to adequately secure it.
Some hosting providers required a bit of extra configuration, which was why I've made separate branches for deploying to those services (named: [`deploy_cloudflare`](https://github.com/Lissy93/dashy/tree/deploy_cloudflare), [`deploy_digital-ocean`](https://github.com/Lissy93/dashy/tree/deploy_digital-ocean), [`deploy_platform-sh`](https://github.com/Lissy93/dashy/tree/deploy_platform-sh) and [`deploy_render`](https://github.com/Lissy93/dashy/tree/deploy_render)). If there's another cloud service which you'd like 1-click deployment to be supported for, feel free to raise an issue.
**Note** If you use a static hosting provider, then status checks, writing new config changes to disk from the UI, and triggering a rebuild through the UI will not be availible. This is because these features need endpoints provided by Dashy's local Node server. Everything else should work just the same though.
#### Netlify
[![Deploy to Netlify](https://i.ibb.co/GtKMysT/deploy-netlify-button.png)](https://app.netlify.com/start/deploy?repository=https://github.com/lissy93/dashy)
[Netlify](https://www.netlify.com/) offers Git-based serverless cloud hosting for web applications. Their services are free to use for personal use, and they support deployment from both public and private repos, as well as direct file upload. The free plan also allows you to use your own custom domain or sub-domain, and is easy to setup.
To deploy Dashy to Netlify, use the following link
```
https://app.netlify.com/start/deploy?repository=https://github.com/lissy93/dashy
```
#### Heroku
[![Deploy to Heroku](https://i.ibb.co/GdMFzBP/deploy-heroku-button.png)](https://heroku.com/deploy?template=https://github.com/Lissy93/dashy)
[Heroku](https://www.heroku.com/) is a fully managed cloud platform as a service. You define app settings in a Procfile and app.json, which specifying how the app should be build and how the server should be started. Heroku is free to use for unlimited, non-commercial, single dyno apps, and supports custom domains. Heroku's single-dyno service is not as quite performant as some other providers, and the app will have a short wake-up time when not visited for a while
To deploy Dashy to Heroku, use the following link
```
https://heroku.com/deploy?template=https://github.com/Lissy93/dashy
```
#### Cloudflare Workers
[![Deploy to Cloudflare Workers](https://i.ibb.co/jf9xVdm/deploy-cloudflare-button.png)](https://deploy.workers.cloudflare.com/?url=https://github.com/lissy93/dashy/tree/deploy_cloudflare)
[Cloudflare Workers](https://workers.cloudflare.com/) is a simple yet powerful service for running cloud functions and hosting web content. It requires a Cloudflare account, but is completely free for smaller projects, and very reasonably priced ($0.15/million requests per month) for large applications. You can use your own domain, and applications are protected with Cloudflare's state of the art DDoS protection. For more info, see the docs on [Worker Sites](https://developers.cloudflare.com/workers/platform/sites)
To deploy Dashy to Cloudflare, use the following link
```
https://deploy.workers.cloudflare.com/?url=https://github.com/lissy93/dashy/tree/deploy_cloudflare
```
#### Vercel
[![Deploy with Vercel](https://i.ibb.co/mJF3R7m/deploy-vercel-button.png)](https://vercel.com/new/project?template=https://github.com/lissy93/dashy)
[Vercel](https://vercel.com/) is a performance-focused platform for hosting static frontend apps. It comes bundled with some useful tools for monitoring and anaylzing application performance and other metrics. Vercel is free for personal use, allows for custom domains and has very reasonable limits.
To deploy Dashy to Vercel, use the following link
```
https://vercel.com/new/project?template=https://github.com/lissy93/dashy
```
#### DigitalOcean
[![Deploy to DO](https://i.ibb.co/PFt0PkB/deploy-digital-ocean-button.png)](https://cloud.digitalocean.com/apps/new?repo=https://github.com/lissy93/dashy/tree/deploy_digital-ocean&refcode=3838338e7f79)
[DigitalOcan](https://www.digitalocean.com/) is a cloud service providing affordable developer-friendly virtual machines from $5/month. But they also have an app platform, where you can run web apps, static sites, APIs and background workers. CDN-backed static sites are free for personal use.
```
https://cloud.digitalocean.com/apps/new?repo=https://github.com/lissy93/dashy/tree/deploy_digital-ocean
```
#### Google Cloud Platform
[![Run on Google Cloud](https://i.ibb.co/LkvHttd/deploy-google-cloud-button.png)](https://deploy.cloud.run/?git_repo=https://github.com/lissy93/dashy.git)
[Cloud Run](https://cloud.google.com/run/) is a service offered by [Google Cloud](https://cloud.google.com/). It's a fully managed serverless platform, for developing and deploying highly scalable containerized applications. Similar to AWS and Azure, GCP offers a wide range of cloud services, which are billed on a payperuse basis, but Cloud Run has a [free tier](https://cloud.google.com/run/pricing) offering 180,000 vCPU-seconds, 360,000 GiB-seconds, and 2 million requests per month.
To deploy Dashy to GCP, use the following link
```
https://deploy.cloud.run/?git_repo=https://github.com/lissy93/dashy.git
```
#### Platform.sh
[![Deploy to Platform.sh](https://i.ibb.co/nPnJgJP/deploy-platform-sh-button.png)](https://console.platform.sh/projects/create-project/?template=https://github.com/lissy93/dashy&utm_campaign=deploy_on_platform?utm_medium=button&utm_source=affiliate_links&utm_content=https://github.com/lissy93/dashy)
[Platform.sh](https://platform.sh) is an end-to-end solution for developing and deploying applications. It is geared towards enterprise users with large teams, and focuses on allowing applications to scale up and down. Unlike the above providers, Platform.sh is not free, although you can deploy a test app to it without needing a payment method
To deploy Dashy to Platform.sh, use the following link
```
https://console.platform.sh/projects/create-project/?template=https://github.com/lissy93/dashy
```
#### Render
[![Deploy to Render](https://i.ibb.co/QXNCbxT/deploy-render-button.png)](https://render.com/deploy?repo=https://github.com/lissy93/dashy/tree/deploy_render)
[Render](https://render.com) is cloud provider that provides easy deployments for static sites, Docker apps, web services, databases and background workers. Render is great for developing applications, and very easy to use. Static sites are free, and services start at $7/month. Currently there are only 2 server locations - Oregon, USA and Frankfurt, Germany. For more info, see the [Render Docs](https://render.com/docs)
To deploy Dashy to Render, use the following link
```
https://render.com/deploy?repo=https://github.com/lissy93/dashy/tree/deploy_render
```
#### Scalingo
[![Deploy on Scalingo](https://i.ibb.co/nj0KxyH/deploy-scalingo-button.png)](https://my.scalingo.com/deploy?source=https://github.com/lissy93/dashy#master)
[Scalingo](https://scalingo.com/) is a scalable container-based cloud platform as a service. It's focus is on compliance and uptime, and is geared towards enterprise users. Scalingo is also not free, although they do have a 3-day free trial that does not require a payment method
To deploy Dashy to Scalingo, use the following link
```
https://my.scalingo.com/deploy?source=https://github.com/lissy93/dashy#master
```
#### Play-with-Docker
[![Try in PWD](https://i.ibb.co/SfbH7Zy/deploy-pwd-button.png)](https://labs.play-with-docker.com/?stack=https://raw.githubusercontent.com/Lissy93/dashy/master/docker-compose.yml)
[Play with Docker](https://labs.play-with-docker.com/) is a community project by Marcos Liljedhal and Jonathan Leibiusky and sponsored by Docker, intended to provide a hands-on learning environment. Their labs let you quickly spin up a Docker container or stack, and test out the image in a temporary, sandboxed environment. There's no need to sign up, and it's completely free.
To run Dashy in PWD, use the following URL:
```
https://labs.play-with-docker.com/?stack=https://raw.githubusercontent.com/Lissy93/dashy/master/docker-compose.yml
```
#### Surge.sh
![Follow instructions below](https://i.ibb.co/XkcKzKz/deploy-surge-button.png)
[Surge.sh](http://surge.sh/) is quick and easy static web publishing platform for frontend-apps.
Surge supports [password-protected projects](https://surge.sh/help/adding-password-protection-to-a-project). You can also [add a custom domain](https://surge.sh/help/adding-a-custom-domain) and then [force HTTPS by default](https://surge.sh/help/using-https-by-default) and optionally [set a custom SSL certificate](https://surge.sh/help/securing-your-custom-domain-with-ssl)
To deploy Dashy to Surge.sh, first clone and cd into Dashy, install dependencies, and then use the following commands
```
yarn add -g surge
yarn build
surge ./dist
```
### Hosting with CDN
Once Dashy has been built, it is effectivley just a static web app. This means that it can be served up with pretty much any static host, CDN or web server. To host Dashy through a CDN, the steps are very similar to building from source: clone the project, cd into it, install dependencies, write your config file and build the app. Once build is complete you will have a `./dist` directory within Dashy's root, and this is the build application which is ready to be served up.
However without Dashy's node server, there are a couple of features that will be unavailible to you, including: Writing config changes to disk through the UI, triggering a rebuild through the UI and application status checks. Everything else will work fine.
## Requirements
### System Requirements
Dashy works well on a Raspberry Pi (tested on Pi 3 and later), but should also run well on any system.
### Docker
Initial app build causes a spike in resource usage, but once the built app is running it is fairly steady. For this reason, Dashy works best with a minimum of 1GB of memory, and 1GB of disk space.
### Bare Metal
Minimum 526mb mem, 2GB disk space,
### CDN / Cloud Deploy
No specific requirements. The built application alone (without the Node server) is very light-weight, and can be handled smoothly by pretty much any CDN or cloud deployment service (see [this list](/docs/deployment.md#deploy-to-cloud-service) or natively supported cloud providers).
If you're using your own icons, or other assets, additional disk space will be required for those resources.
### Browser Support
JavaScript is required to run Dashy.
In terms of browser support, pretty much any browser released since 2018 should render content just fine. However, for Internet Explorer, only IE11+ is supported, yet performance here is still not optimal. The recommended browser is either a Chromium-based / Webkit browser (Chrome, Brave, Vivaldi, Edge, Yandex, etc), or Firefox or one of it's forks (FF-ESR, Tor, LibreWolf, etc). Recent versions of Safari and Opera are also supported, but with limited continuous testing.
<p align="center"><img width="500" src="https://i.ibb.co/pjnmbw9/browser-compatibility.png" /></p>
# Deployment
Welcome to Dashy, so glad you're here :) Deployment is super easy, and there are several methods available depending on what type of system you're using. If you're self-hosting, then deploying with Docker (or similar container engine) is the recommended approach.
## Quick Start
If you want to skip the fuss, and [get straight down to it](/docs/quick-start.md), then you can spin up a new instance of Dashy by running:
```bash
docker run -p 8080:8080 lissy93/dashy
```
See [Management Docs](/docs/management.md) for info about securing, monitoring, updating, health checks, auto starting, web server configuration, etc
Once you've got Dashy up and running, you'll want to configure it with your own content, for this you can reference the [configuring docs](/docs/configuring.md).
## Deployment Methods
- [Deployment](#deployment)
- [Quick Start](#quick-start)
- [Deployment Methods](#deployment-methods)
- [Deploy with Docker](#deploy-with-docker)
- [Using Docker Compose](#using-docker-compose)
- [Kubernetes](#kubernetes)
- [Unraid](#unraid)
- [Synology NAS](#synology-nas)
- [Build from Source](#build-from-source)
- [Deploy to cloud service](#deploy-to-cloud-service)
- [Netlify](#netlify)
- [Heroku](#heroku)
- [Vercel](#vercel)
- [DigitalOcean](#digitalocean)
- [Google Cloud Platform](#google-cloud-platform)
- [Platform.sh](#platformsh)
- [Render](#render)
- [Railway](#railway)
- [Scalingo](#scalingo)
- [Play-with-Docker](#play-with-docker)
- [Surge.sh](#surgesh)
- [Easypanel](#easypanel)
- [Hosting with CDN](#hosting-with-cdn)
- [Requirements](#requirements)
- [System Requirements](#system-requirements)
- [Docker](#docker)
- [Bare Metal](#bare-metal)
- [CDN / Cloud Deploy](#cdn--cloud-deploy)
- [Browser Support](#browser-support)
---
## Deploy with Docker
**Container Info**: [
![Docker Supported Architecture](https://img.shields.io/badge/Architectures-amd64%20|%20arm32v7%20|%20arm64v8-6ba6e5)
![Docker Base Image](https://img.shields.io/badge/Base_Image-Alpine_3.14-6ba6e5)
![Docker Hosted on](https://img.shields.io/badge/Hosted_on-DockerHub-6ba6e5)
](https://hub.docker.com/r/lissy93/dashy)<br>
**Status**: [
![Docker Build Status](https://img.shields.io/docker/cloud/build/lissy93/dashy?label=Docker%20Build)
![Docker Pulls](https://img.shields.io/docker/pulls/lissy93/dashy?color=ecb2f7)
![Docker Stars](https://img.shields.io/docker/stars/lissy93/dashy?color=f7f754&label=Docker%20Stars)
![Docker Image Size](https://img.shields.io/docker/image-size/lissy93/dashy/latest?color=1eea76)
![Docker Cloud Build](https://img.shields.io/docker/cloud/automated/lissy93/dashy?color=f4a966&label=Docker%20Build)
](https://hub.docker.com/r/lissy93/dashy)
Dashy has a built container image hosted on [Docker Hub](https://hub.docker.com/r/lissy93/dashy). You will need [Docker](https://docs.docker.com/get-docker/) installed on your system.
```bash
docker run -d \
-p 8080:8080 \
-v /root/my-local-conf.yml:/app/user-data/conf.yml \
--name my-dashboard \
--restart=always \
lissy93/dashy:latest
```
Explanation of the above options:
- `-d` Detached mode (not running in the foreground of your terminal)
- `-p` The port that should be exposed, and the port it should be mapped to in your host system `[host-port][container-port]`, leave the container port as is
- `-v` Specify volumes, to pass data from your host system to the container, in the format of `[host-path]:[container-path]`, you can use this to pass your config file, directory of assets (like icons), custom CSS or web assets (like favicon.ico, manifest.json etc)
- `--name` Give your container a human-readable name
- `--restart=always` Spin up the container when the daemon starts, or after it has been stopped
- `lissy93/dashy:latest` This last option is the image the container should be built from, you can also use a specific version or architecture type, by replacing `:latest` with one of the [tags](https://hub.docker.com/r/lissy93/dashy/tags)
For all available options, and to learn more, see the [Docker Run Docs](https://docs.docker.com/engine/reference/commandline/run/)
Dashy is also available through GHCR: `docker pull ghcr.io/lissy93/dashy:latest`
If you're deploying Dashy on a modern ARM-based board, such as a Raspberry Pi (2+), then you'll need to use one of Dashy's ARM images. Set the base image + tag to either `lissy93/dashy:arm64v8` or `lissy93/dashy:arm32v7`, depending on your system architecture. You can also use the `multi-arch` image, which should work on all system architectures.
The image defaults to `:latest`, but you can instead specify a specific version, e.g. `docker pull lissy93/dashy:release-1.5.0`
---
## Using Docker Compose
Using Docker Compose can be useful for saving your specific config in files, without having to type out a long run command each time. Save compose config as a YAML file, and then run `docker compose up -d` (optionally use the `-f` flag to specify file location, if it isn't located at `./docker-compose.yml`), `-d` is detached mode (not running in the foreground of your terminal). Compose is also useful if you are using clusters, as the format is very similar to stack files, used with Docker Swarm.
The following is a complete example of a [`docker-compose.yml`](https://github.com/Lissy93/dashy/blob/master/docker-compose.yml) for Dashy. Run it as is, or uncomment the additional options you need.
```yaml
---
version: "3.8"
services:
dashy:
# To build from source, replace 'image: lissy93/dashy' with 'build: .'
# build: .
image: lissy93/dashy
container_name: Dashy
# Pass in your config file below, by specifying the path on your host machine
# volumes:
# - /root/my-config.yml:/app/user-data/conf.yml
ports:
- 4000:8080
# Set any environmental variables
environment:
- NODE_ENV=production
# Specify your user ID and group ID. You can find this by running `id -u` and `id -g`
# - UID=1000
# - GID=1000
# Specify restart policy
restart: unless-stopped
# Configure healthchecks
healthcheck:
test: ['CMD', 'node', '/app/services/healthcheck']
interval: 1m30s
timeout: 10s
retries: 3
start_period: 40s
```
You can use a different tag, by for example setting `image: lissy93/dashy:arm64v8`, or pull from GHCR instead by setting `image: ghcr.io/lissy93/dashy`.
If you are building from source, and would like to use one of the [other Dockerfiles](https://github.com/Lissy93/dashy/tree/master/docker), then under `services.dashy` first set `context: .`, then specify the the path to the dockerfile, e.g. `dockerfile: ./docker/Dockerfile-arm32v7`
---
## Kubernetes
@vyrtualsynthese has written a Helm Chart for deploying with Kubernetes, available [here](https://github.com/vyrtualsynthese/selfhosted-helmcharts/tree/main/charts/dashy)
---
## Unraid
// TODO
---
## Synology NAS
Installing dashy is really simply and fast:
1. Install Docker via Synology ```Package Center```.
2. Go to ```File Station``` and open the ```docker``` folder. Inside the docker folder, create one new folder and name it ```dashy```.
> Note: Be careful to enter only lowercase, not uppercase letters.
3. Go to Control Panel / Task Scheduler / Create / Scheduled Task / User-defined script.
4. Once you click on ```User-defined``` script a new window will open.
5. Follow the instructions below:
6. General: In the Task field type in Install dashy. Uncheck "Enabled" option. Select root User.
7. Schedule: Select Run on the following date then select "Do not repeat".
8. Task Settings: Check "Send run details by email", add your email then copy paste the code below in the Run command area. After that click OK.
```bash
docker run -d \
-p 4000:8080 \
-v /volume1/docker/dashy/my-local-conf.yml:/app/user-data/conf.yml \
--name dashy \
--restart=always \
lissy93/dashy:latest
```
dashy should be up within 1-2min after you've started the install task procedure
---
## Build from Source
If you do not want to use Docker, you can run Dashy directly on your host system. For this, you will need both [git](https://git-scm.com/downloads) and the latest or LTS version of [Node.js](https://nodejs.org/) installed, and optionally [yarn](https://yarnpkg.com/)
1. Get Code: `git clone https://github.com/Lissy93/dashy.git` and `cd dashy`
2. Configuration: Fill in you're settings in `./user-data/conf.yml`
3. Install dependencies: `yarn`
4. Build: `yarn build`
5. Run: `yarn start`
---
## Deploy to cloud service
If you don't have a home server, then fear not - Dashy can be deployed to pretty much any cloud provider. The above Docker and NPM guides will work exactly the same on a VPS, but I've also setup some 1-Click deploy links for 10+ of the most common cloud providers, to make things easier. Note that if your instance is exposed to the internet, it will be your responsibility to adequately secure it.
Some hosting providers required a bit of extra configuration, which was why I've made separate branches for deploying to those services (named: [`deploy_cloudflare`](https://github.com/Lissy93/dashy/tree/deploy_cloudflare), [`deploy_digital-ocean`](https://github.com/Lissy93/dashy/tree/deploy_digital-ocean), [`deploy_platform-sh`](https://github.com/Lissy93/dashy/tree/deploy_platform-sh) and [`deploy_render`](https://github.com/Lissy93/dashy/tree/deploy_render)). If there's another cloud service which you'd like 1-click deployment to be supported for, feel free to raise an issue.
> [!NOTE]
> If you use a static hosting provider, then status checks, writing new config changes to disk from the UI, and triggering a rebuild through the UI will not be available. This is because these features need endpoints provided by Dashy's local Node server. Everything else should work just the same though.
### Netlify
[![Deploy to Netlify](https://i.ibb.co/GtKMysT/deploy-netlify-button.png)](https://app.netlify.com/start/deploy?repository=https://github.com/lissy93/dashy)
[Netlify](https://www.netlify.com/) offers Git-based serverless cloud hosting for web applications. Their services are free to use for personal use, and they support deployment from both public and private repos, as well as direct file upload. The free plan also allows you to use your own custom domain or sub-domain, and is easy to setup.
To deploy Dashy to Netlify, use the following link
```text
https://app.netlify.com/start/deploy?repository=https://github.com/lissy93/dashy
```
### Heroku
[![Deploy to Heroku](https://i.ibb.co/GdMFzBP/deploy-heroku-button.png)](https://heroku.com/deploy?template=https://github.com/Lissy93/dashy)
[Heroku](https://www.heroku.com/) is a fully managed cloud platform as a service. You define app settings in a Procfile and app.json, which specifying how the app should be build and how the server should be started. Heroku costs a minimum of $5 for 1,000 dyno hours per month (there are around 720 hours in a month), and supports custom domains. Heroku's single-dyno service is not as quite performant as some other providers, and the app will have a short wake-up time when not visited for a while
To deploy Dashy to Heroku, use the following link
```text
https://heroku.com/deploy?template=https://github.com/Lissy93/dashy
```
### Vercel
[![Deploy with Vercel](https://i.ibb.co/mJF3R7m/deploy-vercel-button.png)](https://vercel.com/new/project?template=https://github.com/lissy93/dashy)
[Vercel](https://vercel.com/) is a performance-focused platform for hosting static frontend apps. It comes bundled with some useful tools for monitoring and analyzing application performance and other metrics. Vercel is free for personal use, allows for custom domains and has very reasonable limits.
To deploy Dashy to Vercel, use the following link
```text
https://vercel.com/new/project?template=https://github.com/lissy93/dashy
```
### DigitalOcean
[![Deploy to DO](https://i.ibb.co/PFt0PkB/deploy-digital-ocean-button.png)](https://cloud.digitalocean.com/apps/new?repo=https://github.com/lissy93/dashy/tree/deploy_digital-ocean&refcode=3838338e7f79)
[DigitalOcean](https://www.digitalocean.com/) is a cloud service providing affordable developer-friendly virtual machines from $5/month. But they also have an app platform, where you can run web apps, static sites, APIs and background workers. CDN-backed static sites are free for personal use.
```text
https://cloud.digitalocean.com/apps/new?repo=https://github.com/lissy93/dashy/tree/deploy_digital-ocean
```
### Google Cloud Platform
[![Run on Google Cloud](https://i.ibb.co/LkvHttd/deploy-google-cloud-button.png)](https://deploy.cloud.run/?git_repo=https://github.com/lissy93/dashy.git)
[Cloud Run](https://cloud.google.com/run/) is a service offered by [Google Cloud](https://cloud.google.com/). It's a fully managed serverless platform, for developing and deploying highly scalable containerized applications. Similar to AWS and Azure, GCP offers a wide range of cloud services, which are billed on a payperuse basis, but Cloud Run has a [free tier](https://cloud.google.com/run/pricing) offering 180,000 vCPU-seconds, 360,000 GiB-seconds, and 2 million requests per month.
To deploy Dashy to GCP, use the following link
```text
https://deploy.cloud.run/?git_repo=https://github.com/lissy93/dashy.git
```
### Platform.sh
[![Deploy to Platform.sh](https://i.ibb.co/nPnJgJP/deploy-platform-sh-button.png)](https://console.platform.sh/projects/create-project/?template=https://github.com/lissy93/dashy&utm_campaign=deploy_on_platform?utm_medium=button&utm_source=affiliate_links&utm_content=https://github.com/lissy93/dashy)
[Platform.sh](https://platform.sh) is an end-to-end solution for developing and deploying applications. It is geared towards enterprise users with large teams, and focuses on allowing applications to scale up and down. Unlike the above providers, Platform.sh is not free, although you can deploy a test app to it without needing a payment method
To deploy Dashy to Platform.sh, use the following link
```text
https://console.platform.sh/projects/create-project/?template=https://github.com/lissy93/dashy
```
### Render
[![Deploy to Render](https://i.ibb.co/QXNCbxT/deploy-render-button.png)](https://render.com/deploy?repo=https://github.com/lissy93/dashy/tree/deploy_render)
[Render](https://render.com) is cloud provider that provides easy deployments for static sites, Docker apps, web services, databases and background workers. Render is great for developing applications, and very easy to use. Static sites are free, and services start at $7/month. Currently there are only 2 server locations - Oregon, USA and Frankfurt, Germany. For more info, see the [Render Docs](https://render.com/docs)
To deploy Dashy to Render, use the following link
```text
https://render.com/deploy?repo=https://github.com/lissy93/dashy/tree/deploy_render
```
### Railway
[![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/template/MtdjAQ?referralCode=app)
[Railway](https://railway.app/) is a Platform as a Service (PaaS) that offers a complete platform for building and delivering programs to the backend of the cloud. You bring your code and Railway does the rest. Railway offers an extremely good developer experience and makes it effortless to deploy apps. Railway offers a free Trial Plan, and paid plans start at $5/month. Railway has 4 server locations: US-west, US-east, EU-west and ASIA-South-East.
```text
https://railway.app/template/MtdjAQ
```
### Scalingo
[![Deploy on Scalingo](https://i.ibb.co/nj0KxyH/deploy-scalingo-button.png)](https://my.scalingo.com/deploy?source=https://github.com/lissy93/dashy#master)
[Scalingo](https://scalingo.com/) is a scalable container-based cloud platform as a service. It's focus is on compliance and uptime, and is geared towards enterprise users. Scalingo is also not free, although they do have a 3-day free trial that does not require a payment method.
To deploy Dashy to Scalingo, use the following link
```text
https://my.scalingo.com/deploy?source=https://github.com/lissy93/dashy#master
```
### Play-with-Docker
[![Try in PWD](https://i.ibb.co/SfbH7Zy/deploy-pwd-button.png)](https://labs.play-with-docker.com/?stack=https://raw.githubusercontent.com/Lissy93/dashy/master/docker-compose.yml)
[Play with Docker](https://labs.play-with-docker.com/) is a community project by Marcos Liljedhal and Jonathan Leibiusky and sponsored by Docker, intended to provide a hands-on learning environment. Their labs let you quickly spin up a Docker container or stack, and test out the image in a temporary, sandboxed environment. There's no need to sign up, and it's completely free.
To run Dashy in PWD, use the following URL:
```text
https://labs.play-with-docker.com/?stack=https://raw.githubusercontent.com/Lissy93/dashy/master/docker-compose.yml
```
### Surge.sh
![Follow instructions below](https://i.ibb.co/XkcKzKz/deploy-surge-button.png)
[Surge.sh](http://surge.sh/) is quick and easy static web publishing platform for frontend-apps.
Surge supports [password-protected projects](https://surge.sh/help/adding-password-protection-to-a-project). You can also [add a custom domain](https://surge.sh/help/adding-a-custom-domain) and then [force HTTPS by default](https://surge.sh/help/using-https-by-default) and optionally [set a custom SSL certificate](https://surge.sh/help/securing-your-custom-domain-with-ssl)
To deploy Dashy to Surge.sh, first clone and cd into Dashy, install dependencies, and then use the following commands
```bash
yarn add -g surge
yarn build
surge ./dist
```
### Easypanel
[![Deploy to Easypanel](https://i.ibb.co/ZNPwQX3/deploy-easypanel-button.png)](https://easypanel.io/docs/templates/dashy)
[Easypanel](https://easypanel.io) it's a modern server control panel. You can use it to deploy Dashy on your own server.
To deploy Dashy to Easypanel, use the following link
```text
https://easypanel.io/docs/templates/dashy
```
---
## Hosting with CDN
Once Dashy has been built, it is effectively just a static web app. This means that it can be served up with pretty much any static host, CDN or web server. To host Dashy through a CDN, the steps are very similar to building from source: clone the project, cd into it, install dependencies, write your config file and build the app. Once build is complete you will have a `./dist` directory within Dashy's root, and this is the build application which is ready to be served up.
However without Dashy's node server, there are a couple of features that will be unavailable to you, including: Writing config changes to disk through the UI, triggering a rebuild through the UI and application status checks. Everything else will work fine.
---
## Requirements
### System Requirements
Dashy works well on a Raspberry Pi (tested on Pi 3 and later), but should also run well on any system.
### Docker
Initial app build causes a spike in resource usage, but once the built app is running it is fairly steady. For this reason, Dashy works best with a minimum of 1GB of memory, and 1GB of disk space.
### Bare Metal
Minimum 526mb mem, 2GB disk space.
### CDN / Cloud Deploy
No specific requirements. The built application alone (without the Node server) is very light-weight, and can be handled smoothly by pretty much any CDN or cloud deployment service (see [this list](/docs/deployment.md#deploy-to-cloud-service) or natively supported cloud providers).
If you're using your own icons, or other assets, additional disk space will be required for those resources.
### Browser Support
JavaScript is required to run Dashy.
In terms of browser support, pretty much any browser released since 2018 should render content just fine. However, for Internet Explorer, only IE11+ is supported, yet performance here is still not optimal. The recommended browser is either a Chromium-based / Webkit browser (Chrome, Brave, Vivaldi, Edge, Yandex, etc), or Firefox or one of it's forks (FF-ESR, Tor, LibreWolf, etc). Recent versions of Safari and Opera are also supported, but with limited continuous testing.
<p align="center"><img width="500" src="https://i.ibb.co/pjnmbw9/browser-compatibility.png" /></p>

View File

@ -24,6 +24,7 @@ If you're adding new features, you may want to check out the [Development Guides
## Setting up the Dev Environment
### Prerequisites
You will need either the latest or LTS version of **[Node.js](https://nodejs.org/)** to build and serve the application and **[Git](https://git-scm.com/downloads)** to easily fetch the code, and push any changes. If you plan on running or deploying the container, you'll also need **[Docker](https://docs.docker.com/get-docker/)**. To avoid any unexpected issues, ensure you've got at least **[NPM](https://www.npmjs.com/get-npm)** V 7.5 or **[Yarn](https://classic.yarnpkg.com/en/docs/install/#windows-stable)** 1.22 (you may find [NVM](https://github.com/nvm-sh/nvm) helpful for switching/ managing versions).
### Running the Project
@ -33,34 +34,40 @@ You will need either the latest or LTS version of **[Node.js](https://nodejs.org
3. Install dependencies: `yarn`
4. Start dev server: `yarn dev`
Dashy should now be being served on http://localhost:8080/. Hot reload is enabled, so making changes to any of the files will trigger them to be rebuilt and the page refreshed.
Dashy should now be being served on <http://localhost:8080/>. Hot reload is enabled, so making changes to any of the files will trigger them to be rebuilt and the page refreshed.
### Project Commands
#### Basics
- **`yarn build`** - In the interest of speed, the application is pre-compiled, this means that the config file is read during build-time, and therefore the app needs to rebuilt for any new changes to take effect. Luckily this is very straight forward. Just run `yarn build` or `docker exec -it [container-id] yarn build`
- **`yarn start`** - Starts a web server, and serves up the production site from `./dist` (must run build command first)
#### Development
- **`yarn dev`** - Starts the development server with hot reloading
- **`yarn lint`** - Lints code to ensure it follows a consistent, neat style
- **`yarn test`** - Runs tests, and outputs results
#### Utils and Checks
- **`yarn validate-config`** - If you have quite a long configuration file, you may wish to check that it's all good to go, before deploying the app. This can be done with `yarn validate-config` or `docker exec -it [container-id] yarn validate-config`. Your config file needs to be in `/public/conf.yml` (or within your Docker container at `/app/public/conf.yml`). This will first check that your YAML is valid, and then validates it against Dashy's [schema](https://github.com/Lissy93/dashy/blob/master/src/utils/ConfigSchema.js).
- **`yarn validate-config`** - If you have quite a long configuration file, you may wish to check that it's all good to go, before deploying the app. This can be done with `yarn validate-config` or `docker exec -it [container-id] yarn validate-config`. Your config file needs to be in `/user-data/conf.yml` (or within your Docker container at `/app/user-data/conf.yml`). This will first check that your YAML is valid, and then validates it against Dashy's [schema](https://github.com/Lissy93/dashy/blob/master/src/utils/ConfigSchema.js).
- **`yarn health-check`** - Checks that the application is up and running on it's specified port, and outputs current status and response times. Useful for integrating into your monitoring service, if you need to maintain high system availability
#### Alternate Start Commands
- **`yarn build-and-start`** - Builds the app, runs checks and starts the production server. Commands are run in parallel, and so is faster than running them in independently. Uses the `yarn build` and `yarn start` commands
- **`yarn build-watch`** - If you find yourself making frequent changes to your configuration, and do not want to have to keep manually rebuilding, then this option is for you. It will watch for changes to any files within the projects root, and then trigger a rebuild. Note that if you are developing new features, then `yarn dev` would be more appropriate, as it's significantly faster at recompiling (under 1 second), and has hot reloading, linting and testing integrated
- **`yarn pm2-start`** - Starts the Node server using [PM2](https://pm2.keymetrics.io/), a process manager for Node.js applications, that helps them stay alive. PM2 has some built-in basic monitoring features, and an optional [management solution](https://pm2.io/). If you are running the app on bare metal, it is recommended to use this start command
#### Notes
- If you are using NPM, replace `yarn` with `npm run`
- If you are using Docker, precede each command with `docker exec -it [container-id]`. Container ID can be found by running `docker ps`
- You can manage the app using the [Vue-CLI Service](https://cli.vuejs.org/guide/cli-service.html), with `npx vue-cli-service [command]`. Or to start the Vue Management UI, run `npx vue ui`, and open `http://localhost:8000`
- You can manage the app using the [Vue-CLI Service](https://cli.vuejs.org/guide/cli-service.html), with `npx vue-cli-service [command]`. Or to start the Vue Management UI, run `npx vue ui`, and open `http://localhost:8000`
### Environmental Variables
All environmental variables are optional. Currently there are not many environmental variables used, as most of the user preferences are stored under `appConfig` in the `conf.yml` file.
You can set variables either in your environment, or using the [`.env`](https://github.com/Lissy93/dashy/blob/master/.env) file.
@ -73,8 +80,10 @@ You can set variables either in your environment, or using the [`.env`](https://
- `INTEGRITY` - Should enable SRI for build script and link resources
- `IS_DOCKER` - Computed automatically on build. Indicates if running in container
- `VUE_APP_VERSION` - Again, set automatically using package.json during build time
- `BACKUP_DIR` - Directory for conf.yml backups
### Environment Modes
You can set the environment using the `NODE_ENV` variable. By default, the correct environment should be selected based on the script you run to start the app. The following environments are supported: `production`, `development` and `test`. For more info, see [Vue CLI Environment Modes](https://cli.vuejs.org/guide/mode-and-env.html#modes).
---
@ -82,6 +91,7 @@ You can set the environment using the `NODE_ENV` variable. By default, the corre
## Git Strategy
### Git Flow
Like most Git repos, we are following the [Github Flow](https://guides.github.com/introduction/flow) standard.
1. Create a branch (or fork if you don'd have write access)
@ -93,10 +103,12 @@ Like most Git repos, we are following the [Github Flow](https://guides.github.co
7. Merge 🎉
### Git Branch Naming
The format of your branch name should be something similar to: `[TYPE]/[TICKET]_[TITLE]`
For example, `FEATURE/420_Awesome-feature` or `FIX/690_login-server-error`
### Commit Emojis
Using a single emoji at the start of each commit message, to indicate the type task, makes the commit ledger easier to understand, plus it looks cool.
- 🎨 `:art:` - Improve structure / format of the code.
@ -127,14 +139,17 @@ Using a single emoji at the start of each commit message, to indicate the type t
For a full list of options, see [gitmoji.dev](https://gitmoji.dev/)
### PR Guidelines
Once you've made your changes, and pushed them to your fork or branch, you're ready to open a pull request!
For a pull request to be merged, it must:
- Must be backwards compatible
- The build, lint and tests (run by GH actions) must pass
- There must not be any merge conflicts
When you submit your PR, include the required info, by filling out the PR template. Including:
- A brief description of your changes
- The issue, ticket or discussion number (if applicable)
- For UI relate updates include a screenshot
@ -144,7 +159,9 @@ When you submit your PR, include the required info, by filling out the PR templa
---
## Resources for Beginners
New to Web Development? Glad you're here! Dashy is a pretty simple app, so it should make a good candidate for your first PR. Presuming that you already have a basic knowledge of JavaScript, the following articles should point you in the right direction for getting up to speed with the technologies used in this project:
- [Open Source for Beginners](https://opensource.guide/how-to-contribute/)
- [Introduction to Vue.js](https://v3.vuejs.org/guide/introduction.html)
- [Vue.js Walkthrough](https://www.taniarascia.com/getting-started-with-vue/)
@ -158,41 +175,45 @@ New to Web Development? Glad you're here! Dashy is a pretty simple app, so it sh
- [Git cheat sheet](http://git-cheatsheet.com/)
- [Basics of using NPM](https://www.freecodecamp.org/news/what-is-npm-a-node-package-manager-tutorial-for-beginners/)
As well as Node, Git and Docker- you'll also need an IDE (e.g. [VS Code](https://code.visualstudio.com/) or [Vim](https://www.vim.org/)) and a terminal (Windows users may find [WSL](https://docs.microsoft.com/en-us/windows/wsl/) more convenient).
As well as Node, Git and Docker- you'll also need an IDE (e.g. [VS Code](https://code.visualstudio.com/) or [Vim](https://www.vim.org/)) and a terminal (Windows users may find [WSL](https://docs.microsoft.com/en-us/windows/wsl/) more convenient).
---
## App Info
## Style Guide
### Style Guide
Linting is done using [ESLint](https://eslint.org/), and using the [Vue.js Styleguide](https://github.com/vuejs/eslint-config-standard), which is very similar to the [AirBnB Stylguide](https://github.com/airbnb/javascript). You can run `yarn lint` to report and fix issues. While the dev server is running, issues will be reported to the console automatically, and any lint errors will trigger the build to fail. Note that all lint checks must pass before any PR can be merged. Linting is also run as a git pre-commit hook
Linting is done using [ESLint](https://eslint.org/), and using the [Vue.js Styleguide](https://github.com/vuejs/eslint-config-standard), which is very similar to the [AirBnB Styleguide](https://github.com/airbnb/javascript). You can run `yarn lint` to report and fix issues. While the dev server is running, issues will be reported to the console automatically, and any lint errors will trigger the build to fail. Note that all lint checks must pass before any PR can be merged. Linting is also run as a git pre-commit hook
The most significant things to note are:
- Indentation should be done with two spaces
- Strings should use single quotes
- All statements must end in a semi-colon
- The final element in all objects must be preceded with a comma
- Maximum line length is 100
- There must be exactly one blank line between sections, before function names, and at the end of the file
- With conditionals, put else on the same line as your if blocks closing brace
- With conditionals, put else on the same line as your if block's closing brace
- All multiline blocks must use braces
- Avoid console statements in the frontend
Styleguides:
- Vue: [Vue styleguide](https://vuejs.org/v2/style-guide/)
- JavaScript: [github.com/airbnb/javascript](https://github.com/airbnb/javascript)
- JavaScript: [github.com/airbnb/javascript](https://github.com/airbnb/javascript)
---
## Application Structure
### Application Structure
#### Files in the Root: `./`
```
```text
├── package.json # Project meta-data, dependencies and paths to scripts
├── src/ # Project front-end source code
├── server.js # A Node.js server to serve up the /dist directory
├── services/ # All server-side endpoints and utilities
├── vue.config.js # Vue.js configuration
├── Dockerfile # The blueprint for building the Docker container
├── docker-compose.yml # A Docker run command
@ -206,14 +227,17 @@ Styleguides:
#### Frontend Source: `./src/`
```
```text
./src
├── App.vue # Vue.js starting file
├── assets # Static non-compiled assets
│ ├── fonts # .ttf font files
│ ├── locales # All app text, each language in a separate JSON file
│ ╰── interface-icons # SVG icons used in the app
│ ╰── interface-icons # SVG icons used in the app
├── components # All front-end Vue web components
│ ├── Charts # Charting components for dynamically displaying widget data
│ │ ├── Gauge.vue # A speed-dial style chart for showing 0 - 100 values
│ │ ╰── PercentageChart.vue # A horizontal bar for showing percentage breakdowns
│ ├── Configuration # Components relating to the user config pop-up
│ │ ├── AppInfoModal.vue # A modal showing core app info, like version, language, etc
│ │ ├── AppVersion.vue # Shows current version from package.json, compares with GitHub
@ -225,15 +249,30 @@ Styleguides:
│ │ ╰── RebuildApp.vue # A component allowing user to trigger a rebuild through the UI
│ ├── FormElements # Basic form elements used throughout the app
│ │ ├── Button.vue # Standard button component
│ │ ╰── Input.vue # Standard text field input component
│ │ ├── Radio.vue # Standard radio button input
│ │ ├── Select.vue # Standard dropdown input selector
│ │ ├── Input.vue # Standard text field input component
│ │ ╰── Toggle.vue # Standard on / off toggle switch
│ ├── InteractiveEditor # Components for the interactive UI config editor
│ │ ├── AddNewSectionLauncher # Button that launches the EditSection form, used for adding new section
│ │ ├── EditAppConfig.vue # Form for editing appConfig
│ │ ├── EditPageInfo.vue # Form for editing pageInfo
│ │ ├── EditSection.vue # Form for adding / editing sections
│ │ ├── EditItem.vue # Form for adding or editing items
│ │ ├── EditModeSaveMenu.vue # The bar at the bottom of screen in edit mode, containing save buttons
│ │ ├── EditModeTopBanner.vue # The bar at the top of screen in edit mode
│ │ ├── ExportConfigMenu.vue # Modal for viewing / exporting edited config
│ │ ├── MoveItemTo.vue # Form for moving / copying items to other sections
│ │ ╰── SaveCancelButtons.vue # Buttons visible in all the edit menus, to save or cancel changes
│ ├── LinkItems # Components for Sections and Link Items
│ │ ├── Collapsable.vue # The collapsible functionality of sections
│ │ ├── ContextMenu.vue # The right-click menu, for showing Item opening methods and info
│ │ ├── IframeModal.vue # Pop-up iframe modal, for viewing websites within the app
│ │ ├── Item.vue # Main link item, which is displayed within an item group
│ │ ├── ItemGroup.vue # Item group is a section containing icons
│ │ ├── ItemIcon.vue # The icon used by both items and sections
│ │ ├── ItemOpenMethodIcon.vue # A small icon, visible on hover, indicating opening method
│ │ ├── ItemOpenMethodIcon.vue # A small icon, visible on hover, indicating opening method
│ │ ├── ItemContextMenu.vue # The right-click menu, for showing Item opening methods and info
│ │ ├── SectionContextMenu.vue # The right-click menu, for showing Section edit/ open options
│ │ ╰── StatusIndicator.vue # Traffic light dot, showing if app is online or down
│ ├── Minimal View # Components used for the startpage / minimal alternative view
│ │ ├── MinimalHeading.vue # Title part of minimal view
@ -250,7 +289,10 @@ Styleguides:
│ │ ├── SideBar.vue # The left sidebar for the workspace view
│ │ ├── SideBarItem.vue # App item for the sidebar view
│ │ ├── SideBarSection.vue # Collapsible collection of items within workspace sidebar
│ │ ╰── WebContent.vue # Workspace iframe view, displays content of current app
│ │ ├── WebContent.vue # Workspace iframe view, displays content of current app
│ │ ╰── WidgetView.vue # Workspace container for displaying widgets in main content
│ ├── Widgets # Directory contains all custom widget components
│ │ ╰── .... # Too many to list, see widget docs instead
│ ╰── Settings # Components relating to the quick-settings, in the top-right
│ ├── AuthButtons.vue # Logout button and other app info
│ ├── ConfigLauncher.vue # Icon that when clicked will launch the Configuration component
@ -266,6 +308,19 @@ Styleguides:
├── registerServiceWorker.js # Registers and manages service workers, for PWA apps
├── router.js # Defines all available application routes
├── styles # Directory of all globally used common SCSS styles
│ ├── color-palette.scss # All color variable names and default values
│ ├── color-themes.scss # All variable values for built-in themes
│ ├── dimensions.scss # Dimensions and sizes as variables
│ ├── global-styles.scss # Basics and style resets used globally
│ ├── media-queries.scss # Screen sizes and media queries
│ ├── style-helpers.scss # SCSS functions used for modifying values
│ ├── typography.scss # Font and text styles used globally
│ ╰── user-defined-themes.scss # Empty, put any custom styles or themes here
├── mixins # Reusable component bases, extended by other views / components
│ ├── ChartingMixin.js # Functions for rendering charts in widget components
│ ├── GlancesMixin.js # Functions for fetching system info from Glances for widgets
│ ├── HomeMixin.js # Functions for homepage, used by default, minimal and workspace views
│ ╰── WidgetMixin.js # Functions for all widgets, like data fetching, updating and error handling
├── utils # Directory of re-used helper functions
│ ├── ArrowKeyNavigation.js # Functionality for arrow-key navigation
│ ├── Auth.js # Handles all authentication related actions
@ -285,6 +340,7 @@ Styleguides:
│ ├── InitServiceWorker.js # Initializes and manages service worker, if enabled
│ ├── Search.js # Helper functions for searching/ filtering items in all views
│ ├── JsonToYaml.js # Function that parses and converts raw JSON into valid YAML
│ ├── KeycloakAuth.js # Singleton class to manage Keycloak authentication
│ ├── languages.js # Handles fetching, switching and validating languages
│ ╰── ThemeHelper.js # Function that handles the fetching and setting of user themes
╰── views # Directory of available pages, corresponding to available routes
@ -304,9 +360,11 @@ Styleguides:
## Development Tools
### Performance - Lighthouse
The easiest method of checking performance is to use Chromium's build in auditing tool, Lighthouse. To run the test, open Developer Tools (usually F12) --> Lighthouse and click on the 'Generate Report' button at the bottom.
### Dependencies - BundlePhobia
[BundlePhobia](https://bundlephobia.com/) is a really useful app that lets you analyze the cost of adding any particular dependency to an application
---
@ -320,4 +378,3 @@ When running the build command, several warnings appear. These are not errors, a
`WARN A new version of sass-loader is available. Please upgrade for best experience.` - Currently we're using an older version of SASS loader, since the more recent releases do not seem to be compatible with the Vue CLI's webpack configuration.
`WARN asset size limit: The following asset(s) exceed the recommended size limit (244 KiB).` - For the PWA to support Windows 10, a splash screen asset is required, and is quite large. This throws a warning, however PWA assets are not loaded until needed, so shouldn't have any impact on application performance. A similar warning is thrown for the Raleway font, and that is looking to be addressed.

View File

@ -1,8 +1,9 @@
# Development Guides
A series of short tutorials, to guide you through the most common development tasks.
A series of short tutorials, to guide you through the most common development tasks.
Sections:
- [Creating a new theme](#creating-a-new-theme)
- [Writing Translations](#writing-translations)
- [Adding a new option in the config file](#adding-a-new-option-in-the-config-file)
@ -11,16 +12,19 @@ Sections:
- [Hiding Page Furniture](#hiding-page-furniture-on-certain-routes)
- [Adding / Using Environmental Variables](#adding--using-environmental-variables)
- [Building a Widget](#building-a-widget)
- [Respecting Config Permissions](#respecting-config-permissions)
## Creating a new theme
Adding a new theme is really easy. There's two things you need to do: Pass the theme name to Dashy, so that it can be added to the theme selector dropdown menu, and then write some styles!
Adding a new theme is really easy. There're two things you need to do: Pass the theme name to Dashy, so that it can be added to the theme selector dropdown menu, and then write some styles!
##### 1. Add Theme Name
Choose a snappy name for you're theme, and add it to the `builtInThemes` array inside [`defaults.js`](https://github.com/Lissy93/dashy/blob/master/src/utils/defaults.js#L27).
### 1. Add Theme Name
##### 2. Write some Styles!
Put your theme's styles inside [`color-themes.scss`](https://github.com/Lissy93/dashy/blob/master/src/styles/color-themes.scss).
Choose a snappy name for your theme, and add it to the `builtInThemes` array inside [`defaults.js`](https://github.com/Lissy93/dashy/blob/master/src/utils/defaults.js#L27).
### 2. Write some Styles
Put your theme styles inside [`color-themes.scss`](https://github.com/Lissy93/dashy/blob/master/src/styles/color-themes.scss).
Create a new block, and make sure that `data-theme` matches the theme name you chose above. For example:
```css
@ -30,11 +34,11 @@ html[data-theme='tiger'] {
}
```
Then you can go ahead and write you're own custom CSS. Although all CSS is supported here, the best way to define you're theme is by setting the CSS variables. You can find a [list of all CSS variables, here](https://github.com/Lissy93/dashy/blob/master/docs/theming.md#css-variables).
Then you can go ahead and write your own custom CSS. Although all CSS is supported here, the best way to define your theme is by setting the CSS variables. You can find a [list of all CSS variables, here](https://github.com/Lissy93/dashy/blob/master/docs/theming.md#css-variables).
For a full guide on styling, see [Theming Docs](./theming.md).
Note that if you're theme is just for yourself, and you're not submitting a PR, then you can instead just pass it under `appConfig.cssThemes` inside your config file. And then put your theme in your own stylesheet, and pass it into the Docker container - [see how](https://github.com/Lissy93/dashy/blob/master/docs/theming.md#adding-your-own-theme).
Note that if your theme is just for yourself, and you're not submitting a PR, then you can instead just pass it under `appConfig.cssThemes` inside your config file. And then put your theme in your own stylesheet, and pass it into the Docker container - [see how](https://github.com/Lissy93/dashy/blob/master/docs/theming.md#adding-your-own-theme).
## Writing Translations
@ -44,10 +48,12 @@ Dashy is using [vue-i18n](https://vue-i18n.intlify.dev/guide/) to manage multi-l
Adding a new language is pretty straightforward, with just three steps:
##### 1. Create a new Language File
### 1. Create a new Language File
Create a new JSON file in `./src/assets/locales` name is a 2-digit [ISO-639 code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) for your language, E.g. for German `de.json`, French `fr.json` or Spanish `es.json` - You can find a list of all ISO codes at [iso.org](https://www.iso.org/obp/ui).
##### 2. Translate!
### 2. Translate
Using [`en.json`](https://github.com/Lissy93/dashy/tree/master/src/assets/locales/en.json) as an example, translate the JSON values to your language, while leaving the keys as they are. It's fine to leave out certain items, as if they're missing they will fall-back to English. If you see any attribute which include curly braces (`{xxx}`), then leave the inner value of these braces as is, as this is for variables.
```json
@ -64,7 +70,7 @@ Using [`en.json`](https://github.com/Lissy93/dashy/tree/master/src/assets/locale
}
```
##### 3. Add your file to the app
### 3. Add your file to the app
In [`./src/utils/languages.js`](https://github.com/Lissy93/dashy/tree/master/src/utils/languages.js), you need to do 2 small things:
@ -72,6 +78,7 @@ First import your new translation file, do this at the top of the page.
E.g. `import de from '@/assets/locales/de.json';`
Second, add it to the array of languages, e.g:
```javascript
export const languages = [
{
@ -88,24 +95,42 @@ export const languages = [
},
];
```
You can also add your new language to the readme, under the [Language Switching](https://github.com/Lissy93/dashy#language-switching-) section, and optionally include your name/ username if you'd like to be credited for your work. Done!
If you are not comfortable with making pull requests, or do not want to modify the code, then feel free to instead send the translated file to me, and I can add it into the application. I will be sure to credit you appropriately.
You can also add your new language to the readme file, under the [Language Switching](https://github.com/Lissy93/dashy#language-switching-) section, and optionally include your name/ username if you'd like to be credited for your work. Done!
# Adding a new option in the config file
If you are not comfortable with making pull requests, or do not want to modify the code, then feel free to instead send the translated file to me, and I can add it into the application. I will be sure to credit you appropriately.
This section is for, if you're adding a new component or setting, that requires an additional item to be added to the users config file.
## Adding a new option in the config file
All of the users config is specified in `./public/conf.yml` - see [Configuring Docs](./configuring.md) for info.
Before adding a new option in the config file, first ensure that there is nothing similar available, that is is definitely necessary, it will not conflict with any other options and most importantly that it will not cause any breaking changes. Ensure that you choose an appropriate and relevant section to place it under.
This section is for, adding a new setting to the config file.
All of the users config is specified in `./user-data/conf.yml` - see [Configuring Docs](./configuring.md) for info.
It's important to first ensure that there isn't a similar option already available, the new option is definitely necessary, and most importantly that it is fully backwards compatible.
Next choose the appropriate section to place it under
Next decide the most appropriate place for your attribute:
- Application settings should be located under `appConfig`
- Page info (such as text and metadata) should be under `pageInfo`
- Data relating to specific sections should be under `section[n].displayData`
- And for setting applied to specific items, it should be under `item[n]`
- Settings applied to specific items or widgets, should be under `item[n]` or `widget[n]`
In order for the user to be able to add your new attribute using the Config Editor, and for the build validation to pass, your attribute must be included within the [ConfigSchema](https://github.com/Lissy93/dashy/blob/master/src/utils/ConfigSchema.js). You can read about how to do this on the [ajv docs](https://ajv.js.org/json-schema.html). Give your property a type and a description, as well as any other optional fields that you feel are relevant. For example:
For example, if your option is added under `appConfig`, you can access it within your component using the `$store`, this is typically placed in a computed property, e.g:
```javascript
computed: {
appConfig() {
return this.$store.getters.appConfig;
},
...
},
```
Then, where you want to get the users value within your component, use something like: `this.appConfig.myProperty`. If the user hasn't specified the value, Don't forget to have a fallback or default for it.
If you have a default fallback value, then this would typically be specified in the [`defaults.js`](https://github.com/Lissy93/dashy/blob/master/src/utils/defaults.js) file.
You will now need to add the definition of your new attribute into the [ConfigSchema](https://github.com/Lissy93/dashy/blob/master/src/utils/ConfigSchema.js). This will make it available in the UI config editor, and also ensure that the config validation check doesn't fail.
For example:
```json
"fontAwesomeKey": {
@ -115,7 +140,9 @@ In order for the user to be able to add your new attribute using the Config Edit
"example": "0821c65656"
}
```
or
```json
"iconSize": {
"enum": [ "small", "medium", "large" ],
@ -124,24 +151,22 @@ or
}
```
Next, if you're property should have a default value, then add it to [`defaults.js`](https://github.com/Lissy93/dashy/blob/master/src/utils/defaults.js). This ensures that nothing will break if the user does not use your property, and having all defaults together keeps things organised and easy to manage.
If your property needs additional logic for fetching, setting or processing, then you can add a helper function within [`ConfigHelpers.js`](https://github.com/Lissy93/dashy/blob/master/src/utils/ConfigHelpers.js).
Finally, add your new property to the [`configuring.md`](./configuring.md) API docs. Put it under the relevant section, and be sure to include field name, data type, a description and mention that it is optional. If your new feature needs more explaining, then you can also document it under the relevant section elsewhere in the documentation.
Finally, add your new property to the [`configuring.md`](./configuring.md) API docs. Put it under the relevant section, and be sure to include field name, data type, a description and mention that it is optional. If your new feature needs more explanation, then you can also document it under the relevant section elsewhere in the documentation.
Checklist:
- [ ] Ensure the new attribute is actually necessary, and nothing similar already exists
- [ ] Ensure the new attribute is actually necessary, and nothing similar already exists
- [ ] Update the [Schema](https://github.com/Lissy93/dashy/blob/master/src/utils/ConfigSchema.js) with the parameters for your new option
- [ ] Set a default value (if required) within [`defaults.js`](https://github.com/Lissy93/dashy/blob/master/src/utils/defaults.js)
- [ ] Document the new value in [`configuring.md`](./configuring.md)
- [ ] Test that the reading of the new attribute is properly handled, and will not cause any errors when it is missing or populated with an unexpected value
- [ ] If required, set a default or fallback value (usually in [`defaults.js`](https://github.com/Lissy93/dashy/blob/master/src/utils/defaults.js))
- [ ] Document the new value in [`configuring.md`](./configuring.md), and if required under the relevant section in the docs
- [ ] Ensure your changes are backwards compatible, and that nothing breaks if the attribute isn't specified
---
## Updating Dependencies
Running `yarn upgrade` will updated all dependencies based on the ranges specified in the `package.json`. The `yarn.lock` file will be updated, as will the contents of `./node_modules`, for more info, see the [yarn upgrade documentation](https://classic.yarnpkg.com/en/docs/cli/upgrade/). It is important to thoroughly test after any big dependency updates.
Running `yarn upgrade` will updated all dependencies based on the ranges specified in the `package.json`. The `yarn.lock` file will be updated, as will the contents of `./node_modules`, for more info, see the [yarn upgrade documentation](https://classic.yarnpkg.com/en/docs/cli/upgrade/). [`npm-check-updates`](https://github.com/raineorshine/npm-check-updates) is a useful tool to help with this.
It is important to thoroughly test after any big dependency updates.
---
@ -149,14 +174,14 @@ Running `yarn upgrade` will updated all dependencies based on the ranges specifi
When Dashy is deployed to Netlify, it is effectively running as a static app, and therefore the server-side code for the Node.js endpoints is not available. However Netlify now supports serverless cloud lambda functions, which can be used to replace most functionality.
#### 1. Run Netlify Dev Server
### 1. Run Netlify Dev Server
First off, install the Netlify CLI: `npm install netlify-cli -g`
First off all, install the Netlify CLI: `npm install netlify-cli -g`
Then, from within the root of Dashy's directory, start the server, by running: `netlify dev`
#### 2. Create a lambda function
### 2. Create a lambda function
This should be saved it in the [`./services/serverless-functions`](https://github.com/Lissy93/dashy/tree/master/services/serverless-functions) directory
This should be saved in the [`./services/serverless-functions`](https://github.com/Lissy93/dashy/tree/master/services/serverless-functions) directory
```javascript
exports.handler = async () => ({
@ -165,7 +190,7 @@ exports.handler = async () => ({
});
```
#### 3. Redirect the Node endpoint to the function
### 3. Redirect the Node endpoint to the function
In the [`netlify.toml`](https://github.com/Lissy93/dashy/blob/FEATURE/serverless-functions/netlify.toml) file, add a 301 redirect, with the path to the original Node.js endpoint, and the name of your cloud function
@ -180,20 +205,23 @@ In the [`netlify.toml`](https://github.com/Lissy93/dashy/blob/FEATURE/serverless
---
## Hiding Page Furniture on Certain Routes
For some pages (such as the login page, the minimal start page, etc) the basic page furniture, (like header, footer, nav, etc) is not needed. This section explains how you can hide furniture on a new view (step 1), or add a component that should be hidden on certain views (step 2).
##### 1. Add the route name to the should hide array
### 1. Add the route name to the should hide array
In [`./src/utils/defaults.js`](https://github.com/Lissy93/dashy/blob/master/src/utils/defaults.js), there's an array called `hideFurnitureOn`. Append the name of the route (the same as it appears in [`router.js`](https://github.com/Lissy93/dashy/blob/master/src/router.js)) here.
##### 2. Add the conditional to the structural component to hide
### 2. Add the conditional to the structural component to hide
First, import the helper function:
```javascript
import { shouldBeVisible } from '@/utils/SectionHelpers';
```
Then you can create a computed value, that calls this function, passing in the route name:
```javascript
export default {
...
@ -205,8 +233,9 @@ export default {
},
};
```
Finally, in the markup of your component, just add a `v-if` statement, referencing your computed value
```vue
<header v-if="isVisible">
...
@ -216,6 +245,7 @@ Finally, in the markup of your component, just add a `v-if` statement, referenci
---
## Adding / Using Environmental Variables
All environmental variables are optional. Currently there are not many environmental variables used, as most of the user preferences are stored under `appConfig` in the `conf.yml` file.
You can set variables either in your environment, or using the [`.env`](https://github.com/Lissy93/dashy/blob/master/.env) file.
@ -236,12 +266,10 @@ To build a widget, you'll also need some basic knowledge of Vue.js. The [officia
If you just want to jump straight in, then [here](https://github.com/Lissy93/dashy/commit/3da76ce2999f57f76a97454c0276301e39957b8e) is a complete implementation of a new example widget, or take a look at the [`XkcdComic.vue`](https://github.com/Lissy93/dashy/blob/master/src/components/Widgets/XkcdComic.vue) widget, which is pretty simple.
### Step 1 - Create Widget
Firstly, create a new `.vue` file under [`./src/components/Widgets`](https://github.com/Lissy93/dashy/tree/master/src/components/Widgets).
```vue
<template>
<div class="example-wrapper">
@ -257,12 +285,22 @@ import { widgetApiEndpoints } from '@/utils/defaults';
export default {
mixins: [WidgetMixin],
data() {
return {};
return {
results: null,
};
},
computed: {
endpoint() {
return `${widgetApiEndpoints.myApi}/something`;
},
},
computed: {},
methods: {
fetchData() {
// TODO: Make Data Request
this.makeRequest(this.endpoint).then(this.processData);
},
processData(data) {
// Do processing any here, and set component data
this.results = data;
},
},
};
@ -273,18 +311,19 @@ export default {
```
All widgets extend from the [Widget](https://github.com/Lissy93/dashy/blob/master/src/mixins/WidgetMixin.js) mixin. This provides some basic functionality that is shared by all widgets. The mixin includes the following `options`, `startLoading()`, `finishLoading()`, `error()` and `update()`.
- **Getting user options: `options`**
- Any user-specific config can be accessed with `this.options.something` (where something is the data key your accessing)
- Any user-specific config can be accessed with `this.options.something` (where something is the data key you're accessing)
- **Loading state: `startLoading()` and `finishLoading()`**
- You can show the loader with `this.startLoading()`, then when your data request completes, hide it again with `this.finishLoading()`
- You can show the loader with `this.startLoading()`, then when your data request completes, hide it again with `this.finishLoading()`
- **Error handling: `error()`**
- If something goes wrong (such as API error, or missing user parameters), then call `this.error()` to show message to user
- If something goes wrong (such as API error, or missing user parameters), then call `this.error()` to show message to user
- **Updating data: `update()`**
- When the user clicks the update button, or if continuous updates are enabled, then the `update()` method within your widget will be called
- When the user clicks the update button, or if continuous updates are enabled, then the `update()` method within your widget will be called
### Step 2 - Adding Functionality
**Accessing User Options**
#### **Accessing User Options**
If your widget is going to accept any parameters from the user, then we can access these with `this.options.[parmName]`. It's best to put these as computed properties, which will enable us to check it exists, is valid, and if needed format it. For example, if we have an optional property called `count` (to determine number of results), we can do the following, and then reference it within our component with `this.count`
@ -300,9 +339,9 @@ computed: {
},
```
**Adding an API Endpoint**
#### **Adding an API Endpoint**
If your widget makes a data request, then add the URL for the API under point to the `widgetApiEndpoints` array in [`defaults.js`](https://github.com/Lissy93/dashy/blob/master/src/utils/defaults.js#L207)
If your widget makes a data request, then add the URL for the API endpoint to the `widgetApiEndpoints` array in [`defaults.js`](https://github.com/Lissy93/dashy/blob/master/src/utils/defaults.js#L207)
```javascript
widgetApiEndpoints: {
@ -325,7 +364,7 @@ endpoint() {
},
```
**Making an API Request**
#### **Making an API Request**
Axios is used for making data requests, so import it into your component: `import axios from 'axios';`
@ -333,25 +372,17 @@ Under the `methods` block, we'll create a function called `fetchData`, here we c
```javascript
fetchData() {
axios.get(this.endpoint)
.then((response) => {
this.processData(response.data);
})
.catch((dataFetchError) => {
this.error('Unable to fetch data', dataFetchError);
})
.finally(() => {
this.finishLoading();
});
this.makeRequest(this.endpoint, this.headers).then(this.processData);
},
```
There are three things happening here:
- If the response completes successfully, we'll pass the results to another function that will handle them
- If there's an error, then we call `this.error()`, which will show a message to the user
- Whatever the result, once the request has completed, we call `this.finishLoading()`, which will hide the loader
**Processing Response**
#### **Processing Response**
In the above example, we call the `processData()` method with the result from the API, so we need to create that under the `methods` section. How you handle this data will vary depending on what's returned by the API, and what you want to render to the user. But however you do it, you will likely need to create a data variable to store the response, so that it can be easily displayed in the HTML.
@ -369,7 +400,7 @@ And then, inside your `processData()` method, you can set the value of this, wit
`this.myResults = 'whatever'`
```
**Rendering Response**
#### **Rendering Response**
Now that the results are in the correct format, and stored as data variables, we can use them within the `<template>` to render results to the user. Again, how you do this will depend on the structure of your data, and what you want to display, but at it's simplest, it might look something like this:
@ -377,12 +408,11 @@ Now that the results are in the correct format, and stored as data variables, we
<p class="results">{{ myResults }}</p>
```
**Styling**
#### **Styling**
Styles can be written your your widget within the `<style>` block.
There are several color variables used by widgets, which extend from the base pallete. Using these enables users to override colors to theme their dashboard, if they wish. The variables are: `--widget-text-color`, `--widget-background-color` and `--widget-accent-color`
Styles can be written for your widget within the `<style>` block.
There are several color variables used by widgets, which extend from the base palette. Using these enables users to override colors to theme their dashboard, if they wish. The variables are: `--widget-text-color`, `--widget-background-color` and `--widget-accent-color`
```vue
<style scoped lang="scss">
@ -394,38 +424,50 @@ p.results {
For examples of finished widget components, see the [Widgets](https://github.com/Lissy93/dashy/tree/master/src/components/Widgets) directory. Specifically, the [`XkcdComic.vue`](https://github.com/Lissy93/dashy/blob/master/src/components/Widgets/XkcdComic.vue) widget is quite minimal, so would make a good example, as will [this example implementation](https://github.com/Lissy93/dashy/commit/3da76ce2999f57f76a97454c0276301e39957b8e).
### Step 3 - Register
Next, import and register your new widget, in [`WidgetBase.vue`](https://github.com/Lissy93/dashy/blob/master/src/components/Widgets/WidgetBase.vue). In this file, you'll need to add the following:
Next, register your new widget in [`WidgetBase.vue`](https://github.com/Lissy93/dashy/blob/master/src/components/Widgets/WidgetBase.vue). In this file, you'll need to add the following:
Import your widget file
```javascript
import ExampleWidget from '@/components/Widgets/ExampleWidget.vue';
```
Then register the component
```javascript
components: {
const COMPAT = {
...
ExampleWidget,
},
'example-widget': 'ExampleWidget',
};
```
Finally, add the markup to render it. The only attribute you need to change here is, setting `widgetType === 'example'` to your widget's name.
```vue
<ExampleWidget
v-else-if="widgetType === 'example'"
:options="widgetOptions"
@loading="setLoaderState"
@error="handleError"
:ref="widgetRef"
/>
```
Here, the `example-widget` property name will be used to identify the widget when parsing the `type` property in a configuration file. The `ExampleWidget` string is used to dynamically import the widget, and therefore must match the widget's filename as it exists in the `components/widgets` folder.
### Step 4 - Docs
Finally, add some documentation for your widget in the [Widget Docs](https://github.com/Lissy93/dashy/blob/master/docs/widgets.md), so that others know hoe to use it. Include the following information: Title, short description, screenshot, config options and some example YAML.
Finally, add some documentation for your widget in the [Widget Docs](https://github.com/Lissy93/dashy/blob/master/docs/widgets.md), so that others know how to use it. Include the following information: Title, short description, screenshot, config options and some example YAML.
**Summary**: For a complete example of everything discussed here, see: [`3da76ce`](https://github.com/Lissy93/dashy/commit/3da76ce2999f57f76a97454c0276301e39957b8e)
---
## Respecting Config Permissions
Any screen that displays part or all of the users config, must not be shown when the user has disabled viewing config.
This can be done by checking the `allowViewConfig` attribute of the `permissions` getter, in the store.
First create a new `computed` property, like:
```javascript
allowViewConfig() {
return this.$store.getters.permissions.allowViewConfig;
},
```
Then wrap the part of your UI which displays config with: `v-if="allowViewConfig"`
If required, add a message showing that the component isn't available, using the `AccessError` component. E.g.
```javascript
import AccessError from '@/components/Configuration/AccessError';
```
```vue
<AccessError v-else />
```
The `$store.getters.permissions` object also returns options for when and where config can be saved, using: `allowWriteToDisk`, and `allowSaveLocally` - both are booleans.

View File

@ -11,6 +11,7 @@ Both sections and items can have an icon, which is specified using the `icon` at
- [Material Icons](#material-design-icons)
- [Icons by URL](#icons-by-url)
- [Local Icons](#local-icons)
- [Using a Default Icon](#default-icon)
- [No Icon](#no-icon)
<p align="center">
@ -20,6 +21,7 @@ Both sections and items can have an icon, which is specified using the `icon` at
---
## Favicons
Dashy can auto-fetch an icon for a given service, using it's favicon. Just set `icon: favicon` to use this feature.
<p align="center">
@ -31,6 +33,7 @@ Since different websites host their favicons at different paths, for the best re
The default favicon API is [allesedv.com](https://favicon.allesedv.com/), but you can change this under `appConfig.faviconApi`. If you'd prefer not to use an API, just set this value to `local`. You can also use different APIs for individual items, by setting `icon: favicon-[api]`, e.g. `favicon-clearbit`.
The following favicon APIs are supported:
- `allesedv` - [allesedv.com](https://favicon.allesedv.com/) is a highly efficient IPv6-enabled service
- `iconhorse` - [Icon.Horse](https://icon.horse/) returns quality icons for any site, with caching for speed and fallbacks for sites without an icon
- `clearbit` - [Clearbit](https://clearbit.com/logo) returns high-quality square logos from mainstream websites
@ -47,6 +50,7 @@ If for a given service none of the APIs work in your situation, and nor does loc
---
## Font Awesome
You can use any [Font Awesome Icon](https://fontawesome.com/icons) simply by specifying it's identifier. This is in the format of `[category] [name]` and can be found on the page for that icon on the Font Awesome site. For example: `fas fa-rocket`, `fab fa-monero` or `fas fa-unicorn`.
Font-Awesome has a wide variety of free icons, but you can also use their pro icons if you have a membership. To do so, you need to specify your license key under: `appConfig.fontAwesomeKey`. This is usually a 10-digit string, for example `13014ae648`.
@ -58,13 +62,15 @@ Font-Awesome has a wide variety of free icons, but you can also use their pro ic
---
## Simple Icons
[SimpleIcons.org](https://simpleicons.org/) is a collection of 2000+ high quality, free and open source brand and logo SVG icons. Usage of which is very similar to font-awesome icons. First find the glyph you want to use on the [website](https://simpleicons.org/), then just set your icon the the simple icon slug, prefixed with `si-`.
[SimpleIcons.org](https://simpleicons.org/) is a collection of 2000+ high quality, free and open source brand and logo SVG icons. Usage of which is very similar to font-awesome icons. First find the glyph you want to use on the [website](https://simpleicons.org/), then just set your icon the the simple icon slug, prefixed with `si-`.
<p align="center">
<img width="580" src="https://i.ibb.co/MVhkXfC/simple-icons-example.png" />
</p>
For example:
```yaml
sections:
- name: Simple Icons Example
@ -82,7 +88,8 @@ sections:
---
## Generative Icons
To uses a unique and programmatically generated icon for a given service just set `icon: generative`. This is particularly useful when you have a lot of similar services with a different IP or port, and no specific icon. These icons are generated with [DiceBear](https://avatars.dicebear.com/) (or [Evatar](https://evatar.io/) for fallback), and use a hash of the services domain/ ip for entropy, so each domain will have a unique icon.
To uses a unique and programmatically generated icon for a given service just set `icon: generative`. This is particularly useful when you have a lot of similar services with a different IP or port, and no specific icon. These icons are generated with [DiceBear](https://api.dicebear.com/) (or [Evatar](https://evatar.io/) for fallback), and use a hash of the services domain/ ip for entropy, so each domain will have a unique icon.
<p align="center">
<img width="500" src="https://i.ibb.co/b2pC2CL/generative-icons-2.png" />
@ -91,6 +98,7 @@ To uses a unique and programmatically generated icon for a given service just se
---
## Emoji Icons
You can use almost any emoji as an icon for items or sections. You can specify the emoji either by pasting it directly, using it's unicode ( e.g. `'U+1F680'`) or shortcode (e.g. `':rocket:'`). You can find these codes for any emoji using [Emojipedia](https://emojipedia.org/) (near the bottom of emoji each page), or for a quick reference to emoji shortcodes, check out [emojis.ninja](https://emojis.ninja/) by @nomanoff.
<p align="center">
@ -103,9 +111,10 @@ For example, these will all render the same rocket (🚀) emoji: `icon: ':rocket
## Home-Lab Icons
The [dashboard-icons](https://github.com/WalkxCode/dashboard-icons) repo by [@WalkxCode](https://github.com/WalkxCode) provides a comprehensive collection of 360+ high-quality PNG icons for commonly self-hosted services. Dashy natively supports these icons, and you can use them just by specifying the icon name (without extension) preceded by `hl-`. See [here](https://github.com/WalkxCode/dashboard-icons/tree/master/png) for a full list of all available icons. Note that these are fetched and cached strait from GitHub, so if you require offline access, the [Local Icons](#local-icons) method may be a better option for you.
The [dashboard-icons](https://github.com/walkxcode/Dashboard-Icons) repo by [@WalkxCode](https://github.com/WalkxCode) provides a comprehensive collection of 360+ high-quality PNG icons for commonly self-hosted services. Dashy natively supports these icons, and you can use them just by specifying the icon name (without extension) preceded by `hl-`. See [here](https://github.com/walkxcode/Dashboard-Icons/tree/main/png) for a full list of all available icons. Note that these are fetched and cached strait from GitHub, so if you require offline access, the [Local Icons](#local-icons) method may be a better option for you.
For example:
```yaml
sections:
- name: Home Lab Icons Example
@ -120,7 +129,6 @@ sections:
icon: hl-whooglesearch
```
<p align="center">
<img width="580" src="https://i.ibb.co/PQzYHmD/homelab-icons-2.png" />
</p>
@ -128,19 +136,21 @@ sections:
---
## Material Design Icons
Dashy also supports 5000+ [material-design-icons](https://github.com/Templarian/MaterialDesign). To use these, first find the name/ slug for your icon [here](https://dev.materialdesignicons.com/icons), and then prefix is with `mdi-`.
For example:
```yaml
sections:
- name: Material Design Icons Example
items:
- title: Alien Icon
icon: mdi-alien
icon: mdi-alien
- title: Fire Icon
icon: mdi-fire
icon: mdi-fire
- title: Dino Icon
icon: mdi-google-downasaur
icon: mdi-google-downasaur
```
<p align="center">
@ -150,25 +160,34 @@ sections:
---
## Icons by URL
You can also set an icon by passing in a valid URL pointing to the icons location. For example `icon: https://i.ibb.co/710B3Yc/space-invader-x256.png`, this can be in .png, .jpg or .svg format, and hosted anywhere (local or remote) - so long as it's accessible from where you are hosting Dashy. The icon will be automatically scaled to fit, however loading in a lot of large icons may have a negative impact on performance, especially if you visit Dashy from new devices often.
---
## Local Icons
You may also want to store your icons locally, bundled within Dashy so that there is no reliance on outside services. This can be done by putting the icons within Dashy's `./public/item-icons/` directory. If you are using Docker, then the easiest option is to map a volume from your host system, for example: `-v /local/image/directory:/app/public/item-icons/`. To reference an icon stored locally, just specify it's name and extension. For example, if my icon was stored in `/app/public/item-icons/maltrail.png`, then I would just set `icon: maltrail.png`.
You may also want to store your icons locally, bundled within Dashy so that there is no reliance on outside services. This can be done by putting the icons within Dashy's `./user-data/item-icons/` directory. If you are using Docker, then the easiest option is to map a volume from your host system, for example: `-v /local/image/directory:/app/user-data/item-icons/`. To reference an icon stored locally, just specify it's name and extension. For example, if my icon was stored in `/app/user-data/item-icons/maltrail.png`, then I would just set `icon: maltrail.png`.
You can also use sub-folders within the `item-icons` directory to keep things organized. You would then specify an icon with it's folder name slash image name. For example: `networking/monit.png`
---
## Default Icon
If you'd like to set a default icon, to be applied to any items which don't have an icon already set, then this can be done under `appConfig.defaultIcon`.
---
## No Icon
If you don't wish for a given item or section to have an icon, just leave out the `icon` attribute.
---
## Icon Collections and Resources
The following websites provide good-quality, free icon sets. To use any of these icons, either copy the link to the raw icon (it should end in `.svg` or `.png`) and paste it as your `icon`, or download and save the icons in `/public/item-icons` / mapped Docker volume. Full credit to the authors, please see the licenses for each service for usage and copyright information.
The following websites provide good-quality, free icon sets. To use any of these icons, either copy the link to the raw icon (it should end in `.svg` or `.png`) and paste it as your `icon`, or download and save the icons in `/user-data/item-icons` / mapped Docker volume. Full credit to the authors, please see the licenses for each service for usage and copyright information.
- [Icons for Self-Hosted Apps](https://thehomelab.wiki/books/helpful-tools-resources/page/icons-for-self-hosted-dashboards) - 350+ high-quality icons for commonly self-hosted services
- [SVG Box](https://svgbox.net/iconsets/) - Cryptocurrency, social media apps and flag icons

View File

@ -1,8 +1,9 @@
# Management
# App Management
_The following article explains aspects of app management, and is useful to know for when self-hosting. It covers everything from keeping the Dashy (or any other app) up-to-date, secure, backed up, to other topics like auto-starting, monitoring, log management, web server configuration and using custom environments. It's like a top-20 list of need-to-know knowledge for self-hosting._
_The following article is a primer on managing self-hosted apps. It covers everything from keeping the Dashy (or any other app) up-to-date, secure, backed up, to other topics like auto-starting, monitoring, log management, web server configuration and using custom domains._
## Contents
- [Providing Assets](#providing-assets)
- [Running Commands](#running-commands)
- [Healthchecks](#healthchecks)
@ -15,9 +16,10 @@ _The following article explains aspects of app management, and is useful to know
- [Authentication](#authentication)
- [Managing with Compose](#managing-containers-with-docker-compose)
- [Environmental Variables](#passing-in-environmental-variables)
- [Securing Containers](#container-security)
- [Setting Headers](#setting-headers)
- [Remote Access](#remote-access)
- [Custom Domain](#custom-domain)
- [Securing Containers](#container-security)
- [Web Server Configuration](#web-server-configuration)
- [Running a Modified App](#running-a-modified-version-of-the-app)
- [Building your Own Container](#building-your-own-container)
@ -25,12 +27,14 @@ _The following article explains aspects of app management, and is useful to know
---
## Providing Assets
Although not essential, you will most likely want to provide several assets to your running app.
This is easy to do using [Docker Volumes](https://docs.docker.com/storage/volumes/), which lets you share a file or directory between your host system, and the container. Volumes are specified in the Docker run command, or Docker compose file, using the `--volume` or `-v` flags. The value of which consists of the path to the file / directory on your host system, followed by the destination path within the container. Fields are separated by a colon (`:`), and must be in the correct order. For example: `-v ~/alicia/my-local-conf.yml:/app/public/conf.yml`
This is easy to do using [Docker Volumes](https://docs.docker.com/storage/volumes/), which lets you share a file or directory between your host system, and the container. Volumes are specified in the Docker run command, or Docker compose file, using the `--volume` or `-v` flags. The value of which consists of the path to the file / directory on your host system, followed by the destination path within the container. Fields are separated by a colon (`:`), and must be in the correct order. For example: `-v ~/alicia/my-local-conf.yml:/app/user-data/conf.yml`
In Dashy, commonly configured resources include:
- `./public/conf.yml` - Your main application config file
- `./user-data/conf.yml` - Your main application config file
- `./public/item-icons` - A directory containing your own icons. This allows for offline access, and better performance than fetching from a CDN
- Also within `./public` you'll find standard website assets, including `favicon.ico`, `manifest.json`, `robots.txt`, etc. There's no need to pass these in, but you can do so if you wish
- `/src/styles/user-defined-themes.scss` - A stylesheet for applying custom CSS to your app. You can also write your own themes here.
@ -38,22 +42,24 @@ In Dashy, commonly configured resources include:
**[⬆️ Back to Top](#management)**
---
## Running Commands
If you're running an app in Docker, then commands will need to be passed to the container to be executed. This can be done by preceding each command with `docker exec -it [container-id]`, where container ID can be found by running `docker ps`. For example `docker exec -it 26c156c467b4 yarn build`. You can also enter the container, with `docker exec -it [container-id] /bin/ash`, and navigate around it with normal Linux commands.
If you're running an app in Docker, then commands will need to be passed to the container to be executed. This can be done by preceding each command with `docker exec -it [container-id]`, where container ID can be found by running `docker ps`. For example `docker exec -it 26c156c467b4 yarn build`. You can also enter the container, with `docker exec -it [container-id] /bin/ash`, and navigate around it with normal Linux commands.
Dashy has several commands that can be used for various tasks, you can find a list of these either in the [Developing Docs](/docs/developing.md#project-commands), or by looking at the [`package.json`](https://github.com/Lissy93/dashy/blob/master/package.json#L5). These can be used by running `yarn [command-name]`.
Dashy has several commands that can be used for various tasks, you can find a list of these either in the [Developing Docs](/docs/developing.md#project-commands), or by looking at the [`package.json`](https://github.com/Lissy93/dashy/blob/master/package.json#L5). These can be used by running `yarn [command-name]`.
**[⬆️ Back to Top](#management)**
---
## Healthchecks
Healthchecks are configured to periodically check that Dashy is up and running correctly on the specified port. By default, the health script is called every 5 minutes, but this can be modified with the `--health-interval` option. You can check the current container health with: `docker inspect --format "{{json .State.Health }}" [container-id]`, and a summary of health status will show up under `docker ps`. You can also manually request the current application status by running `docker exec -it [container-id] yarn health-check`. You can disable healthchecks altogether by adding the `--no-healthcheck` flag to your Docker run command.
To restart unhealthy containers automatically, check out [Autoheal](https://hub.docker.com/r/willfarrell/autoheal/). This image watches for unhealthy containers, and automatically triggers a restart. (This is a stand in for Docker's `--exit-on-unhealthy` that was proposed, but [not merged](https://github.com/moby/moby/pull/22719)). There's also [Deunhealth](https://github.com/qdm12/deunhealth), which is super light-weight, and doesn't require network access.
```
```bash
docker run -d \
--name autoheal \
--restart=always \
@ -65,18 +71,23 @@ docker run -d \
**[⬆️ Back to Top](#management)**
---
## Logs and Performance
#### Container Logs
### Container Logs
You can view logs for a given Docker container with `docker logs [container-id]`, add the `--follow` flag to stream the logs. For more info, see the [Logging Documentation](https://docs.docker.com/config/containers/logging/). There's also [Dozzle](https://dozzle.dev/), a useful tool, that provides a web interface where you can stream and query logs from all your running containers from a single web app.
#### Container Performance
### Container Performance
You can check the resource usage for your running Docker containers with `docker stats` or `docker stats [container-id]`. For more info, see the [Stats Documentation](https://docs.docker.com/engine/reference/commandline/stats/). There's also [cAdvisor](https://github.com/google/cadvisor), a useful web app for viewing and analyzing resource usage and performance of all your running containers.
#### Management Apps
### Management Apps
You can also view logs, resource usage and other info as well as manage your entire Docker workflow in third-party Docker management apps. For example [Portainer](https://github.com/portainer/portainer) an all-in-one open source management web UI for Docker and Kubernetes, or [LazyDocker](https://github.com/jesseduffield/lazydocker) a terminal UI for Docker container management and monitoring.
#### Advanced Logging and Monitoring
### Advanced Logging and Monitoring
Docker supports using [Prometheus](https://prometheus.io/) to collect logs, which can then be visualized using a platform like [Grafana](https://grafana.com/). For more info, see [this guide](https://docs.docker.com/config/daemon/prometheus/). If you need to route your logs to a remote syslog, then consider using [logspout](https://github.com/gliderlabs/logspout). For enterprise-grade instances, there are managed services, that make monitoring container logs and metrics very easy, such as [Sematext](https://sematext.com/blog/docker-container-monitoring-with-sematext/) with [Logagent](https://github.com/sematext/logagent-js).
**[⬆️ Back to Top](#management)**
@ -94,11 +105,13 @@ To restart the container after something within it has crashed, consider using [
**[⬆️ Back to Top](#management)**
---
## Updating
Dashy is under active development, so to take advantage of the latest features, you may need to update your instance every now and again.
### Updating Docker Container
1. Pull latest image: `docker pull lissy93/dashy:latest`
2. Kill off existing container
- Find container ID: `docker ps`
@ -113,7 +126,7 @@ Watchtower will watch for new versions of a given image on Docker Hub, pull down
To get started, spin up the watchtower container:
```
```bash
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
@ -123,6 +136,7 @@ docker run -d \
For more information, see the [Watchtower Docs](https://containrrr.dev/watchtower/)
### Updating Dashy from Source
Stop your current instance of Dashy, then navigate into the source directory. Pull down the latest code, with `git pull origin master`, then update dependencies with `yarn`, rebuild with `yarn build`, and start the server again with `yarn start`.
**[⬆️ Back to Top](#management)**
@ -134,6 +148,7 @@ Stop your current instance of Dashy, then navigate into the source directory. Pu
### Backing Up Containers
You can make a backup of any running container really easily, using [`docker commit`](https://docs.docker.com/engine/reference/commandline/commit/) and save it with [`docker export`](https://docs.docker.com/engine/reference/commandline/export/), to do so:
- First find the container ID, you can do this with `docker container ls`
- Now to create the snapshot, just run `docker commit -p [container-id] my-backup`
- Finally, to save the backup locally, run `docker save -o ~/dashy-backup.tar my-backup`
@ -142,7 +157,8 @@ You can make a backup of any running container really easily, using [`docker com
Note that this will not include any data in docker volumes, and the process here is a bit different. Since these files exist on your host system, if you have an existing backup solution implemented, you can incorporate and volume files within that system.
### Backing Up Volumes
[offen/docker-volume-backup](https://github.com/offen/docker-volume-backup) is a useful tool for periodic Docker volume backups, to any S3-compatible storage provider. It's run as a light-weight Docker container, and is easy to setup, and also supports GPG-encryption, email notification, and routing away older backups.
[offen/docker-volume-backup](https://github.com/offen/docker-volume-backup) is a useful tool for periodic Docker volume backups, to any S3-compatible storage provider. It's run as a light-weight Docker container, and is easy to setup, and also supports GPG-encryption, email notification, and routing away older backups.
To get started, create a docker-compose similar to the example below, and then start the container. For more info, check out their [documentation](https://github.com/offen/docker-volume-backup), which is very clear.
@ -168,15 +184,22 @@ volumes:
It's worth noting that this process can also be done manually, using the following commands:
Backup:
```
```bash
docker run --rm -v some_volume:/volume -v /tmp:/backup alpine tar -cjf /backup/some_archive.tar.bz2 -C /volume ./
```
Restore:
```
```bash
docker run --rm -v some_volume:/volume -v /tmp:/backup alpine sh -c "rm -rf /volume/* /volume/..?* /volume/.[!.]* ; tar -C /volume/ -xjf /backup/some_archive.tar.bz2"
```
### Dashy-Specific Backup
Since Dashy is open source, and freely available, providing you're configuration data is passed in as volumes, there shouldn't be any need to backup the main container. Your main config file, and any assets you're using should be kept backed up, preferably in at least two places, and you should ensure that you can easily restore from backup, if needed.
All configuration and dashboard settings are stored in your `user-data/conf.yml` file. If you provide additional assets (like icons, fonts, themes, etc), these will also live in the `user-data` directory. So to backup all Dashy data, this is the only directory you need to backup.
Since Dashy is open source, there shouldn't be any need to backup the main container.
Dashy also has a built-in cloud backup feature, which is free for personal users, and will let you make and restore fully encrypted backups of your config directly through the UI. To learn more, see the [Cloud Backup Docs](/docs/backup-restore.md)
@ -195,14 +218,16 @@ I recommend combining this with [healthchecks](https://github.com/healthchecks/h
## SSL Certificates
Enabling HTTPS with an SSL certificate is recommended, especially if you hare hosting Dashy anywhere other than your home. This will ensure that all traffic is encrypted in transit.
Enabling HTTPS with an SSL certificate is recommended, especially if you are hosting Dashy anywhere other than your home. This will ensure that all traffic is encrypted in transit.
### Auto-SSL
If you are using [NGINX Proxy Manager](https://nginxproxymanager.com/), then SSL is supported out of the box. Once you've added your proxy host and web address, then set the scheme to HTTPS, then under the SSL Tab select "Request a new SSL certificate" and follow the on-screen instructions.
If you're hosting Dashy behind Cloudflare, then they offer [free and easy SSL](https://www.cloudflare.com/en-gb/learning/ssl/what-is-an-ssl-certificate/)- all you need to do is enable it under the SSL/TLS tab. Or if you are using shared hosting, you may find [this tutorial](https://www.sitepoint.com/a-guide-to-setting-up-lets-encrypt-ssl-on-shared-hosting/) helpful.
If you're hosting Dashy behind Cloudflare, then they offer [free and easy SSL](https://www.cloudflare.com/en-gb/learning/ssl/what-is-an-ssl-certificate/)- all you need to do is enable it under the SSL/TLS tab. Or if you are using shared hosting, you may find [this tutorial](https://www.sitepoint.com/a-guide-to-setting-up-lets-encrypt-ssl-on-shared-hosting/) helpful.
### Getting a Self-Signed SSL Certificate
[Let's Encrypt](https://letsencrypt.org/docs/) is a global Certificate Authority, providing free SSL/TLS Domain Validation certificates in order to enable secure HTTPS access to your website. They have good browser/ OS [compatibility](https://letsencrypt.org/docs/certificate-compatibility/) with their ISRG X1 and DST CA X3 root certificates, support [Wildcard issuance](https://community.letsencrypt.org/t/acme-v2-production-environment-wildcards/55578) done via ACMEv2 using the DNS-01 and have [Multi-Perspective Validation](https://letsencrypt.org/2020/02/19/multi-perspective-validation.html). Let's Encrypt provide [CertBot](https://certbot.eff.org/) an easy app for generating and setting up an SSL certificate.
This process can be automated, using something like the [Docker-NGINX-Auto-SSL Container](https://github.com/Valian/docker-nginx-auto-ssl) to generate and renew certificates when needed.
@ -210,11 +235,12 @@ This process can be automated, using something like the [Docker-NGINX-Auto-SSL C
If you're not so comfortable on the command line, then you can use a tool like [SSL For Free](https://www.sslforfree.com/) or [ZeroSSL](https://zerossl.com/) to generate your cert. They also provide step-by-step setup instructions for most platforms.
### Passing a Self-Signed Certificate to Dashy
Once you've generated your SSL cert, you'll need to pass it to Dashy. This can be done by specifying the paths to your public and private keys using the `SSL_PRIV_KEY_PATH` and `SSL_PUB_KEY_PATH` environmental variables. Or if you're using Docker, then just pass public + private SSL keys in under `/etc/ssl/certs/dashy-pub.pem` and `/etc/ssl/certs/dashy-priv.key` respectively, e.g:
```
```bash
docker run -d \
-p 8080:80 \
-p 8080:8080 \
-v ~/my-private-key.key:/etc/ssl/certs/dashy-priv.key:ro \
-v ~/my-public-key.pem:/etc/ssl/certs/dashy-pub.pem:ro \
lissy93/dashy:latest
@ -252,9 +278,9 @@ services:
container_name: Dashy
image: lissy93/dashy
volumes:
- /root/my-config.yml:/app/public/conf.yml
- /root/my-config.yml:/app/user-data/conf.yml
ports:
- 4000:80
- 4000:8080
environment:
- BASE_URL=/my-dashboard
restart: unless-stopped
@ -288,146 +314,86 @@ If you've got many environmental variables, you might find it useful to put them
---
## Container Security
## Setting Headers
- [Keep Docker Up-To-Date](#keep-docker-up-to-date)
- [Set Resource Quotas](#set-resource-quotas)
- [Don't Run as Root](#dont-run-as-root)
- [Specify a User](#specify-a-user)
- [Limit Capabilities](#limit-capabilities)
- [Prevent new Privilages being Added](#prevent-new-privilages-being-added)
- [Disable Inter-Container Communication](#disable-inter-container-communication)
- [Don't Expose the Docker Daemon Socket](#dont-expose-the-docker-daemon-socket)
- [Use Read-Only Volumes](#use-read-only-volumes)
- [Set the Logging Level](#set-the-logging-level)
- [Verify Image before Pulling](#verify-image-before-pulling)
- [Specify the Tag](#specify-the-tag)
- [Container Security Scanning](#container-security-scanning)
- [Registry Security](#registry-security)
- [Security Modules](#security-modules)
Any external requests made to a different origin (app/ service under a different domain) will be blocked if the correct headers are not specified. This is known as [Cross-Origin Resource Sharing](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) (CORS) and is a security feature built into modern browsers.
### Keep Docker Up-To-Date
To prevent known container escape vulnerabilities, which typically end in escalating to root/administrator privileges, patching Docker Engine and Docker Machine is crucial. For more info, see the [Docker Installation Docs](https://docs.docker.com/engine/install/).
If you see a CORS error in your console, this can be easily fixed by setting the correct headers. This is not a bug with Dashy, so please don't raise it as a bug!
### Set Resource Quotas
Docker enables you to limit resource consumption (CPU, memory, disk) on a per-container basis. This not only enhances system performance, but also prevents a compromised container from consuming a large amount of resources, in order to disrupt service or perform malicious activities. To learn more, see the [Resource Constraints Docs](https://docs.docker.com/config/containers/resource_constraints/)
### Example Headers
For example, to run Dashy with max of 1GB ram, and max of 50% of 1 CP core:
`docker run -d -p 8080:80 --cpus=".5" --memory="1024m" lissy93/dashy:latest`
- [Caddy](#caddy)
- [NGINX](#nginx)
- [Træfɪk](#traefik)
- [HAProxy](#haproxy)
- [Apache](#apache)
### Don't Run as Root
Running a container with admin privileges gives it more power than it needs, and can be abused. Dashy does not need any root privileges, and Docker by default doesn't run containers as root, so providing you don't specifically type sudo, you should be all good here.
_The following section briefly outlines how you can set headers for common web proxies/ servers. More info can be found in the documentation for the proxy that you are using, or in the [MDN Docs](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)._
Note that if you're facing permission issues on Debian-based systems, you may need to add your user to the Docker group. First create the group: `sudo groupadd docker`, then add your (non-root) user: `sudo usermod aG docker [my-username]`, finally `newgrp docker` to refresh.
These examples are using:
### Specify a User
One of the best ways to prevent privilege escalation attacks, is to configure the container to use an unprivileged user. This also means that any files created by the container and mounted, will be owned by the specified user (and not root), which makes things much easier.
- `Access-Control-Allow-Origin` header, but depending on what type of content you are enabling, this will vary. For example, to allow a site to be loaded in an iframe (for the modal or workspace views) you would use `X-Frame-Options`.
- The domain root (`/`), if your're hosting from a sub-page, replace that with your path.
- A wildcard (`*`), which would allow access from traffic on any domain, this is discouraged, and you should replace it with the URL where you are hosting Dashy. Note that for requests that transport sensitive info, like credentials (e.g. Keycloak login), the wildcard is [disallowed all together](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#requests_with_credentials) and will be blocked.
You can specify a user, using the [`--user` param](https://docs.docker.com/engine/reference/run/#user), and should include the user ID (`UID`), which can be found by running `id -u`, and the and the group ID (`GID`), using `id -g`.
#### Caddy
With Docker run, you specify it like:
`docker run --user 1000:1000 -p 8080:80 lissy93/dashy`
> See [Caddy `header` docs](https://caddyserver.com/docs/caddyfile/directives/header) for more info.
Of if you're using Docker-compose, you could use an environmental variable
```yaml
version: "3.8"
services:
dashy:
image: lissy93/dashy
user: ${CURRENT_UID}
ports: [ 4000:80 ]
```
And then to set the variable, and start the container, run: `CURRENT_UID=$(id -u):$(id -g) docker-compose up`
### Limit capabilities
Docker containers run with a subset of [Linux Kernal's Capabilities](https://man7.org/linux/man-pages/man7/capabilities.7.html) by default. It's good practice to drop privilege permissions that are not needed for any given container.
With Docker run, you can use the `--cap-drop` flag to remove capabilities, you can also use `--cap-drop=all` and then define just the required permissions using the `--cap-add` option. For a list of available capabilities, see the [Privilege Capabilities Docs](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities).
Note that dropping privileges and capabilities on runtime is not fool-proof, and often any leftover privileges can be used to re-escalate, see [POS36-C](https://wiki.sei.cmu.edu/confluence/display/c/POS36-C.+Observe+correct+revocation+order+while+relinquishing+privileges).
Here's an example using docker-compose, removing privileges that are not required for Dashy to run:
```yaml
version: "3.8"
services:
dashy:
image: lissy93/dashy
ports: [ 4000:80 ]
cap_drop:
- ALL
cap_add:
- CHOWN
- SETGID
- SETUID
- DAC_OVERRIDE
- NET_BIND_SERVICE
```
### Prevent new Privilages being Added
To prevent processes inside the container from getting additional privileges, pass in the `--security-opt=no-new-privileges:true` option to the Docker run command (see [docs](https://docs.docker.com/engine/reference/run/#security-configuration)).
Run Command:
`docker run --security-opt=no-new-privileges:true -p 8080:80 lissy93/dashy`
Docker Compose
```yaml
security_opt:
- no-new-privileges:true
```text
headers / {
Access-Control-Allow-Origin *
}
```
### Disable Inter-Container Communication
By default Docker containers can talk to each other (using [`docker0` bridged network](https://docs.docker.com/config/containers/container-networking/)). If you don't need this capability, then it should be disabled. This can be done with the `--icc=false` in your run command. You can learn more about how to facilitate secure communication between containers in the [Compose Networking docs](https://docs.docker.com/compose/networking/).
#### NGINX
### Don't Expose the Docker Daemon Socket
Docker socket `/var/run/docker.sock` is the UNIX socket that Docker is listening to. This is the primary entry point for the Docker API. The owner of this socket is root. Giving someone access to it is equivalent to giving unrestricted root access to your host.
> See [NGINX `ngx_http_headers_module` docs](https://nginx.org/en/docs/http/ngx_http_headers_module.html) for more info.
You should **not** enable TCP Docker daemon socket (`-H tcp://0.0.0.0:XXX`), as doing so exposes un-encrypted and unauthenticated direct access to the Docker daemon, and if the host is connected to the internet, the daemon on your computer can be used by anyone from the public internet- which is bad. If you need TCP, you should [see the docs](https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-socket-option) to understand how to do this more securely.
Similarly, never expose `/var/run/docker.sock` to other containers as a volume, as it can be exploited.
### Use Read-Only Volumes
You can specify that a specific volume should be read-only by appending `:ro` to the `-v` switch. For example, while running Dashy, if we want our config to be writable, but keep all other assets protected, we would do:
```
docker run -d \
-p 8080:80 \
-v ~/dashy-conf.yml:/app/public/conf.yml \
-v ~/dashy-icons:/app/public/item-icons:ro \
-v ~/dashy-theme.scss:/app/src/styles/user-defined-themes.scss:ro \
lissy93/dashy:latest
```text
location / {
add_header Access-Control-Allow-Origin *;
}
```
You can also prevent a container from writing any changes to volumes on your host's disk, using the `--read-only` flag. Although, for Dashy, you will not be able to write config changes to disk, when edited through the UI with this method. You could make this work, by specifying the config directory as a temp write location, with `--tmpfs /app/public/conf.yml` - but that this will not write the volume back to your host.
Note this can also be done through the UI, using NGINX Proxy Manager.
### Set the Logging Level
Logging is important, as it enables you to review events in the future, and in the case of a compromise this will let get an idea of what may have happened. The default log level is `INFO`, and this is also the recommendation, use `--log-level info` to ensure this is set.
#### Traefik
### Verify Image before Pulling
Only use trusted images, from verified/ official sources. If an app is open source, it is more likely to be safe, as anyone can verify the code. There are also tools available for scanning containers,
> See [Træfɪk CORS headers docs](https://doc.traefik.io/traefik/middlewares/http/headers/#cors-headers) for more info.
Unless otherwise configured, containers can communicate among each other, so running one bad image may lead to other areas of your setup being compromised. Docker images typically contain both original code, as well as up-stream packages, and even if that image has come from a trusted source, the up-stream packages it includes may not have.
```text
labels:
- "traefik.http.middlewares.testheader.headers.accesscontrolallowmethods=GET,OPTIONS,PUT"
- "traefik.http.middlewares.testheader.headers.accesscontrolalloworiginlist=https://foo.bar.org,https://example.org"
- "traefik.http.middlewares.testheader.headers.accesscontrolmaxage=100"
- "traefik.http.middlewares.testheader.headers.addvaryheader=true"
```
### Specify the Tag
Using fixed tags (as opposed to `:latest` ) will ensure immutability, meaning the base image will not change between builds. Note that for Dashy, the app is being actively developed, new features, bug fixes and general improvements are merged each week, and if you use a fixed version you will not enjoy these benefits. So it's up to you weather you would prefer a stable and reproducible environment, or the latest features and enhancements.
#### HAProxy
### Container Security Scanning
It's helpful to be aware of any potential security issues in any of the Docker images you are using. You can run a quick scan using Snyk on any image to output known vulnerabilities using [Docker scan](https://docs.docker.com/engine/scan/), e.g: `docker scan lissy93/dashy:latest`.
> See [HAProxy Rewrite Response Docs](https://www.haproxy.com/documentation/hapee/latest/traffic-routing/rewrites/rewrite-responses/) for more info.
A similar product is [Trivy](https://github.com/aquasecurity/trivy), which is free an open source. First install it (with your package manager), then to scan an image, just run: `trivy image lissy93/dashy:latest`
```text
/
http-response add-header Access-Control-Allow-Origin *
```
For larger systems, RedHat [Clair](https://www.redhat.com/en/topics/containers/what-is-clair) is an app for parsing image contents and reporting on any found vulnerabilities. You run it locally in a container, and configure it with YAML. It can be integrated with Red Hat Quay, to show results on a dashboard. Most of these use static analysis to find potential issues, and scan included packages for any known security vulnerabilities.
#### Apache
### Registry Security
Although over-kill for most users, you could run your own registry locally which would give you ultimate control over all images, see the [Deploying a Registry Docs](https://docs.docker.com/registry/deploying/) for more info. Another option is [Docker Trusted Registry](https://docker-docs.netlify.app/ee/dtr/), it's great for enterprise applications, it sits behind your firewall, running on a swarm managed by Docker Universal Control Plane, and lets you securely store and manage your Docker images, mitigating the risk of breaches from the internet.
> See [Apache `mode_headers` docs](https://httpd.apache.org/docs/current/mod/mod_headers.html) for more info.
### Security Modules
Docker supports several modules that let you write your own security profiles.
```text
Header always set Access-Control-Allow-Origin "*"
```
[AppArmor](https://www.apparmor.net/)is a kernel module that proactively protects the operating system and applications from external or internal threats, by enabling you to restrict programs' capabilities with per-program profiles. You can specify either a security policy by name, or by file path with the `apparmor` flag in docker run. Learn more about writing profiles, [here](https://gitlab.com/apparmor/apparmor/-/wikis/QuickProfileLanguage).
#### Squid
[Seccomp](https://en.wikipedia.org/wiki/Seccomp) (Secure Computing Mode) is a sandboxing facility in the Linux kernel that acts like a firewall for system calls (syscalls). It uses Berkeley Packet Filter (BPF) rules to filter syscalls and control how they are handled. These filters can significantly limit a containers access to the Docker Hosts Linux kernel - especially for simple containers/applications. It requires a Linux-based Docker host, with secomp enabled, and you can check for this by running `docker info | grep seccomp`. A great resource for learning more about this is [DockerLabs](https://training.play-with-docker.com/security-seccomp/).
> See [Squid `request_header_access` docs](http://www2.gr.squid-cache.org/Doc/config/request_header_access/) for more info.
```text
request_header_access Authorization allow all
```
**[⬆️ Back to Top](#management)**
@ -437,32 +403,33 @@ Docker supports several modules that let you write your own security profiles.
- [WireGuard](#wireguard)
- [Reverse SSH Tunnel](#reverse-ssh-tunnel)
- [TCP Tunnel](#tcp-tunnel)
### WireGuard
Using a VPN is one of the easiest ways to provide secure, full access to your local network from remote locations. [WireGuard](https://www.wireguard.com/) is a reasonably new open source VPN protocol, that was designed with ease of use, performance and security in mind. Unlike OpenVPN, it doesn't need to recreate the tunnel whenever connection is dropped, and it's also much easier to setup, using shared keys instead.
Using a VPN is one of the easiest ways to provide secure, full access to your local network from remote locations. [WireGuard](https://www.wireguard.com/) is a reasonably new open source VPN protocol, that was designed with ease of use, performance and security in mind. Unlike OpenVPN, it doesn't need to recreate the tunnel whenever connection is dropped, and it's also much easier to setup, using shared keys instead.
- **Install Wireguard** - See the [Install Docs](https://www.wireguard.com/install/) for download links + instructions
- On Debian-based systems, it's `sudo apt install wireguard`
- On Debian-based systems, it's `sudo apt install wireguard`
- **Generate a Private Key** - Run `wg genkey` on the Wireguard server, and copy it to somewhere safe for later
- **Create Server Config** - Open or create a file at `/etc/wireguard/wg0.conf` and under `[Interface]` add the following (see example below):
- `Address` - as a subnet of all desired IPs
- `PrivateKey` - that you just generated
- `ListenPort` - Default is `51820`, but can be anything
- `Address` - as a subnet of all desired IPs
- `PrivateKey` - that you just generated
- `ListenPort` - Default is `51820`, but can be anything
- **Get Client App** - Download the [WG client app](https://www.wireguard.com/install/) for your platform (Linux, Windows, MacOS, Android or iOS are all supported)
- **Create new Client Tunnel** - On your client app, there should be an option to create a new tunnel, when doing so a client private key will be generated (but if not, use the `wg genkey` command again), and keep it somewhere safe. A public key will also be generated, and this will go in our saver config
- **Add Clients to Server Config** - Head back to your `wg0.conf` file on the server, create a `[Peer]` section, and populate the following info
- `AllowedIPs` - List of IP address inside the subnet, the client should have access to
- `PublicKey` - The public key for the client you just generated
- `AllowedIPs` - List of IP address inside the subnet, the client should have access to
- `PublicKey` - The public key for the client you just generated
- **Start the Server** - You can now start the WG server, using: `wg-quick up wg0` on your server
- **Finish Client Setup** - Head back to your client device, and edit the config file, leave the private key as is, and add the following fields:
- `PublicKey` - The public key of the server
- `Address` - This should match the `AllowedIPs` section on the servers config file
- `DNS` - The DNS server that'll be used when accessing the network through the VPN
- `Endpoint` - The hostname or IP + Port where your WG server is running (you may need to forward this in your firewall's settings)
- `PublicKey` - The public key of the server
- `Address` - This should match the `AllowedIPs` section on the servers config file
- `DNS` - The DNS server that'll be used when accessing the network through the VPN
- `Endpoint` - The hostname or IP + Port where your WG server is running (you may need to forward this in your firewall's settings)
- **Done** - Your clients should now be able to connect to your WG server :) Depending on your networks firewall rules, you may need to port forward the address of your WG server
**Example Server Config**
#### **Example Server Config**
```ini
# Server file
@ -487,7 +454,7 @@ PublicKey = xxx
AllowedIps = 10.5.0.25/32,10.21.10.0/24,10.21.20.0/24,10.21.30.0/24,10.31.0.0/24,2001:470:xxxx:xxxx::ca:571e/128
```
**Example Client Config**
#### **Example Client Config**
```ini
[Interface]
@ -509,15 +476,13 @@ Endpoint = 1.2.3.4:51820
PersistentKeepalive = 15
```
A useful tool for getting WG setup is [Algo](https://github.com/trailofbits/algo). It includes scripts and docs which cover almost all devices, platforms and clients, and has best practices implemented, and security features enabled. All of this is better explained in [this blog post](https://blog.trailofbits.com/2016/12/12/meet-algo-the-vpn-that-works/).
### Reverse SSH Tunnel
SSH (or [Secure Shell](https://en.wikipedia.org/wiki/Secure_Shell)) is a secure tunnel that allows you to connect to a remote host. Unlike the VPN methods, an SSH connection does not require an intermediary, and will not be affected by your IP changing. However it only allows you to access a single service at a time. SSH was really designed for terminal access, but because of the latter mentioned benefits it's useful to setup, as a fallback option.
Directly SSH'ing into your home, would require you to open a port (usually 22), which would be terrible for security, and is not recommended. However a reverse SSH connection is initiated from inside your network. Once the connection is established, the port is redirected, allowing you to use the established connection to SSH into your home network.
Directly SSH'ing into your home, would require you to open a port (usually 22), which would be terrible for security, and is not recommended. However a reverse SSH connection is initiated from inside your network. Once the connection is established, the port is redirected, allowing you to use the established connection to SSH into your home network.
The issue you've probably spotted, is that most public, corporate, and institutional networks will block SSH connections. To overcome this, you'd have to establish a server outside of your homelab that your homelab's device could SSH into to establish the reverse SSH connection. You can then connect to that remote server (the _mothership_), which in turn connects to your home network.
@ -526,6 +491,7 @@ Now all of this is starting to sound like quite a lot of work, but this is where
Before getting started, you'll need to head over to [Remote.it](https://app.remote.it/auth/#/sign-up) and create an account.
Then setup your local device:
1. If you haven't already done so, you'll need to enable and configure SSH.
- This is out-of-scope of this article, but I've explained it in detail in [this post](https://notes.aliciasykes.com/22798/my-server-setup#configure-ssh).
2. Download the Remote.it install script from their [GitHub](https://github.com/remoteit/installer)
@ -534,12 +500,31 @@ Then setup your local device:
4. Finally, configure your device, by running `sudo connectd_installer` and following the on-screen instructions
And when you're ready to connect to it:
1. Login to [app.remote.it](https://app.remote.it/), and select the name of your device
2. You should see a list of running services, click SSH
3. You'll then be presented with some SSH credentials that you can now use to securely connect to your home, via the Remote.it servers
Done :)
### TCP Tunnel
If you're running Dashy on your local network, behind a firewall, but need to temporarily share it with someone external, this can be achieved quickly and securely using [Ngrok](https://ngrok.com/). It's basically a super slick, encrypted TCP tunnel that provides an internet-accessible address that anyone use to access your local service, from anywhere.
To get started, [Download](https://ngrok.com/download) and install Ngrok for your system, then just run `ngrok http [port]` (replace the port with the http port where Dashy is running, e.g. 8080). When [using https](https://ngrok.com/docs#http-local-https), specify the full local url/ ip including the protocol.
Some Ngrok features require you to be authenticated, you can [create a free account](https://dashboard.ngrok.com/signup) and generate a token in [your dashboard](https://dashboard.ngrok.com/auth/your-authtoken), then run `ngrok authtoken [token]`.
It's recommended to use authentication for any publicly accessible service. Dashy has an [Auth](/docs/authentication.md) feature built in, but an even easier method it to use the [`-auth`](https://ngrok.com/docs#http-auth) switch. E.g. `ngrok http -auth="username:password123" 8080`
By default, your web app is assigned a randomly generated ngrok domain, but you can also use your own custom domain. Under the [Domains Tab](https://dashboard.ngrok.com/endpoints/domains) of your Ngrok dashboard, add your domain, and follow the CNAME instructions. You can now use your domain, with the [`-hostname`](https://ngrok.com/docs#http-custom-domains) switch, e.g. `ngrok http -region=us -hostname=dashy.example.com 8080`. If you don't have your own domain name, you can instead use a custom sub-domain (e.g. `alicia-dashy.ngrok.io`), using the [`-subdomain`](https://ngrok.com/docs#custom-subdomain-names) switch.
To integrate this into your docker-compose, take a look at the [gtriggiano/ngrok-tunnel](https://github.com/gtriggiano/ngrok-tunnel) container.
There's so much more you can do with Ngrok, such as exposing a directory as a file browser, using websockets, relaying requests, rewriting headers, inspecting traffic, TLS and TCP tunnels and lots more. All or which is explained in [the Documentation](https://ngrok.com/docs).
It's worth noting that Ngrok isn't the only option here, other options include: [FRP](https://github.com/fatedier/frp), [Inlets](https://inlets.dev), [Local Tunnel](https://localtunnel.me/), [TailScale](https://tailscale.com/), etc. Check out [Awesome Tunneling](https://github.com/anderspitman/awesome-tunneling) for a list of alternatives.
**[⬆️ Back to Top](#management)**
---
@ -550,22 +535,24 @@ Done :)
- [Using NGINX](#using-dns)
### Using DNS
For locally running services, a domain can be set up directly in the DNS records. This method is really quick and easy, and doesn't require you to purchase an actual domain. Just update your networks DNS resolver, to point your desired URL to the local IP where Dashy (or any other app) is running. For example, a line in your hosts file might look something like: `192.168.0.2 dashy.homelab.local`.
If you're using Pi-Hole, a similar thing can be done in the `/etc/dnsmasq.d/03-custom-dns.conf` file, add a line like: `address=/dashy.example.com/192.168.2.0` for each of your services.
If you're running OPNSense/ PfSense, then this can be done through the UI with Unbound, it's explained nicely in [this article](https://homenetworkguy.com/how-to/use-custom-domain-name-in-internal-network/), by Dustin Casto.
If you're running OPNSense/ PfSense, then this can be done through the UI with Unbound, it's explained nicely in [this article](https://homenetworkguy.com/how-to/use-custom-domain-name-in-internal-network/), by Dustin Casto.
### Using NGINX
If you're using NGINX, then you can use your own domain name, with a config similar to the below example.
```
```text
upstream dashy {
server 127.0.0.1:32400;
}
server {
listen 80;
listen 8080;
server_name dashy.mydomain.com;
# Setup SSL
@ -587,11 +574,12 @@ server {
}
}
```
Similarly, a basic `Caddyfile` might look like:
```
```text
dashy.example.com {
reverse_proxy / nginx:80
reverse_proxy / nginx:8080
}
```
@ -601,9 +589,170 @@ For more info, [this guide](https://thehomelab.wiki/books/dns-reverse-proxy/page
---
## Container Security
- [Keep Docker Up-To-Date](#keep-docker-up-to-date)
- [Set Resource Quotas](#set-resource-quotas)
- [Don't Run as Root](#dont-run-as-root)
- [Specify a User](#specify-a-user)
- [Limit Capabilities](#limit-capabilities)
- [Prevent new Privileges being Added](#prevent-new-privileges-being-added)
- [Disable Inter-Container Communication](#disable-inter-container-communication)
- [Don't Expose the Docker Daemon Socket](#dont-expose-the-docker-daemon-socket)
- [Use Read-Only Volumes](#use-read-only-volumes)
- [Set the Logging Level](#set-the-logging-level)
- [Verify Image before Pulling](#verify-image-before-pulling)
- [Specify the Tag](#specify-the-tag)
- [Container Security Scanning](#container-security-scanning)
- [Registry Security](#registry-security)
- [Security Modules](#security-modules)
### Keep Docker Up-To-Date
To prevent known container escape vulnerabilities, which typically end in escalating to root/administrator privileges, patching Docker Engine and Docker Machine is crucial. For more info, see the [Docker Installation Docs](https://docs.docker.com/engine/install/).
### Set Resource Quotas
Docker enables you to limit resource consumption (CPU, memory, disk) on a per-container basis. This not only enhances system performance, but also prevents a compromised container from consuming a large amount of resources, in order to disrupt service or perform malicious activities. To learn more, see the [Resource Constraints Docs](https://docs.docker.com/config/containers/resource_constraints/)
For example, to run Dashy with max of 1GB ram, and max of 50% of 1 CP core:
`docker run -d -p 8080:8080 --cpus=".5" --memory="1024m" lissy93/dashy:latest`
### Don't Run as Root
Running a container with admin privileges gives it more power than it needs, and can be abused. Dashy does not need any root privileges, and Docker by default doesn't run containers as root, so providing you don't specifically type sudo, you should be all good here.
Note that if you're facing permission issues on Debian-based systems, you may need to add your user to the Docker group. First create the group: `sudo groupadd docker`, then add your (non-root) user: `sudo usermod aG docker [my-username]`, finally `newgrp docker` to refresh.
### Specify a User
One of the best ways to prevent privilege escalation attacks, is to configure the container to use an unprivileged user. This also means that any files created by the container and mounted, will be owned by the specified user (and not root), which makes things much easier.
You can specify a user, using the [`--user` param](https://docs.docker.com/engine/reference/run/#user), and should include the user ID (`UID`), which can be found by running `id -u`, and the and the group ID (`GID`), using `id -g`.
With Docker run, you specify it like:
`docker run --user 1000:1000 -p 8080:8080 lissy93/dashy`
Of if you're using Docker-compose, you could use an environmental variable
```yaml
version: "3.8"
services:
dashy:
image: lissy93/dashy
user: ${CURRENT_UID}
ports: [ 4000:8080 ]
```
And then to set the variable, and start the container, run: `CURRENT_UID=$(id -u):$(id -g) docker-compose up`
### Limit capabilities
Docker containers run with a subset of [Linux Kernal's Capabilities](https://man7.org/linux/man-pages/man7/capabilities.7.html) by default. It's good practice to drop privilege permissions that are not needed for any given container.
With Docker run, you can use the `--cap-drop` flag to remove capabilities, you can also use `--cap-drop=all` and then define just the required permissions using the `--cap-add` option. For a list of available capabilities, see the [Privilege Capabilities Docs](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities).
Note that dropping privileges and capabilities on runtime is not fool-proof, and often any leftover privileges can be used to re-escalate, see [POS36-C](https://wiki.sei.cmu.edu/confluence/display/c/POS36-C.+Observe+correct+revocation+order+while+relinquishing+privileges).
Here's an example using docker-compose, removing privileges that are not required for Dashy to run:
```yaml
version: "3.8"
services:
dashy:
image: lissy93/dashy
ports: [ 4000:8080 ]
cap_drop:
- ALL
cap_add:
- CHOWN
- SETGID
- SETUID
- DAC_OVERRIDE
- NET_BIND_SERVICE
```
### Prevent new Privileges being Added
To prevent processes inside the container from getting additional privileges, pass in the `--security-opt=no-new-privileges:true` option to the Docker run command (see [docs](https://docs.docker.com/engine/reference/run/#security-configuration)).
Run Command:
`docker run --security-opt=no-new-privileges:true -p 8080:8080 lissy93/dashy`
Docker Compose
```yaml
security_opt:
- no-new-privileges:true
```
### Disable Inter-Container Communication
By default Docker containers can talk to each other (using [`docker0` bridged network](https://docs.docker.com/config/containers/container-networking/)). If you don't need this capability, then it should be disabled. This can be done with the `--icc=false` in your run command. You can learn more about how to facilitate secure communication between containers in the [Compose Networking docs](https://docs.docker.com/compose/networking/).
### Don't Expose the Docker Daemon Socket
Docker socket `/var/run/docker.sock` is the UNIX socket that Docker is listening to. This is the primary entry point for the Docker API. The owner of this socket is root. Giving someone access to it is equivalent to giving unrestricted root access to your host.
You should **not** enable TCP Docker daemon socket (`-H tcp://0.0.0.0:XXX`), as doing so exposes un-encrypted and unauthenticated direct access to the Docker daemon, and if the host is connected to the internet, the daemon on your computer can be used by anyone from the public internet- which is bad. If you need TCP, you should [see the docs](https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-socket-option) to understand how to do this more securely.
Similarly, never expose `/var/run/docker.sock` to other containers as a volume, as it can be exploited.
### Use Read-Only Volumes
You can specify that a specific volume should be read-only by appending `:ro` to the `-v` switch. For example, while running Dashy, if we want our config to be writable, but keep all other assets protected, we would do:
```bash
docker run -d \
-p 8080:8080 \
-v ~/dashy-conf.yml:/app/user-data/conf.yml \
-v ~/dashy-icons:/app/public/item-icons:ro \
-v ~/dashy-theme.scss:/app/src/styles/user-defined-themes.scss:ro \
lissy93/dashy:latest
```
You can also prevent a container from writing any changes to volumes on your host's disk, using the `--read-only` flag. Although, for Dashy, you will not be able to write config changes to disk, when edited through the UI with this method. You could make this work, by specifying the config directory as a temp write location, with `--tmpfs /app/user-data/conf.yml` - but that this will not write the volume back to your host.
### Set the Logging Level
Logging is important, as it enables you to review events in the future, and in the case of a compromise this will let get an idea of what may have happened. The default log level is `INFO`, and this is also the recommendation, use `--log-level info` to ensure this is set.
### Verify Image before Pulling
Only use trusted images, from verified/ official sources. If an app is open source, it is more likely to be safe, as anyone can verify the code. There are also tools available for scanning containers,
Unless otherwise configured, containers can communicate among each other, so running one bad image may lead to other areas of your setup being compromised. Docker images typically contain both original code, as well as up-stream packages, and even if that image has come from a trusted source, the up-stream packages it includes may not have.
### Specify the Tag
Using fixed tags (as opposed to `:latest` ) will ensure immutability, meaning the base image will not change between builds. Note that for Dashy, the app is being actively developed, new features, bug fixes and general improvements are merged each week, and if you use a fixed version you will not enjoy these benefits. So it's up to you weather you would prefer a stable and reproducible environment, or the latest features and enhancements.
### Container Security Scanning
It's helpful to be aware of any potential security issues in any of the Docker images you are using. You can run a quick scan using Snyk on any image to output known vulnerabilities using [Docker scan](https://docs.docker.com/engine/scan/), e.g: `docker scan lissy93/dashy:latest`.
A similar product is [Trivy](https://github.com/aquasecurity/trivy), which is free an open source. First install it (with your package manager), then to scan an image, just run: `trivy image lissy93/dashy:latest`
For larger systems, RedHat [Clair](https://www.redhat.com/en/topics/containers/what-is-clair) is an app for parsing image contents and reporting on any found vulnerabilities. You run it locally in a container, and configure it with YAML. It can be integrated with Red Hat Quay, to show results on a dashboard. Most of these use static analysis to find potential issues, and scan included packages for any known security vulnerabilities.
### Registry Security
Although over-kill for most users, you could run your own registry locally which would give you ultimate control over all images, see the [Deploying a Registry Docs](https://docs.docker.com/registry/deploying/) for more info. Another option is [Docker Trusted Registry](https://docker-docs.netlify.app/ee/dtr/), it's great for enterprise applications, it sits behind your firewall, running on a swarm managed by Docker Universal Control Plane, and lets you securely store and manage your Docker images, mitigating the risk of breaches from the internet.
### Security Modules
Docker supports several modules that let you write your own security profiles.
[AppArmor](https://www.apparmor.net/)is a kernel module that proactively protects the operating system and applications from external or internal threats, by enabling you to restrict programs' capabilities with per-program profiles. You can specify either a security policy by name, or by file path with the `apparmor` flag in docker run. Learn more about writing profiles, [here](https://gitlab.com/apparmor/apparmor/-/wikis/QuickProfileLanguage).
[Seccomp](https://en.wikipedia.org/wiki/Seccomp) (Secure Computing Mode) is a sandboxing facility in the Linux kernel that acts like a firewall for system calls (syscalls). It uses Berkeley Packet Filter (BPF) rules to filter syscalls and control how they are handled. These filters can significantly limit a containers access to the Docker Host's Linux kernel - especially for simple containers/applications. It requires a Linux-based Docker host, with secomp enabled, and you can check for this by running `docker info | grep seccomp`. A great resource for learning more about this is [DockerLabs](https://training.play-with-docker.com/security-seccomp/).
**[⬆️ Back to Top](#management)**
---
## Web Server Configuration
_The following section only applies if you are not using Docker, and would like to use your own web server_
> _The following section only applies if you are not using Docker, and would like to use your own web server_
Dashy ships with a pre-configured Node.js server, in [`server.js`](https://github.com/Lissy93/dashy/blob/master/server.js) which serves up the contents of the `./dist` directory on a given port. You can start the server by running `node server`. Note that the app must have been build (run `yarn build`), and you need [Node.js](https://nodejs.org) installed.
@ -612,11 +761,13 @@ If you wish to run Dashy from a sub page (e.g. `example.com/dashy`), then just s
However, since Dashy is just a static web application, it can be served with whatever server you like. The following section outlines how you can configure a web server.
Note, that if you choose not to use `server.js` to serve up the app, you will loose access to the following features:
- Loading page, while the app is building
- Writing config file to disk from the UI
- Website status indicators, and ping checks
Example Configs
- [NGINX](#nginx)
- [Apache](#apache)
- [Caddy](#caddy)
@ -627,10 +778,10 @@ Example Configs
Create a new file in `/etc/nginx/sites-enabled/dashy`
```
```text
server {
listen 80;
listen [::]:80;
listen 8080;
listen [::]:8080;
root /var/www/dashy/html;
index index.html;
@ -653,7 +804,8 @@ For example: `scp -r ./dist/* [username]@[server_ip]:/var/www/dashy/html`
Copy Dashy's dist folder to your apache server, `sudo cp -r ./dashy/dist /var/www/html/dashy`.
In your Apache config, `/etc/apche2/apache2.conf` add:
```
```text
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
@ -671,7 +823,8 @@ In your Apache config, `/etc/apche2/apache2.conf` add:
```
Add a `.htaccess` file within `/var/www/html/dashy/.htaccess`, and add:
```
```text
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
@ -683,12 +836,14 @@ Then restart Apache, with `sudo systemctl restart apache2`
### Caddy
Caddy v2
```
```text
try_files {path} /
```
Caddy v1
```
```text
rewrite {
regexp .*
to {path} /
@ -699,7 +854,7 @@ rewrite {
Create a file names `firebase.json`, and populate it with something similar to:
```
```text
{
"hosting": {
"public": "dist",
@ -714,6 +869,7 @@ Create a file names `firebase.json`, and populate it with something similar to:
```
### cPanel
1. Login to your WHM
2. Open 'Feature Manager' on the left sidebar
3. Under 'Manage feature list', click 'Edit'
@ -744,7 +900,7 @@ Similar to above, you'll first need to fork and clone Dashy to your local system
Then, either use Dashy's default [`Dockerfile`](https://github.com/Lissy93/dashy/blob/master/Dockerfile) as is, or modify it according to your needs.
To build and deploy locally, first build the app with: `docker build -t dashy .`, and then start the app with `docker run -p 8080:80 --name my-dashboard dashy`. Or modify the `docker-compose.yml` file, replacing `image: lissy93/dashy` with `build: .` and run `docker compose up`.
To build and deploy locally, first build the app with: `docker build -t dashy .`, and then start the app with `docker run -p 8080:8080 --name my-dashboard dashy`. Or modify the `docker-compose.yml` file, replacing `image: lissy93/dashy` with `build: .` and run `docker compose up`.
Your container should now be running, and will appear in the list when you run `docker container ls a`. If you'd like to enter the container, run `docker exec -it [container-id] /bin/ash`.

View File

@ -12,18 +12,20 @@ Internationalization is the process of making an application available in other
By default, Dashy will attempt to use the language of your browser or system. If a translation for your language does not yet exist, it will fallback to English.
#### In the UI
### In the UI
You can manually select your language in the UI. Under the Config Menu, click the Language button, and select your language from the dropdown menu. Your preference will be saved in local storage.
#### Config File
### Config File
You can also set your language in the config file. Specify the ISO code of one of the supported languages, under `appConfig.lang`. For example:
```yaml
appConfig:
lang: de
language: de
```
#### Available Languages
### Available Languages
At the time of writing the following languages are supported: `en`, `zh-CN`, `nl`, `fr`, `de`, `es`, `sl`, `it`, `pt`, `ru`, `ar`, `hi`, `ja`, but an up-to-date list of all implemented translations can be found in [`./src/utils/languages.js`](https://github.com/Lissy93/dashy/blob/master/src/utils/languages.js). Languages are specified by their 2-digit [ISO-639 code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes), or sometimes a 4-digit code if it's a regional dialect.
@ -35,13 +37,15 @@ Dashy is using [vue-i18n](https://vue-i18n.intlify.dev/guide/) to manage multi-l
Adding a new language is pretty straightforward, with just three steps:
##### 1. Create a new Language File
Create a new JSON file in `./src/assets/locales` for your language.
### 1. Create a new Language File
Create a new JSON file in `./src/assets/locales` for your language.
You should name it with the 2-digit [ISO-639 code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) for your locale (e.g. for German `de.json`, French `fr.json` or Spanish `es.json`) - You can find a list of all ISO codes at [iso.org](https://www.iso.org/obp/ui).
If your language is a specific dialect or regional translation, then use the Posfix [CLDR](http://cldr.unicode.org/) format, where, e.g. `en-GB.json` (British English), `es-MX.json` (Spanish, in Mexico) or `zh-CN.json` (Chinese, simplified) - A list of which can be found [here](https://github.com/unicode-org/cldr-json/blob/master/cldr-json/cldr-core/availableLocales.json)
##### 2. Translate!
### 2. Translate
Using [`en.json`](https://github.com/Lissy93/dashy/tree/master/src/assets/locales/en.json) as an example, translate the JSON values to your language, while leaving the keys as they are. It's fine to leave out certain items, as if they're missing they will fall-back to English. If you see any attribute which include curly braces (`{xxx}`), then leave the inner value of these braces as is, as this is for variables.
```json
@ -58,7 +62,7 @@ Using [`en.json`](https://github.com/Lissy93/dashy/tree/master/src/assets/locale
}
```
##### 3. Add your file to the app
### 3. Add your file to the app
In [`./src/utils/languages.js`](https://github.com/Lissy93/dashy/tree/master/src/utils/languages.js), you need to do 2 small things:
@ -66,6 +70,7 @@ First import your new translation file, do this at the top of the page.
E.g. `import de from '@/assets/locales/de.json';`
Second, add it to the array of languages, e.g:
```javascript
export const languages = [
{
@ -82,9 +87,10 @@ export const languages = [
},
];
```
You can also add your new language to the readme, under the [Language Switching](https://github.com/Lissy93/dashy#language-switching-) section and optionally include your name/ username if you'd like to be credited for your work. Done!
If you are not comfortable with making pull requests, or do not want to modify the code, then feel free to instead send the translated file to me, and I can add it into the application. I will be sure to credit you appropriately.
If you are not comfortable with making pull requests, or do not want to modify the code, then feel free to instead send the translated file to me, and I can add it into the application. I will be sure to credit you appropriately.
---
@ -92,7 +98,7 @@ If you are not comfortable with making pull requests, or do not want to modify t
If you're working on a new component, then any text that is displayed to the user should be extracted out of the component, and stored in the file. This also applies to any existing components, that might have been forgotten to be translated. Thankfully, everything is already setup, so this is a pretty easy job.
#### 1. Add Translated Text
### 1. Add Translated Text
Firstly, go to [`./src/assets/locales/en.json`](https://github.com/Lissy93/dashy/blob/master/src/assets/locales/en.json), and either find the appropriate section, or create a new section. Lets say you're new component is called `my-widget`, you could add `"my-widget": {}` to store all your text as key-value-pairs. E.g.
@ -104,7 +110,7 @@ Firstly, go to [`./src/assets/locales/en.json`](https://github.com/Lissy93/dashy
Note that you **must** add English translations for all text. Missing languages are not a problem, as they will always fallback to English, but if the English is missing, then nothing can be displayed.
#### 2. Use Text within Component
### 2. Use Text within Component
Once your text is in the translation file, you can now use it within your component. There is a global `$t` function, with takes the key of your new translation, and returns the value. For example:
@ -121,6 +127,7 @@ For example: `alert(this.$t('my-widget.awesome-text'))`.
You may also need to pass a variable to be displayed within a translation. Vue I18n supports [Interpolations](https://vue-i18n.intlify.dev/guide/essentials/syntax.html#interpolations) using mustache-like syntax.
For example, you would set your translation to:
```json
{
"welcome-message": "Hello {name}!"
@ -128,22 +135,25 @@ For example, you would set your translation to:
```
And then pass that variable (`name`) within a JSON object as the second parameter on `$t`, like:
```javascript
$t('welcome-message', { name: 'Alicia' })
```
Which will render:
```text
Hello Alicia!
```
There are many other advanced features, including Pluralization, Datetime & Number Formatting, Message Support and more, all of which are outlined in the [Vue-i18n Docs](https://vue-i18n.intlify.dev/guide/).
#### Basic Example
### Basic Example
Using the search bar as an example, this would look something like:
In [`./src/components/Settings/SearchBar.vue`](https://github.com/Lissy93/dashy/blob/master/src/components/Settings/SearchBar.vue):
```vue
<template>
<form>

View File

@ -0,0 +1,97 @@
# Pages and Sections
## Multi-Page Support
You can have additional pages within your dashboard, with each having it's own config file. The config files for sub-pages can either be stored locally, or hosted separately. A link to each additional page will be displayed in the navigation bar.
You can edit additional pages using the interactive editor, exactly the same was as your primary page (so long as it's local). But please save changes to one page, before you start editing the next.
### Using Local Sub-Pages
To get started, create a new `.yml` config file for your sub-page, placing it within `/app/public`. Then within your primary `conf.yml`, choose a name, and specify the path to the new file.
For example:
```yaml
pages:
- name: Networking Services
path: 'networking.yml'
- name: Work Stuff
path: 'work.yml'
```
If you're sub-page is located within `/app/public`, then you only need to specify the filename, but if it's anywhere else, then the full path is required.
### Using Remote Sub-Pages
Config files don't need to be local, you can store them anywhere, and data will be imported as sub-pages on page load.
For example:
```yaml
pages:
- name: Getting Started
path: 'https://snippet.host/tvcw/raw'
- name: Homelab
path: 'https://snippet.host/tetp/raw'
- name: Browser Startpage
path: 'https://snippet.host/zcom/raw'
```
There are many options of how this can be used. You could store your config within a Git repository, in order to easily track and rollback changes. Or host your config on your NAS, to have it backed up with the rest of your files. Or use a hosted paste service, for example [snippet.host](https://snippet.host/), which supports never-expiring CORS-enabled pastes, which can also be edited later.
You will obviously not be able to write updates to remote configs directly through the UI editor, but you can still make and preview changes, then use the export menu to get a copy of the new config, which can then be pasted to the remote source manually.
The config file must, of course be accessible from within Dashy. If your config contains sensitive info (like API keys, credentials, secret URLs, etc), take care not to expose it to the internet.
The following example shows creating a config, publishing it as a [Gist](https://gist.github.com/), copying the URL to the raw file, and using it within your dashboard.
<p align="center">
<img width="700" alt="Public config in a gist demo"
src="https://i.ibb.co/55jm3LG/how-to-use-remote-config-sub-page.gif"
/>
</p>
### Restrictions
Only top-level fields supported by sub-pages are `pageInfo` and `sections`. The `appConfig` and `pages` will always be inherited from your main `conf.yml` file. Other than that, sub-pages behave exactly the same as your default view, and can contain sections, items, widgets and page info like nav links, title and logo.
Note that since page paths are required by the router, they are set at build-time, not run-time, and so a rebuild (happens automatically) is required for changes to page paths to take effect (this only applies to changes to the `pages` array, rebuild isn't required for editing page content).
## Sub-Items
A normal section will contain zero or more items, for example:
```yaml
- name: Coding
icon: far fa-code
items:
- title: GitHub
url: https://github.com/
- title: StackOverflow
url: http://stackoverflow.com/
```
But items can also be grouped together, referred to as sub-items. This is useful for a group of less frequently used items, which you don't want to take up too much space, or for action buttons (_coming soon_).
Item groups may also have an optional title.
```yaml
- name: Coding
icon: far fa-code
items:
- title: Normal Item 1
- title: Normal Item 2
- subItems:
- title: JavaScript
url: https://developer.mozilla.org
icon: si-javascript
- title: TypeScript
url: https://www.typescriptlang.org/docs
icon: si-typescript
- title: Svelt
url: https://svelte.dev/docs
icon: si-svelte
- title: Go
url: https://go.dev/doc
icon: si-go
```

View File

@ -1,140 +1,295 @@
# Privacy & Security
Dashy was built with privacy in mind. Self-hosting your own apps and services is a great way to protect yourself from the mass data collection employed by big tech companies, and Dashy was designed to keep your local services organized and accessible from a single place.
It's fully open source, and I've tried to keep to code as clear and thoroughly documented as possible, which will make it easy for you to understand exactly how it works, and what goes on behind the scenes.
For privacy and security tips, check out another project of mine: **[Personal Security Checklist](https://github.com/Lissy93/personal-security-checklist)**.
---
## External Requests
By default, Dashy will not make any external requests, unless you configure it to. Some features (which are all off by default) do require internat access, and this section outlines those features, the services used, and links to their privacy policies.
### Font Awesome
If either any of your sections or items are using font-awesome icons, then these will be fetched directly from font-awesome on page load. See the [Font Awesome Privacy Policy](https://fontawesome.com/privacy) for more info.
### Favicon Fetching
If an item's icon is set to `favicon`, then it will be auto-fetched from the corresponding URL. Since not all websites have their icon located at `/favicon.ico`, and if they do, it's often very low resolution (like `16 x 16 px`). Therefore, the default behavior is for Dashy to check if the URL is public, and if so will use an API to fetch the favicon. For self-hosted services, the favion will be fetched from the default path, and no external requests will be made.
The default favicon API is [Favicon Kit](https://faviconkit.com/), but this can be changed by setting `appConfig.faviconApi` to an alternate source (`google`, `clearbit`, `webmasterapi` and `allesedv` are supported). If you do not want to use any API, then you can set this property to `local`, and the favicon will be fetched from the default path. For hosted services, this will still incur an external request.
### Generative Icons
If an item has the icon set to `generative`, then an external request it made to [Dice Bear](https://dicebear.com/) to fetch the uniquely generated icon. The URL of a given service is used as the key for generating the icon, but it is first hashed and encoded for basic privacy. For more info, please reference the [Dicebear Privacy Policy](https://avatars.dicebear.com/legal/privacy-policy)
### Other Icons
Section icons, item icons and app icons are able to accept a URL to a raw image, if the image is hosted online then an external request will be made. To avoid the need to make external requests for icon assets, you can either use a self-hosted CDN, or store your images within `./public/item-icons` (which can be mounted as a volume if you're using Docker).
### Web Assets
By default, all assets required by Dashy come bundled within the source, and so no external requests are made. If you add an additional font, which is imported from a CDN, then that will incur an external request. The same applies for other web assets, like external images, scripts or styles.
### Status Checking
The status check util will ping your services directly, and does not rely on any third party. If you are checking the uptime status of a public/ hosted application, then please refer to that services privacy policy. For all self-hosted services, requests happen locally within your network, and are not external.
### Update Checks
When the application loads, it checks for updates. The results of which are displayed in the config menu of the UI. This was implemented because using a very outdated version of Dashy may have unfixed issues. Your version is fetched from the source (local request), but the latest version is fetched from GitHub, which is an external request. This can be disabled by setting `appConfig.disableUpdateChecks: true`
### Anonymous Error Reporting
Error reporting is disabled by default, and no data will ever be sent without your explicit consent. In fact, the error tracking method will not even be imported unless you have actively enabled it. [Sentry](https://github.com/getsentry/sentry) is used for this, it's an open source error tracking and performance monitoring tool, which is used to identify any issues which occur in the production app (if you enable it).
The crash report includes the file or line of code that triggered the error, and a 2-layer deep stack trace. Reoccurring errors will also include the following user information: OS type (Mac, Windows, Linux, Android or iOS) and browser type (Firefox, Chrome, IE, Safari). Data scrubbing is enabled. IP address will not be stored. If any potentially identifiable data ever finds its way into a crash report, it will be automatically and permanently erased. All statistics collected are anonomized and stored securely, and ae automatically deleted after 14 days. For more about privacy and security, see the [Sentry Docs](https://sentry.io/security/).
Enabling anonymous error reporting helps me to discover bugs I was unaware of, and then fix them, in order to make Dashy more reliable long term. Error reporting is activated by setting `appConfig.enableErrorReporting: true`.
If you need to monitor bugs yourself, then you can [self-host your own Sentry Server](https://develop.sentry.dev/self-hosted/), and use it by setting `appConfig.sentryDsn` to your Sentry instances [Data Source Name](https://docs.sentry.io/product/sentry-basics/dsn-explainer/), then just enable error reporting in Dashy.
---
## Local Storage
In order for user preferences to be persisted between sessions, certain data needs to be stored in the browsers local storage. No personal info is kept here, none of this data can be accessed by other domains, and no data is ever sent to any server without your prior consent.
You can view your browsers session storage by opening up the dev tools (F12) --> Application --> Storage.
The following section outlines all data that is stored in the browsers, as cookies or local storage.
#### Cookies
- `AUTH_TOKEN` - A unique token, generated from a hash of users credentials, to verify they are authenticated. Only used when auth is enabled
#### Local Storage
- `LANGUAGE` - The locale to show app text in
- `HIDE_WELCOME_BANNER` - Set to true once user dismissed welcome message, so that it's not shown again
- `LAYOUT_ORIENTATION` - Preferred section layout, either horizontal, vertical or auto
- `COLLAPSE_STATE` - Remembers which sections are collapsed
- `ICON_SIZE` - Size of items, either small, medium or large
- `THEME` - Users applied theme
- `CUSTOM_COLORS` - Any color modifications made to a given theme
- `BACKUP_ID` - If a backup has been made, the ID is stored here
- `BACKUP_HASH` - A unique hash of the previous backups meta data
- `HIDE_SETTINGS` - Lets user hide or show the settings menu
- `USERNAME` - If user logged in, store username. Only used to show welcome message, not used for auth
- `CONF_SECTIONS` - Array of sections, only used when user applies changes locally
- `PAGE_INFO` - Config page info, only used when user applies changes locally
- `APP_CONFIG` - App config, only used when user applies changes locally
- `MOST_USED` - If smart sort is used to order items by most used, store open count
- `LAST_USED` - If smart sort is used to order items by last used, store timestamps
---
## Dependencies
As with most web projects, Dashy relies on several [dependencies](https://github.com/Lissy93/dashy/blob/master/docs/credits.md#dependencies-). For links to each, and a breakdown of their licenses, please see [Legal](https://github.com/Lissy93/dashy/blob/master/.github/LEGAL.md).
Dependencies can introduce security vulnerabilities, but since all these packages are open source any issues are usually very quickly spotted. Dashy is using Snyk for dependency security monitoring, and you can see [the latest report here](https://snyk.io/test/github/lissy93/dashy). If any issue is detected by Snyk, a note about it will appear at the top of the Reamde, and will usually be fixed within 48 hours.
Note that packages listed under `deDependencies` section are only used for building the project, and are not included in the production environment.
---
## Securing your Environment
Running your self-hosted applications in individual, containerized environments (such as containers or VMs) helps keep them isolated, and prevent an exploit in one service effecting another.
There is very little complexity involved with Dashy, and therefore the attack surface is reasonably small, but it is still important to follow best practices and employ monitoring for all your self-hosted apps. A couple of things that you should look at include:
- Use SSL for securing traffic in transit
- Configure [authentication](/docs/authentication.md#alternative-authentication-methods) to prevent unauthorized access
- Keep your system, software and Dashy up-to-date
- Ensure your server is appropriately secured
- Manage users and SSH correctly
- Enable and configure firewall rules
- Implement security, malware and traffic scanning
- Setup malicious traffic detection
- Understand the [Docker attack fronts](https://docs.docker.com/engine/security/), and follow [Docker Security Best Practices](https://snyk.io/blog/10-docker-image-security-best-practices/)
This is covered in more detail in [App Management](/docs/management.md).
---
## Security Features
#### Subresource Integrity
[Subresource Integrity](https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity) or SRI is a security feature that enables browsers to verify that resources they fetch are delivered without unexpected manipulation. It works by allowing you to provide a cryptographic hash that a fetched resource must match. This prevents the app from loading any resources that have been manipulated, by verifying the files hashes. It safeguards against the risk of an attacker injecting arbitrary malicious content into any files served up via a CDN.
Dashy supports SRI, and it is recommended to enable this if you are hosting your dashboard via a public CDN. To enable SRI, set the `INTEGRITY` environmental variable to `true`.
#### Authentication
Dashy supports both basic auth, as well as server-based SSO using Keycloak. Full details of which, along with alternate authentication methods can be found in the [Authentication Docs](/docs/authentication.md). If your dashboard is exposed to the internet and/ or contains any sensitive info it is strongly recommended to configure access control with Keycloak or another server-side method.
---
## Disabling Features
You may wish to disable features that you don't want to use, if they involve storing data in the browser or making network requests.
- To disable smart-sort (uses local storage), set `appConfig.disableSmartSort: true`
- To disable update checks (makes external request to GH), set `appConfig.disableUpdateChecks: true`
- To disable web search (redirect to external / internal content), set `appConfig.disableWebSearch: true`
- To keep status checks disabled (external/ internal requests), set `appConfig.statusCheck: false`
- To keep font-awesome icons disabled (external requests), set `appConfig.enableFontAwesome: false`
- To keep error reporting disabled (external requests and data collection), set `appConfig.enableErrorReporting: false`
- To keep the service worker disabled (stores cache of app in browser data), set `appConfig.enableServiceWorker: false`
---
## Reporting a Security Issue
If you think you've found a critical issue with Dashy, please send an email to `security@mail.alicia.omg.lol`. You can encrypt it, using [`0688 F8D3 4587 D954 E9E5 1FB8 FEDB 68F5 5C02 83A7`](https://keybase.io/aliciasykes/pgp_keys.asc?fingerprint=0688f8d34587d954e9e51fb8fedb68f55c0283a7). You should receive a response within 48 hours.
All non-critical issues can be raised as a ticket.
Please include the following information:
- Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)
- Full paths of source file(s) related to the manifestation of the issue
- The location of the affected source code (tag/branch/commit or direct URL)
- Any special configuration required to reproduce the issue
- Step-by-step instructions to reproduce the issue
- Proof-of-concept or exploit code (if possible)
- Impact of the issue, including how an attacker might exploit the issue
# Privacy & Security
Dashy was built with privacy in mind.
Self-hosting your own apps and services is a great way to protect yourself from the mass data collection employed by big tech companies, and Dashy was designed to make self-hosting easier, by keeping your local services organized and accessible from a single place. The [management docs](https://github.com/Lissy93/dashy/blob/master/docs/management.md) contains a though guide on the steps you can take to secure your homelab.
Dashy operates on the premise, that no external data requests should ever be made, unless explicitly enabled by the user. In the interest of transparency, the code is 100% open source and clearly documented throughout.
| 🔐 For privacy and security tips, check out another project of mine: **[Personal Security Checklist](https://github.com/Lissy93/personal-security-checklist)** |
|-|
## Contents
- [External Requests](#external-requests)
- [Icons](#icons)
- [Themes](#themes)
- [Widgets](#widgets)
- [Features](#features)
- [Status Checking](#status-checking)
- [Update Checks](#update-checks)
- [Cloud Backup](#cloud-backup)
- [Web Search](#web-search)
- [Error Reporting](#anonymous-error-reporting)
- [Browser Storage](#browser-storage)
- [App Dependencies](#dependencies)
- [Security Features](#security-features)
- [Securing your Environment](#securing-your-environment)
- [Reporting a Security Issue](#reporting-a-security-issue)
---
## External Requests
By default, Dashy will not make any external requests, unless you configure it to. Some features (which are off by default) do require internat access, and this section outlines those features, the services used, and links to their privacy policies.
The following section outlines all network requests that are made when certain features are enabled.
### Icons
#### Font Awesome
If either any of your sections, items or themes are using icons from font-awesome, then it will be automatically enabled. But you can also manually enable or disable it by setting `appConfig.enableFontAwesome` to `true` / `false`. Requests are made directly to Font-Awesome CDN, for more info, see the [Font Awesome Privacy Policy](https://fontawesome.com/privacy).
#### Material Design Icons
If either any of your sections, items or themes are mdi icons, then it will be automatically enabled. But you can also manually enable or disable it by setting `appConfig.enableMaterialDesignIcons` to `true` / `false`. Requests are made directly to Material-Design-Icons CDN, for more info, see the [Material Design Icons Website](https://materialdesignicons.com/).
#### Favicon Fetching
If an item's icon is set to `favicon`, then it will be auto-fetched from the corresponding URL. Since not all websites have their icon located at `/favicon.ico`, and if they do, it's often very low resolution (like `16 x 16 px`). Therefore, the default behavior is for Dashy to check if the URL is public, and if so will use an API to fetch the favicon. For self-hosted services, the favicon will be fetched from the default path, and no external requests will be made.
The default favicon API is [allesedv.com](https://favicon.allesedv.com/), but this can be changed by setting `appConfig.faviconApi` to an alternate source (`iconhorse`, `clearbit`, `faviconkit`, `besticon`, `duckduckgo`, `google` and `allesedv` are supported). If you do not want to use any API, then you can set this property to `local`, and the favicon will be fetched from the default path. For hosted services, this will still incur an external request.
#### Generative Icons
If an item has the icon set to `generative`, then an external request it made to [Dice Bear](https://dicebear.com/) to fetch the uniquely generated icon. The URL of a given service is used as the key for generating the icon, but it is first hashed and encoded for basic privacy. For more info, please reference the [Dicebear Privacy Policy](https://avatars.dicebear.com/legal/privacy-policy)
As a fallback, if Dicebear fails, then [Evatar](https://evatar.io/) is used.
#### Other Icons
Section icons, item icons and app icons are able to accept a URL to a raw image, if the image is hosted online then an external request will be made. To avoid the need to make external requests for icon assets, you can either use a self-hosted CDN, or store your images within `./public/item-icons` (which can be mounted as a volume if you're using Docker).
#### Web Assets
By default, all assets required by Dashy come bundled within the source, and so no external requests are made. If you add an additional font, which is imported from a CDN, then that will incur an external request. The same applies for other web assets, like external images, scripts or styles.
---
### Features
#### Status Checking
The status checking feature allows you to ping your apps/ services to check if they are currently operational.
Dashy will ping your services directly, and does not rely on any third party. If you are checking the uptime status of a public/ hosted application, then please refer to that services privacy policy. For all self-hosted services, requests happen locally within your network, and are not external.
#### Update Checks
When the application loads, it checks for updates. The results of which are displayed in the config menu of the UI. This was implemented because using a very outdated version of Dashy may have unfixed issues. Your version is fetched from the source (local request), but the latest version is fetched from GitHub, which is an external request. This can be disabled by setting `appConfig.disableUpdateChecks: true`
#### Cloud Backup
Dashy has an optional End-to-End encrypted [cloud backup feature](https://github.com/Lissy93/dashy/blob/master/docs/backup-restore.md). No data is ever transmitted unless you actively enable this feature through the UI.
All data is encrypted before being sent to the backend. This is done in [`CloudBackup.js`](https://github.com/Lissy93/dashy/blob/master/src/utils/CloudBackup.js), using [crypto.js](https://github.com/brix/crypto-js)'s AES method, using the users chosen password as the key. The data is then sent to a [Cloudflare worker](https://developers.cloudflare.com/workers/learning/how-workers-works) (a platform for running serverless functions), and stored in a [KV](https://developers.cloudflare.com/workers/learning/how-kv-works) data store.
Your selected password never leaves your device, and is hashed before being compared. It is only possible to restore a configuration if you have both the backup ID and decryption password. Because the data is encrypted on the client-side (before being sent to the cloud), it is not possible for a man-in-the-middle, government entity, website owner, or even Cloudflare to be able read any of your data.
#### Web Search
Dashy has a primitive [web search feature](https://github.com/Lissy93/dashy/blob/master/docs/searching.md#web-search). No external requests are made, instead you are redirected to your chosen search engine (defaults to DuckDuckGo), using your chosen opening method.
This feature can be disabled under appConfig, with `webSearch: { disableWebSearch: true }`
#### Anonymous Error Reporting
Error reporting is disabled by default, and no data will ever be sent without your explicit consent. In fact, the error tracking code isn't even imported unless you have actively enabled it. [Sentry](https://github.com/getsentry/sentry) is used for this, it's an open source error tracking and performance monitoring tool, used to identify any issues which occur in the production app (if you enable it).
The crash report includes the file or line of code that triggered the error, and a 2-layer deep stack trace. Reoccurring errors will also include the following user information: OS type (Mac, Windows, Linux, Android or iOS) and browser type (Firefox, Chrome, IE, Safari). Data scrubbing is enabled. IP address will not be stored. If any potentially identifiable data ever finds its way into a crash report, it will be automatically and permanently erased. All statistics collected are anonymized and stored securely, and ae automatically deleted after 14 days. For more about privacy and security, see the [Sentry Docs](https://sentry.io/security/).
Enabling anonymous error reporting helps me to discover bugs I was unaware of, and then fix them, in order to make Dashy more reliable long term. Error reporting is activated by setting `appConfig.enableErrorReporting: true`.
If you need to monitor bugs yourself, then you can [self-host your own Sentry Server](https://develop.sentry.dev/self-hosted/), and use it by setting `appConfig.sentryDsn` to your Sentry instances [Data Source Name](https://docs.sentry.io/product/sentry-basics/dsn-explainer/), then just enable error reporting in Dashy.
---
### Themes
Certain themes may use external assets (such as fonts or images). Currently, this only applies the Adventure theme.
---
### Widgets
Dashy supports [Widgets](/docs/widgets.md) for displaying dynamic content. Below is a list of all widgets that make external data requests, along with the endpoint they call and a link to the Privacy Policy of that service.
- **[Weather](/docs/widgets.md#weather)** and **[Weather Forecast](/docs/widgets.md#weather-forecast)**: `https://api.openweathermap.org`
- [OWM Privacy Policy](https://openweather.co.uk/privacy-policy)
- **[RSS Feed](/docs/widgets.md#rss-feed)**: `https://api.rss2json.com/v1/api.json`
- [Rss2Json Privacy Policy](https://rss2json.com/privacy-policy)
- **[IP Address](/docs/widgets.md#public-ip)**: `https://ipapi.co/json` or `http://ip-api.com/json`
- [IPGeoLocation Privacy Policy](https://ipgeolocation.io/privacy.html)
- [IP-API Privacy Policy](https://ip-api.com/docs/legal)
- **[IP Blacklist](/docs/widgets.md#ip-blacklist)**: `https://api.blacklistchecker.com`
- [Blacklist Checker Privacy Policy](https://blacklistchecker.com/privacy)
- **[Domain Monitor](/docs/widgets.md#domain-monitor)**: `http://api.whoapi.com`
- [WhoAPI Privacy Policy](https://whoapi.com/privacy-policy/)
- **[Crypto Watch List](/docs/widgets.md#crypto-watch-list)** and **[Token Price History](/docs/widgets.md#crypto-token-price-history)**: `https://api.coingecko.com`
- [CoinGecko Privacy Policy](https://www.coingecko.com/en/privacy)
- **[Wallet Balance](/docs/widgets.md#wallet-balance)**: `https://api.blockcypher.com/`
- [BlockCypher Privacy Policy](https://www.blockcypher.com/privacy.html)
- **[Code::Stats](/docs/widgets.md#code-stats)**: `https://codestats.net`
- [Code::Stats Privacy Policy](https://codestats.net/tos#privacy)
- **[AnonAddy](/docs/widgets.md#anonaddy)**: `https://app.anonaddy.com`
- [AnonAddy Privacy Policy](https://anonaddy.com/privacy/)
- **[Vulnerability Feed](/docs/widgets.md#vulnerability-feed)**: `https://www.cvedetails.com`
- [CVE Details Privacy Policy](https://www.cvedetails.com/privacy.php)
- **[Exchange Rate](/docs/widgets.md#exchange-rates)**: `https://v6.exchangerate-api.com`
- [ExchangeRateAPI Privacy Policy](https://www.exchangerate-api.com/terms)
- **[Public Holidays](/docs/widgets.md#public-holidays)**: `https://kayaposoft.com`
- [jurajmajer/enrico](https://github.com/jurajmajer/enrico)
- **[Covid-19 Status](/docs/widgets.md#covid-19-status)**: `https://codestats.net`
- [disease-sh/api](https://github.com/disease-sh/api)
- **[Sports Scores](/docs/widgets.md#sports-scores)**: `https://thesportsdb.com`
- No Policy Available
- **[News Headlines](/docs/widgets.md#news-headlines)**: `https://api.currentsapi.services`
- [CurrentsAPI Privacy Policy](https://currentsapi.services/privacy)
- **[Mullvad Status](/docs/widgets.md#mullvad-status)**: `https://am.i.mullvad.net`
- [Mullvad Privacy Policy](https://mullvad.net/en/help/privacy-policy/)
- **[TFL Status](/docs/widgets.md#tfl-status)**: `https://api.tfl.gov.uk`
- [TFL Privacy Policy](https://tfl.gov.uk/corporate/privacy-and-cookies/)
- **[Stock Price History](/docs/widgets.md#stock-price-history)**: `https://alphavantage.co`
- [AlphaVantage Privacy Policy](https://www.alphavantage.co/privacy/)
- **[ETH Gas Prices](/docs/widgets.md#eth-gas-prices)**: `https://ethgas.watch`
- [wslyvh/ethgaswatch](https://github.com/wslyvh/ethgaswatch)
- **[Joke](/docs/widgets.md#joke)**: `https://v2.jokeapi.dev`
- [SV443's Privacy Policy](https://sv443.net/privacypolicy/en)
- **[Flight Data](/docs/widgets.md#flight-data)**: `https://aerodatabox.p.rapidapi.com`
- [AeroDataBox Privacy Policy](https://www.aerodatabox.com/#h.p_CXtIYZWF_WQd)
- **[Astronomy Picture of the Day](/docs/widgets.md#astronomy-picture-of-the-day)**: `https://apodapi.herokuapp.com`
- [NASA's Privacy Policy](https://www.nasa.gov/about/highlights/HP_Privacy.html)
- **[GitHub Trending](/docs/widgets.md#github-trending)** and **[GitHub Profile Stats](/docs/widgets.md#github-profile-stats)**: `https://api.github.com`
- [GitHub's Privacy Policy](https://docs.github.com/en/github/site-policy/github-privacy-statement)
- **[Cron Monitoring (Health Checks)](/docs/widgets.md#cron-monitoring-health-checks)**: `https://healthchecks.io`
- [Health-Checks Privacy Policy](https://healthchecks.io/privacy/)
---
## Browser Storage
In order for user preferences to be persisted between sessions, certain data needs to be stored in the browsers local storage. No personal info is kept here, none of this data can be accessed by other domains, and no data is ever sent to any server without your prior consent.
You can view and delete stored data by opening up the dev tools: <kbd>F12</kbd> --> `Application` --> `Storage`.
The following section outlines all data that is stored in the browsers, as cookies, session storage or local storage.
### Cookies
> [Cookies](https://en.wikipedia.org/wiki/HTTP_cookie) will expire after their pre-defined lifetime
- `AUTH_TOKEN` - A unique token, generated from a hash of users credentials, to verify they are authenticated. Only used when auth is enabled.
### Session Storage
> [Session storage](https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage) is deleted when the current session ends (tab / window is closed)
- `SW_STATUS` - The current status of any service workers
- `ERROR_LOG` - List of recent errors
### Local Storage
> [Local storage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) is persisted between sessions, and only deleted when manually removed
- `LANGUAGE` - The locale to show app text in
- `HIDE_INFO_NOTIFICATION` - Set to true once user dismissed welcome message, so that it's not shown again
- `LAYOUT_ORIENTATION` - Preferred section layout, either horizontal, vertical or auto
- `COLLAPSE_STATE` - Remembers which sections are collapsed
- `ICON_SIZE` - Size of items, either small, medium or large
- `THEME` - Users applied theme
- `CUSTOM_COLORS` - Any color modifications made to a given theme
- `BACKUP_ID` - If a backup has been made, the ID is stored here
- `BACKUP_HASH` - A unique hash of the previous backups meta data
- `HIDE_SETTINGS` - Lets user hide or show the settings menu
- `USERNAME` - If user logged in, store username. Only used to show welcome message, not used for auth
- `CONF_SECTIONS` - Array of sections, only used when user applies changes locally
- `PAGE_INFO` - Config page info, only used when user applies changes locally
- `APP_CONFIG` - App config, only used when user applies changes locally
- `MOST_USED` - If smart sort is used to order items by most used, store open count
- `LAST_USED` - If smart sort is used to order items by last used, store timestamps
### Deleting Stored Data
You can manually view and delete session storage, local storage and cookies at anytime. Fist [open](/docs/troubleshooting.md#how-to-open-browser-console) your browsers developer tools (usually <kbd>F12</kbd>), then under the Application tab select the storage category. Here you will see a list of stored data, and you can select any item and delete it.
---
## Dependencies
As with most web projects, Dashy relies on several [dependencies](https://github.com/Lissy93/dashy/blob/master/docs/credits.md#dependencies-). For links to each, and a breakdown of their licenses, please see [Legal](https://github.com/Lissy93/dashy/blob/master/.github/LEGAL.md).
Dependencies can introduce security vulnerabilities, but since all these packages are open source any issues are usually very quickly spotted. Dashy is using Snyk for dependency security monitoring, and you can see [the latest report here](https://snyk.io/test/github/lissy93/dashy). If any issue is detected by Snyk, a note about it will appear at the top of the Readme, and will usually be fixed within 48 hours.
Note that packages listed under `devDependencies` section are only used for building the project, and are not included in the production environment.
---
## Securing your Environment
Running your self-hosted applications in individual, containerized environments (such as containers or VMs) helps keep them isolated, and prevent an exploit in one service effecting another.
If you're running Dashy in a container, see [Management Docs --> Container Security](https://github.com/Lissy93/dashy/blob/master/docs/management.md#container-security) for step-by-step security guide.
There is very little complexity involved with Dashy, and therefore the attack surface is reasonably small, but it is still important to follow best practices and employ monitoring for all your self-hosted apps. A couple of things that you should look at include:
- Use SSL for securing traffic in transit
- Configure [authentication](/docs/authentication.md#alternative-authentication-methods) to prevent unauthorized access
- Keep your system, software and Dashy up-to-date
- Ensure your server is appropriately secured
- Manage users and SSH correctly
- Enable and configure firewall rules
- Implement security, malware and traffic scanning
- Setup malicious traffic detection
- Understand the [Docker attack fronts](https://docs.docker.com/engine/security/), and follow [Docker Security Best Practices](https://snyk.io/blog/10-docker-image-security-best-practices/)
This is covered in more detail in [App Management](/docs/management.md).
---
## Security Features
### Subresource Integrity
[Subresource Integrity](https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity) or SRI is a security feature that enables browsers to verify that resources they fetch are delivered without unexpected manipulation. It works by allowing you to provide a cryptographic hash that a fetched resource must match. This prevents the app from loading any resources that have been manipulated, by verifying the files hashes. It safeguards against the risk of an attacker injecting arbitrary malicious content into any files served up via a CDN.
Dashy supports SRI, and it is recommended to enable this if you are hosting your dashboard via a public CDN. To enable SRI, set the `INTEGRITY` environmental variable to `true`.
### SSL
Native SSL support is enabled, for setup instructions, see the [Management Docs](/docs/management.md#ssl-certificates)
### Authentication
Dashy supports both basic auth, as well as server-based SSO using Keycloak. Full details of which, along with alternate authentication methods can be found in the [Authentication Docs](/docs/authentication.md). If your dashboard is exposed to the internet and/ or contains any sensitive info it is strongly recommended to configure access control with Keycloak or another server-side method.
---
## Disabling Features
You may wish to disable features that you don't want to use, if they involve storing data in the browser or making network requests.
- To disable smart-sort (uses local storage), set `appConfig.disableSmartSort: true`
- To disable update checks (makes external request to GH), set `appConfig.disableUpdateChecks: true`
- To disable web search (redirect to external / internal content), set `appConfig.disableWebSearch: true`
- To keep status checks disabled (external/ internal requests), set `appConfig.statusCheck: false`
- To keep font-awesome icons disabled (external requests), set `appConfig.enableFontAwesome: false`
- To keep error reporting disabled (external requests and data collection), set `appConfig.enableErrorReporting: false`
- To keep the service worker disabled (stores cache of app in browser data), set `appConfig.enableServiceWorker: false`
---
## Reporting a Security Issue
If you think you've found a critical issue with Dashy, please send an email to `security@mail.alicia.omg.lol`. You can encrypt it, using [`0688 F8D3 4587 D954 E9E5 1FB8 FEDB 68F5 5C02 83A7`](https://keybase.io/aliciasykes/pgp_keys.asc?fingerprint=0688f8d34587d954e9e51fb8fedb68f55c0283a7). You should receive a response within 48 hours. For more information, see [SECURITY.md](https://github.com/Lissy93/dashy/blob/master/.github/SECURITY.md).
All non-critical issues can be raised as a ticket.
Please include the following information:
- Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)
- Full paths of source file(s) related to the manifestation of the issue
- The location of the affected source code (tag/branch/commit or direct URL)
- Any special configuration required to reproduce the issue
- Step-by-step instructions to reproduce the issue
- Proof-of-concept or exploit code (if possible)
- Impact of the issue, including how an attacker might exploit the issue

View File

@ -2,7 +2,7 @@
Welcome to Dashy! So glad you're here 😊 In a couple of minutes, you'll have your new dashboard up and running 🚀
**TDLR;** Run `docker run -p 8080:80 lissy93/dashy`, then open `http://localhost:8080`
**TLDR;** Run `docker run -p 8080:8080 lissy93/dashy`, then open `http://localhost:8080`
---
@ -16,10 +16,11 @@ If you don't want to use Docker, then you can use one of Dashy's other supported
## 2. Installation
To pull the latest image, and build and start the app run:
```
```bash
docker run -d \
-p 8080:80 \
-v ~/my-conf.yml:/app/public/conf.yml \
-p 8080:8080 \
-v ~/my-conf.yml:/app/user-data/conf.yml \
--name my-dashboard \
--restart=always \
lissy93/dashy:latest
@ -31,15 +32,41 @@ Your dashboard should now be up and running at `http://localhost:8080` (or your
---
## 3. Configure
## 3. User Data Directory
Your config file should be placed inside `user-data/` (in Docker, that's `/app/user-data/`).
This directory can also contain some optional assets you wish to use within your dashboard, like icons, fonts, styles, scripts, etc.
Any files placed here will be served up to the root of the domain, and override the contents of `public/`.
For example, if you had `user-data/favicon.ico` this would be accessible at `http://my-dashy-instance.local/favicon.ico`
Example Files in `user-data`:
- `conf.yml` - This is the only file that is compulsary, it's your main Dashy config
- `**.yml` - Include more config files, if you'd like to have multiple pages, see [Multi-page support](/docs/pages-and-sections.md#multi-page-support) for docs
- `favicon.ico` - The default favicon, shown in the browser's tab title
- `initialization.html` - Static HTML page displayed before the app has finished compiling, see [`public/initialization.html`](https://github.com/Lissy93/dashy/blob/master/public/initialization.html)
- `robots.txt` - Search engine crawl rules, override this if you want your dashboard to be indexable
- `manifest.json` - PWA configuration file, for installing Dashy on mobile devices
- `index.html` - The main index page which initializes the client-side app, copy it from [`/public/index.html`](https://github.com/Lissy93/dashy/blob/master/public/index.html)
- `**.html` - Write your own HTML pages, and access them at `http://my-dashy-instance.local/my-page.html`
- `fonts/` - Custom fonts (be sure to include the ones already in [`public/fonts`](https://github.com/Lissy93/dashy/tree/master/public/fonts)
- `item-icons/` - To use your own icons for items on your dashboard, see [Icons --> Local Icons](/docs/icons.md#local-icons)
- `web-icons/` - Override Dashy logo
- `widget-resources/` - Fonts, icons and assets for custom widgets
---
## 4. Configure
Now that you've got Dashy running, you are going to want to set it up with your own content.
Config is written in [YAML Format](https://yaml.org/), and saved in [`/public/conf.yml`](https://github.com/Lissy93/dashy/blob/master/public/conf.yml).
Config is written in [YAML Format](https://yaml.org/), and saved in [`/user-data/conf.yml`](https://github.com/Lissy93/dashy/blob/master/user-data/conf.yml).
The format on the config file is pretty straight forward. There are three root attributes:
- [`pageInfo`](https://github.com/Lissy93/dashy/blob/master/docs/configuring.md#pageinfo) - Dashboard meta data, like title, description, nav bar links and footer text
- [`appConfig`](https://github.com/Lissy93/dashy/blob/master/docs/configuring.md#appconfig-optional) - Dashboard settings, like themes, authentication, language and customization
- [`sections`](https://github.com/Lissy93/dashy/blob/master/docs/configuring.md#section) - An array of sections, each including an array of items
- [`pages`](https://github.com/Lissy93/dashy/blob/master/docs/configuring.md#pages-optional) - Have multiples pages in your dashboard
You can view a full list of all available config options in the [Configuring Docs](https://github.com/Lissy93/dashy/blob/master/docs/configuring.md).
@ -69,21 +96,22 @@ sections: # An array of sections
```
Notes:
- You can use a Docker volume to pass a config file from your host system to the container
- E.g. `-v ./host-system/my-local-conf.yml:/app/public/conf.yml`
- E.g. `-v ./host-system/my-local-conf.yml:/app/user-data/conf.yml`
- It's also possible to edit your config directly through the UI, and changes will be saved in this file
- Check your config against Dashy's schema, with `docker exec -it [container-id] yarn validate-config`
- You might find it helpful to look at some examples, a collection of which can be [found here](https://gist.github.com/Lissy93/000f712a5ce98f212817d20bc16bab10)
- After editing your config, the app will rebuild in the background, which may take a minute
- It's also possible to load a remote config, e.g. from a GitHub Gist
---
## 4. Further Customisation
## 5. Further Customisation
Once you've got Dashy setup, you'll want to ensure the container is properly healthy, secured, backed up and kept up-to-date. All this is covered in the [Management Docs](https://github.com/Lissy93/dashy/blob/master/docs/management.md).
You might also want to check out the docs for specific features you'd like to use:
- [Authentication](/docs/authentication.md) - Setting up authentication to protect your dashboard
- [Alternate Views](/docs/alternate-views.md) - Using the startpage and workspace view
- [Backup & Restore](/docs/backup-restore.md) - Guide to Dashy's cloud sync feature
@ -95,13 +123,13 @@ You might also want to check out the docs for specific features you'd like to us
---
## 5. Final Note
## 6. Final Note
If you need any help or support in getting Dashy running, head over to the [Discussions](https://github.com/Lissy93/dashy/discussions) page. If you think you've found a bug, please do [raise it](https://github.com/Lissy93/dashy/issues/new/choose) so it can be fixed. For contact options, see the [Support Page](https://github.com/Lissy93/dashy/blob/master/.github/SUPPORT.md).
If you're enjoying Dashy, and have a few minutes to spare, please do take a moment to look at the [Contributing Page](https://github.com/Lissy93/dashy/blob/master/docs/contributing.md). Huge thanks to [everyone](https://github.com/Lissy93/dashy/blob/master/docs/credits.md) who has already helped out!
Enjoy your dashboard :)
Enjoy your dashboard :)
---
@ -109,32 +137,36 @@ Enjoy your dashboard :)
You can also easily run the app on your system without Docker. For this [Git](https://git-scm.com/downloads), [Node.js](https://nodejs.org/), and [Yarn](https://yarnpkg.com/) are required.
```
```bash
git clone https://github.com/Lissy93/dashy.git && cd dashy
yarn # Install dependencies
yarn build # Build the app
yarn start # Start the app
```
Then edit `./public/conf.yml` and rebuild the app with `yarn build`
Then edit `./user-data/conf.yml`
---
## Alternative Deployment Method 2 - Netlify
Don't have a server? No problem! You can run Dashy for free on Netlify (as well as many [other cloud providers](./docs/deployment.md#deploy-to-cloud-service)). All you need it a GitHub account.
1. Fork Dashy's repository on GitHub
2. [Log in](app.netlify.com/login/) to Netlify with GitHub
3. Click "New site from Git" and select your forked repo, then click **Deploy**!
4. You can then edit the config in `./public/conf.yml` in your repo, and Netlify will rebuild the app
4. You can then edit the config in `./user-data/conf.yml` in your repo, and Netlify will rebuild the app
---
## Alternative Deployment Method 3 - Cloud Services
Dashy supports 1-Click deployments on several popular cloud platforms. To spin up a new instance, just click a link below:
- [<img src="https://i.ibb.co/ZxtzrP3/netlify.png" width="18"/> Deploy to Netlify](https://app.netlify.com/start/deploy?repository=https://github.com/lissy93/dashy)
- [<img src="https://i.ibb.co/d2P1WZ7/heroku.png" width="18"/> Deploy to Heroku](https://heroku.com/deploy?template=https://github.com/Lissy93/dashy)
- [<img src="https://i.ibb.co/Ld2FZzb/vercel.png" width="18"/> Deploy to Vercel](https://vercel.com/new/project?template=https://github.com/lissy93/dashy)
- [<img src="https://i.ibb.co/xCHtzgh/render.png" width="18"/> Deploy to Render](https://render.com/deploy?repo=https://github.com/lissy93/dashy/tree/deploy_render)
- [<img src="https://i.ibb.co/J7MGymY/googlecloud.png" width="18"/> Deploy to GCP](https://deploy.cloud.run/?git_repo=https://github.com/lissy93/dashy.git)
- [<img src="https://i.ibb.co/HVWVYF7/docker.png" width="18"/> Deploy to PWD](https://labs.play-with-docker.com/?stack=https://raw.githubusercontent.com/Lissy93/dashy/master/docker-compose.yml)
- [<img src="https://i.ibb.co/HVWVYF7/docker.png" width="18"/> Deploy to PWD](https://labs.play-with-docker.com/?stack=https://raw.githubusercontent.com/Lissy93/dashy/master/docker-compose.yml)
- [<img src="https://i.ibb.co/7NxnM2P/easypanel.png" width="18"/> Deploy to Easypanel](https://easypanel.io/docs/templates/dashy)

View File

@ -1,13 +1,15 @@
![Dashy Docs](https://i.ibb.co/4mdNf7M/heading-docs.png)
# ![Dashy Docs](https://i.ibb.co/4mdNf7M/heading-docs.png)
### Running Dashy
- [Quick Start](/docs/quick-start.md) - TDLR guide on getting Dashy up and running
## Running Dashy
- [Quick Start](/docs/quick-start.md) - TLDR guide on getting Dashy up and running
- [Deployment](/docs/deployment.md) - Full guide on deploying Dashy either locally or online
- [Configuring](/docs/configuring.md) - Complete list of all available options in the config file
- [App Management](/docs/management.md) - Managing your app, updating, security, web server configuration, etc
- [Troubleshooting](/docs/troubleshooting.md) - Common errors and problems, and how to fix them
### Development and Contributing
## Development and Contributing
- [Developing](/docs/developing.md) - Running Dashy development server locally, and general workflow
- [Development Guides](/docs/development-guides.md) - Common development tasks, to help new contributors
- [Contributing](/docs/contributing.md) - How you can help keep Dashy alive
@ -15,18 +17,21 @@
- [Credits](/docs/credits.md) - List of people and projects that have made Dashy possible
- [Release Workflow](/docs/release-workflow.md) - Info about releases, CI and automated tasks
### Feature Docs
## Feature Docs
- [Authentication](/docs/authentication.md) - Guide to setting up authentication to protect your dashboard
- [Alternate Views](/docs/alternate-views.md) - Outline of available pages / views and item opening methods
- [Backup & Restore](/docs/backup-restore.md) - Guide to backing up config with Dashy's cloud sync feature
- [Icons](/docs/icons.md) - Outline of all available icon types for sections and items, with examples
- [Language Switching](/docs/multi-language-support.md) - Details on how to switch language, or add a new locale
- [Pages and Sections](/docs/pages-and-sections.md) - Multi-page support, sections, items and sub-items
- [Status Indicators](/docs/status-indicators.md) - Using Dashy to monitor uptime and status of your apps
- [Searching & Shortcuts](/docs/searching.md) - Searching, launching methods + keyboard shortcuts
- [Theming](/docs/theming.md) - Complete guide to applying, writing and modifying themes + styles
- [Widgets](/docs/widgets.md) - List of all dynamic content widgets, with usage guides and examples
### Misc
## Misc
- [Privacy & Security](/docs/privacy.md) - List of requests, potential issues, and security resources
- [License](/LICENSE) - Copy of the MIT License
- [Legal](/.github/LEGAL.md) - Licenses of direct dependencies

View File

@ -21,17 +21,20 @@ For a full breakdown of each change, you can view the [Changelog](https://github
All changes and new features are submitted as pull requests, which can then be tested, reviewed and (hopefully) merged into the master branch. Every time there is a change in the major version number, a new release is published. This usually happens every 2 weeks, on a Sunday.
When a PR is opened:
- The feature branch is built, and deployed as a Netlify instance. This can be accessed at: `https://deploy-preview-[pr-number]--dashy-dev.netlify.app`, and this URL as well as a link to the build logs are added as a comment on the PR by Netlify bot
- Depending on what files were modified, the bot may also add a comment to remind the author of useful info
- A series of checks will run on the new code, using GH Actions, and prevent merging if they fail. This includes: linting, testing, code quality and complexity checking, security scanning and a spell check
- If a new dependency was added, liss-bot will comment with a summary of those changes, as well as the cost of the module, version, and any security concerns. If the bundle size has increased, this will also be added as a comment
After the PR is merged:
- The app is build, and deployed to: https://dev.dashy.to
- The app is build, and deployed to: <https://dev.dashy.to>
- A new tag in GitHub is created, using the apps version number (from the package.json)
- The Docker container is built, and published under the `:latest` tag on DockerHub and GHCR
When a new major version is released:
- A new GitHub release is created and published, under new versions tag, with info from the changelog
- The container is built and published under a new tag will be created on DockerHub, called `:release-[version]`
- An announcement is opened in GitHub discussions, outlining the main changes, where users can comment and ask questions
@ -43,19 +46,22 @@ When a new major version is released:
## Git Strategy
### Git Flow
Like most Git repos, we are following the [Github Flow](https://guides.github.com/introduction/flow) standard.
1. Create a branch (or fork if you don'd have write acces)
1. Create a branch (or fork if you don'd have write access)
2. Code some awesome stuff, then add and commit your changes
3. Create a Pull Request, complete the checklist and ensure the build succeeds
4. Follow up with any reviews on your code
5. Merge 🎉
### Git Branch Naming
The format of your branch name should be something similar to: `[TYPE]/[TICKET]_[TITLE]`
For example, `FEATURE/420_Awesome-feature` or `FIX/690_login-server-error`
### Commit Emojis
Using a single emoji at the start of each commit message, to indicate the type task, makes the commit ledger easier to understand, plus it looks cool.
- 🎨 `:art:` - Improve structure / format of the code.
@ -86,14 +92,17 @@ Using a single emoji at the start of each commit message, to indicate the type t
For a full list of options, see [gitmoji.dev](https://gitmoji.dev/)
### PR Guidelines
Once you've made your changes, and pushed them to your fork or branch, you're ready to open a pull request!
For a pull request to be merged, it must:
- Must be backwards compatible
- The build, lint and tests (run by GH actions) must pass
- There must not be any merge conflicts
When you submit your PR, include the required info, by filling out the PR template. Including:
- A brief description of your changes
- The issue, ticket or discussion number (if applicable)
- For UI relate updates include a screenshot
@ -104,8 +113,7 @@ When you submit your PR, include the required info, by filling out the PR templa
## Automated Workflows
Dashy makes heavy use of [GitHub Actions](https://github.com/features/actions) to fully automate the checking, testing, building, deploying of the project, as well as administration tasks like management of issues, tags, releases and documentation. The following section outlines each workflow, along with a link the the action file, current status and short description. A lot of these automations were made possible using community actions contributed to GH marketplace by some amazing people.
Dashy makes heavy use of [GitHub Actions](https://github.com/features/actions) to fully automate the checking, testing, building, deploying of the project, as well as administration tasks like management of issues, tags, releases and documentation. The following section outlines each workflow, along with a link the the action file, current status and short description. A lot of these automations were made possible using community actions contributed to GH marketplace by some amazing people.
### Code Processing
@ -155,4 +163,4 @@ Action | Description
**Generate Credits** <br/>[![generate-credits.yml](https://github.com/Lissy93/dashy/actions/workflows/generate-credits.yml/badge.svg)](https://github.com/Lissy93/dashy/actions/workflows/generate-credits.yml) | Generates a report, including contributors, collaborators, sponsors, bots and helpful users. Will then insert a markdown table with thanks to these GitHub users and links to their profiles into the Credits page, as well as a summary of sponsors and top contributors into the main readme
**Wiki Sync** <br/>[![wiki-sync.yml](https://github.com/Lissy93/dashy/actions/workflows/wiki-sync.yml/badge.svg)](https://github.com/Lissy93/dashy/actions/workflows/wiki-sync.yml) | Generates and publishes the repositories wiki page using the markdown files within the docs directory
---
---

View File

@ -1,16 +1,20 @@
# Keyboard Shortcuts
## Searching
One of the primary purposes of Dashy is to allow you to quickly find and launch a given app. To make this as quick as possible, there is no need to touch the mouse, or press a certain key to begin searching - just start typing. Results will be filtered in real-time. No need to worry about case, special characters or small typos, these are taken care of, and your results should appear.
## Navigating
You can navigate through your items or search results using the keyboard. You can use <kbd>Tab</kbd> to cycle through results, and <kbd>Shift</kbd> + <kbd>Tab</kbd> to go backwards. Or use the arrow keys, <kbd></kbd>, <kbd></kbd>, <kbd></kbd> and <kbd></kbd>.
## Launching Apps
You can launch a elected app by hitting <kbd>Enter</kbd>. This will open the app using your default opening method, specified in `target` (either `newtab`, `sametab`, `modal`, `top` or `workspace`). You can also use <kbd>Alt</kbd> + <kbd>Enter</kbd> to open the app in a pop-up modal, or <kbd>Ctrl</kbd> + <kbd>Enter</kbd> to open it in a new tab. For all available opening methods, just right-click on an item, to bring up the context menu.
## Tags
By default, items are filtered by the `title` attribute, as well as the hostname (extracted from `url`), the `provider` and `description`. If you need to find results based on text which isn't included in these attributes, then you can add `tags` to a given item.
By default, items are filtered by the `title` attribute, as well as the hostname (extracted from `url`), the `provider` and `description`. If you need to find results based on text which isn't included in these attributes, then you can add `tags` to a given item.
```yaml
items:
@ -29,8 +33,8 @@ By default, items are filtered by the `title` attribute, as well as the hostname
In the above example, Plex will be visible when searching for 'movies', and FreshRSS with 'news'
## Custom Hotkeys
For apps that you use regularly, you can set a custom keybinding. Use the `hotkey` parameter on a certain item to specify a numeric key, between `0 - 9`. You can then launch that app, by just pressing that key, which is much quicker than searching for it, if it's an app you use frequently.
```yaml
@ -48,18 +52,23 @@ For apps that you use regularly, you can set a custom keybinding. Use the `hotke
In the above example, pressing <kbd>2</kbd> will launch Bookstack. Or hitting <kbd>3</kbd> will open Git in the workspace view.
## Web Search
It's possible to search the web directly from Dashy, which might be useful if you're using Dashy as your start page. This can be done by typing your query as normal, and then pressing <kbd></kbd>. Web search options are configured under `appConfig.webSearch`.
### Setting Search Engine
Set your default search engine using the `webSearch.searchEngine` property. This defaults to DuckDuckGo. Search engine must be referenced by their key, the following providers are supported:
- [`duckduckgo`](https://duckduckgo.com), [`google`](https://google.com), [`whoogle`](https://whoogle.sdf.org), [`qwant`](https://www.qwant.com), [`startpage`](https://www.startpage.com), [`searx-bar`](https://searx.bar), [`searx-info`](https://searx.info)
- [`searx-tiekoetter`](https://searx.tiekoetter.com), [`searx-bissisoft`](https://searx.bissisoft.com), [`ecosia`](https://www.ecosia.org), [`metager`](https://metager.org/meta), [`swisscows`](https://swisscows.com), [`mojeek`](https://www.mojeek.com)
- [`wikipedia`](https://en.wikipedia.org), [`wolframalpha`](https://www.wolframalpha.com), [`stackoverflow`](https://stackoverflow.com), [`github`](https://github.com), [`reddit`](https://www.reddit.com), [`youtube`](https://youtube.com), [`bbc`](https://www.bbc.co.uk)
### Using Custom Search Engine
You can also use a custom search engine, that isn't included in the above list (like a self-hosted instance of [Whoogle](https://github.com/benbusby/whoogle-search) or [Searx](https://searx.github.io/searx/)). Set `searchEngine: custom`, and then specify the URL (plus query params) to you're search engine under `customSearchEngine`.
For example:
For example:
```yaml
appConfig:
webSearch:
@ -68,12 +77,14 @@ appConfig:
```
### Setting Opening Method
In a similar way to opening apps, you can specify where you would like search results to be opened. This is done under the `openingMethod` attribute, and can be set to either `newtab`, `sametab` or `workspace`. By default results are opened in a new tab.
### Using Bangs
An insanely useful feature of DDG is [Bangs](https://duckduckgo.com/bang), where you type a specific character combination at the start of your search query, and it will be redirected the that website, such as '!w Docker' will display the Docker wikipedia page. Dashy has a similar feature, enabling you to define your own custom bangs to redirect search results to a specific app, website or search engine.
This is done under the `searchBangs` property, with a list of key value pairs. The key is what you will type, and the value is the destination, either as an identifier or a URL with query parameters.
This is done under the `searchBangs` property, with a list of key value pairs. The key is what you will type, and the value is the destination, either as an identifier or a URL with query parameters.
For example:
@ -95,6 +106,7 @@ appConfig:
Note that bangs begging with `!` or `:` must be surrounded them in quotes
### Disabling Web Search
Web search can be disabled, by setting `disableWebSearch`, for example:
```yaml
@ -103,5 +115,6 @@ appConfig:
```
## Clearing Search
You can clear your search term at any time, resting the UI to it's initial state, by pressing <kbd>Esc</kbd>.
This can also be used to close any open pop-up modals.

View File

@ -1,76 +1,168 @@
# *Dashy Showcase* 🌟
| 💗 Do you use Dashy? Got a sweet dashboard? Submit it to the showcase! 👉 [See How](#submitting-your-dashboard) |
| 💗 Got a sweet dashboard? Submit it to the showcase! 👉 [See How](#submitting-your-dashboard) |
|-|
### Home Lab 2.0
## MNDashboard
> By [@mahrnet](https://github.com/mahrnet) <sup>Re: [#1491](https://github.com/Lissy93/dashy/issues/1491)</sup>
![screenshot-MNDashboard](https://i.ibb.co/mCJRZgp/d2-At-QO4c-PT4u.png)
---
## Home Lab 2.0
![screenshot-homelab](https://raw.githubusercontent.com/Lissy93/dashy/master/docs/showcase/1-home-lab-material.png)
---
### Ratty222
> By [@ratty222](https://github.com/ratty222) ([#384](https://github.com/Lissy93/dashy/discussions/384))
## Dipan's Dash
> By [@Dipanghosh](https://github.com/dipanghosh) - [dipan.de](https://dipan.de/) <sup>Re: [#777](https://github.com/Lissy93/dashy/discussions/777)</sup>
> With the option of embedding iframes, it becomes possible to combine and conquer. I have set up Dashy to include graphs from grafana, and set them so that they update automatically. I also have uptime monitors from uptime Kuma, panels from homeassistant are also possible to be included.<br>
> Dashy is awesome!
![screenshot-dipanghosh-dashboard](https://i.ibb.co/bPC6w2n/dipanghosh-dashboard.png)
---
## Ratty222
> By [@ratty222](https://github.com/ratty222) <sup>Re: [#384](https://github.com/Lissy93/dashy/discussions/384)</sup>
![screenshot-ratty222-dashy](https://user-images.githubusercontent.com/1862727/147582551-4c655d37-8bcc-4f95-ab41-164a9d0d6a07.png)
---
### Networking Services
## Hugalafutro Dashy
> By [@hugalafutro](https://github.com/hugalafutro) <sup>Re: [#505](https://github.com/Lissy93/dashy/discussions/505)</sup>
[![hugalafutro-dashy-screenshot](https://i.ibb.co/PDpLDKS/hugalafutro-dashy.gif)](https://i.ibb.co/PDpLDKS/hugalafutro-dashy.gif)
---
## NAS Home Dashboard
> By [@cerealconyogurt](https://github.com/cerealconyogurt) <sup>Re: [#74](https://github.com/Lissy93/dashy/issues/74)</sup>
![screenshot-networking-services](https://raw.githubusercontent.com/Lissy93/dashy/master/docs/showcase/6-nas-home-dashboard.png)
---
## Brewhack
> By [@brpeterso](https://github.com/brpeterso) <sup>Re: [#680](https://github.com/Lissy93/dashy/issues/680)</sup>
![screenshot-brewhack-dashboard](https://i.ibb.co/cNjzPT4/brewhack.png)
---
## The Dragons Lair
> By [dr460nf1r3](https://github.com/dr460nf1r3) <sup>via [#684](https://github.com/Lissy93/dashy/issues/684)</sup>
> My new startpage featuring the stuff I use most. And of course dragons!
![screenshot-dragons-lair](https://raw.githubusercontent.com/Lissy93/dashy/master/docs/showcase/13-dragons-lair.png)
---
## Homelab & VPS dashboard
> By [@shadowking001](https://github.com/shadowking001) <sup>Re: [#86](https://github.com/Lissy93/dashy/issues/86)</sup>
![screenshot-shadowking001-dashy](https://raw.githubusercontent.com/Lissy93/dashy/master/docs/showcase/8-shadowking001s-dashy.png)
---
## Raspberry PI Docker Dashboard
> By [@henkiewie](https://github.com/henkiewie) <sup>Re: [#622](https://github.com/Lissy93/dashy/issues/622)</sup>
> I use this dashboard every day. It now even includes a player for a radio stream which I configured with Logitech media server and icecast. I made an smaller version of the grafana dashboard to fit an iframe in kiosk mode, so it monitors the most important values of my RPI. The PI is in Argon m2 case and used as a NAS. The dashboard is a copy of the adventure theme with some changes saved in `/app/src/styles/user-defined-themes.scss`
![screenshot-henkiewie-dashy](https://i.ibb.co/jGzPm6b/henkiewie-dashy-showcase.png)
---
## First Week of Self-Hosting
> By [u//RickyCZ](https://www.reddit.com/user/RickyCZ) <sup>via [Reddit](https://www.reddit.com/r/selfhosted/comments/pose15/just_got_started_a_week_ago_selfhosting_is_very/)</sup>
![screenshot-week-of-self-hosting](https://raw.githubusercontent.com/Lissy93/dashy/master/docs/showcase/11-ricky-cz.png)
---
## EVO Dashboard
> By [@EVOTk](https://github.com/EVOTk) <sup>Re: [#316](https://github.com/Lissy93/dashy/pull/316)</sup>
![screenshot-evo-dashboard](https://raw.githubusercontent.com/Lissy93/dashy/master/docs/showcase/12-evo-dashboard.png)
---
## The Private Dashboard
> By [@DylanBeMe](https://github.com/DylanBeMe) <sup>Re: [#419](https://github.com/Lissy93/dashy/issues/419)</sup>
![screenshot-private-dashboard](https://i.ibb.co/hKS483T/private-dashboard-Dylan-Be-Me.png)
---
## Networking Services
> By [@Lissy93](https://github.com/lissy93)
![screenshot-networking-services](https://raw.githubusercontent.com/Lissy93/dashy/master/docs/showcase/2-networking-services-minimal-dark.png)
---
### Homelab & VPS dashboard
> By [@shadowking001](https://github.com/shadowking001)
## Dashy Live
![screenshot-shadowking001-dashy](https://raw.githubusercontent.com/Lissy93/dashy/master/docs/showcase/8-shadowking001s-dashy.png)
---
### EVO Dashboard
> By [@EVOTk](https://github.com/EVOTk)
![screenshot-evo-dashboard](https://raw.githubusercontent.com/Lissy93/dashy/master/docs/showcase/12-evo-dashboard.png)
---
### NAS Home Dashboard
> By [@cerealconyogurt](https://github.com/cerealconyogurt)
![screenshot-networking-services](https://raw.githubusercontent.com/Lissy93/dashy/master/docs/showcase/6-nas-home-dashboard.png)
---
### Dashy Live
> By [@Lissy93](https://github.com/lissy93)
> A dashboard I made to manage all project development links from one place. View demo at [live.dashy.to](https://live.dashy.to/).
![screenshot-dashy-live](https://raw.githubusercontent.com/Lissy93/dashy/master/docs/showcase/10-dashy-live.png)
### CFT Toolbox
---
## System Monitor
> An aggregated board for monitoring system resource usage from a single view
![screenshot-monitor](https://i.ibb.co/xfK6BGb/system-monitor-board.png)
---
## Browser Startpage
![screenshot-startpage](https://i.ibb.co/rs07dS1/startpage.png)
---
## CFT Toolbox
![screenshot-cft-toolbox](https://raw.githubusercontent.com/Lissy93/dashy/master/docs/showcase/3-cft-toolbox.png)
---
### Bookmarks
## Bookmarks
![screenshot-bookmarks](https://raw.githubusercontent.com/Lissy93/dashy/master/docs/showcase/4-bookmarks-colourful.png)
---
### Project Management
## Project Management
![screenshot-project-managment](https://raw.githubusercontent.com/Lissy93/dashy/master/docs/showcase/5-project-managment.png)
![screenshot-project-management](https://raw.githubusercontent.com/Lissy93/dashy/master/docs/showcase/5-project-management.png)
---
### Dashy Example
## Dashy Example
> An example dashboard, by [@Lissy93](https://github.com/lissy93). View live at [demo.dashy.to](https://demo.dashy.to/).
@ -78,39 +170,57 @@
---
### First Week of Self-Hosting
> By [u//RickyCZ](https://www.reddit.com/user/RickyCZ)
## HomeLAb 3.0
![screenshot-week-of-self-hosting](https://raw.githubusercontent.com/Lissy93/dashy/master/docs/showcase/11-ricky-cz.png)
---
### HomeLAb 3.0
> By [@skoogee](https://github.com/skoogee) (http://zhrn.cc)
> By [@skoogee](https://github.com/skoogee) (<http://zhrn.cc>) <sup>[#279](https://github.com/Lissy93/dashy/issues/279)</sup>
> Dashy, is the most complete dashboard I ever tried, has all the features, and it sets itself apart from the rest. It is my default homepage now. I am thankful to the developer @Lissy93 for sharing such a wonderful creation.
[![screenshot-12-skoogee-homelab-3](https://i.ibb.co/F5yBTsT/12-skoogee-homelab-3.png)](https://ibb.co/album/ynSwzm)
[![screenshot-12-skoogee-homelab-3](https://i.ibb.co/F5yBTsT/12-skoogee-homelab-3.png?)](https://ibb.co/album/ynSwzm)
---
### Ground Control
> By [@dtctek](https://github.com/dtctek)
## Ground Control
![screenshot-ground-control](https://raw.githubusercontent.com/Lissy93/dashy/master/docs/showcase/7-ground-control-dtctek.png)
> By [@dtctek](https://github.com/dtctek) <sup>Re: [#83](https://github.com/Lissy93/dashy/issues/83)</sup>
![screenshot-ground-control](https://user-images.githubusercontent.com/1862727/149821995-e9b41dab-186c-42e6-b5b3-e233259b241d.png)
---
### Crypto Dash
> Example usage of widgets to monitor cryptocurrencies news, prices and data. Config is [available here](https://gist.github.com/Lissy93/000f712a5ce98f212817d20bc16bab10#file-example-8-dashy-crypto-widgets-conf-yml)
## Croco_Grievous
> By [u/Croco_Grievous](https://www.reddit.com/user/Croco_Grievous/) <sup>via [reddit](https://www.reddit.com/r/selfhosted/comments/t4xk3z/everything_started_with_pihole_on_a_raspberry_pi/)</sup>
![screenshot-croco-grievous-dashy](https://i.ibb.co/59XR8KL/dashy-Croco-Grievous.png)
---
## Crypto Dash
> Example usage of widgets to monitor cryptocurrencies news, prices and data. Config is [available here](https://gist.github.com/Lissy93/000f712a5ce98f212817d20bc16bab10#file-example-8-dashy-crypto-widgets-conf-yml)
![screenshot-crypto-dash](https://user-images.githubusercontent.com/1862727/147394584-352fe3bf-740d-4624-a01b-9003a97bc832.png)
---
### Yet Another Homelab
## Stefantigro
> By [u/stefantigro](https://www.reddit.com/user/stefantigro/) <sup>via [reddit](https://www.reddit.com/r/selfhosted/comments/t5oril/been_selfhosting_close_to_half_a_year_now_all/)</sup>
![screenshot-stefantigro-dashy](https://i.ibb.co/1Kb43Yy/dashy-stefantigro.png)
---
## Morning Dashboard
> Displayed on my smart screen between 05:00 - 08:00, and includes all the info that I usually check before leaving for work
![screenshot-morning-dash](https://i.ibb.co/4Wx8zb7/morning-dashboard.png)
---
## Yet Another Homelab
![screenshot-yet-another-homelab](https://raw.githubusercontent.com/Lissy93/dashy/master/docs/showcase/9-home-lab-oblivion.png)
@ -118,30 +228,33 @@
## Submitting your Dashboard
#### How to Submit
### How to Submit
- [Open an Issue](https://git.io/JEtgM)
- [Open a PR](https://github.com/Lissy93/dashy/compare)
#### What to Include
### What to Include
Please include the following information:
- A single high-quality screenshot of your Dashboard
- A short title (it doesn't have to be particularly imaginative)
- An optional description, you could include details on anything interesting or unique about your dashboard, or say how you use it, and why it's awesome
- Optionally leave your name or username, with a link to your GitHub, Twitter or Website
#### Template
### Template
If you're submitting a pull request, please use a format similar to this:
```
```text
### [Dashboard Name] (required)
> Submitted by [@username](https://github.com/user) (optional)
![dashboard-screenshot](/docs/showcase/screenshot-name.jpg) (required)
[An optional text description, or any interesting details] (optional)
![dashboard-screenshot](https://example.com/url-to-screenshot.png) (required)
---
```

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 KiB

View File

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 108 KiB

View File

@ -1,21 +1,24 @@
# Status Indicators
Dashy has an optional feature that can display a small icon next to each of your running services, indicating it's current status. This can be useful if you are using Dashy as your homelab's start page, as it gives you an overview of the health of each of your running services. The status feature will show response time, response code, online/ offline check and if applicable, a relevant error message
Dashy has an optional feature that can display a small icon next to each of your running services, indicating it's current status. This can be useful if you are using Dashy as your homelab's start page, as it gives you an overview of the health of each of your running services. The status feature will show response time, response code, online/ offline check and if applicable, a relevant error message.
<p align="center">
<img width="800" src="/docs/assets/status-check-demo.gif" />
</p>
## Enabling Status Indicators
By default, this feature is off. If you do not want this feature, just don't add the `statusCheck` to your conf.yml file, then no requests will be made.
By default, this feature is off. If you do not want this feature, just don't add the `statusCheck` to your conf.yml file, then no requests will be made.
To enable status checks, you can either turn it on for all items, by setting `appConfig.statusCheck: true`, like:
```yaml
appConfig:
statusCheck: true
```
Or you can enable/ disable it on a per-item basis, with the `item[n].statusCheck` attribute
```yaml
sections:
- name: Firewall
@ -38,49 +41,68 @@ sections:
```
## Continuous Checking
By default, with status indicators enabled Dashy will check an applications status on page load, and will not keep indicators updated. This is usually desirable behavior. However, if you do want the status indicators to continue to poll your running services, this can be enabled by setting the `statusCheckInterval` attribute. Here you define an interval as an integer in seconds, and Dashy will poll your apps every x seconds. Note that if this number is very low (below 5 seconds), you may notice the app running slightly slower.
The following example, will instruct Dashy to continuously check the status of your services every 20 seconds
The following example, will instruct Dashy to continuously check the status of your services every 20 seconds.
```
```text
appConfig:
statusCheck: true
statusCheckInterval: 20
```
## Using a Different Endpoint
By default, the status checker will use the URL of each application being checked. In some situations, you may want to use a different endpoint for status checking. Similarly, some services provide a dedicated path for uptime monitoring.
By default, the status checker will use the URL of each application being checked. In some situations, you may want to use a different endpoint for status checking. Similarly, some services provide a dedicated path for uptime monitoring.
You can set the `statusCheckUrl` property on any given item in order to do this. The status checker will then ping that endpoint, instead of the apps main `url` property.
## Setting Custom Headers
If your service is responding with an error, despite being up and running, it is most likely because custom headers for authentication, authorization or encoding are required. You can define these headers under the `statusCheckHeaders` property for any service. It should be defined as an object format, with the name of header as the key, and header content as the value.
For example, `statusCheckHeaders: { 'X-Custom-Header': 'foobar' }`
## Disabling Security
By default, (if you're using HTTPS) any requests to insecure or non-HTTPS content will be blocked. This will cause the status check to fail. If you trust the endpoint (e.g. you're self-hosting it), then you can disable this security measure for an individual item. This is done by setting `statusCheckAllowInsecure: true`
## Allowing Alternative Status Codes
If you expect your service to return a status code that is not in the 2XX range, and still want the indicator to be green, then you can specify an expected status code under `statusCheckAcceptCodes` for a given item. For example, `statusCheckAcceptCodes: '403,418'`
## Troubleshooting Failing Status Checks
If the status is always returning an error, despite the service being online, then it is most likely an issue with access control, and should be fixed with the correct headers. Hover over the failing status to see the error code and response, in order to know where to start with addressing it.
If your service requires requests to include any authorization in the headers, then use the `statusCheckHeaders` property, as described above.
If you're using status checks, and despite a given service being online, the check is displaying an error, there are a couple of things you can look at:
If your service requires requests to include any authorization in the headers, then use the `statusCheckHeaders` property, as described [above](#setting-custom-headers).
If you are still having issues, it may be because your target application is blocking requests from Dashy's IP. This is a [CORS error](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS), and can be fixed by setting the headers on your target app, to include:
```
Access-Control-Allow-Origin: https://[dashy-location]/
```text
Access-Control-Allow-Origin: https://location-of-dashy/
Vary: Origin
```
If the URL you are checking is not using HTTPS, then you may need to disable the rejection of insecure requests. This can be done by setting `statusCheckAllowInsecure` to true for a given item.
If the URL you are checking has an unsigned certificate, or is not using HTTPS, then you may need to disable the rejection of insecure requests. This can be done by setting `statusCheckAllowInsecure` to true for a given item.
If your service is online, but responds with a status code that is not in the 2xx range, then you can use `statusCheckAcceptCodes` to set an accepted status code.
If you get an error, like `Service Unavailable: Server resulted in a fatal error`, even when it's definitely online, this is most likely caused by missing the protocol. Don't forget to include `https://` (or whatever protocol) before the URL, and ensure that if needed, you've specified the port.
Running Dashy in HOST network mode, instead of BRIDGE will allow status check access to other services in HOST mode. For more info, see [#445](https://github.com/Lissy93/dashy/discussions/445).
If you have firewall rules configured, then ensure that they don't prevent Dashy from making requests to the other services you are trying to access.
Currently, the status check needs a page to be rendered, so if this URL in your browser does not return anything, then status checks will not work. This may be modified in the future, but in the meantime, a fix would be to make your own status service, which just checks if your app responds with whatever code you'd like, and then return a 200 plus renders an arbitrary message. Then just point `statusCheckUrl` to your custom page.
For further troubleshooting, use an application like [Postman](https://postman.com) to diagnose the issue. Set the parameter to `GET`, and then make a call to: `https://[url-of-dashy]/status-check/?&url=[service-url]`. Where the service URL must have first been encoded (e.g. with `encodeURIComponent()` or [urlencoder.io](https://www.urlencoder.io/))
If you're serving Dashy though a CDN, instead of using the Node server or Docker image, then the Node endpoint that makes requests will not be available to you, and all requests will fail. A workaround for this may be implemented in the future, but in the meantime, your only option is to use the Docker or Node deployment method.
If you're serving Dashy though a CDN, instead of using the Node server or Docker image, then the Node endpoint that makes requests will not be available to you, and all requests will fail. A workaround for this may be implemented in the future, but in the meantime, your only option is to use the Docker or Node deployment method.
## How it Works
When the app is loaded, if `appConfig.statusCheck: true` is set, or if any items have the `statusCheck: true` enabled, then Dashy will make a request, to `https://[your-host-name]/status-check?url=[address-or-servce]` (may al include GET params for headers and the secure flag), which in turn will ping that running service, and respond with a status code. Response time is calculated from the difference between start and end time of the request.
When the app is loaded, if `appConfig.statusCheck: true` is set, or if any items have the `statusCheck: true` enabled, then Dashy will make a request, to `https://[your-host-name]/status-check?url=[address-or-servce]` (may al include GET params for headers and the secure flag), which in turn will ping that running service, and respond with a status code. Response time is calculated from the difference between start and end time of the request.
When the response completes, an indicator will display next to each item. The color denotes the status: Yellow while waiting for the response to return, green if request was successful, red if it failed, and grey if it was unable to make the request all together.

View File

@ -1,6 +1,6 @@
## Theming
# Theming
By default Dashy comes with 20 built in themes, which can be applied from the dropwodwn menu in the UI
By default Dashy comes with 25+ built-in themes, which can be applied from the dropdown menu in the UI.
![Built-in Themes](https://i.ibb.co/GV3wRss/Dashy-Themes.png)
@ -10,8 +10,7 @@ You can customize Dashy by writing your own CSS, which can be loaded either as a
The following content requires that you have a basic understanding of CSS. If you're just beginning, you may find [this article](https://developer.mozilla.org/en-US/docs/Learn/CSS/First_steps) helpful.
### How Theme-Switching Works
## How Theme-Switching Works
The theme switching is done by simply changing the `data-theme` attribute on the root DOM element, which can then be targeted by CSS. First off, in order for the theme to show up in the theme switcher, it needs to be added to the config file, under `appConfig.cssThemes`, either as a string, or an array of strings for multiple themes. For example:
@ -33,7 +32,7 @@ Finally, from the UI use the theme dropdown menu to select your new theme, and y
You can also set `appConfig.theme` to pre-select a default theme, which will be applied immediately after deployment.
### Modifying Theme Colors
## Modifying Theme Colors
Themes can be modified either through the UI, using the color picker menu (to the right of the theme dropdown), or directly in the config file, under `appConfig.customColors`. Here you can specify the value for any of the [available CSS variables](#css-variables).
@ -59,17 +58,27 @@ appConfig:
primary: '#8be9fd'
```
### Adding your own Theme
## Adding your own Theme
User-defined styles and custom themes should be defined in `./src/styles/user-defined-themes.scss`. If you're using Docker, you can pass your own stylesheet in using the `--volume` flag. E.g. `v ./my-themes.scss:/app/src/styles/user-defined-themes.scss`. Don't forget to pass your theme name into `appConfig.cssThemes` so that it shows up on the theme-switcher dropdown.
### Setting Custom CSS in the UI
## Setting Custom CSS in the UI
Custom CSS can be developed, tested and applied directly through the UI. Although you will need to make note of your changes to apply them across instances.
This can be done from the Config menu (spanner icon in the top-right), under the Custom Styles tab. This is then associated with `appConfig.customCss` in local storage. Styles can also be directly applied to this attribute in the config file, but this may get messy very quickly if you have a lot of CSS.
### Loading External Stylesheets
## Page-Specific Styles
If you've got multiple pages within your dashboard, you can choose to target certain styles to specific pages. The top-most element within `<body>` will have a class name specific to the current sub-page. This is usually the page's name, all lowercase, with dashes instead of spaces, but you can easily check this yourself within the dev tools.
For example, if the pages name was "CFT Toolbox", and you wanted to target `.item`s, you would do:
```css
.cft-toolbox .item { border: 4px solid yellow; }
```
## Loading External Stylesheets
The URI of a stylesheet, either local or hosted on a remote CDN can be passed into the config file. The attribute `appConfig.externalStyleSheet` accepts either a string, or an array of strings. You can also pass custom font stylesheets here, they must be in a CSS format (for example, `https://fonts.googleapis.com/css2?family=Cutive+Mono`).
This is handled in [`ThemeHelper.js`](https://github.com/Lissy93/dashy/blob/master/src/utils/ThemeHelper.js).
@ -85,14 +94,16 @@ appConfig:
appConfig:
externalStyleSheet: ['/themes/my-theme-1.css', '/themes/my-theme-2.css']
```
### Hard-Coding Section or Item Colors
## Hard-Coding Section or Item Colors
Some UI components have a color option, that can be set in the config file, to force the color of a given item or section no matter what theme is selected. These colors should be expressed as hex codes (e.g. `#fff`) or HTML colors (e.g. `red`). The following attributes are supported:
- `section.color` - Custom color for a given section
- `item.color` - Font and icon color for a given item
- `item.backgroundColor` - Background color for a given icon
### Typography
## Typography
Essential fonts bundled within the app are located within `./src/assets/fonts/`. All optional fonts that are used by themes are stored in `./public/fonts/`, if you want to add your own font, this is where you should put it. As with assets, if you're using Docker then using a volume to link a directory on your host system with this path within the container will make management much easier.
@ -100,7 +111,7 @@ Fonts which are not being used by the current theme are **not** fetched on page
Full credit to the typographers behind each of the included fonts. Specifically: Matt McInerney, Christian Robertson, Haley Fiege, Peter Hull, Cyreal and the legendary Vernon Adams
### CSS Variables
## CSS Variables
All colors as well as other variable values (such as borders, border-radius, shadows) are specified as CSS variables. This makes theming the application easy, as you only need to change a given color or value in one place. You can find all variables in [`color-palette.scss`](https://github.com/Lissy93/dashy/blob/master/src/styles/color-palette.scss) and the themes which make use of these color variables are specified in [`color-themes.scss`](https://github.com/Lissy93/dashy/blob/master/src/styles/color-themes.scss)
@ -108,7 +119,8 @@ CSS variables are simple to use. You define them like: `--background: #fff;` and
You can determine the variable used by any given element, and visualize changes using the browser developer tools (Usually opened with `F12`, or Options --> More --> Developer Tools). Under the elements tab, click the Element Selector icon (usually top-left corner), you will then be able to select any DOM element on the page by hovering and clicking it. In the CSS panel you will see all styles assigned to that given element, including CSS variables. Click a variable to see it's parent value, and for color attributes, click the color square to modify the color. For more information, see this [getting started guide](https://developer.mozilla.org/en-US/docs/Learn/Common_questions/What_are_browser_developer_tools), and these articles on [selecting elements](https://developer.mozilla.org/en-US/docs/Tools/Page_Inspector/How_to/Select_an_element) and [inspecting and modifying colors](https://developer.mozilla.org/en-US/docs/Tools/Page_Inspector/How_to/Inspect_and_select_colors).
#### Top-Level Variables
### Top-Level Variables
These are all that are required to create a theme. All other variables inherit their values from these variables, and can optionally be overridden.
- `--primary` - Application primary color. Used for title, text, accents, and other features
@ -117,15 +129,15 @@ These are all that are required to create a theme. All other variables inherit t
- `--curve-factor` - The border radius used globally throughout the application. Specified in `px`, defaults to `5px`
- `--dimming-factor` - Inactive elements have slight transparency. This can be between `0` (invisible) and `1` (normal), defaults to `0.7`
### Targeted Color Variables
#### Targeted Color Variables
You can target specific elements on the UI with these variables. All are optional, since by default, they inherit their values from above
- `--heading-text-color` - Text color for web page heading and sub-heading. Defaults to `--primary`
- `--nav-link-text-color` - The text color for links displayed in the navigation bar. Defaults to `--primary`
- `--nav-link-background-color` - The background color for links displayed in the navigation bar
- `--nav-link-text-color-hover` - The text color when a navigation bar link is hovered over. Defaults to `--primary`
- `--nav-link-background-color-hover` - The background color for nav bar links when hovered over
- `--nav-link-background-color-hover` - The background color for nav bar links when hovered over
- `--nav-link-border-color` - The border color for nav bar links. Defaults to `transparent`
- `--nav-link-border-color-hover` - The border color for nav bar links when hovered over. Defaults to `--primary`
- `--search-container-background` - Background for the container containing the search bar. Defaults to `--background-darker`
@ -161,7 +173,8 @@ You can target specific elements on the UI with these variables. All are optiona
- `--context-menu-background` - Background color of right-click context menu. Defaults to `--background`
- `--context-menu-secondary-color` - Border and outline color for context menu. Defaults to `--background-darker`
#### Non-Color Variables
### Non-Color Variables
- `--outline-color` - Used to outline focused or selected elements
- `--curve-factor-navbar` - The border radius of the navbar. Usually this is greater than `--curve-factor`
- `--scroll-bar-width` - Width of horizontal and vertical scroll bars. E.g. `8px`
@ -173,7 +186,8 @@ You can target specific elements on the UI with these variables. All are optiona
- `--item-group-shadow` - The shadow for an item group/ section. Defaults to `--item-shadow`
- `--settings-container-shadow` - A shadow property for the settings container. E.g. `none`
#### Action Colors
### Action Colors
These colors represent intent, and so are not often changed, but you can do so if you wish
- `--info` - Information color, usually blue / `#04e4f4`
@ -183,5 +197,3 @@ These colors represent intent, and so are not often changed, but you can do so i
- `--neutral` - Neutral color, usually grey / `#272f4d`
- `--white` - Just white / `#fff`
- `--black` - Just black / `#000`

View File

@ -1,25 +1,97 @@
# Troubleshooting
This document contains common problems and their solutions.
> _**This document contains common problems and their solutions.**_<br>
> Please ensure your issue isn't listed here, before opening a new ticket.
>
> _Found something not listed here? Consider adding it, to help other users._
## Contents
- [Config not saving](#config-not-saving)
- [Refused to Connect in Web Content View](#refused-to-connect-in-modal-or-workspace-view)
- [404 On Static Hosting](#404-on-static-hosting)
- [404 from Mobile Home Screen](#404-after-launch-from-mobile-home-screen)
- [Yarn Build or Run Error](#yarn-error)
- [Remote Config Not Loading](#remote-config-not-loading)
- [Heap limit Allocation failed](#ineffective-mark-compacts-near-heap-limit-allocation-failed)
- [Command failed with signal "SIGKILL"](#command-failed-with-signal-sigkill)
- [Auth Validation Error: "should be object"](#auth-validation-error-should-be-object)
- [App Not Starting After Update to 2.0.4](#app-not-starting-after-update-to-204)
- [Keycloak Redirect Error](#keycloak-redirect-error)
- [Docker Directory Error](#docker-directory)
- [Config not Saving on Vercel / Netlify / CDN](#user-content-config-not-saving-on-vercel--netlify--cdn)
- [Config Not Updating](#config-not-updating)
- [Config Still not Updating](#config-still-not-updating)
- [Styles and Assets not Updating](#styles-and-assets-not-updating)
- [DockerHub toomanyrequests](#dockerhub-toomanyrequests)
- [Config Validation Errors](#config-validation-errors)
- [Node Sass unsupported environment](#node-sass-does-not-yet-support-your-current-environment)
- [Unreachable Code Error](#unreachable-code-error)
- [Cannot find module './_baseValues'](#error-cannot-find-module-_basevalues)
- [Ngrok Invalid Host Headers](#invalid-host-header-while-running-through-ngrok)
- [Warnings in the Console during deploy](#warnings-in-the-console-during-deploy)
- [Docker Login Fails on Ubuntu](#docker-login-fails-on-ubuntu)
- [Status Checks Failing](#status-checks-failing)
- [Diagnosing Widget Errors](#widget-errors)
- [Fixing Widget CORS Errors](#widget-cors-errors)
- [Widget Shows Error Incorrectly](#widget-shows-error-incorrectly)
- [Weather Forecast Widget 401](#weather-forecast-widget-401)
- [Widget Displaying Inaccurate Data](#widget-displaying-inaccurate-data)
- [Font Awesome Icons not Displaying](#font-awesome-icons-not-displaying)
- [Copy to Clipboard not Working](#copy-to-clipboard-not-working)
- [Unsupported Digital Envelope Routines](#unsupported-digital-envelope-routines)
- [How to Reset Local Settings](#how-to-reset-local-settings)
- [How to make a bug report](#how-to-make-a-bug-report)
- [How-To Open Browser Console](#how-to-open-browser-console)
- [Git Contributions not Displaying](#git-contributions-not-displaying)
---
## Config not saving
### Possible Issue 1: Unable to call save endpoint from CDN/static server
If you're running Dashy using a static hosting provider (like Vercel), then there is no Node server, and so the save config action will not work via the UI.
You'll instead need to copy the YAML after making your changes, and paste that into your `conf.yml` directly. If you've connected Vercel to git, then these changes will take effect automatically, once you commit your changes.
Look here for more information: [https://dashy.to/docs/deployment#deploy-to-cloud-service](https://dashy.to/docs/deployment#deploy-to-cloud-service)
If you're running on Netlify, there are some cloud functions which take care of all the server endpoints (like status checking), so these will work as expected.
See also [#1465](https://github.com/Lissy93/dashy/issues/1465)
### Possible Issue 2: Unable to save
In Docker, double check that the file isn't read-only, and that the container actually has permissions to modify it. You shouldn't really be running it as a root user, and I'm not sure if it will work if you do-
### Possible Issue 3: Saved but not updating
After saving, the frontend will recompile, which may take a couple seconds (or a bit longer on a Pi or low-powered device). If it doesn't recompile, you can manually trigger a re-build.
---
## `Refused to Connect` in Modal or Workspace View
This is not an issue with Dashy, but instead caused by the target app preventing direct access through embedded elements. It can be fixed by setting the [`X-Frame-Options`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options) HTTP header set to `ALLOW [path to Dashy]` or `SAMEORIGIN`, as defined in [RFC-7034](https://datatracker.ietf.org/doc/html/rfc7034). These settings are usually set in the config file for the web server that's hosting the target application, here are some examples of how to enable cross-origin access with common web servers:
This is not an issue with Dashy, but instead caused by the target app preventing direct access through embedded elements.
As defined in [RFC-7034](https://datatracker.ietf.org/doc/html/rfc7034), for any web content to be accessed through an embedded element, it must have the [`X-Frame-Options`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options) HTTP header set to `ALLOW`. If you are getting a `Refused to Connect` error then this header is set to `DENY` (or `SAMEORIGIN` and it's on a different host). Thankfully, for self-hosted services, it is easy to set these headers.
These settings are usually set in the config file for the web server that's hosting the target application, here are some examples of how to enable cross-origin access with common web servers:
### NGINX
In NGINX, you can use the [`add_header`](https://nginx.org/en/docs/http/ngx_http_headers_module.html) module within the app block.
```
```text
server {
...
add_header X-Frame-Options SAMEORIGIN always;
}
```
Then reload with `service nginx reload`
### Caddy
In Caddy, you can use the [`header`](https://caddyserver.com/docs/caddyfile/directives/header) directive.
```yaml
```text
header {
X-Frame-Options SAMEORIGIN
}
@ -29,15 +101,21 @@ header {
In Apache, you can use the [`mod_headers`](https://httpd.apache.org/docs/current/mod/mod_headers.html) module to set the `X-Frame-Options` in your config file. This file is usually located somewhere like `/etc/apache2/httpd.conf
```text
Header set X-Frame-Options: "ALLOW-FROM http://[dashy-location]/"
```
Header set X-Frame-Options: "ALLOW-FROM http://[dashy-location]/"
### LightHttpd
```text
Content-Security-Policy: frame-ancestors 'self' https://[dashy-location]/
```
---
## 404 On Static Hosting
If you're seeing Dashy's 404 page on initial load/ refresh, and then the main app when you go back to Home, then this is likely caused by the Vue router, and if so can be fixed in one of two ways.
If you're seeing Dashy's 404 page on initial load/ refresh, and then the main app when you go back to Home, then this is likely caused by the Vue router, and if so can be fixed in one of two ways.
The first solution is to switch the routing mode, from HTML5 `history` mode to `hash` mode, by setting `appConfig.routingMode` to `hash`.
@ -45,6 +123,23 @@ If this works, but you wish to continue using HTML5 history mode, then a bit of
---
## 404 after Launch from Mobile Home Screen
Similar to the above issue, if you get a 404 after using iOS and Android's "Add to Home Screen" feature, then this is caused by Vue router.
It can be fixed by setting `appConfig.routingMode` to `hash`
See also: [#628](https://github.com/Lissy93/dashy/issues/628), [#762](https://github.com/Lissy93/dashy/issues/762)
---
## 404 On Multi-Page Apps
Similar to above, if you get a 404 error when visiting a page directly on multi-page apps, then this can be fixed under `appConfig`, by setting `routingMode` to `hash`. Then rebuilding, and refreshing the page.
See also: [#670](https://github.com/Lissy93/dashy/issues/670), [#763](https://github.com/Lissy93/dashy/issues/763)
---
## Yarn Error
For more info, see [Issue #1](https://github.com/Lissy93/dashy/issues/1)
@ -52,14 +147,59 @@ For more info, see [Issue #1](https://github.com/Lissy93/dashy/issues/1)
First of all, check that you've got yarn installed correctly - see the [yarn installation docs](https://classic.yarnpkg.com/en/docs/install) for more info.
If you're getting an error about scenarios, then you've likely installed the wrong yarn... (you're [not](https://github.com/yarnpkg/yarn/issues/2821) the only one!). You can fix it by uninstalling, adding the correct repo, and reinstalling, for example, in Debian:
- `sudo apt remove yarn`
- `curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -`
- `echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list`
- `sudo apt update && sudo apt install yarn`
Alternatively, as a workaround, you have several options:
- Try using [NPM](https://www.npmjs.com/get-npm) instead: So clone, cd, then run `npm install`, `npm run build` and `npm start`
- Try using [Docker](https://www.docker.com/get-started) instead, and all of the system setup and dependencies will already be taken care of. So from within the directory, just run `docker build -t lissy93/dashy .` to build, and then use docker start to run the project, e.g: `docker run -it -p 8080:80 lissy93/dashy` (see the [deploying docs](https://github.com/Lissy93/dashy/blob/master/docs/deployment.md#deploy-with-docker) for more info)
- Try using [Docker](https://www.docker.com/get-started) instead, and all of the system setup and dependencies will already be taken care of. So from within the directory, just run `docker build -t lissy93/dashy .` to build, and then use docker start to run the project, e.g: `docker run -it -p 8080:8080 lissy93/dashy` (see the [deploying docs](https://github.com/Lissy93/dashy/blob/master/docs/deployment.md#deploy-with-docker) for more info)
---
## Remote Config Not Loading
If you've got a multi-page dashboard, and are hosting the additional config files yourself, then CORS rules will apply. A CORS error will look something like:
```text
Access to XMLHttpRequest at 'https://example.com/raw/my-config.yml' from origin 'http://dashy.local' has been blocked by CORS policy:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
```
The solution is to add the appropriate headers onto the target server, to allow it to accept requests from the origin where you're running Dashy.
If it is a remote service, that you do not have admin access to, then another option is to proxy the request. Either host your own, or use a publicly accessible service, like [allorigins.win](https://allorigins.win), e.g: `https://api.allorigins.win/raw?url=https://pastebin.com/raw/4tZpaJV5`. For git-based services specifically, there's [raw.githack.com](https://raw.githack.com/)
---
## Ineffective mark-compacts near heap limit Allocation failed
If you see an error message, similar to:
```text
<--- Last few GCs --->
[61:0x74533040] 229060 ms: Mark-sweep (reduce) 127.1 (236.9) -> 127.1 (137.4) MB, 5560.7 / 0.3 ms (average mu = 0.286, current mu = 0.011) allocation failure scavenge might not succeed
<--- JS stacktrace --->
FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
```
This is likely caused by insufficient memory allocation to the container. When the container first starts up, or has to rebuild, the memory usage spikes, and if there isn't enough memory, it may terminate. This can be specified with, for example: `--memory=1024m`. For more info, see [Docker: Runtime options with Memory, CPUs, and GPUs](https://docs.docker.com/config/containers/resource_constraints/).
See also: [#380](https://github.com/Lissy93/dashy/issues/380), [#350](https://github.com/Lissy93/dashy/issues/350), [#297](https://github.com/Lissy93/dashy/issues/297), [#349](https://github.com/Lissy93/dashy/issues/349), [#510](https://github.com/Lissy93/dashy/issues/510), [#511](https://github.com/Lissy93/dashy/issues/511) and [#834](https://github.com/Lissy93/dashy/issues/834)
---
## Command failed with signal "SIGKILL"
In Docker, this can be caused by not enough memory. When the container first starts up, or has to rebuild, the memory usage spikes, and so a larger allocation may be required. This can be specified with, for example: `--memory=1024m`. For more info, see [Docker: Runtime options with Memory, CPUs, and GPUs](https://docs.docker.com/config/containers/resource_constraints/)
See also [#624](https://github.com/Lissy93/dashy/issues/624)
---
@ -88,6 +228,71 @@ auth:
---
## App Not Starting After Update to 2.0.4
Version 2.0.4 introduced changes to how the config is read, and the app is build. If you were previously mounting `/public` as a volume, then this will over-write the build app, preventing it from starting. The solution is to just pass in the file(s) / sub-directories that you need. For example:
```yaml
volumes:
- /srv/dashy/conf.yml:/app/user-data/conf.yml
- /srv/dashy/item-icons:/app/public/item-icons
```
---
## Keycloak Redirect Error
Check the [browser's console output](#how-to-open-browser-console), if you've not set any headers, you will likely see a CORS error here, which would be the source of the issue.
You need to allow Dashy to make requests to Keycloak, and Keycloak to redirect to Dashy. The way you do this depends on how you're hosting these applications / which proxy you are using, and examples can be found in the [Management Docs](/docs/management.md#setting-headers).
For example, add the access control header to Keycloak, like:
`Access-Control-Allow-Origin [URL-of Dashy]`
Note that for requests that transport sensitive info like credentials, setting the accept header to a wildcard (`*`) is not allowed - see [MDN Docs](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#requests_with_credentials), so you will need to specify the actual URL.
You should also ensure that Keycloak is correctly configured, with a user, realm and application, and be sure that you have set a valid redirect URL in Keycloak ([screenshot](https://user-images.githubusercontent.com/1862727/148599768-db4ee4f8-72c5-402d-8f00-051d999e6267.png)).
For more details on how to set headers, see the [Example Headers](/docs/management.md#setting-headers) in the management docs, or reference the documentation for your proxy.
If you're running in Kubernetes, you will need to enable CORS ingress rules, see [docs](https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#enable-cors), e.g:
```text
nginx.ingress.kubernetes.io/cors-allow-origin: "https://dashy.example.com"
nginx.ingress.kubernetes.io/enable-cors: "true"
```
See also: #479, #409, #507, #491, #341, #520
---
## Docker Directory
```text
Error response from daemon: OCI runtime create failed: container_linux.go:380:
starting container process caused: process_linux.go:545: container init caused:
rootfs_linux.go:76: mounting "/home/ubuntu/my-conf.yml" to rootfs at
"/app/user-data/conf.yml" caused: mount through procfd: not a directory:
unknown: Are you trying to mount a directory onto a file (or vice-versa)?
Check if the specified host path exists and is the expected type.
```
If you get an error similar to the one above, you are mounting a directory to the config file's location, when a plain file is expected. Create a YAML file, (`touch my-conf.yml`), populate it with a sample config, then pass it as a volume: `-v ./my-local-conf.yml:/app/user-data/conf.yml`
---
## Config not Saving on Vercel / Netlify / CDN
If you're running Dashy using a static hosting provider (like Vercel), then there is no Node server, and so the save config action will not work via the UI.
You'll instead need to copy the YAML after making your changes, and paste that into your `conf.yml` directly. If you've connected Vercel to git, then these changes will take effect automatically, once you commit your changes.
If you're running on Netlify, there are some cloud functions which take care of all the server endpoints (like status checking), so these will work as expected.
See also [#1465](https://github.com/Lissy93/dashy/issues/1465)
---
## Config Not Updating
Dashy has the option to save settings and config locally, in browser storage. Anything here will take precedence over whatever is in your config file, sometimes with unintended consequences. If you've updated the config file manually, and are not seeing changes reflected in the UI, then try visiting the site in Incognito mode. If that works, then the solution is just to clear local storage. This can be done from the config menu, under "Clear Local Settings".
@ -110,23 +315,27 @@ If you find that your styles and other visual assets work when visiting `ip:port
This situation relates to error messages similar to one of the following, returned when pulling, updating or running the Docker container from Docker Hub.
```
Continuing execution. Pulling image lissy93/dashy:release-1.6.0
```text
Continuing execution. Pulling image lissy93/dashy:release-1.6.0
error pulling image configuration: toomanyrequests
```
or
```
```text
You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit
```
When DockerHub returns one of these errors, or a `429` status, that means you've hit your rate limit. This was [introduced](https://www.docker.com/blog/scaling-docker-to-serve-millions-more-developers-network-egress/) last year, and prevents unauthenticated or free users from running docker pull more than 100 times per 6 hours.
You can [check your rate limit status](https://www.docker.com/blog/checking-your-current-docker-pull-rate-limits-and-status/) by looking for the `ratelimit-remaining` header in any DockerHub responses.
You can [check your rate limit status](https://www.docker.com/blog/checking-your-current-docker-pull-rate-limits-and-status/) by looking for the `ratelimit-remaining` header in any DockerHub responses.
#### Solution 1 - Use an alternate container registry
- Dashy is also availible through GHCR, which at present does not have any hard limits. Just use `docker pull ghcr.io/lissy93/dashy:latest` to fetch the image
### Solution 1 - Use an alternate container registry
- Dashy is also available through GHCR, which at present does not have any hard limits. Just use `docker pull ghcr.io/lissy93/dashy:latest` to fetch the image
- You can also build the image from source, by cloning the repo, and running `docker build -t dashy .` or use the pre-made docker compose
#### Solution 2 - Increase your rate limits
### Solution 2 - Increase your rate limits
- Logging in to DockerHub will increase your rate limit from 100 requests to 200 requests per 6 hour period
- Upgrading to a Pro for $5/month will increase your image requests to 5,000 per day, and any plans above have no rate limits
- Since rate limits are counted based on your IP address, proxying your requests, or using a VPN may work
@ -134,6 +343,7 @@ You can [check your rate limit status](https://www.docker.com/blog/checking-your
---
## Config Validation Errors
The configuration file is validated against [Dashy's Schema](https://github.com/Lissy93/dashy/blob/master/src/utils/ConfigSchema.json) using AJV.
First, check that your syntax is valid, using [YAML Validator](https://codebeautify.org/yaml-validator/) or [JSON Validator](https://codebeautify.org/jsonvalidator). If the issue persists, then take a look at the [schema](https://github.com/Lissy93/dashy/blob/master/src/utils/ConfigSchema.json), and verify that the field you are trying to add/ modify matches the required format. You can also use [this tool](https://www.jsonschemavalidator.net/s/JFUj7X9J) to validate your JSON config against the schema, or run `yarn validate-config`.
@ -145,23 +355,37 @@ If the issue still persists, you should raise an issue.
---
## Node Sass does not yet support your current environment
Caused by node-sass's binaries being built for a for a different architecture
To fix this, just run: `yarn rebuild node-sass`
---
## Unreachable Code Error
An error similar to: `Fatal error in , line 0. Unreachable code, FailureMessage Object: 0xffe6c8ac. Illegal instruction (core dumped)`
Is related to a bug in a downstream package, see [nodejs/docker-node#1477](https://github.com/nodejs/docker-node/issues/1477).
Usually, updating your system and packages will resolve the issue.
See also: [#776](https://github.com/Lissy93/dashy/issues/776)
---
## Error: Cannot find module './_baseValues'
Clearing the cache should fix this: `yarn cache clean`
If the issue persists, remove (`rm -rf node_modules\ yarn.lock`) and reinstall (`yarn`) node_modules
---
## Invalid Host Header while running through ngrok
Just add the [-host-header](https://ngrok.com/docs#http-host-header) flag, e.g. `ngrok http 8080 -host-header="localhost:8080"`
---
## Warnings in the Console during deploy
Please acknowledge the difference between errors and warnings before raising an issue about messages in the console. It's not unusual to see warnings about a new version of a certain package being available, an asset bundle bing oversized or a service worker not yet having a cache. These shouldn't have any impact on the running application, so please don't raise issues about these unless it directly relates to a bug or issue you're experiencing. Errors on the other hand should not appear in the console, and they are worth looking into further.
---
@ -173,21 +397,265 @@ Run `sudo apt install gnupg2 pass && gpg2 -k`
---
## Status Checks Failing
If you're using status checks, and despite a given service being online, the check is displaying an error, there are a couple of things you can look at:
If your service requires requests to include any authorization in the headers, then use the `statusCheckHeaders` property, as described in the [docs](/docs/status-indicators.md#setting-custom-headers).
If you are still having issues, it may be because your target application is blocking requests from Dashy's IP. This is a [CORS error](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS), and can be fixed by setting the headers on your target app, to include:
```
```text
Access-Control-Allow-Origin: https://location-of-dashy/
Vary: Origin
```
If the URL you are checking has an unsigned certificate, or is not using HTTPS, then you may need to disable the rejection of insecure requests. This can be done by setting `statusCheckAllowInsecure` to true for a given item.
If your service is online, but responds with a status code that is not in the 2xx range, then you can use `statusCheckAcceptCodes` to set an accepted status code.
If you get an error, like `Service Unavailable: Server resulted in a fatal error`, even when it's definitely online, this is most likely caused by missing the protocol. Don't forget to include `https://` (or whatever protocol) before the URL, and ensure that if needed, you've specified the port.
Running Dashy in HOST network mode, instead of BRIDGE will allow status check access to other services in HOST mode. For more info, see [#445](https://github.com/Lissy93/dashy/discussions/445).
If you have firewall rules configured, then ensure that they don't prevent Dashy from making requests to the other services you are trying to access.
Currently, the status check needs a page to be rendered, so if this URL in your browser does not return anything, then status checks will not work. This may be modified in the future, but in the meantime, a fix would be to make your own status service, which just checks if your app responds with whatever code you'd like, and then return a 200 plus renders an arbitrary message. Then just point `statusCheckUrl` to your custom page.
For further troubleshooting, use an application like [Postman](https://postman.com) to diagnose the issue. Set the parameter to `GET`, and then make a call to: `https://[url-of-dashy]/status-check/?&url=[service-url]`. Where the service URL must have first been encoded (e.g. with `encodeURIComponent()` or [urlencoder.io](https://www.urlencoder.io/))
If you're serving Dashy though a CDN, instead of using the Node server or Docker image, then the Node endpoint that makes requests will not be available to you, and all requests will fail. A workaround for this may be implemented in the future, but in the meantime, your only option is to use the Docker or Node deployment method.
If you're serving Dashy though a CDN, instead of using the Node server or Docker image, then the Node endpoint that makes requests will not be available to you, and all requests will fail. A workaround for this may be implemented in the future, but in the meantime, your only option is to use the Docker or Node deployment method.
---
## Widget Errors
### Find Error Message
If an error occurs when fetching or rendering results, you will see a short message in the UI. If that message doesn't adequately explain the problem, then you can [open the browser console](/docs/troubleshooting.md#how-to-open-browser-console) to see more details.
### Check Config
Before proceeding, ensure that if the widget requires auth your API is correct, and for custom widgets, double check that the URL and protocol is correct.
### Timeout Error
If the error message in the console includes: `Error: timeout of 500ms exceeded`, then your Glances endpoint is slower to respond than expected. You can fix this by [setting timeout](https://github.com/Lissy93/dashy/blob/master/docs/widgets.md#setting-timeout) to a larger value. This is done on each widget, with the `timeout` attribute, and is specified in ms. E.g. `timeout: 5000` would only fail if no response is returned within 5 seconds.
### CORS error
If the console message mentions to corss-origin blocking, then this is a CORS error, see: [Fixing Widget CORS Errors](#widget-cors-errors)
### More Info
If you're able to, you can find more information about why the request may be failing in the Dev Tools under the Network tab, and you can ensure your endpoint is correct and working using a tool like Postman.
---
## Widget CORS Errors
The most common widget issue is a CORS error. This is a browser security mechanism which prevents the client-side app (Dashy) from from accessing resources on a remote origin, without that server's explicit permission (e.g. with headers like Access-Control-Allow-Origin). See the MDN Docs for more info: [Cross-Origin Resource Sharing](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS).
There are several ways to fix a CORS error:
### Option 1 - Ensure Correct Protocol
You will get a CORS error if you try and access a http service from a https source. So ensure that the URL you are requesting has the right protocol, and is correctly formatted.
### Option 2 - Set Headers
If you have control over the destination (e.g. for a self-hosted service), then you can simply apply the correct headers.
Add the `Access-Control-Allow-Origin` header, with the value of either `*` to allow requests from anywhere, or more securely, the host of where Dashy is served from. For example:
```text
Access-Control-Allow-Origin: https://url-of-dashy.local
```
or
```text
Access-Control-Allow-Origin: *
```
For more info on how to set headers, see: [Setting Headers](/docs/management.md#setting-headers) in the management docs
### Option 3 - Proxying Request
You can route requests through Dashy's built-in CORS proxy. Instructions and more details can be found [here](/docs/widgets.md#proxying-requests). If you don't have control over the target origin, and you are running Dashy either through Docker, with the Node server or on Netlify, then this solution will work for you.
Just add the `useProxy: true` option to the failing widget.
### Option 4 - Use a plugin
For testing purposes, you can use an addon, which will disable the CORS checks. You can get the Allow-CORS extension for [Chrome](https://chrome.google.com/webstore/detail/allow-cors-access-control/lhobafahddgcelffkeicbaginigeejlf?hl=en-US) or [Firefox](https://addons.mozilla.org/en-US/firefox/addon/access-control-allow-origin/), more details [here](https://mybrowseraddon.com/access-control-allow-origin.html)
---
## Widget Shows Error Incorrectly
When there's an error fetching or displaying a widgets data, then it will be highlighted in yellow, and a message displayed on the UI.
In some instances, this is a false positive, and the widget is actually functioning correctly.
If this is the case, you can disable the UI error message of a given widget by setting: `ignoreErrors: true`
---
## Weather Forecast Widget 401
A 401 error means your API key is invalid, it is not an issue with Dashy.
Usually this happens due to an error in your config. If you're unsure, copy and paste the [example](/docs/widgets.md#weather) config, replacing the API key with your own.
Check that `apiKey` is correctly specified, and nested within `options`. Ensure your input city is valid.
To test your API key, try making a request to `https://api.openweathermap.org/data/2.5/weather?q=London&appid=[your-api-key]`
If [Weather widget](/docs/widgets.md#weather-forecast) is working fine, but you are getting a `401` for the [Weather Forecast widget](/docs/widgets.md#weather-forecast), then this is also an OWM API key issue.
Since the forecasting API requires an upgraded plan. ULPT: You can get a free, premium API key by filling in [this form](https://home.openweathermap.org/students). It's a student plan, but there's no verification to check that you are still a student.
A future update will be pushed out, to use a free weather forecasting API.
See also: [#803](https://github.com/Lissy93/dashy/issues/803), [#789](https://github.com/Lissy93/dashy/issues/789), [#577](https://github.com/Lissy93/dashy/issues/577), [#621](https://github.com/Lissy93/dashy/issues/621), [#578](https://github.com/Lissy93/dashy/issues/578), [#806](https://github.com/Lissy93/dashy/discussions/806)
---
## Widget Displaying Inaccurate Data
If any widget is not displaying the data you expect, first confirm that your config is correct, then try manually calling the API endpoint.
If the raw API output is correct, yet the widget is rendering incorrect results, then it is likely a bug, and a ticket should be raised. You can start to debug the issue, by looking at the widget's code ([here](https://github.com/Lissy93/dashy/tree/master/src/components/Widgets)), and the browser console + networking tab.
If the API itself is returning incorrect, incomplete or inaccurate data then an issue needs to be raised **with the API provider** (not Dashy!). You can find the API provider included within the widget docs, or for a full list see the [Privacy Docs](https://github.com/Lissy93/dashy/blob/master/docs/privacy.md#widgets).
See also: [#807](https://github.com/Lissy93/dashy/issues/807) (re, domain monitor)
---
## Font Awesome Icons not Displaying
Usually, Font Awesome will be automatically enabled if one or more of your icons are using Font-Awesome. If this is not happening, then you can always manually enable (or disable) Font Awesome by setting: [`appConfig`](/docs/configuring.md#appconfig-optional).`enableFontAwesome` to `true`.
If you are trying to use a premium icon, then you must have a [Pro License](https://fontawesome.com/plans). You'll then need to specify your Pro plan API key under `appConfig.fontAwesomeKey`. You can find this key, by logging into your FA account, navigate to Account → [Kits](https://fontawesome.com/kits) → New Kit → Copy Kit Code. The code is a 10-digit alpha-numeric code, and is also visible within the new kit's URL, for example: `81e48ce079`.
<p align="center"><img src="https://i.ibb.co/hZ0D9vs/where-do-i-find-my-font-awesome-key.png" width="600" /></p>
Be sure that you're specifying the icon category and name correctly. You're icon should look be `[category] fa-[icon-name]`. The following categories are supported: `far` _(regular)_, `fas` _(solid)_, `fal`_(light)_, `fad` _(duo-tone)_ and `fab`_(brands)_. With the exception of brands, you'll usually want all your icons to be in from same category, so they look uniform.
Ensure the icon you are trying to use, is available within [FontAwesome Version 5](https://fontawesome.com/v5/search) (we've not yet upgraded to V6, as it works a little differently).
Examples: `fab fa-raspberry-pi`, `fas fa-database`, `fas fa-server`, `fas fa-ethernet`
Finally, check the [browser console](#how-to-open-browser-console) for any error messages, and raise a ticket if the issue persists.
---
## Copy to Clipboard not Working
If the copy to clipboard feature (either under Config --> Export, or Item --> Copy URL) isn't functioning as expected, first check the browser console. If you see `TypeError: Cannot read properties of undefined (reading 'writeText')` then this feature is not supported by your browser.
The most common reason for this, is if you not running the app over HTTPS. Copying to the clipboard requires the app to be running in a secure origin / aka have valid HTTPS cert. You can read more about this [here](https://stackoverflow.com/a/71876238/979052).
As a workaround, you could either:
- Highlight the text and copy / <kbd>Ctrl</kbd> + <kbd>C</kbd>
- Or setup SSL - [here's a guide](https://github.com/Lissy93/dashy/blob/master/docs/management.md#ssl-certificates) on doing so
---
## Unsupported Digital Envelope Routines
If you're running on GitHub Codespaces, and seeing: `Error: error:0308010C:digital envelope routines::unsupported` when using Node 17+, it can be resolved by adding the `--openssl-legacy-provider` flag to your `NODE_OPTIONS` environmental variable.
For example:
```
export NODE_OPTIONS=--openssl-legacy-provider
```
This will be fixed once [webpack/webpack#17659](https://github.com/webpack/webpack/pull/17659) is merged.
---
## How to Reset Local Settings
Some settings are stored locally, in the browser's storage.
In some instances cached assets can prevent your settings from being updated, in which case you may wish to reset local data.
To clear all local data from the UI, head to the Config Menu, then click "Reset Local Settings", and Confirm when prompted.
This will not affect your config file. But be sure that you keep a backup of your config, if you've not written changes it to disk.
You can also view any and all data that Dashy is storing, using the developer tools. Open your browser's dev tools (usually <kbd>F12</kbd>), in Chromium head to the Application tab, or in Firefox go to the Storage tab. Select Local Storage, then scroll down the the URL Dashy is running on. You should now see all data being stored, and you can select and delete any fields you wish.
For a full list of all data that may be cached, see the [Privacy Docs](/docs/privacy.md#browser-storage).
---
## How to make a bug report
### Step 1 - Where to open issues
You will need a GitHub account in order to raise a ticket. You can then [click here](https://github.com/Lissy93/dashy/issues/new?assignees=lissy93&labels=%F0%9F%90%9B+Bug&template=bug.yml&title=%5BBUG%5D+%3Ctitle%3E) to open a new bug report.
### Step 2 - Checking it's not already covered
Before submitting, please check that:
- A similar ticket has not previously been opened
- The issue is not covered in the [troubleshooting guide](https://github.com/Lissy93/dashy/blob/master/docs/troubleshooting.md) or [docs](https://github.com/Lissy93/dashy/tree/master/docs#readme)
### Step 3 - Describe the Issue
Your ticket will likely be dealt with more effectively if you can explain the issue clearly, and provide all relevant supporting material.
Complete the fields, asking for your environment info and version of Dashy.
Then describe the issue, briefly explaining the steps to reproduce, expected outcome and actual outcome.
### Step 4 - Provide Supporting Info
Where relevant please also include:
- A screenshot of the issue
- The relevant parts of your config file
- Logs
- If client-side issue, then include the browser logs ([see how](#how-to-open-browser-console))
- If server-side / during deployment, include the terminal output
_Take care to redact any personal info, (like IP addresses, auth hashes or API keys)._
### Step 5 - Fix Released
A maintainer will aim to respond within 48 hours.
The timeframe for resolving your issue, will vary depending on severity of the bug and the complexity of the fix.
You will be notified on your ticket, when a fix has been released.
Finally, be sure to remain respectful to other users and project maintainers, in line with the [Contributor Covenant Code of Conduct](https://github.com/Lissy93/dashy/blob/master/.github/CODE_OF_CONDUCT.md#contributor-covenant-code-of-conduct).
---
## How-To Open Browser Console
When raising a bug, one crucial piece of info needed is the browser's console output. This will help the developer diagnose and fix the issue.
If you've been asked for this info, but are unsure where to find it, then it is under the "Console" tab, in the browsers developer tools, which can be opened with <kbd>F12</kbd>. You can right-click the console, and select Save As to download the log.
To open dev tools, and jump straight to the console:
- Win / Linux: <kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>J</kbd>
- MacOS: <kbd>Cmd</kbd> + <kbd>Option</kbd> + <kbd>J</kbd>
For more detailed walk through, see [this article](https://support.shortpoint.com/support/solutions/articles/1000222881-save-browser-console-file).
---
## Git Contributions not Displaying
If you've contributed to Dashy (or any other project), but your contributions are not showing up on your GH profile, or in Dashy's [Credits Page](https://github.com/Lissy93/dashy/blob/master/docs/credits.md), then this is likely a git config issue.
These statistics are generated using the username / email associated with commits. This info needs to be setup on your local machine using [`git config`](https://git-scm.com/docs/git-config).
Run the following commands (replacing name + email with your info):
- `git config --global user.name "John Doe"`
- `git config --global user.email johndoe@example.com`
For more info, see [Git First Time Setup Docs](https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup).
Note that only contributions to the master / main branch or a project are counted

File diff suppressed because it is too large Load Diff

View File

@ -9,12 +9,11 @@
publish = "dist"
functions = "services/serverless-functions"
# Site info, used for the 1-Click deploy page
[template.environment]
STATUSKIT_PAGE_TITLE = "Dashy"
STATUSKIT_COMPANY_LOGO = "https://raw.githubusercontent.com/Lissy93/dashy/master/docs/assets/logo.png"
STATUSKIT_SUPPORT_CONTACT_LINK = "https://github.com/lissy93/dashy"
STATUSKIT_RESOURCES_LINK = "https://dashy.to/docs"
# Environmental variables for build command
[build.environment]
NODE_VERSION = "20.11.1"
NODE_OPTIONS = "--openssl-legacy-provider"
YARN_FLAGS = "--ignore-engines"
# Redirect the Node endpoints to serverless functions
[[redirects]]
@ -43,6 +42,6 @@
[[headers]]
for = "/*"
[headers.values]
# Uncomment to enable Netlify user control. You must have a paid plan.
# Uncomment to enable Netlify user control. Requires premium plan.
# Basic-Auth = "someuser:somepassword anotheruser:anotherpassword"

View File

@ -1,71 +1,76 @@
{
"name": "Dashy",
"version": "1.9.6",
"name": "dashy",
"version": "3.0.1",
"license": "MIT",
"main": "server",
"author": "Alicia Sykes <alicia@omg.lol> (https://aliciasykes.com)",
"scripts": {
"start": "node server",
"dev": "vue-cli-service serve",
"build": "vue-cli-service build",
"dev": "NODE_OPTIONS=--openssl-legacy-provider vue-cli-service serve",
"build": "NODE_OPTIONS=--openssl-legacy-provider vue-cli-service build",
"lint": "vue-cli-service lint",
"pm2-start": "npx pm2 start server.js",
"build-watch": "vue-cli-service build --watch --mode production",
"build-and-start": "npm-run-all --parallel build-watch start",
"build-and-start": "NODE_OPTIONS=--openssl-legacy-provider npm-run-all --parallel build start",
"validate-config": "node services/config-validator",
"health-check": "node services/healthcheck",
"dependency-audit": "npx improved-yarn-audit --ignore-dev-deps"
},
"dependencies": {
"@formschema/native": "^2.0.0-beta.5",
"@sentry/tracing": "^6.14.3",
"@sentry/vue": "^6.13.1",
"ajv": "^8.8.1",
"axios": "^0.24.0",
"@babel/core": "^7.0.0",
"@formschema/native": "^2.0.0-beta.6",
"@sentry/tracing": "^7.102.1",
"@sentry/vue": "^7.102.1",
"ajv": "^8.10.0",
"axios": "^1.6.0",
"connect-history-api-fallback": "^1.6.0",
"crypto-js": "^4.1.1",
"express": "^4.17.1",
"crypto-js": "^4.2.0",
"express": "^4.17.2",
"express-basic-auth": "^1.2.1",
"frappe-charts": "^1.6.2",
"js-yaml": "^4.1.0",
"keycloak-js": "^15.0.2",
"register-service-worker": "^1.6.2",
"keycloak-js": "^20.0.3",
"register-service-worker": "^1.7.2",
"remedial": "^1.0.8",
"rsup-progress": "^2.0.4",
"simple-icons": "^5.23.0",
"v-jsoneditor": "^1.4.2",
"rss-parser": "3.13.0",
"simple-icons": "^10.4.0",
"rsup-progress": "^3.2.0",
"v-jsoneditor": "^1.4.5",
"v-tooltip": "^2.1.3",
"vue": "^2.6.10",
"vue-i18n": "^8.25.1",
"vue-js-modal": "^2.0.0-rc.6",
"vue": "^2.7.0",
"vue-i18n": "^8.27.2",
"vue-js-modal": "^2.0.1",
"vue-json-tree-view": "^2.1.6",
"vue-material-tabs": "0.1.5",
"vue-router": "^3.0.3",
"vue-select": "^3.15.0",
"vue-router": "^3.5.3",
"vue-select": "^3.20.2",
"vue-swatches": "^2.1.1",
"vue-toasted": "^1.1.28",
"vuex": "^3.6.2"
},
"devDependencies": {
"@architect/sandbox": "^3.7.4",
"@vue/cli-plugin-babel": "^4.5.12",
"@vue/cli-plugin-eslint": "^4.5.12",
"@vue/cli-plugin-pwa": "^4.5.12",
"@vue/cli-service": "^4.5.12",
"@babel/preset-env": "^7.17.10",
"@vue/cli-plugin-babel": "^4.5.15",
"@vue/cli-plugin-eslint": "^4.5.15",
"@vue/cli-plugin-pwa": "^4.5.15",
"@vue/cli-plugin-typescript": "^5.0.8",
"@vue/cli-service": "^4.5.19",
"@vue/eslint-config-standard": "^4.0.0",
"babel-eslint": "^10.0.1",
"eslint": "^7.24.0",
"copy-webpack-plugin": "6.4.0",
"eslint": "^6.8.0",
"eslint-config-airbnb": "^18.0.1",
"eslint-plugin-vue": "^7.9.0",
"npm-run-all": "^4.1.5",
"progress-bar-webpack-plugin": "^2.1.0",
"sass": "^1.38.0",
"sass-loader": "^7.1.0",
"typescript": "^5.4.4",
"vue-cli-plugin-yaml": "^1.0.2",
"vue-svg-loader": "^0.16.0",
"vue-template-compiler": "^2.6.10"
"vue-template-compiler": "^2.7.0"
},
"gitHooks": {
"pre-commit": "yarn lint"
"engines": {
"node": ">=16.0.0 <21.6.2"
},
"eslintConfig": {
"root": true,
@ -87,6 +92,12 @@
"parser": "babel-eslint"
}
},
"babel": {
"presets": [
"@vue/app",
"@babel/preset-env"
]
},
"postcss": {
"plugins": {
"autoprefixer": {}

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 827 B

View File

@ -5,11 +5,11 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<!-- Favicon + App Icon -->
<!-- Favicon, App Icon -->
<link rel="icon" type="image/png" sizes="64x64" href="<%= BASE_URL %>/web-icons/favicon-64x64.png">
<link rel="icon" type="image/png" sizes="32x32" href="web-icons/favicon-32x32.png">
<link rel="icon" href="/favicon.ico" />
<link rel="icon" type="image/png" href="<%= BASE_URL %>favicon.ico" />
<link rel="icon" type="image/png" href="/favicon.ico" />
<link rel="stylesheet" type="text/css" href="/loading-screen.css" />
<!-- Default Page Title -->
<title>Dashy</title>
</head>
@ -18,46 +18,35 @@
<!-- built files will be auto injected -->
<div id="app">
<!-- Loading screen, will be replaced when app loaded -->
<div class="loading-placeholder" id="loader"><h1>Dashy</h1><p>Loading...</p></div>
<div class="loading-placeholder" id="loader">
<h1>Dashy</h1>
<p class="loading">Loading... </p>
<!-- Error message, only visible if app not mounted within 5 secs -->
<div class="catastrophic-error" id="err-wrap" style="display:none;">
<p class="err-l1">It looks like something's gone wrong...</p>
<p class="err-l2">
This is likely caused by the app source not being found at the current domain
</p>
<p class="err-l2">
If you need additional support, check the browser console then
<a href="https://github.com/Lissy93/dashy/blob/master/.github/SUPPORT.md">
raise a ticket
</a>
</p>
</div>
</div>
</div>
<!-- Devices without JS enabled -->
<noscript>
<strong>Sorry, JavaScript needs to be enabled to run Dashy 😥</strong>
</noscript>
<!-- Styles for loading screen -->
<style type="text/css">
body { margin: 0; }
#app .loading-placeholder {
position: absolute;
margin: 0;
padding: 0;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
cursor: progress;
background: #121212;
}
#app .loading-placeholder h1 {
font-size: 20vh;
font-family: Tahoma, monospace;
cursor: progress;
color: #0c0c0c;
text-shadow: 0px 4px 4px #090909, 0 0 0 #000, 0px 2px 2px #000000;
}
@media (max-width: 780px) {
.loading-placeholder h1 { font-size: 12vh !important; }
}
#app .loading-placeholder p {
font-size: 2rem;
font-family: monospace;
cursor: progress;
color: #0c0c0c;
text-shadow: 0 1px 1px #090909, 0 0 0 #000, 0 1px 1px #000000;
}
::selection { background-color: #db78fc; color: #121212; }
</style>
<!-- Show error message if app not mounted within reasonable time frame -->
<script>
setTimeout(() => {
const loaderElem = document.getElementById('loader');
if (loaderElem) loaderElem.classList.add('still-not-loaded');
}, 7500);
</script>
</body>
</html>
</html>

View File

@ -1,5 +1,5 @@
<!doctype html>
<!-- Dashy: Licensed under MIT, (C) 2021 Alicia Sykes <https://aliciasykes.com> -->
<!-- Dashy: Licensed under MIT, (C) 2024 Alicia Sykes <https://aliciasykes.com> -->
<!-- This is the default page, displayed while the app is still building -->
<html lang="en">
<head>
@ -50,6 +50,14 @@
<p class="time-note" id="note">This may take a minute or two</p>
<div class="why-am-i-seeing-this">
<h3>Why are you seeing this screen?</h3>
<p>
The app's built files aren't yet present in the /dist directory,
so this page is displayed while we compile the source.
</p>
</div>
<style lang="css">
/* Page Layout Styles */
body,
@ -60,7 +68,7 @@
}
body {
background: #141b33;
background: #0d1220;
display: flex;
flex-direction: column;
justify-content: center;
@ -194,15 +202,34 @@
}
.hide { display: none; }
.why-am-i-seeing-this {
color: #808080a6;
font-family: Tahoma, 'Trebuchet MS', sans-serif;
max-width: 25rem;
border: 2px solid #808080a6;
border-radius: 6px;
padding: 0.5rem;
position: absolute;
bottom: 1rem;
background: #8080800d;
font-size: 0.9rem;
}
.why-am-i-seeing-this h3 {
margin: 0 0 0.5rem 0;
}
.why-am-i-seeing-this p {
margin: 0;
}
</style>
<script>
const refreshRate = 8000;
// Refresh at interval
// Refresh the page every 10 seconds
const refreshRate = 10000;
setTimeout(() => { location.reload(); }, refreshRate);
// Get current stage
let initStage = parseInt(sessionStorage.getItem('initStage') || 0);
// Get current stage
let initStage = parseInt(sessionStorage.getItem('initStage') || 0);
// Check if stage in session storage is old, and if so, reset it
const now = Math.round(Date.now()/1000);
@ -262,4 +289,4 @@
</script>
</body>
</html>
</html>

63
public/loading-screen.css Normal file
View File

@ -0,0 +1,63 @@
/* Styles applied to index.html for the loading screen, prior to the app being injected */
/* Dashy - Licensed under MIT, (C) Alicia Sykes 2024 */
body { margin: 0; }
#app .loading-placeholder {
position: absolute;
margin: 0;
padding: 0;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
cursor: progress;
background: #121212;
}
#app .loading-placeholder h1 {
font-size: 20vh;
margin: 1rem auto;
font-family: Tahoma, monospace;
cursor: progress;
color: #0c0c0c;
text-shadow: 0px 4px 4px #090909, 0 0 0 #000, 0px 2px 2px #000000;
}
#app .loading-placeholder p.loading {
font-size: 2rem;
opacity: 0.75;
font-family: monospace;
cursor: progress;
color: #0c0c0c;
display: flex;
flex-direction: column;
align-items: center;
text-shadow: 0 1px 1px #090909, 0 0 0 #000, 0 1px 1px #000000;
}
#app .loading-placeholder .catastrophic-error p {
color: #e11a4bfc;
margin: 0.5rem 0;
font-weight: bold;
font-size: 4vh;
text-align: center;
font-family: monospace;
text-shadow: 1px 2px 1px #090909, 0 0 0 #000, 0 1px 1px #000000
}
#app .loading-placeholder .catastrophic-error p.err-l2 {
opacity: 0.75;
font-size: 2vh;
font-weight: normal;
padding: 0 1rem;
}
#app .loading-placeholder .catastrophic-error p.err-l2 a {
color: #e11a4bfc;
}
#app .loading-placeholder.still-not-loaded { cursor: default; }
#app .loading-placeholder.still-not-loaded p.loading { display: none; }
#app .loading-placeholder.still-not-loaded .catastrophic-error { display: block !important; }
@media (max-width: 780px) {
.loading-placeholder h1 { font-size: 12vh !important; }
#app .loading-placeholder .catastrophic-error p { font-size: 2.5vh !important; }
#app .loading-placeholder .catastrophic-error p.err-l2 { font-size: 1.2vh !important; }
}
::selection { background-color: #e11a4bfc; color: #121212; }

View File

@ -3,7 +3,7 @@
"short_name": "Dashy",
"description": "A Dashboard for your Homelab",
"scope": "/",
"start_url": "./index.html",
"start_url": "./",
"display": "standalone",
"background_color": "#0b1021",
"theme_color": "#4DBA87",
@ -11,546 +11,28 @@
"orientation": "portrait-primary",
"icons": [
{
"src": "./web-icons/windows10/SmallTile.scale-100.png",
"sizes": "71x71"
},
{
"src": "./web-icons/windows10/SmallTile.scale-125.png",
"sizes": "89x89"
},
{
"src": "./web-icons/windows10/SmallTile.scale-150.png",
"sizes": "107x107"
},
{
"src": "./web-icons/windows10/SmallTile.scale-200.png",
"sizes": "142x142"
},
{
"src": "./web-icons/windows10/SmallTile.scale-400.png",
"sizes": "284x284"
},
{
"src": "./web-icons/windows10/Square150x150Logo.scale-100.png",
"sizes": "150x150"
},
{
"src": "./web-icons/windows10/Square150x150Logo.scale-125.png",
"sizes": "188x188"
},
{
"src": "./web-icons/windows10/Square150x150Logo.scale-150.png",
"sizes": "225x225"
},
{
"src": "./web-icons/windows10/Square150x150Logo.scale-200.png",
"sizes": "300x300"
},
{
"src": "./web-icons/windows10/Square150x150Logo.scale-400.png",
"sizes": "600x600"
},
{
"src": "./web-icons/windows10/Wide310x150Logo.scale-100.png",
"sizes": "310x150"
},
{
"src": "./web-icons/windows10/Wide310x150Logo.scale-125.png",
"sizes": "388x188"
},
{
"src": "./web-icons/windows10/Wide310x150Logo.scale-150.png",
"sizes": "465x225"
},
{
"src": "./web-icons/windows10/Wide310x150Logo.scale-200.png",
"sizes": "620x300"
},
{
"src": "./web-icons/windows10/Wide310x150Logo.scale-400.png",
"sizes": "1240x600"
},
{
"src": "./web-icons/windows10/LargeTile.scale-100.png",
"sizes": "310x310"
},
{
"src": "./web-icons/windows10/LargeTile.scale-125.png",
"sizes": "388x388"
},
{
"src": "./web-icons/windows10/LargeTile.scale-150.png",
"sizes": "465x465"
},
{
"src": "./web-icons/windows10/LargeTile.scale-200.png",
"sizes": "620x620"
},
{
"src": "./web-icons/windows10/LargeTile.scale-400.png",
"sizes": "1240x1240"
},
{
"src": "./web-icons/windows10/Square44x44Logo.scale-100.png",
"sizes": "44x44"
},
{
"src": "./web-icons/windows10/Square44x44Logo.scale-125.png",
"sizes": "55x55"
},
{
"src": "./web-icons/windows10/Square44x44Logo.scale-150.png",
"sizes": "66x66"
},
{
"src": "./web-icons/windows10/Square44x44Logo.scale-200.png",
"sizes": "88x88"
},
{
"src": "./web-icons/windows10/Square44x44Logo.scale-400.png",
"sizes": "176x176"
},
{
"src": "./web-icons/windows10/StoreLogo.scale-100.png",
"sizes": "50x50"
},
{
"src": "./web-icons/windows10/StoreLogo.scale-125.png",
"sizes": "63x63"
},
{
"src": "./web-icons/windows10/StoreLogo.scale-150.png",
"sizes": "75x75"
},
{
"src": "./web-icons/windows10/StoreLogo.scale-200.png",
"sizes": "100x100"
},
{
"src": "./web-icons/windows10/StoreLogo.scale-400.png",
"sizes": "200x200"
},
{
"src": "./web-icons/windows10/SplashScreen.scale-100.png",
"sizes": "620x300"
},
{
"src": "./web-icons/windows10/SplashScreen.scale-125.png",
"sizes": "775x375"
},
{
"src": "./web-icons/windows10/SplashScreen.scale-150.png",
"sizes": "930x450"
},
{
"src": "./web-icons/windows10/SplashScreen.scale-200.png",
"sizes": "1240x600"
},
{
"src": "./web-icons/windows10/SplashScreen.scale-400.png",
"sizes": "2480x1200"
},
{
"src": "./web-icons/windows10/Square44x44Logo.targetsize-16.png",
"sizes": "16x16"
},
{
"src": "./web-icons/windows10/Square44x44Logo.targetsize-20.png",
"sizes": "20x20"
},
{
"src": "./web-icons/windows10/Square44x44Logo.targetsize-24.png",
"sizes": "24x24"
},
{
"src": "./web-icons/windows10/Square44x44Logo.targetsize-30.png",
"sizes": "30x30"
},
{
"src": "./web-icons/windows10/Square44x44Logo.targetsize-32.png",
"sizes": "32x32"
},
{
"src": "./web-icons/windows10/Square44x44Logo.targetsize-36.png",
"sizes": "36x36"
},
{
"src": "./web-icons/windows10/Square44x44Logo.targetsize-40.png",
"sizes": "40x40"
},
{
"src": "./web-icons/windows10/Square44x44Logo.targetsize-44.png",
"sizes": "44x44"
},
{
"src": "./web-icons/windows10/Square44x44Logo.targetsize-48.png",
"sizes": "48x48"
},
{
"src": "./web-icons/windows10/Square44x44Logo.targetsize-60.png",
"sizes": "60x60"
},
{
"src": "./web-icons/windows10/Square44x44Logo.targetsize-64.png",
"sizes": "64x64"
},
{
"src": "./web-icons/windows10/Square44x44Logo.targetsize-72.png",
"sizes": "72x72"
},
{
"src": "./web-icons/windows10/Square44x44Logo.targetsize-80.png",
"sizes": "80x80"
},
{
"src": "./web-icons/windows10/Square44x44Logo.targetsize-96.png",
"sizes": "96x96"
},
{
"src": "./web-icons/windows10/Square44x44Logo.targetsize-256.png",
"sizes": "256x256"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-unplated_targetsize-16.png",
"sizes": "16x16"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-unplated_targetsize-20.png",
"sizes": "20x20"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-unplated_targetsize-24.png",
"sizes": "24x24"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-unplated_targetsize-30.png",
"sizes": "30x30"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-unplated_targetsize-32.png",
"sizes": "32x32"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-unplated_targetsize-36.png",
"sizes": "36x36"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-unplated_targetsize-40.png",
"sizes": "40x40"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-unplated_targetsize-44.png",
"sizes": "44x44"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-unplated_targetsize-48.png",
"sizes": "48x48"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-unplated_targetsize-60.png",
"sizes": "60x60"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-unplated_targetsize-64.png",
"sizes": "64x64"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-unplated_targetsize-72.png",
"sizes": "72x72"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-unplated_targetsize-80.png",
"sizes": "80x80"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-unplated_targetsize-96.png",
"sizes": "96x96"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-unplated_targetsize-256.png",
"sizes": "256x256"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-lightunplated_targetsize-16.png",
"sizes": "16x16"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-lightunplated_targetsize-20.png",
"sizes": "20x20"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-lightunplated_targetsize-24.png",
"sizes": "24x24"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-lightunplated_targetsize-30.png",
"sizes": "30x30"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-lightunplated_targetsize-32.png",
"sizes": "32x32"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-lightunplated_targetsize-36.png",
"sizes": "36x36"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-lightunplated_targetsize-40.png",
"sizes": "40x40"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-lightunplated_targetsize-44.png",
"sizes": "44x44"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-lightunplated_targetsize-48.png",
"sizes": "48x48"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-lightunplated_targetsize-60.png",
"sizes": "60x60"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-lightunplated_targetsize-64.png",
"sizes": "64x64"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-lightunplated_targetsize-72.png",
"sizes": "72x72"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-lightunplated_targetsize-80.png",
"sizes": "80x80"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-lightunplated_targetsize-96.png",
"sizes": "96x96"
},
{
"src": "./web-icons/windows10/Square44x44Logo.altform-lightunplated_targetsize-256.png",
"sizes": "256x256"
},
{
"src": "./web-icons/windows/windows-smallsquare-24-24.png",
"sizes": "24x24"
},
{
"src": "./web-icons/windows/windows-smallsquare-30-30.png",
"sizes": "30x30"
},
{
"src": "./web-icons/windows/windows-smallsquare-42-42.png",
"sizes": "42x42"
},
{
"src": "./web-icons/windows/windows-smallsquare-54-54.png",
"sizes": "54x54"
},
{
"src": "./web-icons/windows/windows-splashscreen-1116-540.png",
"sizes": "1116x540"
},
{
"src": "./web-icons/windows/windows-splashscreen-868-420.png",
"sizes": "868x420"
},
{
"src": "./web-icons/windows/windows-splashscreen-620-300.png",
"sizes": "620x300"
},
{
"src": "./web-icons/windows/windows-squarelogo-270-270.png",
"sizes": "270x270"
},
{
"src": "./web-icons/windows/windows-squarelogo-210-210.png",
"sizes": "210x210"
},
{
"src": "./web-icons/windows/windows-squarelogo-150-150.png",
"sizes": "150x150"
},
{
"src": "./web-icons/windows/windows-squarelogo-120-120.png",
"sizes": "120x120"
},
{
"src": "./web-icons/windows/windows-storelogo-90-90.png",
"sizes": "90x90"
},
{
"src": "./web-icons/windows/windows-storelogo-70-70.png",
"sizes": "70x70"
},
{
"src": "./web-icons/windows/windows-storelogo-50-50.png",
"sizes": "50x50"
},
{
"src": "./web-icons/windows/windowsphone-appicon-106-106.png",
"sizes": "106x106"
},
{
"src": "./web-icons/windows/windowsphone-appicon-62-62.png",
"sizes": "62x62"
},
{
"src": "./web-icons/windows/windowsphone-appicon-44-44.png",
"sizes": "44x44"
},
{
"src": "./web-icons/windows/windowsphone-mediumtile-360-360.png",
"sizes": "360x360"
},
{
"src": "./web-icons/windows/windowsphone-mediumtile-210-210.png",
"sizes": "210x210"
},
{
"src": "./web-icons/windows/windowsphone-mediumtile-150-150.png",
"sizes": "150x150"
},
{
"src": "./web-icons/windows/windowsphone-smalltile-170-170.png",
"sizes": "170x170"
},
{
"src": "./web-icons/windows/windowsphone-smalltile-99-99.png",
"sizes": "99x99"
},
{
"src": "./web-icons/windows/windowsphone-smalltile-71-71.png",
"sizes": "71x71"
},
{
"src": "./web-icons/windows/windowsphone-storelogo-120-120.png",
"sizes": "120x120"
},
{
"src": "./web-icons/windows/windowsphone-storelogo-70-70.png",
"sizes": "70x70"
},
{
"src": "./web-icons/windows/windowsphone-storelogo-50-50.png",
"sizes": "50x50"
},
{
"src": "./web-icons/msteams/msteams-192-192.png",
"sizes": "192x192"
},
{
"src": "./web-icons/msteams/msteams-silhouette-32-32.png",
"sizes": "32x32"
},
{
"src": "./web-icons/android/android-launchericon-512-512.png",
"src": "./web-icons/dashy-pwa_512x512.png",
"sizes": "512x512"
},
{
"src": "./web-icons/android/android-launchericon-192-192.png",
"src": "./web-icons/dashy-pwa_192x192.png",
"sizes": "192x192"
},
{
"src": "./web-icons/android/android-launchericon-144-144.png",
"src": "./web-icons/dashy-pwa_144x144.png",
"sizes": "144x144"
},
{
"src": "./web-icons/android/android-launchericon-96-96.png",
"src": "./web-icons/dashy-pwa_96x96.png",
"sizes": "96x96"
},
{
"src": "./web-icons/android/android-launchericon-72-72.png",
"src": "./web-icons/dashy-pwa_72x72.png",
"sizes": "72x72"
},
{
"src": "./web-icons/android/android-launchericon-48-48.png",
"src": "./web-icons/dashy-pwa_48x48.png",
"sizes": "48x48"
},
{
"src": "./web-icons/chrome/chrome-extensionmanagementpage-48-48.png",
"sizes": "48x48"
},
{
"src": "./web-icons/chrome/chrome-favicon-16-16.png",
"sizes": "16x16"
},
{
"src": "./web-icons/chrome/chrome-installprocess-128-128.png",
"sizes": "128x128"
},
{
"src": "./web-icons/firefox/firefox-marketplace-512-512.png",
"sizes": "512x512"
},
{
"src": "./web-icons/firefox/firefox-marketplace-128-128.png",
"sizes": "128x128"
},
{
"src": "./web-icons/firefox/firefox-general-256-256.png",
"sizes": "256x256"
},
{
"src": "./web-icons/firefox/firefox-general-128-128.png",
"sizes": "128x128"
},
{
"src": "./web-icons/firefox/firefox-general-90-90.png",
"sizes": "90x90"
},
{
"src": "./web-icons/firefox/firefox-general-64-64.png",
"sizes": "64x64"
},
{
"src": "./web-icons/firefox/firefox-general-48-48.png",
"sizes": "48x48"
},
{
"src": "./web-icons/firefox/firefox-general-32-32.png",
"sizes": "32x32"
},
{
"src": "./web-icons/firefox/firefox-general-16-16.png",
"sizes": "16x16"
}
],
"screenshots": [
{
"src": "./web-icons/screenshots/dashy-scrsht-1.png",
"sizes": "1523x1347",
"type": "image/png",
"label": "Dashy example homelab with Callisto theme"
},
{
"src": "./web-icons/screenshots/dashy-scrsht-2.png",
"sizes": "1264x861",
"type": "image/png",
"label": "Example, Networking services with Minimal Dark theme and a Horizontal layout"
},
{
"src": "./web-icons/screenshots/dashy-scrsht-3.png",
"sizes": "1303x864",
"type": "image/png",
"label": "Dashy example homelab with Material theme and auto-fetched favicons"
},
{
"src": "./web-icons/screenshots/dashy-scrsht-4.png",
"sizes": "1273x865",
"type": "image/png",
"label": "Dashy CFT Toolbox using Matrix theme"
},
{
"src": "./web-icons/screenshots/dashy-scrsht-5.png",
"sizes": "1146x851",
"type": "image/png",
"label": "Dashy as a Bookmark Manager, with Dracula theme and Font-Awesome icons"
},
{
"src": "./web-icons/screenshots/dashy-scrsht-6.png",
"sizes": "1147x872",
"type": "image/png",
"label": "Dashy example homelab with Nord theme"
}
]
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 565 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 66 KiB

View File

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

Some files were not shown because too many files have changed in this diff Show More