From a4ab101b832fc2c7f45afc6e70375c14e50f4e26 Mon Sep 17 00:00:00 2001 From: Alicia Sykes Date: Fri, 18 Jul 2025 06:20:04 +0100 Subject: [PATCH 01/19] =?UTF-8?q?=F0=9F=93=9A=20Updates=20image=20paths=20?= =?UTF-8?q?for=20widgets?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/widgets.md | 146 ++++++++++++++++++++++++------------------------ 1 file changed, 73 insertions(+), 73 deletions(-) diff --git a/docs/widgets.md b/docs/widgets.md index 82433158..f8eb19e0 100644 --- a/docs/widgets.md +++ b/docs/widgets.md @@ -112,7 +112,7 @@ Dashy has support for displaying dynamic content in the form of widgets. There a A simple, live-updating time and date widget with time-zone support. All fields are optional. -

+

#### Options @@ -145,7 +145,7 @@ _No external data requests._ A simple, live-updating local weather component, showing temperature, conditions and more info. -

+

#### Options @@ -182,7 +182,7 @@ A simple, live-updating local weather component, showing temperature, conditions Displays the weather (temperature and conditions) for the next few days for a given location. Note that this requires either the free [OpenWeatherMap Student Plan](https://home.openweathermap.org/students), or the Premium Plan. -

+

#### Options @@ -218,7 +218,7 @@ Displays the weather (temperature and conditions) for the next few days for a gi Display news and updates from any RSS-enabled service. -

+

#### Options @@ -263,7 +263,7 @@ If you'd like to embed a live screenshot, of all or just part of a website, then Or what about showing a photo of the day? Try `https://source.unsplash.com/random/400x300` or `https://picsum.photos/400/300` -

+

#### Options @@ -291,7 +291,7 @@ Unless image fetched from remote source, no external data request is made. Often find yourself searching "What's my IP", just so you can check your VPN is still connected? This widget displays your public IP address, along with ISP name and approx location. Data can be fetched from either [IpApi.co](https://ipapi.co/), [IP-API.com](https://ip-api.com/), [IpGeolocation.io](https://ipgeolocation.io/) or [IP2Location.io](https://ip2location.io/). -

+

#### Options @@ -331,7 +331,7 @@ Or Notice certain web pages aren't loading? This widget quickly shows which blacklists your IP address (or host, or email) appears on, using data from [blacklistchecker.com](https://blacklistchecker.com/). -

+

#### Options @@ -363,7 +363,7 @@ Notice certain web pages aren't loading? This widget quickly shows which blackli Keep an eye on the expiry dates of your domain names, using public whois records fetched from [whoapi.com](https://whoapi.com/). Click the domain name to view additional info, like registrar, name servers and date last updated. -

+

#### Options @@ -401,7 +401,7 @@ Keep an eye on the expiry dates of your domain names, using public whois records Keep track of price changes of your favorite crypto assets. Data is fetched from [CoinGecko](https://www.coingecko.com/). All fields are optional. -

+

#### Options @@ -449,7 +449,7 @@ Or Shows recent price history for a given crypto asset, using price data fetched from [CoinGecko](https://www.coingecko.com/) -

+

#### Options @@ -484,7 +484,7 @@ Shows recent price history for a given crypto asset, using price data fetched fr Keep track of your crypto balances and see recent transactions. Data is fetched from [BlockCypher](https://www.blockcypher.com/dev/) -

+

#### Options @@ -517,7 +517,7 @@ Keep track of your crypto balances and see recent transactions. Data is fetched Display your coding summary. [Code::Stats](https://codestats.net/) is a free and open source app that aggregates statistics about your programming activity. Dashy supports both the public instance, as well as self-hosted versions. -

+

#### Options @@ -553,7 +553,7 @@ Display your coding summary. [Code::Stats](https://codestats.net/) is a free and Shows your Mullvad VPN connection status, as well as server info. Fetched from [am.i.mullvad.net](https://mullvad.net/en/check/) -

+

#### Options @@ -581,7 +581,7 @@ _No Options._ This widget display email addresses / aliases from addy.io. Click an email address to copy to clipboard, or use the toggle switch to enable/ disable it. Shows usage stats (bandwidth, used aliases etc), as well as total messages received, blocked and sent. Works with both self-hosted and managed instances of addy.io. -

+

#### Options @@ -624,7 +624,7 @@ This widget display email addresses / aliases from addy.io. Click an email addre Keep track of recent security advisories and vulnerabilities, with optional filtering by score, exploits, vendor and product. All fields are optional. -

+

#### Options @@ -669,7 +669,7 @@ or Display current FX rates in your native currency. Hover over a row to view more info, or click to show rates in that currency. -

+

#### Options @@ -709,7 +709,7 @@ Counting down to the next day off work? This widget displays upcoming public hol Note, config for this widget is case-sensetive (see [#1268](https://github.com/Lissy93/dashy/issues/1268)) -

+

#### Options @@ -747,7 +747,7 @@ Note, config for this widget is case-sensetive (see [#1268](https://github.com/L Keep track of the current COVID-19 status. Optionally also show cases by country, and a time-series chart. Uses live data from various sources, computed by [disease.sh](https://disease.sh/) -

+

#### Options @@ -794,7 +794,7 @@ Or Show recent scores and upcoming matches from your favourite sports team. Data is fetched from [TheSportsDB.com](https://www.thesportsdb.com/). From the UI, you can click any other team to view their scores and upcoming games, or click a league name to see all teams. -

+

#### Options @@ -829,7 +829,7 @@ Show recent scores and upcoming matches from your favourite sports team. Data is Displays the latest news, click to read full article. Date is fetched from various news sources using [Currents API](https://currentsapi.services/en) -

+

#### Options @@ -866,7 +866,7 @@ Displays the latest news, click to read full article. Date is fetched from vario Shows real-time tube status of the London Underground. All fields are optional. -

+

#### Options @@ -907,7 +907,7 @@ Shows real-time tube status of the London Underground. All fields are optional. Shows recent price history for a given publicly-traded stock or share -

+

#### Options @@ -942,7 +942,7 @@ Shows recent price history for a given publicly-traded stock or share Renders the current Gas cost of transactions on the Ethereum network (in both GWEI and USD), along with recent historical prices. Useful for spotting a good time to transact. Uses data from [ethgas.watch](https://ethgas.watch/) -

+

#### Options @@ -968,7 +968,7 @@ _No config options._ Renders a programming or generic joke. Data is fetched from the [JokesAPI](https://github.com/Sv443/JokeAPI) by @Sv443. All fields are optional. -

+

#### Options @@ -1002,7 +1002,7 @@ Renders a programming or generic joke. Data is fetched from the [JokesAPI](https Have a laugh with the daily comic from [XKCD](https://xkcd.com/). A classic webcomic website covering everything from Linux, math, romance, science and language. All fields are optional. -

+

#### Options @@ -1031,7 +1031,7 @@ Have a laugh with the daily comic from [XKCD](https://xkcd.com/). A classic webc Displays airport departure and arrival flights, using data from [AeroDataBox](https://www.aerodatabox.com/). Useful if you live near an airport and often wonder where the flight overhead is going to. Hover over a row for more flight data. -

+

#### Options @@ -1067,7 +1067,7 @@ Displays airport departure and arrival flights, using data from [AeroDataBox](ht Show the NASA Astronomy Picture of the Day. Data is fetched from [APOD](https://apod.nasa.gov/apod/) using [@Lissy93/go-apod](https://github.com/lissy93/go-apod) / hosted at [apod.as93.net](https://apod.as93.net/). -

+

#### Options @@ -1093,7 +1093,7 @@ _No config options._ Displays currently trending projects on GitHub. Optionally specify a language and time-frame. Data is fetched from [Lissy93/gh-trending-no-cors](https://github.com/Lissy93/gh-trending-no-cors) using the GitHub API. All fields are optional. -

+

#### Options @@ -1126,7 +1126,7 @@ Displays currently trending projects on GitHub. Optionally specify a language an Display stats from your GitHub profile, using embedded cards from [anuraghazra/github-readme-stats](https://github.com/anuraghazra/github-readme-stats) -

+

#### Options @@ -1164,7 +1164,7 @@ Display stats from your GitHub profile, using embedded cards from [anuraghazra/g Display status of one or more HealthChecks project(s). Works with healthchecks.io and your selfhosted instance. -

+

#### Options @@ -1352,7 +1352,7 @@ This widget allows searching multiple search engines from dashy. Show an overview of how you have spent your time for the current day. -

+

#### Options @@ -1426,7 +1426,7 @@ Show minecraft server status _See [MVG Datenschutz](https://www.mvg.de/datenschutz-mvg.html)_ Displays info about the server which Dashy is hosted on. Includes user + host, operating system, uptime and basic memory & load data. -

+

#### Options @@ -1450,7 +1450,7 @@ Note that this widget is not available if you are running Dashy in a container o Cron job monitoring using [Health Checks](https://github.com/healthchecks/healthchecks). Both managed and self-hosted instances are supported. -

+

#### Options @@ -1481,7 +1481,7 @@ Cron job monitoring using [Health Checks](https://github.com/healthchecks/health Pull recent CPU usage history from NetData. -

+

#### Options @@ -1545,7 +1545,7 @@ Pull recent system RAM usage from NetData, and show as a breakdown of different Pull recent load usage in 1, 5 and 15 minute intervals, from NetData. -

+

#### Options @@ -1577,7 +1577,7 @@ Pull recent load usage in 1, 5 and 15 minute intervals, from NetData. Displays the number of queries blocked by [Pi-Hole](https://pi-hole.net/). -

+

#### Options @@ -1623,7 +1623,7 @@ Displays the number of queries blocked by [Pi-Hole](https://pi-hole.net/). Shows top queries that were blocked and allowed by [Pi-Hole](https://pi-hole.net/). -

+

#### Options @@ -1656,7 +1656,7 @@ Shows top queries that were blocked and allowed by [Pi-Hole](https://pi-hole.net Shows number of recent traffic, using allowed and blocked queries from [Pi-Hole](https://pi-hole.net/) -

+

#### Options @@ -1688,7 +1688,7 @@ Shows number of recent traffic, using allowed and blocked queries from [Pi-Hole] Displays the current and recent uptime of your running services, via a self-hosted instance of [StatPing](https://github.com/statping/statping) -

+

#### Options @@ -1736,7 +1736,7 @@ Note, the Group Id is not directly visible in StatPing UI, you can inspect the g Displays the current downloads/torrents tasks of your Synology NAS -

+

#### Options @@ -1773,7 +1773,7 @@ Displays the current downloads/torrents tasks of your Synology NAS Fetches data from your [AdGuard Home](https://adguard.com/en/adguard-home/overview.html) instance, and displays total number of allowed and blocked queries, plus a pie chart showing breakdown by block type. -

+

#### Options @@ -1808,7 +1808,7 @@ displays total number of allowed and blocked queries, plus a pie chart showing b Fetches data from your [AdGuard Home](https://adguard.com/en/adguard-home/overview.html) instance, to display the current status of each of your filter lists. Includes filter name, last updated, number of items, and a link to the list. -

+

#### Options @@ -1845,7 +1845,7 @@ Fetches data from your [AdGuard Home](https://adguard.com/en/adguard-home/overvi Fetches data from your [AdGuard Home](https://adguard.com/en/adguard-home/overview.html) instance, and displays the current status (Enabled / Disabled) of AdGuard DNS. Click show more to view detailed info, including upstream DNS provider, active ports, and the status of DNSSEC, EDNS CS, PTR and IPv6. -

+

#### Options @@ -1882,7 +1882,7 @@ Fetches data from your [AdGuard Home](https://adguard.com/en/adguard-home/overvi Fetches data from your [AdGuard Home](https://adguard.com/en/adguard-home/overview.html) instance, and displays a list of the most queried, and most blocked domains. -

+

#### Options @@ -1927,7 +1927,7 @@ Shows quota usage when quota is enabled for the user or disk usage when not enab Known issues: the User API incorrectly reports available disk space as total for admin users when quota is not enabled (which usually is the case for admins). -

nextcloud-user

+

nextcloud-user

#### Options @@ -1962,7 +1962,7 @@ Known issues: the User API incorrectly reports available disk space as total for Show user statuses for selected users. -

nextcloud-userstatus

+

nextcloud-userstatus

#### Options @@ -2000,7 +2000,7 @@ Show user statuses for selected users. Displays your notifications and allows deleting them. -

nextcloud-notifications

+

nextcloud-notifications

#### Options @@ -2037,7 +2037,7 @@ Displays your notifications and allows deleting them. Visualises overall memory utilisation and CPU load averages, shows server versions. -

nextcloud-system

+

nextcloud-system

#### Options @@ -2072,7 +2072,7 @@ Visualises overall memory utilisation and CPU load averages, shows server versio Shows key usage statistics about your Nextcloud server. -

nextcloud-stats

+

nextcloud-stats

#### Options @@ -2107,7 +2107,7 @@ Shows key usage statistics about your Nextcloud server. Shows statistics about PHP OPcache performance on your Nextcloud server. -

nextcloud-phpopcache

+

nextcloud-phpopcache

#### Options @@ -2209,7 +2209,7 @@ This will show the list of VMs, with a title and a linked fotter, hiding VM temp Shows queue information regarding your self hosted Sabnzbd server. -

Sabnzbd

+

Sabnzbd

#### Options @@ -2245,7 +2245,7 @@ Shows queue information regarding your self hosted Sabnzbd server. Display info from the Gluetun VPN container public IP API. This can show the IP and location data for the exit VPN node. -

+

#### Options @@ -2278,7 +2278,7 @@ Display info from the Gluetun VPN container public IP API. This can show the IP Display the last builds from a [Drone CI](https://www.drone.ci) instance. A self-hosted CI system that uses docker. -

+

#### Options @@ -2380,7 +2380,7 @@ Linkding is a self-hosted bookmarking service, which has a clean interface and i [Tactical RMM](https://github.com/amidaware/tacticalrmm) is a self-hosted remote monitoring & management tool. -

Capture

+

Capture

#### Options @@ -2466,7 +2466,7 @@ Note that if auth is configured, requests must be proxied with `useProxy: true` #### Screenshot -[![example-screenshot](https://i.ibb.co/xfK6BGb/system-monitor-board.png)](https://ibb.co/pR6dMZT) +[![example-screenshot](https://storage.googleapis.com/as93-screenshots/dashy/monitor-board.png)](https://ibb.co/pR6dMZT) --- @@ -2474,7 +2474,7 @@ Note that if auth is configured, requests must be proxied with `useProxy: true` Live-updating current CPU usage, as a combined average across all cores -

+

#### Example @@ -2490,7 +2490,7 @@ Live-updating current CPU usage, as a combined average across all cores Speedometer styled version of the Current CPU Usage widget -

+

#### Example @@ -2506,7 +2506,7 @@ Speedometer styled version of the Current CPU Usage widget Live-updating CPU usage breakdown per core -

+

#### Example @@ -2522,7 +2522,7 @@ Live-updating CPU usage breakdown per core Recent CPU usage history, across all cores, and displayed by user and system -

+

#### Options @@ -2545,7 +2545,7 @@ Recent CPU usage history, across all cores, and displayed by user and system Real-time memory usage gauge, with more info visible on click -

+

#### Example @@ -2561,7 +2561,7 @@ Real-time memory usage gauge, with more info visible on click Speedometer styled version of the Current Memory Usage widget -

+

#### Example @@ -2577,7 +2577,7 @@ Speedometer styled version of the Current Memory Usage widget Recent memory usage chart -

+

#### Options @@ -2600,7 +2600,7 @@ Recent memory usage chart List connected disks, showing free / used space and other info (file system, mount point and space available) -

+

#### Example @@ -2616,7 +2616,7 @@ List connected disks, showing free / used space and other info (file system, mou Shows real-time read and write speeds and operations per sec for each disk -

+

#### Example @@ -2632,7 +2632,7 @@ Shows real-time read and write speeds and operations per sec for each disk Shows the number of processes waiting in the run-queue, averaged across all cores. Displays for past 5, 10 and 15 minutes -

+

#### Example @@ -2648,7 +2648,7 @@ Shows the number of processes waiting in the run-queue, averaged across all core Shows recent historical system load, calculated from the number of processes waiting in the run-queue, in 1, 5 and 15 minute intervals, and averaged across all cores. Optionally specify `limit` to set number of results returned, defaults to `500`, max `100000`, but the higher the number the longer the load and render times will be. -

+

#### Example @@ -2664,7 +2664,7 @@ Shows recent historical system load, calculated from the number of processes wai Lists visible network interfaces, including real-time upload/ download stats -

+

#### Example @@ -2680,7 +2680,7 @@ Lists visible network interfaces, including real-time upload/ download stats Shows amount of data recently uploaded/ downloaded across all network interfaces. Optionally set the `limit` option to specify number historical of data points to return -

+

#### Example @@ -2713,7 +2713,7 @@ Lists recent high resource usage alerts (e.g. CPU, mem, IO, load, temp) Shows public and private IP address. Note that the ip plugin is not available on all instances of Glances. -

+

#### Example @@ -2732,7 +2732,7 @@ Displays temperature data from system CPUs. Note: This widget uses the [`sensors`](https://github.com/nicolargo/glances/blob/develop/glances/plugins/glances_sensors.py) plugin, which is disabled by default, and may cause [performance issues](https://github.com/nicolargo/glances/issues/1664#issuecomment-632063558). You'll need to enable the sensors plugin to use this widget, using: `--enable-plugin sensors` when you start Glances. -

+

#### Options @@ -2757,7 +2757,7 @@ You'll need to enable the sensors plugin to use this widget, using: `--enable-pl Embed any webpage into your dashboard as a widget. -

+

#### Options @@ -2782,7 +2782,7 @@ Many websites and apps provide their own embeddable widgets. These can be used w ⚠️ **NOTE:** Use with extreme caution. Embedding a script from an untrustworthy source may have serious unintended consequences. -

+

#### Options @@ -2849,7 +2849,7 @@ Display data from any service with a Prometheus exporter. Show live data from an RSS-enabled service. The only required parameter is `rssUrl`, which is the URL to the ATOM feed. See [RSS Widget](#rss-feed) for full list of available options. -

+

#### Example From 8e934750425c06a0b3889d35d8d90bf3e4ee4ea5 Mon Sep 17 00:00:00 2001 From: Alicia Sykes Date: Fri, 18 Jul 2025 18:55:05 +0100 Subject: [PATCH 02/19] =?UTF-8?q?=E2=99=BB=20=20Replace=20generated=20cont?= =?UTF-8?q?ributors=20with=20badge=20instead,=20cleanner=20commit=20histor?= =?UTF-8?q?y?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 124 +---- docs/credits.md | 1319 +---------------------------------------------- 2 files changed, 9 insertions(+), 1434 deletions(-) diff --git a/README.md b/README.md index dd2a58aa..3dedf37f 100644 --- a/README.md +++ b/README.md @@ -522,128 +522,12 @@ Thank you so much to everyone who has helped with Dashy so far; every contributi #### Sponsors Huge thanks to the sponsors helping to support Dashy's development! - - - - - - - - - - - - - - - - - - - - - -
- - vincentkoc -
- Vincent Koc -
-
- - BrianCurliss -
- Brian Curliss -
-
- - AnandChowdhary -
- Anand Chowdhary -
-
- - bile0026 -
- Zach Biles -
-
- - UlisesGascon -
- Ulises Gascón -
-
- - InDieTasten -
- InDieTasten -
-
- - araguaci -
- Araguaci -
-
- - bmcgonag -
- Brian McGonagill -
-
- - vlad-tim -
- Vlad -
-
- - helixzz -
- HeliXZz -
-
- - mryesiller -
- Göksel Yeşiller -
-
- - undefined -
- Undefined -
-
- - OlliVHH -
- HamburgerJung -
-
- - frankdez93 -
- Frankdez93 -
-
- - hudsonrock-partnerships -
- Hudsonrock-partnerships -
-
- - gl0bal01 -
- Gl0bal01 💖 龴ↀ◡ↀ龴 -
-
- + +![sponsors badge](https://readme-contribs.as93.net/sponsors/lissy93) + #### Contributors -[![Auto-generated contributors](https://raw.githubusercontent.com/Lissy93/dashy/master/docs/assets/CONTRIBUTORS.svg)](./docs/credits.md) +[![contributors badge](https://readme-contribs.as93.net/contributors/lissy93/dashy?perRow=12&limit=96)](./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) diff --git a/docs/credits.md b/docs/credits.md index 107fdf2f..797a4c59 100644 --- a/docs/credits.md +++ b/docs/credits.md @@ -1,1299 +1,18 @@ # Credits ## Sponsors - - - - - - - - - - - - - - - - - - - - - - - -
- - vincentkoc -
- Vincent Koc -
-
- - BrianCurliss -
- Brian Curliss -
-
- - AnandChowdhary -
- Anand Chowdhary -
-
- - bile0026 -
- Zach Biles -
-
- - UlisesGascon -
- Ulises Gascón -
-
- - InDieTasten -
- Null -
-
- - araguaci -
- Null -
-
- - bmcgonag -
- Brian McGonagill -
-
- - vlad-tim -
- Vlad -
-
- - helixzz -
- HeliXZz -
-
- - mryesiller -
- Göksel Yeşiller -
-
- - getumbrel -
- Umbrel -
-
- - OlliVHH -
- HamburgerJung -
-
- - frankdez93 -
- Null -
-
- - terminaltrove -
- Terminal Trove -
-
- - hudsonrock-partnerships -
- Null -
-
- - gl0bal01 -
- Gl0bal01 💖 龴ↀ◡ↀ龴 -
-
- - Quad4-Software -
- Quad4 Software -
-
- + +![Sponsors](https://readme-contribs.as93.net/sponsors/lissy93) ## Contributors - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - Lissy93 -
- Alicia Sykes -
-
- - liss-bot -
- Alicia Bot -
-
- - CrazyWolf13 -
- Tobias -
-
- - marekful -
- Marcell Fülöp -
-
- - EVOTk -
- EVOTk -
-
- - snyk-bot -
- Snyk Bot -
-
- - azerioxal -
- Kenneth Church -
-
- - m42e -
- Matthias Bilger -
-
- - pinarruiz -
- Alejandro Pinar Ruiz -
-
- - imjimmeh -
- Null -
-
- - kashif-se -
- Kashif Sohail -
-
- - lammersbjorn -
- Bjorn Lammers -
-
- - josuablejeru -
- Josua Blejeru -
-
- - evroon -
- Erik Vroon -
-
- - jammo2k5 -
- Jammo2k5 -
-
- - lordpansar -
- Magnus Sundström -
-
- - Cereal916 -
- Kristian Brasel -
-
- - albcp -
- Alberto -
-
- - alhazmy13 -
- Abdullah Alhazmy -
-
- - altearius -
- Chris Nielsen -
-
- - UrekD -
- UrekD -
-
- - zcq100 -
- Null -
-
- - hockwill -
- Null -
-
- - z3r0l1nk -
- Mihai -
-
- - wozboz -
- Null -
-
- - conlan0 -
- Null -
-
- - aviolaris -
- Andreas Violaris -
-
- - Tracreed -
- David Alasow -
-
- - dasunsrule32 -
- Aaron Echols -
-
- - Totto16 -
- Totto16 -
-
- - toddejohnson -
- Todd Johnson -
-
- - remygrandin -
- Remygrandin -
-
- - rubenandre -
- Rúben Silva -
-
- - rtm516 -
- Rtm516 -
-
- - onedr0p -
- ᗪєνιη ᗷυнʟ -
-
- - stanly0726 -
- Stanly0726 -
-
- - kt-alt -
- Null -
-
- - Bogyie -
- Bogyeong Kim -
-
- - webysther -
- Webysther Sperandio -
-
- - jtuzar -
- Jakub Tuzar -
-
- - lucolvin -
- Luke -
-
- - berksmbl -
- Berk Sümbül -
-
- - alucarddelta -
- Brent -
-
- - BySempron -
- Sergio -
-
- - ssrangisetti -
- Null -
-
- - zigotica -
- Sergi Meseguer -
-
- - rokiden -
- Denis Kazimirov -
-
- - patrickheeney -
- Patrick Heeney -
-
- - mmihaly -
- Null -
-
- - m42cel -
- Null -
-
- - k073l -
- Null -
-
- - itsmejoeeey -
- Joey Miller -
-
- - alayham -
- Al-Ayham Saleh -
-
- - alexdelprete -
- Alessandro Del Prete -
-
- - a-mnich -
- Alexander Mnich -
-
- - BOZG -
- Stephen Rigney -
-
- - moemoeq -
- CHAIYEON CHO -
-
- - daentech -
- Dan Gilbert -
-
- - deneor -
- Null -
-
- - GuilhermeLCS95 -
- GuilhermeLCS -
-
- - TJonesy -
- Taylor Jones -
-
- - twsouthwick -
- Taylor Southwick -
-
- - thomaswienecke -
- Thomas Wienecke -
-
- - hockeymikey -
- Null -
-
- - turnrye -
- Ryan Turner -
-
- - sachahjkl -
- Sacha -
-
- - shazzx -
- Shazz -
-
- - ThinkSalat -
- Shawn Salat -
-
- - sxravan -
- Shravan Dwarka -
-
- - royshreyaa -
- Null -
-
- - Smexhy -
- Null -
-
- - stavros-k -
- Stavros Kois -
-
- - XenonR -
- Steffen Schmidt -
-
- - StevKast -
- Steven Kast -
-
- - rubjo -
- Null -
-
- - PrynsTag -
- Prince Carl Velasco -
-
- - PlusaN -
- Andrey -
-
- - oka4shi -
- OKAMOTO Shigehiro -
-
- - bubylou -
- Nicholas Malcolm -
-
- - michaelfeinbier -
- Michael Feinbier -
-
- - stinkybernie -
- Michael D -
-
- - miclav -
- Michael Lavaire -
-
- - imsakg -
- Mert Sefa AKGUN -
-
- - maximemoreillon -
- Maxime Moreillon -
-
- - AmadeusGraves -
- Ángel Fernández Sánchez -
-
- - tazboyz16 -
- Null -
-
- - sur1v -
- José Ignacio -
-
- - soaibsafi -
- Soaibuzzaman -
-
- - pablomalo -
- Null -
-
- - nOw-Ay -
- Noé Busson -
-
- - markxoe -
- Mark Oude Elberink -
-
- - ivyturner -
- Ivy Rose Turner -
-
- - kxenoxx -
- Kxenox -
-
- - jrobles98 -
- Null -
-
- - jnach -
- Jnach -
-
- - imlonghao -
- Imlonghao -
-
- - icy-comet -
- Aniket Teredesai -
-
- - huangshaohuai -
- Null -
-
- - flechaig -
- Null -
-
- - baifengheixi -
- Null -
-
- - allozavrr -
- Null -
-
- - XertDev -
- Xert -
-
- - willbrowningme -
- Will Browning -
-
- - ThibautSnoeijs -
- Thibaut -
-
- - Glitch3dPenguin -
- Max Kulik -
-
- - edugof -
- Eduardo Gomez -
-
- - Dylan-Bs -
- Dylan Bersans -
-
- - dyauss -
- Thandy Norberto -
-
- - ddenev -
- Dragomir Denev -
-
- - dougaldhub -
- Doug Lock -
-
- - dkyeremeh -
- Desmond Kyeremeh -
-
- - deepsourcebot -
- DeepSource Bot -
-
- - DawidPietrykowski -
- Null -
-
- - skaarj1989 -
- David -
-
- - The127 -
- Darkarotte -
-
- - danfein -
- Dan -
-
- - clsty -
- Celestial.y -
-
- - bskim45 -
- Bumsoo Kim -
-
- - BhasherBEL -
- Brieuc Dubois -
-
- - BeginCI -
- Begin -
-
- - BRAVO68WEB -
- Jyotirmoy Bandyopadhyaya [Bravo68] -
-
- - AaronPorts -
- Artyom -
-
- - alydemah -
- Aly Mohamed -
-
- - 5idereal -
- 5idereal -
-
- - 0n1cOn3 -
- 0n1cOn3 -
-
- - markusdd -
- Markus Krause -
-
- - asenov -
- Мирослав Асенов -
-
- - luispabon -
- Luis Pabon -
-
- - LeoColman -
- Leonardo Colman Lopes -
-
- - KierenConnell -
- Kieren Connell -
-
- - kieraneglin -
- Kieran -
-
- - johnhorton2010 -
- John Horton -
-
- - Singebob -
- Jeremy Chauvin -
-
- - Hellhium -
- Jemy SCHNEPP -
-
- - jjmung -
- JJ Munguia -
-
- - b1thunt3r -
- Ishan Jain -
-
- - Compunctus -
- Iaroslav Dronskii -
-
- - nealian -
- Ian Neal -
-
- - ip2location -
- IP2Location -
-
- - FraglyG -
- Hendrik Strydom -
-
- - hubortje -
- Harald Töpfer -
-
- - gbrown09 -
- Garrett Brown -
-
- - FormatToday -
- FormatToday -
-
- - pvillaverde -
- Fedello -
-
- - emiran-orange -
- Null -
-
- -## Helpful Users - - - - - - - - - -
- - evotk -
- Evotk -
-
- - shadowking001 -
- LawrenceP. -
-
- - urekd -
- Urekd -
-
- - dylanbeme -
- DylanH -
-
- - milesteg1 -
- Milesteg1 -
-
- - lu4t -
- Lu4t -
-
- - -## Bots - - - - - - - - - - - -
- - liss-bot -
- Alicia Bot -
-
- - snyk-bot -
- Snyk Bot -
-
- - netlify -
- Netlify -
-
- - viezly -
- Viezly -
-
- - muse-dev -
- MuseDev -
-
- - github-actions[bot] -
- github-actions[bot] -
-
- - dependabot[bot] -
- dependabot[bot] -
-
- - -> The above section is auto-generated, using [contribute-list](https://github.com/marketplace/actions/contribute-list) by @akhilmhdh. +![Contributors](https://readme-contribs.as93.net/contributors/lissy93/dashy?perRow=12&limit=96) ## Newest Stargazers -[![Recent Star Gazers](https://reporoster.com/stars/dark/Lissy93/dashy)](https://github.com/Lissy93/dashy/stargazers) +[![Stargazers](https://readme-contribs.as93.net/stargazers/lissy93/dashy?perRow=16&fontSize=10&limit=96)](https://github.com/Lissy93/dashy/stargazers) -[![Recent Forkers](https://reporoster.com/forks/dark/lissy93/dashy)](https://github.com/lissy93/dashy/network/members) +[![Forkers](https://readme-contribs.as93.net/forkers/lissy93/dashy?perRow=16&fontSize=10&limit=96)](https://github.com/lissy93/dashy/network/members) --- @@ -1324,34 +43,6 @@ At it's core, the application uses [**Vue.js**](https://github.com/vuejs/vue), a - [`vue-toasted`](https://github.com/shakee93/vue-toasted) - Toast notification component by @shakee93 `MIT` - [`vue-swatches`](https://github.com/saintplay/vue-swatches) - Color palete picker by @saintplay `MIT` -### Backup & Sync Server - -Although the app is purely frontend, there is an optional cloud sync feature, for off-site backup and restore. This is built as a serverless function on [Cloudflare workers](https://workers.cloudflare.com/) using [KV](https://developers.cloudflare.com/workers/runtime-apis/kv) and [web crypto](https://developers.cloudflare.com/workers/runtime-apis/web-crypto) - -### External Services - -The 1-Click deploy demo uses [Play-with-Docker Labs](https://play-with-docker.com/). Code is hosted on [GitHub](https://github.com), Docker images are hosted on [DockerHub](https://hub.docker.com/), and the demos are hosted on [Netlify](https://www.netlify.com/). - -### Actions - -This repo makes heavy use of [GitHub actions](https://github.com/features/actions) to run automated workflows. The following base actions are totally awesome, and have been extremely useful. Full credit to their respective authors - -- [`action-autotag`](https://github.com/butlerlogic/action-autotag) by @butlerlogic - Tags new versions when app version changes -- [`action-wiki-sync`](https://github.com/joeizzard/action-wiki-sync) by @joeizzard - Copies the markdown docs to the GH wiki -- [`contributors-list`](https://github.com/bubkoo/contributors-list) by @bubkoo - Generates contributors SVG -- [`contributors-readme-action`](https://github.com/akhilmhdh/contributors-readme-action) by @akhilmhdh - Inserts contributors into credits -- [`create-pull-request`](https://github.com/eter-evans/create-pull-request) by @eter-evans - Creates pull request -- [`github-pages-deploy-action`](https://github.com/JamesIves/github-pages-deploy-action) by @JamesIves - Deploy app to GH pages -- [`github-release-commenter`](https://github.com/apexskier/github-release-commenter) by @apexskier - Updates issues when fix is released -- [`github-sponsors-readme-action`](https://github.com/JamesIves/github-sponsors-readme-action) by @JamesIves - Inserts sponsors into credits -- [`is-sponsor-label-action`](https://github.com/JasonEtco/is-sponsor-label-action) by @JasonEtco - Label sponsors, for priority support -- [`issues-translate-action`](https://github.com/tomsun28/issues-translate-action) by @tomsun28 - Translates non-English issues and comments -- [`misspell-fixer-action`](https://github.com/sobolevn/misspell-fixer-action) by @sobolevn - Finds and fixes typos -- [`please-star-first`](https://github.com/uhyo/please-star-first) by @uhyo - Closes certain issues by non-stargazers -- [`pr-commenter-action`](https://github.com/exercism/pr-commenter-action) by @exercism - Adds info comments to PR based on the files changed -- [`snyk note`](https://github.com/snyk/actions/node) by @snyk - Reports vulnerabilities in the code or dependencies -- [`todo-to-issue-action`](https://github.com/alstr/todo-to-issue-action) by @alstr - Opens issues from todos in the code -- [`yarn-lock-changes`](https://github.com/Simek/yarn-lock-changes) by @Simek - Outputs dependency changes in PR --- From 3e50636c042ddff77d623ea1328fd25832dbb55d Mon Sep 17 00:00:00 2001 From: Alicia Sykes Date: Fri, 18 Jul 2025 18:55:41 +0100 Subject: [PATCH 03/19] =?UTF-8?q?=F0=9F=97=91=20=20Remove=20no-longer=20ne?= =?UTF-8?q?eded=20workflows?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/add-comment-from-tag.yml | 27 -------- .github/workflows/close-incomplete-issues.yml | 21 ------ .github/workflows/generate-credits.yml | 68 ------------------- .github/workflows/release-commenter.yml | 17 ----- 4 files changed, 133 deletions(-) delete mode 100644 .github/workflows/add-comment-from-tag.yml delete mode 100644 .github/workflows/close-incomplete-issues.yml delete mode 100644 .github/workflows/generate-credits.yml delete mode 100644 .github/workflows/release-commenter.yml diff --git a/.github/workflows/add-comment-from-tag.yml b/.github/workflows/add-comment-from-tag.yml deleted file mode 100644 index 64d7932f..00000000 --- a/.github/workflows/add-comment-from-tag.yml +++ /dev/null @@ -1,27 +0,0 @@ -# Based on a label applied to an issue, the bot will add a comment with some additional info -name: 🎯 Auto-Reply to Labeled Tickets -on: - issues: - types: - - labeled - - unlabeled - pull_request_target: - types: - - labeled - - unlabeled -permissions: - contents: read - issues: write - pull-requests: write - -jobs: - comment: - runs-on: ubuntu-20.04 - steps: - - name: Checkout - uses: actions/checkout@v2 - - name: Label Commenter - uses: peaceiris/actions-label-commenter@v1 - with: - config_file: .github/issue-auto-comments.yml - github_token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/close-incomplete-issues.yml b/.github/workflows/close-incomplete-issues.yml deleted file mode 100644 index 61331f6c..00000000 --- a/.github/workflows/close-incomplete-issues.yml +++ /dev/null @@ -1,21 +0,0 @@ -# Close any issue that does not match any of the issue templates -name: 🎯 Close Incomplete Issues -on: - issues: - types: [opened, edited] -jobs: - auto_close_issues: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v1 - - name: Automatically close issues that don't follow the issue template - uses: lucasbento/auto-close-issues@v1.0.2 - with: - github-token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} - closed-issues-label: '🙁 Auto-Closed' - issue-close-message: | - Hello @${issue.user.login} 👋 - Unfortunately your issue does not follow the format outlined in the template, and has therefore been auto-closed. - To ensure that all relevant info is included, please either update or recreate your issue, and complete the sub-headings provided. - Thank you :) diff --git a/.github/workflows/generate-credits.yml b/.github/workflows/generate-credits.yml deleted file mode 100644 index 0ec6a208..00000000 --- a/.github/workflows/generate-credits.yml +++ /dev/null @@ -1,68 +0,0 @@ -# Inserts list of contributors and community members into ./docs/credits.md -# Also generates an SVG showing all contributors, which is embedded into readme -name: 📊 Generate Contributor Credits -on: - workflow_dispatch: # Manual dispatch - schedule: - - cron: '0 1 * * 0' # At 01:00 on Sunday. -jobs: - # Job #1 - Generate an embedded SVG asset, showing all contributors - generate-contributors: - runs-on: ubuntu-latest - steps: - - uses: bubkoo/contributors-list@v1 - with: - GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} - svgPath: docs/assets/CONTRIBUTORS.svg - affiliation: all - includeBots: false - excludeUsers: BeginCI snyk-bot - avatarSize: 96 - userNameHeight: 20 - svgWidth: 830 - commitMessage: ':blue_heart: Updates contributor SVG' - # Job #2 - Fetches sponsors and inserts into readme and credits page - insert-sponsors: - runs-on: ubuntu-latest - steps: - - name: Checkout 🛎️ - uses: actions/checkout@v2 - - name: Generate Sponsors in Readme 💖 - uses: JamesIves/github-sponsors-readme-action@1.0.5 - with: - token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} - file: 'README.md' - - name: Generate Sponsors in Credits 💖 - uses: JamesIves/github-sponsors-readme-action@1.0.5 - with: - token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} - file: 'docs/credits.md' - # Job #3 - Update the Credits page - insert-credits: - runs-on: ubuntu-latest - name: Inserts contributors into credits.md - steps: - - name: Contributer List - Credits Page - uses: akhilmhdh/contributors-readme-action@v2.3.6 - env: - GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} - with: - image_size: 80 - 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 - uses: akhilmhdh/contributors-readme-action@v2.2 - env: - GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} - with: - image_size: 80 - readme_path: README.md - columns_per_row: 6 - commit_message: ':yellow_heart: Updates sponsors table' - committer_username: liss-bot - committer_email: liss-bot@d0h.co - diff --git a/.github/workflows/release-commenter.yml b/.github/workflows/release-commenter.yml deleted file mode 100644 index eff58e1c..00000000 --- a/.github/workflows/release-commenter.yml +++ /dev/null @@ -1,17 +0,0 @@ -# Adds a comment to all issues & PRs that were fixed on a new release -name: 💡 Update Issue after Release -on: - release: - types: [published] -jobs: - release: - runs-on: ubuntu-latest - steps: - - uses: apexskier/github-release-commenter@v1 - with: - GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} - label-template: 🛩️ Released {release_tag} - comment-template: | - **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. From 97b884d9c45dee6110fd3c35eb090d7e23e0b413 Mon Sep 17 00:00:00 2001 From: casmbu Date: Sat, 2 Aug 2025 15:27:38 -0400 Subject: [PATCH 04/19] chore: add minecraft-status widget documentation --- docs/widgets.md | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/docs/widgets.md b/docs/widgets.md index b1a4c47c..ba0b2368 100644 --- a/docs/widgets.md +++ b/docs/widgets.md @@ -17,6 +17,7 @@ Dashy has support for displaying dynamic content in the form of widgets. There a - [Crypto Price History](#crypto-token-price-history) - [Crypto Wallet Balance](#wallet-balance) - [Code Stats](#code-stats) + - [Minecraft Status](#minecraft-status) - [Mullvad Status](#mullvad-status) - [Email Aliases (addy.io)](#addyio) - [Vulnerability Feed](#vulnerability-feed) @@ -549,6 +550,46 @@ Display your coding summary. [Code::Stats](https://codestats.net/) is a free and --- +### Minecraft Status + +Shows your Minecraft server status, as well as server info. Fetched from [api.mcsrvstat.us](https://api.mcsrvstat.us) + +

+ +#### Options + +**Field** | **Type** | **Required** | **Description** +--- | --- | --- | --- +**`title`** | `string` | _Optional_ | The title to show for this server (defaults to the `server` option) +**`server`** | `string` | Required | The IP or URL that the server is hosted at including the port (e.g. example.com:19132 or 192.168.1.111:19132) +**`bedrock`** | `boolean` | _Optional_ | Indicate whether the server is a bedrock server or not (default false) +**`showPlayers`** | `boolean` | _Optional_ | Optionally show the players in the server +**`showMods`** | `boolean` | _Optional_ | Optionally show the mods installed on the server +**`showPlugins`** | `boolean` | _Optional_ | Optionally show the plugins installed on the server + +#### Example + +```yaml +- type: minecraft-status + options: + title: My Cool Minecraft Server + server: 192.168.1.111:19132 + bedrock: true + showPlayers: true + showMods: true + showPlugins: true +``` + +#### Info + +- **CORS**: 🟢 Enabled +- **Auth**: 🟢 Not Required +- **Price**: 🟢 Free +- **Host**: Self-Hosted or Managed +- **Privacy**: _See privacy policy of the particular Minecraft server. Note: [mcsrvstat.us](https://mcsrvstat.us) does not have a published privacy policy_ + +--- + ### Mullvad Status Shows your Mullvad VPN connection status, as well as server info. Fetched from [am.i.mullvad.net](https://mullvad.net/en/check/) From dcf124e17b9de627da3f4189d9fffce832442c1b Mon Sep 17 00:00:00 2001 From: casmbu Date: Sat, 2 Aug 2025 15:29:04 -0400 Subject: [PATCH 05/19] bug fix: uptime-kuma widget should be able to use environment variables for its api key --- src/components/Widgets/UptimeKuma.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Widgets/UptimeKuma.vue b/src/components/Widgets/UptimeKuma.vue index a6995cc6..e7fb312f 100644 --- a/src/components/Widgets/UptimeKuma.vue +++ b/src/components/Widgets/UptimeKuma.vue @@ -60,10 +60,10 @@ export default { }, /* Create authorisation header for the instance from the apiKey */ authHeaders() { - if (!this.options.apiKey) { + if (!this.apiKey) { return {}; } - const encoded = window.btoa(`:${this.options.apiKey}`); + const encoded = window.btoa(`:${this.apiKey}`); return { Authorization: `Basic ${encoded}` }; }, }, From 7d5b95552663cdc382f130fd9888978cf3103691 Mon Sep 17 00:00:00 2001 From: casmbu Date: Sat, 2 Aug 2025 15:29:38 -0400 Subject: [PATCH 06/19] feat: add pi-hole-stats-v6 widget --- src/components/Widgets/PiHoleStats.vue | 6 +- src/components/Widgets/PiHoleStatsV6.vue | 261 +++++++++++++++++++++++ src/components/Widgets/WidgetBase.vue | 1 + 3 files changed, 264 insertions(+), 4 deletions(-) create mode 100644 src/components/Widgets/PiHoleStatsV6.vue diff --git a/src/components/Widgets/PiHoleStats.vue b/src/components/Widgets/PiHoleStats.vue index fb5aa56d..ef453b46 100644 --- a/src/components/Widgets/PiHoleStats.vue +++ b/src/components/Widgets/PiHoleStats.vue @@ -38,7 +38,7 @@ export default { hostname() { const usersChoice = this.parseAsEnvVar(this.options.hostname); if (!usersChoice) this.error('You must specify the hostname for your Pi-Hole server'); - return usersChoice || 'http://pi.hole'; + return usersChoice; }, apiKey() { const usersChoice = this.parseAsEnvVar(this.options.apiKey); @@ -53,9 +53,7 @@ export default { hideInfo() { return this.options.hideInfo; }, }, filters: { - capitalize(str) { - return capitalize(str); - }, + capitalize, }, methods: { /* Make GET request to local pi-hole instance */ diff --git a/src/components/Widgets/PiHoleStatsV6.vue b/src/components/Widgets/PiHoleStatsV6.vue new file mode 100644 index 00000000..574550a3 --- /dev/null +++ b/src/components/Widgets/PiHoleStatsV6.vue @@ -0,0 +1,261 @@ + + + + + diff --git a/src/components/Widgets/WidgetBase.vue b/src/components/Widgets/WidgetBase.vue index f67c72aa..0836ce0d 100644 --- a/src/components/Widgets/WidgetBase.vue +++ b/src/components/Widgets/WidgetBase.vue @@ -103,6 +103,7 @@ const COMPAT = { 'nextcloud-user': 'NextcloudUser', 'nextcloud-user-status': 'NextcloudUserStatus', 'pi-hole-stats': 'PiHoleStats', + 'pi-hole-stats-v6': 'PiHoleStatsV6', 'pi-hole-top-queries': 'PiHoleTopQueries', 'pi-hole-traffic': 'PiHoleTraffic', 'proxmox-lists': 'Proxmox', From da87c76207b395bc824a2d2cb55754fcc6e178fb Mon Sep 17 00:00:00 2001 From: casmbu Date: Sat, 2 Aug 2025 15:41:42 -0400 Subject: [PATCH 07/19] chore: add pi-hole-stats-v6 documentation --- docs/widgets.md | 48 +++++++++++++++++++++++- src/components/Widgets/PiHoleStatsV6.vue | 2 +- 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/docs/widgets.md b/docs/widgets.md index ba0b2368..17114aa6 100644 --- a/docs/widgets.md +++ b/docs/widgets.md @@ -1804,7 +1804,53 @@ Displays the number of queries blocked by [Pi-Hole](https://pi-hole.net/). - **CORS**: 🟢 Enabled - **Auth**: 🔴 Required - **Price**: 🟢 Free -- **Host**: Self-Hosted (see [GitHub - Pi-hole](https://github.com/pi-hole/pi-hole)) +- **Host**: Self-Hosted (see [GitHub - Pi-Hole](https://github.com/pi-hole/pi-hole)) +- **Privacy**: _See [Pi-Hole Privacy Guide](https://pi-hole.net/privacy/)_ + +--- + +### Pi Hole Stats v6 + +Displays the number of queries blocked by [Pi-Hole](https://pi-hole.net/). Use this version of the widget if you have a v6+ Pi-Hole instance. + +

+ +#### Options + +**Field** | **Type** | **Required** | **Description** +--- | --- | --- | --- +**`hostname`** | `string` | Required | The URL to your Pi-Hole instance +**`hideStatus`** / **`hideChart`** / **`hideInfo`** | `boolean` | _Optional_ | Optionally hide any of the three parts of the widget +**`apiKey`** | `string` | Required | Your Pi-Hole web password or application password. It **IS** your Pi-Hole admin interface password **UNLESS** you have 2FA turned on (in contrast to the old widget). If you have 2FA turned on you will need to create an application password. Refer to Pi-Hole documentation for how to create an application password. + +#### Example + +```yaml +- type: pi-hole-stats-v6 + options: + hostname: http://192.168.130.1 + apiKey: xxxxxxxxxxxxxxxxxxxxxxx +``` + +> [!TIP] +> In order to avoid leaking secret data, both `hostname` and `apiKey` can leverage environment variables. Simply pass the name of the variable, which MUST start with `VUE_APP_`. + +```yaml +- type: pi-hole-stats-v6 + options: + hostname: VUE_APP_pihole_ip + apiKey: VUE_APP_pihole_key +``` + +> [!IMPORTANT] +> You will need to restart the server (or the docker image) if adding/editing an env var for this to be refreshed. + +#### Info + +- **CORS**: 🟢 Enabled +- **Auth**: 🔴 Required +- **Price**: 🟢 Free +- **Host**: Self-Hosted (see [GitHub - Pi-Hole](https://github.com/pi-hole/pi-hole)) - **Privacy**: _See [Pi-Hole Privacy Guide](https://pi-hole.net/privacy/)_ --- diff --git a/src/components/Widgets/PiHoleStatsV6.vue b/src/components/Widgets/PiHoleStatsV6.vue index 574550a3..14e9f15f 100644 --- a/src/components/Widgets/PiHoleStatsV6.vue +++ b/src/components/Widgets/PiHoleStatsV6.vue @@ -193,7 +193,7 @@ export default { strokeWidth: 18, colors: ['#f80363', '#20e253'], tooltipOptions: { - formatTooltipY: d => `${Math.round(d)}%`, + formatTooltipY: d => `${Math.round(d * 10) / 10}%`, }, }); }, From a7a1fbb27f69c9ad52cde7b454e934901c201236 Mon Sep 17 00:00:00 2001 From: casmbu Date: Sat, 2 Aug 2025 15:44:18 -0400 Subject: [PATCH 08/19] chore: remove duplicated minecraft widget doc --- docs/widgets.md | 40 ---------------------------------------- 1 file changed, 40 deletions(-) diff --git a/docs/widgets.md b/docs/widgets.md index 17114aa6..c3e4ea73 100644 --- a/docs/widgets.md +++ b/docs/widgets.md @@ -550,46 +550,6 @@ Display your coding summary. [Code::Stats](https://codestats.net/) is a free and --- -### Minecraft Status - -Shows your Minecraft server status, as well as server info. Fetched from [api.mcsrvstat.us](https://api.mcsrvstat.us) - -

- -#### Options - -**Field** | **Type** | **Required** | **Description** ---- | --- | --- | --- -**`title`** | `string` | _Optional_ | The title to show for this server (defaults to the `server` option) -**`server`** | `string` | Required | The IP or URL that the server is hosted at including the port (e.g. example.com:19132 or 192.168.1.111:19132) -**`bedrock`** | `boolean` | _Optional_ | Indicate whether the server is a bedrock server or not (default false) -**`showPlayers`** | `boolean` | _Optional_ | Optionally show the players in the server -**`showMods`** | `boolean` | _Optional_ | Optionally show the mods installed on the server -**`showPlugins`** | `boolean` | _Optional_ | Optionally show the plugins installed on the server - -#### Example - -```yaml -- type: minecraft-status - options: - title: My Cool Minecraft Server - server: 192.168.1.111:19132 - bedrock: true - showPlayers: true - showMods: true - showPlugins: true -``` - -#### Info - -- **CORS**: 🟢 Enabled -- **Auth**: 🟢 Not Required -- **Price**: 🟢 Free -- **Host**: Self-Hosted or Managed -- **Privacy**: _See privacy policy of the particular Minecraft server. Note: [mcsrvstat.us](https://mcsrvstat.us) does not have a published privacy policy_ - ---- - ### Mullvad Status Shows your Mullvad VPN connection status, as well as server info. Fetched from [am.i.mullvad.net](https://mullvad.net/en/check/) From 78f8f08fe2d5472227cdc46b531023c85e45ca38 Mon Sep 17 00:00:00 2001 From: casmbu Date: Sat, 2 Aug 2025 16:19:05 -0400 Subject: [PATCH 09/19] chore: minor changes to pi-hole-stats-v6 widget --- src/components/Widgets/PiHoleStatsV6.vue | 27 ++++++++---------------- 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/src/components/Widgets/PiHoleStatsV6.vue b/src/components/Widgets/PiHoleStatsV6.vue index 14e9f15f..7cb3d5aa 100644 --- a/src/components/Widgets/PiHoleStatsV6.vue +++ b/src/components/Widgets/PiHoleStatsV6.vue @@ -44,6 +44,9 @@ export default { if (!usersChoice) this.error('App Password is required, please see the docs'); return usersChoice; }, + hideStatus() { return this.options.hideStatus; }, + hideChart() { return this.options.hideChart; }, + hideInfo() { return this.options.hideInfo; }, authHeader() { return { 'X-FTL-SID': this.sid, @@ -57,17 +60,16 @@ export default { blockingStatusEndpoint() { return `${this.hostname}/api/dns/blocking`; }, - /* This is actually just the stats that are currently in memory. If you need accurate stats to a - particular timeframe, then the database endpoint is the way to go. */ + /* This is actually just the stats that are currently in memory, which amounts to 24hrs when the + service first boots up, but will drift to be a little more than 24hrs worth of data as the + server runs. If you need accurate stats to a particular timeframe, then the + /api/stats/database/summary endpoint is the way to go. */ statsEndpoint() { return `${this.hostname}/api/stats/summary`; }, statsDatabaseEndpoint() { return `${this.hostname}/api/stats/database/summary`; }, - hideStatus() { return this.options.hideStatus; }, - hideChart() { return this.options.hideChart; }, - hideInfo() { return this.options.hideInfo; }, timestampTomorrowMidnight() { const calcDate = new Date(); calcDate.setHours(0, 0, 0, 0); @@ -137,13 +139,13 @@ export default { url.searchParams.append('from', this.timestamp24HoursAgo); // Future date because we're looking for "up to present". url.searchParams.append('until', this.timestampTomorrowMidnight); - return this.makeRequest(url.toString(), this.authHeader, 'GET'); + return this.makeRequest(url.toString(), this.authHeader); }, fetchAllTimeStats() { const url = new URL(this.statsDatabaseEndpoint); url.searchParams.append('from', 1); // Errors out with 0. url.searchParams.append('until', this.timestampTomorrowMidnight); - return this.makeRequest(url.toString(), this.authHeader, 'GET'); + return this.makeRequest(url.toString(), this.authHeader); }, processData([blockingStatus, inMemoryStats, todayStats, allTimeStats]) { if (!this.hideStatus) { @@ -205,53 +207,42 @@ export default { .pi-hole-stats-v6-wrapper { display: flex; flex-direction: column; - .status { margin: 0.5rem 0; - .status-lbl { color: var(--widget-text-color); font-weight: bold; } - .status-val { margin-left: 0.5rem; font-family: var(--font-monospace); - &.green { color: var(--success); } &.red { color: var(--danger); } &.blue { color: var(--info); } } } - img.block-percent-chart { margin: 0.5rem auto; max-width: 8rem; width: 100%; } - .block-pie { margin: 0; } - .data-table { display: flex; flex-direction: column; - .data-table-row { display: flex; justify-content: space-between; - p { margin: 0.2rem 0; color: var(--widget-text-color); font-size: 0.9rem; - &.row-value { font-family: var(--font-monospace); } } - &:not(:last-child) { border-bottom: 1px dashed var(--widget-text-color); } From 6641e263def0f1b67c17404464f15c442e94e936 Mon Sep 17 00:00:00 2001 From: casmbu Date: Sat, 2 Aug 2025 16:19:40 -0400 Subject: [PATCH 10/19] feat: add pi-hole-top-queries-v6 widget --- src/components/Widgets/PiHoleTopQueries.vue | 1 - src/components/Widgets/PiHoleTopQueriesV6.vue | 159 ++++++++++++++++++ src/components/Widgets/WidgetBase.vue | 1 + 3 files changed, 160 insertions(+), 1 deletion(-) create mode 100644 src/components/Widgets/PiHoleTopQueriesV6.vue diff --git a/src/components/Widgets/PiHoleTopQueries.vue b/src/components/Widgets/PiHoleTopQueries.vue index b72b2426..39a780a1 100644 --- a/src/components/Widgets/PiHoleTopQueries.vue +++ b/src/components/Widgets/PiHoleTopQueries.vue @@ -103,5 +103,4 @@ export default { } } } - diff --git a/src/components/Widgets/PiHoleTopQueriesV6.vue b/src/components/Widgets/PiHoleTopQueriesV6.vue new file mode 100644 index 00000000..2da16342 --- /dev/null +++ b/src/components/Widgets/PiHoleTopQueriesV6.vue @@ -0,0 +1,159 @@ + + + + + diff --git a/src/components/Widgets/WidgetBase.vue b/src/components/Widgets/WidgetBase.vue index 0836ce0d..28c58393 100644 --- a/src/components/Widgets/WidgetBase.vue +++ b/src/components/Widgets/WidgetBase.vue @@ -105,6 +105,7 @@ const COMPAT = { 'pi-hole-stats': 'PiHoleStats', 'pi-hole-stats-v6': 'PiHoleStatsV6', 'pi-hole-top-queries': 'PiHoleTopQueries', + 'pi-hole-top-queries-v6': 'PiHoleTopQueriesV6', 'pi-hole-traffic': 'PiHoleTraffic', 'proxmox-lists': 'Proxmox', 'public-holidays': 'PublicHolidays', From f738cd2726f55560cc8553b1f8fed4254c86019d Mon Sep 17 00:00:00 2001 From: casmbu Date: Sat, 2 Aug 2025 16:43:05 -0400 Subject: [PATCH 11/19] chore: add pi-hole-queries-v6 widget docs --- docs/widgets.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/docs/widgets.md b/docs/widgets.md index c3e4ea73..50e71028 100644 --- a/docs/widgets.md +++ b/docs/widgets.md @@ -49,7 +49,9 @@ Dashy has support for displaying dynamic content in the form of widgets. There a - [Memory History](#memory-history-netdata) - [System Load History](#load-history-netdata) - [Pi Hole Stats](#pi-hole-stats) + - [Pi Hole Stats v6](#pi-hole-stats-v6) - [Pi Hole Queries](#pi-hole-queries) + - [Pi Hole Queries v6](#pi-hole-queries-v6) - [Pi Hole Recent Traffic](#pi-hole-recent-traffic) - [Stat Ping Statuses](#stat-ping-statuses) - [Synology Download Station](#synology-download-station) @@ -1848,6 +1850,39 @@ Shows top queries that were blocked and allowed by [Pi-Hole](https://pi-hole.net --- +### Pi Hole Queries v6 + +Shows top queries that were blocked and allowed by [Pi-Hole](https://pi-hole.net/). + +

+ +#### Options + +**Field** | **Type** | **Required** | **Description** +--- | --- | --- | --- +**`hostname`** | `string` | Required | The URL to your Pi-Hole instance +**`apiKey`** | `string` | Required | Your Pi-Hole web password or application password. It **IS** your Pi-Hole admin interface password **UNLESS** you have 2FA turned on (in contrast to the old widget). If you have 2FA turned on you will need to create an application password. Refer to Pi-Hole documentation for how to create an application password. +**`count`** | `number` | _Optional_ | The number of queries to display. Defaults to `10` + +#### Example + +```yaml +- type: pi-hole-top-queries-v6 + options: + hostname: https://pi-hole.local + apiKey: xxxxxxxxxxxxxxxxxxxxxxx +``` + +#### Info + +- **CORS**: 🟢 Enabled +- **Auth**: 🔴 Required +- **Price**: 🟢 Free +- **Host**: Self-Hosted (see [GitHub - Pi-hole](https://github.com/pi-hole/pi-hole)) +- **Privacy**: _See [Pi-Hole Privacy Guide](https://pi-hole.net/privacy/)_ + +--- + ### Pi Hole Recent Traffic Shows number of recent traffic, using allowed and blocked queries from [Pi-Hole](https://pi-hole.net/) From 8a0ec73ca75f6174762e97a95083304a3d3b9490 Mon Sep 17 00:00:00 2001 From: casmbu Date: Sat, 2 Aug 2025 17:13:39 -0400 Subject: [PATCH 12/19] feat: add pi-hole-traffic-v6 widget and docs --- docs/widgets.md | 34 +++++- src/components/Widgets/PiHoleTrafficV6.vue | 130 +++++++++++++++++++++ src/components/Widgets/WidgetBase.vue | 1 + 3 files changed, 164 insertions(+), 1 deletion(-) create mode 100644 src/components/Widgets/PiHoleTrafficV6.vue diff --git a/docs/widgets.md b/docs/widgets.md index 50e71028..3b5bdbe5 100644 --- a/docs/widgets.md +++ b/docs/widgets.md @@ -1852,7 +1852,7 @@ Shows top queries that were blocked and allowed by [Pi-Hole](https://pi-hole.net ### Pi Hole Queries v6 -Shows top queries that were blocked and allowed by [Pi-Hole](https://pi-hole.net/). +Shows top queries that were blocked and allowed by [Pi-Hole](https://pi-hole.net/). Use this version of the widget if you have a v6+ Pi-Hole instance.

@@ -1915,6 +1915,38 @@ Shows number of recent traffic, using allowed and blocked queries from [Pi-Hole] --- +### Pi Hole Recent Traffic v6 + +Shows number of recent traffic, using allowed and blocked queries from [Pi-Hole](https://pi-hole.net/). Use this version of the widget if you have a v6+ Pi-Hole instance. + +

+ +#### Options + +**Field** | **Type** | **Required** | **Description** +--- | --- | --- | --- +**`hostname`** | `string` | Required | The URL to your Pi-Hole instance +**`apiKey`** | `string` | Required | Your Pi-Hole web password or application password. It **IS** your Pi-Hole admin interface password **UNLESS** you have 2FA turned on (in contrast to the old widget). If you have 2FA turned on you will need to create an application password. Refer to Pi-Hole documentation for how to create an application password. + +#### Example + +```yaml +- type: pi-hole-traffic-v6 + options: + hostname: https://pi-hole.local + apiKey: xxxxxxxxxxxxxxxxxxxxxxx +``` + +#### Info + +- **CORS**: 🟢 Enabled +- **Auth**: 🔴 Required +- **Price**: 🟢 Free +- **Host**: Self-Hosted (see [GitHub - Pi-hole](https://github.com/pi-hole/pi-hole)) +- **Privacy**: _See [Pi-Hole Privacy Guide](https://pi-hole.net/privacy/)_ + +--- + ### Stat Ping Statuses Displays the current and recent uptime of your running services, via a self-hosted instance of [StatPing](https://github.com/statping/statping) diff --git a/src/components/Widgets/PiHoleTrafficV6.vue b/src/components/Widgets/PiHoleTrafficV6.vue new file mode 100644 index 00000000..5a59eb04 --- /dev/null +++ b/src/components/Widgets/PiHoleTrafficV6.vue @@ -0,0 +1,130 @@ + + + diff --git a/src/components/Widgets/WidgetBase.vue b/src/components/Widgets/WidgetBase.vue index 28c58393..a1efa1cd 100644 --- a/src/components/Widgets/WidgetBase.vue +++ b/src/components/Widgets/WidgetBase.vue @@ -107,6 +107,7 @@ const COMPAT = { 'pi-hole-top-queries': 'PiHoleTopQueries', 'pi-hole-top-queries-v6': 'PiHoleTopQueriesV6', 'pi-hole-traffic': 'PiHoleTraffic', + 'pi-hole-traffic-v6': 'PiHoleTrafficV6', 'proxmox-lists': 'Proxmox', 'public-holidays': 'PublicHolidays', 'public-ip': 'PublicIp', From 434a41a08a3317043f4f203897942d4fcfe713fd Mon Sep 17 00:00:00 2001 From: casmbu Date: Sat, 2 Aug 2025 21:47:28 -0400 Subject: [PATCH 13/19] chore: remove leftover minecraft-status doc --- README.md | 2 +- docs/widgets.md | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index fa3fe114..29598fd1 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ - **Getting Started** - [🌈 Features](#features-) - - [⚡Demo](#demo-) + - [⚡ Demo](#demo-) - [🚀 Getting Started](#getting-started-) - [🔧 Configuring](#configuring-) - **Feature Overview** diff --git a/docs/widgets.md b/docs/widgets.md index 3b5bdbe5..ac9ead5c 100644 --- a/docs/widgets.md +++ b/docs/widgets.md @@ -17,7 +17,6 @@ Dashy has support for displaying dynamic content in the form of widgets. There a - [Crypto Price History](#crypto-token-price-history) - [Crypto Wallet Balance](#wallet-balance) - [Code Stats](#code-stats) - - [Minecraft Status](#minecraft-status) - [Mullvad Status](#mullvad-status) - [Email Aliases (addy.io)](#addyio) - [Vulnerability Feed](#vulnerability-feed) From 9b32b0ec15b7ae7926e1d54122b1d2ad617c7b32 Mon Sep 17 00:00:00 2001 From: casmbu Date: Sat, 2 Aug 2025 21:52:33 -0400 Subject: [PATCH 14/19] chore: add table of contents item for pi-hole recent traffic v6 and fix pi-hole hyphen --- docs/widgets.md | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/docs/widgets.md b/docs/widgets.md index ac9ead5c..bd57458f 100644 --- a/docs/widgets.md +++ b/docs/widgets.md @@ -47,11 +47,12 @@ Dashy has support for displaying dynamic content in the form of widgets. There a - [CPU History](#cpu-history-netdata) - [Memory History](#memory-history-netdata) - [System Load History](#load-history-netdata) - - [Pi Hole Stats](#pi-hole-stats) - - [Pi Hole Stats v6](#pi-hole-stats-v6) - - [Pi Hole Queries](#pi-hole-queries) - - [Pi Hole Queries v6](#pi-hole-queries-v6) - - [Pi Hole Recent Traffic](#pi-hole-recent-traffic) + - [Pi-Hole Stats](#pi-hole-stats) + - [Pi-Hole Stats v6](#pi-hole-stats-v6) + - [Pi-Hole Queries](#pi-hole-queries) + - [Pi-Hole Queries v6](#pi-hole-queries-v6) + - [Pi-Hole Recent Traffic](#pi-hole-recent-traffic) + - [Pi-Hole Recent Traffic v6](#pi-hole-recent-traffic-v6) - [Stat Ping Statuses](#stat-ping-statuses) - [Synology Download Station](#synology-download-station) - [AdGuard Home Block Stats](#adguard-home-block-stats) @@ -1724,7 +1725,7 @@ Pull recent load usage in 1, 5 and 15 minute intervals, from NetData. --- -### Pi Hole Stats +### Pi-Hole Stats Displays the number of queries blocked by [Pi-Hole](https://pi-hole.net/). @@ -1770,7 +1771,7 @@ Displays the number of queries blocked by [Pi-Hole](https://pi-hole.net/). --- -### Pi Hole Stats v6 +### Pi-Hole Stats v6 Displays the number of queries blocked by [Pi-Hole](https://pi-hole.net/). Use this version of the widget if you have a v6+ Pi-Hole instance. @@ -1816,7 +1817,7 @@ Displays the number of queries blocked by [Pi-Hole](https://pi-hole.net/). Use t --- -### Pi Hole Queries +### Pi-Hole Queries Shows top queries that were blocked and allowed by [Pi-Hole](https://pi-hole.net/). @@ -1849,7 +1850,7 @@ Shows top queries that were blocked and allowed by [Pi-Hole](https://pi-hole.net --- -### Pi Hole Queries v6 +### Pi-Hole Queries v6 Shows top queries that were blocked and allowed by [Pi-Hole](https://pi-hole.net/). Use this version of the widget if you have a v6+ Pi-Hole instance. @@ -1882,7 +1883,7 @@ Shows top queries that were blocked and allowed by [Pi-Hole](https://pi-hole.net --- -### Pi Hole Recent Traffic +### Pi-Hole Recent Traffic Shows number of recent traffic, using allowed and blocked queries from [Pi-Hole](https://pi-hole.net/) @@ -1914,7 +1915,7 @@ Shows number of recent traffic, using allowed and blocked queries from [Pi-Hole] --- -### Pi Hole Recent Traffic v6 +### Pi-Hole Recent Traffic v6 Shows number of recent traffic, using allowed and blocked queries from [Pi-Hole](https://pi-hole.net/). Use this version of the widget if you have a v6+ Pi-Hole instance. From d7bd5a6d79b209a86172560225757fec17b1f3df Mon Sep 17 00:00:00 2001 From: uy/sun Date: Wed, 13 Aug 2025 00:54:06 +0000 Subject: [PATCH 15/19] fix(pwa): should always fetch conf.yml first --- src/utils/defaults.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/utils/defaults.js b/src/utils/defaults.js index 12764ebe..847dbe6f 100644 --- a/src/utils/defaults.js +++ b/src/utils/defaults.js @@ -337,6 +337,18 @@ module.exports = { /^manifest.*\.js$/, // default value /\.nojekyll$/, /\.gitignore$/, + /conf\.yml$/, // ignore config for runtimeCaching + ], + // https://developer.chrome.com/docs/workbox/modules/workbox-build#type-RuntimeCaching + runtimeCaching: [ + { + urlPattern: /conf\.yml$/, + handler: 'NetworkFirst', + options: { + cacheName: 'config-cache', + networkTimeoutSeconds: 3, + }, + }, ], }, }, From 877ec0060d3574ffc959c043240398147ae51d69 Mon Sep 17 00:00:00 2001 From: dkadioglu <1633773+dkadioglu@users.noreply.github.com> Date: Sun, 31 Aug 2025 08:38:29 +0200 Subject: [PATCH 16/19] add widget for Chuck Norris quotes and sort some lines of WidgetBase.vue alphabetically. --- src/components/Widgets/ChuckNorris.vue | 66 ++++++++++++++++++++++++++ src/components/Widgets/WidgetBase.vue | 31 ++++++------ src/utils/defaults.js | 1 + 3 files changed, 83 insertions(+), 15 deletions(-) create mode 100644 src/components/Widgets/ChuckNorris.vue diff --git a/src/components/Widgets/ChuckNorris.vue b/src/components/Widgets/ChuckNorris.vue new file mode 100644 index 00000000..1a380259 --- /dev/null +++ b/src/components/Widgets/ChuckNorris.vue @@ -0,0 +1,66 @@ + + + + + \ No newline at end of file diff --git a/src/components/Widgets/WidgetBase.vue b/src/components/Widgets/WidgetBase.vue index a1efa1cd..e7e5d3f8 100644 --- a/src/components/Widgets/WidgetBase.vue +++ b/src/components/Widgets/WidgetBase.vue @@ -46,20 +46,21 @@ const COMPAT = { 'adguard-filter-status': 'AdGuardFilterStatus', 'adguard-stats': 'AdGuardStats', 'adguard-top-domains': 'AdGuardTopDomains', - anonaddy: 'addy.io', - apod: 'Apod', + 'anonaddy': 'addy.io', + 'apod': 'Apod', 'blacklist-check': 'BlacklistCheck', - clock: 'Clock', + 'chucknorris': 'ChuckNorris', + 'clock': 'Clock', + 'code-stats': 'CodeStats', + 'covid-stats': 'CovidStats', 'crypto-price-chart': 'CryptoPriceChart', 'crypto-watch-list': 'CryptoWatchList', 'custom-search': 'CustomSearch', 'custom-list': 'CustomList', 'cve-vulnerabilities': 'CveVulnerabilities', 'domain-monitor': 'DomainMonitor', - 'code-stats': 'CodeStats', - 'covid-stats': 'CovidStats', 'drone-ci': 'DroneCi', - embed: 'EmbedWidget', + 'embed': 'EmbedWidget', 'eth-gas-prices': 'EthGasPrices', 'exchange-rates': 'ExchangeRates', 'flight-data': 'Flights', @@ -81,16 +82,16 @@ const COMPAT = { 'gl-network-traffic': 'GlNetworkTraffic', 'gl-system-load': 'GlSystemLoad', 'gl-cpu-temp': 'GlCpuTemp', + 'gluetun-status': 'GluetunStatus', 'health-checks': 'HealthChecks', 'hackernews-trending': 'HackernewsTrending', - 'gluetun-status': 'GluetunStatus', - iframe: 'IframeWidget', - image: 'ImageWidget', - joke: 'Jokes', + 'iframe': 'IframeWidget', + 'image': 'ImageWidget', + 'joke': 'Jokes', + 'linkding': 'Linkding', 'minecraft-status': 'MinecraftStatus', 'mullvad-status': 'MullvadStatus', - mvg: 'Mvg', - linkding: 'Linkding', + 'mvg': 'Mvg', 'mvg-connection': 'MvgConnection', 'nd-cpu-history': 'NdCpuHistory', 'nd-load-history': 'NdLoadHistory', @@ -113,17 +114,17 @@ const COMPAT = { 'public-ip': 'PublicIp', 'rescue-time': 'RescueTime', 'rss-feed': 'RssFeed', - sabnzbd: 'Sabnzbd', + 'sabnzbd': 'Sabnzbd', 'sports-scores': 'SportsScores', 'stat-ping': 'StatPing', 'stock-price-chart': 'StockPriceChart', 'synology-download': 'SynologyDownload', 'system-info': 'SystemInfo', 'tfl-status': 'TflStatus', - trmm: 'TacticalRMM', + 'trmm': 'TacticalRMM', 'uptime-kuma': 'UptimeKuma', 'wallet-balance': 'WalletBalance', - weather: 'Weather', + 'weather': 'Weather', 'weather-forecast': 'WeatherForecast', 'xkcd-comic': 'XkcdComic', }; diff --git a/src/utils/defaults.js b/src/utils/defaults.js index 847dbe6f..8f72fcc8 100644 --- a/src/utils/defaults.js +++ b/src/utils/defaults.js @@ -227,6 +227,7 @@ module.exports = { anonAddy: 'https://app.addy.io', astronomyPictureOfTheDay: 'https://apod.as93.net/apod', blacklistCheck: 'https://api.blacklistchecker.com/check', + chuckNorris: 'https://api.chucknorris.io/jokes/random', codeStats: 'https://codestats.net/', covidStats: 'https://disease.sh/v3/covid-19', cryptoPrices: 'https://api.coingecko.com/api/v3/coins/', From 3e728b314bbc46f31e1613f806999a710e933eea Mon Sep 17 00:00:00 2001 From: dkadioglu <1633773+dkadioglu@users.noreply.github.com> Date: Sun, 31 Aug 2025 09:12:55 +0200 Subject: [PATCH 17/19] add documentation for Chuck Norris Widget --- docs/widgets.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/docs/widgets.md b/docs/widgets.md index de637eb8..addf2ff9 100644 --- a/docs/widgets.md +++ b/docs/widgets.md @@ -29,6 +29,7 @@ Dashy has support for displaying dynamic content in the form of widgets. There a - [Stock Price History](#stock-price-history) - [ETH Gas Prices](#eth-gas-prices) - [Joke of the Day](#joke) + - [Chuck Norris quotes](#chucknorris) - [XKCD Comics](#xkcd-comics) - [Flight Data](#flight-data) - [NASA APOD](#astronomy-picture-of-the-day) @@ -1001,6 +1002,36 @@ Renders a programming or generic joke. Data is fetched from the [JokesAPI](https --- +### Chuck Norris quotes + +Renders a Chuck Norris quote. Data is fetched from the [ChuckNorrisAPI](https://api.chucknorris.io/) by @matchilling. All fields are optional. + +

+ +#### Options + +**Field** | **Type** | **Required** | **Description** +--- | --- | --- | --- +**`categories`** | `string` | _Optional_ | Set the category of jokes to return. Use a string to specify a single category, or an array to pass in multiple options. Available options are: `animal`,`career`,`celebrity`,`dev`,`explicit`,`fashion`,`food`,`history`,`money`,`movie`,`music`,`political`,`religion`,`science`,`sport` and `travel`. An up-to-date list of supported categories can be found [here](https://api.chucknorris.io/jokes/categories). Defaults to not explicitely set and therefore any of the categories can come up. + +#### Example + +```yaml +- type: chucknorris + options: + categories: history,sport +``` + +#### Info + +- **CORS**: 🟢 Enabled +- **Auth**: 🟢 Not Required +- **Price**: 🟢 Free +- **Host**: Managed Instance +- **Privacy**: _See [matchilling's Privacy Policy](https://api.chucknorris.io/privacy)_ + +--- + ### XKCD Comics Have a laugh with the daily comic from [XKCD](https://xkcd.com/). A classic webcomic website covering everything from Linux, math, romance, science and language. All fields are optional. From 9fc0254cf830e9a3e7d32a1662660ea89f6d77f0 Mon Sep 17 00:00:00 2001 From: dkadioglu <1633773+dkadioglu@users.noreply.github.com> Date: Sun, 31 Aug 2025 09:47:27 +0200 Subject: [PATCH 18/19] Re-refactor widget keys to remove quotes Putting those quotes was a mistake, reverting. --- src/components/Widgets/WidgetBase.vue | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/components/Widgets/WidgetBase.vue b/src/components/Widgets/WidgetBase.vue index e7e5d3f8..a148b476 100644 --- a/src/components/Widgets/WidgetBase.vue +++ b/src/components/Widgets/WidgetBase.vue @@ -46,11 +46,11 @@ const COMPAT = { 'adguard-filter-status': 'AdGuardFilterStatus', 'adguard-stats': 'AdGuardStats', 'adguard-top-domains': 'AdGuardTopDomains', - 'anonaddy': 'addy.io', - 'apod': 'Apod', + anonaddy: 'addy.io', + apod: 'Apod', 'blacklist-check': 'BlacklistCheck', - 'chucknorris': 'ChuckNorris', - 'clock': 'Clock', + chucknorris: 'ChuckNorris', + clock: 'Clock', 'code-stats': 'CodeStats', 'covid-stats': 'CovidStats', 'crypto-price-chart': 'CryptoPriceChart', @@ -60,7 +60,7 @@ const COMPAT = { 'cve-vulnerabilities': 'CveVulnerabilities', 'domain-monitor': 'DomainMonitor', 'drone-ci': 'DroneCi', - 'embed': 'EmbedWidget', + embed: 'EmbedWidget', 'eth-gas-prices': 'EthGasPrices', 'exchange-rates': 'ExchangeRates', 'flight-data': 'Flights', @@ -85,13 +85,13 @@ const COMPAT = { 'gluetun-status': 'GluetunStatus', 'health-checks': 'HealthChecks', 'hackernews-trending': 'HackernewsTrending', - 'iframe': 'IframeWidget', - 'image': 'ImageWidget', - 'joke': 'Jokes', - 'linkding': 'Linkding', + iframe: 'IframeWidget', + image: 'ImageWidget', + joke: 'Jokes', + linkding: 'Linkding', 'minecraft-status': 'MinecraftStatus', 'mullvad-status': 'MullvadStatus', - 'mvg': 'Mvg', + mvg: 'Mvg', 'mvg-connection': 'MvgConnection', 'nd-cpu-history': 'NdCpuHistory', 'nd-load-history': 'NdLoadHistory', @@ -114,17 +114,17 @@ const COMPAT = { 'public-ip': 'PublicIp', 'rescue-time': 'RescueTime', 'rss-feed': 'RssFeed', - 'sabnzbd': 'Sabnzbd', + sabnzbd: 'Sabnzbd', 'sports-scores': 'SportsScores', 'stat-ping': 'StatPing', 'stock-price-chart': 'StockPriceChart', 'synology-download': 'SynologyDownload', 'system-info': 'SystemInfo', 'tfl-status': 'TflStatus', - 'trmm': 'TacticalRMM', + trmm: 'TacticalRMM', 'uptime-kuma': 'UptimeKuma', 'wallet-balance': 'WalletBalance', - 'weather': 'Weather', + weather: 'Weather', 'weather-forecast': 'WeatherForecast', 'xkcd-comic': 'XkcdComic', }; From 31b7a0707871b17e49dd197e52eb265204e0db2c Mon Sep 17 00:00:00 2001 From: dkadioglu <1633773+dkadioglu@users.noreply.github.com> Date: Sun, 31 Aug 2025 10:04:26 +0200 Subject: [PATCH 19/19] fix some linting errors in ChuckNorris.vue --- src/components/Widgets/ChuckNorris.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Widgets/ChuckNorris.vue b/src/components/Widgets/ChuckNorris.vue index 1a380259..9f608a42 100644 --- a/src/components/Widgets/ChuckNorris.vue +++ b/src/components/Widgets/ChuckNorris.vue @@ -29,8 +29,8 @@ export default { }, /* Combine data parameters for the API endpoint */ endpoint() { - if (this.categories != '') return `${widgetApiEndpoints.chuckNorris}`+`?category=${this.categories}`; - if (this.categories == '') return `${widgetApiEndpoints.chuckNorris}`; + if (this.categories !== '') return `${widgetApiEndpoints.chuckNorris}?category=${this.categories}`; + return `${widgetApiEndpoints.chuckNorris}`; }, }, methods: {