Skip to content

Commit 1e585b7

Browse files
authored
Merge branch 'master' into ref/admin
2 parents 3e50636 + d453d24 commit 1e585b7

33 files changed

+1562
-740
lines changed

README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ Both sections and items can have an icon associated with them, defined under the
198198

199199
The following icon types are supported:
200200
- **Favicon** - Automatically fetch an apps icon from its Favicon or logo image
201-
- **Icon Packs** - Use any icon from [font-awesome], [simple-icons] or [material icons]
201+
- **Icon Packs** - Use any icon from [font-awesome], [simple-icons], [selfh.st/icons], or [material icons]
202202
- **Emoji** - Any valid emoji can be used as an icon
203203
- **Generative** - Unique, auto-generated images for easily identifying services
204204
- **URL** - Pass the URL of any valid image in to have it fetched and rendered
@@ -209,6 +209,7 @@ The following icon types are supported:
209209
[font-awesome]: https://fontawesome.com/icons
210210
[simple-icons]: https://simpleicons.org/
211211
[material icons]: https://github.com/Templarian/MaterialDesign
212+
[selfh.st/icons]: https://selfh.st/icons
212213
[dashboard-icons]: https://github.com/WalkxCode/dashboard-icons
213214

214215

@@ -417,13 +418,14 @@ Dashy supports multiple languages and locales. When available, your language sho
417418
- 🇵🇱 **Polish**: `pl` - Contributed by **[@skaarj1989](https://github.com/skaarj1989)**
418419
- 🇵🇹 **Portuguese**: `pt` - Contributed by **[@LeoColman](https://github.com/LeoColman)**
419420
- 🛰️ **Galician**: `gl` - Contributed by **[@pvillaverde](https://github.com/pvillaverde)**
420-
- 🇷🇺 **Russian**: `ru` - _Auto-generated_
421+
- 🇷🇺 **Russian**: `ru` -Contributed by **[@sasetz](https://github.com/sasetz)**
421422
- 🇸🇰 **Slovak**: `sk` - Contributed by **[@Smexhy](https://github.com/Smexhy)**
422423
- 🇸🇮 **Slovenian**: `sl` - Contributed by **[@UrekD](https://github.com/UrekD)**
423424
- 🇪🇸 **Spanish**: `es` - Contributed by **[@lu4t](https://github.com/lu4t)**
424425
- 🇸🇪 **Swedish**: `sv` - Contributed by **[@BOZG](https://github.com/BOZG)**
425426
- 🇹🇼 **Traditional Chinese**: `zh-TW` - Contributed by **[@stanly0726](https://github.com/stanly0726)**
426427
- 🇹🇷 **Turkish**: `tr` - Contributed by **[@imsakg](https://github.com/imsakg)**
428+
- 🇺🇦 **Ukrainian**: `uk` - Contributed by **[@allozavrr](https://github.com/allozavrr)**
427429
- 🏴‍☠️ **Pirate**: `pirate` - Contributed by **[@Lissy93](https://github.com/lissy93)**
428430

429431
#### Add your Language
@@ -525,7 +527,6 @@ Huge thanks to the sponsors helping to support Dashy's development!
525527

526528
![sponsors badge](https://readme-contribs.as93.net/sponsors/lissy93)
527529

528-
529530
#### Contributors
530531
[![contributors badge](https://readme-contribs.as93.net/contributors/lissy93/dashy?perRow=12&limit=96)](./docs/credits.md)
531532

docs/assets/CONTRIBUTORS.svg

Lines changed: 200 additions & 158 deletions
Loading

docs/authentication.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,7 @@ appConfig:
286286
clientId: [registered client id]
287287
endpoint: [OIDC endpoint]
288288
scope: [The scope(s) to request from the OIDC provider]
289+
adminGroup: admin
289290
```
290291

291292
Because Dashy is a SPA, a [public client](https://datatracker.ietf.org/doc/html/rfc6749#section-2.1) registration with PKCE is needed.

docs/configuring.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,8 @@ For more info, see the **[Authentication Docs](/docs/authentication.md)**
204204
--- | --- | --- | ---
205205
**`clientId`** | `string` | Required | The client id registered in the OIDC server
206206
**`endpoint`** | `string` | Required | The URL of the OIDC server that should be used.
207+
**`adminRole`** | `string` | _Optional_ | The role that will be considered as admin.
208+
**`adminGroup`** | `string` | _Optional_ | The group that will be considered as admin.
207209
**`scope`** | `string` | Required | The scope(s) to request from the OIDC provider
208210

209211
**[⬆️ Back to Top](#configuring)**
@@ -322,7 +324,7 @@ For more info, see the **[Authentication Docs](/docs/authentication.md)**
322324

323325
**Field** | **Type** | **Required**| **Description**
324326
--- | --- | --- | ---
325-
**`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
327+
**`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, selfh.st icons, and icons specified by URL
326328

327329
**[⬆️ Back to Top](#configuring)**
328330

docs/credits.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
![Sponsors](https://readme-contribs.as93.net/sponsors/lissy93)
66

7+
78
## Contributors
89

910
![Contributors](https://readme-contribs.as93.net/contributors/lissy93/dashy?perRow=12&limit=96)

docs/icons.md

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ Both sections and items can have an icon, which is specified using the `icon` at
77
- [Simple Icons](#simple-icons)
88
- [Generative Icons](#generative-icons)
99
- [Emoji Icons](#emoji-icons)
10+
- [selfh.st Icons](#selfhst-icons)
1011
- [Home-Lab Icons](#home-lab-icons)
1112
- [Material Icons](#material-design-icons)
1213
- [Icons by URL](#icons-by-url)
@@ -63,7 +64,7 @@ Font-Awesome has a wide variety of free icons, but you can also use their pro ic
6364

6465
## Simple Icons
6566

66-
[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-`.
67+
[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 to the simple icon slug, prefixed with `si-`.
6768

6869
<p align="center">
6970
<img width="580" src="https://i.ibb.co/MVhkXfC/simple-icons-example.png" />
@@ -109,6 +110,18 @@ For example, these will all render the same rocket (🚀) emoji: `icon: ':rocket
109110

110111
---
111112

113+
## selfh.st Icons
114+
115+
The [selfh.st](https://selfh.st/) project provides a set of icons, originally for self-hosted services, but now expanded to include a wide variety of services. These icons can be used by specifying the icon name (without extension and with all spaces replaced with -) preceded by `sh-`. See https://selfh.st/icons/ for a full list of all available icons. For example, the Home Assistant icon is `sh-home-assistant`.
116+
117+
Note: These icons are fetched from the jsdelivr CDN, so if you require offline access, the [Local Icons](#local-icons) method may be a better option for you.
118+
119+
<p align="center">
120+
<img width="580" src="https://i.ibb.co/pfy09LH/Screenshot-from-2025-01-08-22-04-21.png" />
121+
</p>
122+
123+
---
124+
112125
## Home-Lab Icons
113126

114127
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 straight from GitHub, so if you require offline access, the [Local Icons](#local-icons) method may be a better option for you.

docs/widgets.md

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1298,6 +1298,155 @@ In other words: Private, noncomercial, moderate use of the API is tolerated. The
12981298

12991299
---
13001300

1301+
### Custom List
1302+
1303+
Renders custom schema-compliant JOSN in a list.
1304+
1305+
#### Options
1306+
**Field** | **Type** | **Required** | **Description**
1307+
--- | --- | --- | ---
1308+
**`url`** | `text` | Required | A string containing the url of a json file.
1309+
**`title`** | `text` | optional | A title for the widget. Can be helpful if stacking multiple lists in the same section.
1310+
**`daysForNew`** | `number` | Optional | Used to highlight new items.
1311+
1312+
#### Json Schema
1313+
The input file should comply with the following schema:
1314+
```json
1315+
{
1316+
"$schema": "http://json-schema.org/draft-04/schema#",
1317+
"type": "array",
1318+
"items": [
1319+
{
1320+
"type": "object",
1321+
"properties": {
1322+
"link": {
1323+
"type": "object",
1324+
"properties": {
1325+
"text": {
1326+
"type": "string"
1327+
},
1328+
"url": {
1329+
"type": "string"
1330+
},
1331+
"title": {
1332+
"type": "string"
1333+
}
1334+
},
1335+
"required": [
1336+
"text",
1337+
"url",
1338+
"title"
1339+
]
1340+
},
1341+
"value": {
1342+
"type": "object",
1343+
"properties": {
1344+
"text": {
1345+
"type": "string"
1346+
},
1347+
"title": {
1348+
"type": "string"
1349+
}
1350+
},
1351+
"required": [
1352+
"text",
1353+
"title"
1354+
]
1355+
},
1356+
"date": {
1357+
"type": "string"
1358+
}
1359+
},
1360+
"required": [
1361+
"link",
1362+
"value",
1363+
"date"
1364+
]
1365+
}
1366+
]
1367+
}
1368+
```
1369+
1370+
Example: This json data was generated by a data worflow that gets the new releases of a few projects from GitHub. The system used to build the data workflow is n8n.
1371+
1372+
```json
1373+
[
1374+
{
1375+
"link": {
1376+
"text": "jellyfin/jellyfin",
1377+
"url": "https://github.com/jellyfin/jellyfin/releases/tag/v10.10.7",
1378+
"title": ""
1379+
},
1380+
"value": {
1381+
"text": "v10.10.7",
1382+
"title": "2025-04-05"
1383+
},
1384+
"date": "2025-04-05T19:14:59Z"
1385+
},
1386+
{
1387+
"link": {
1388+
"text": "jellyfin/jellyfin-web",
1389+
"url": "https://github.com/jellyfin/jellyfin-web/releases/tag/v10.10.7",
1390+
"title": ""
1391+
},
1392+
"value": {
1393+
"text": "v10.10.7",
1394+
"title": "2025-04-05"
1395+
},
1396+
"date": "2025-04-05T19:15:00Z"
1397+
},
1398+
{
1399+
"link": {
1400+
"text": "lissy93/dashy",
1401+
"url": "https://github.com/Lissy93/dashy/releases/tag/3.1.1",
1402+
"title": ""
1403+
},
1404+
"value": {
1405+
"text": "3.1.1",
1406+
"title": "2024-05-30"
1407+
},
1408+
"date": "2024-05-30T17:20:53Z"
1409+
},
1410+
{
1411+
"link": {
1412+
"text": "VSCodium/vscodium",
1413+
"url": "https://github.com/VSCodium/vscodium/releases/tag/1.102.14746",
1414+
"title": ""
1415+
},
1416+
"value": {
1417+
"text": "1.102.14746",
1418+
"title": "2025-07-16"
1419+
},
1420+
"date": "2025-07-16T18:27:49Z"
1421+
}
1422+
]
1423+
```
1424+
#### Notes
1425+
- This widget is designed to render data generated by another system that complies with the schema. The example JSON data above was generated using a n8n workflow, and other ETL or workflow systems can generate similar results.
1426+
- To avoid requests to a different system in each refresh, you can save the input files locally in the user-data folder inside your Dashy installation.
1427+
- To use json files from a different domain, remember to add `useProxy: true` to the widget configuration. I have not tested this use case because I save all my input data locally on the Dashy server. Please open a ticket if you have an issue in this use case.
1428+
1429+
#### Example
1430+
1431+
This widget renders a json file that from a `json-data` directory inside the `user-data` directory on the Dashy server.
1432+
```yaml
1433+
- type: custom-list
1434+
options:
1435+
url: /json-data/github-releases.json
1436+
title: 'Github Releases'
1437+
daysForNew: 5
1438+
```
1439+
1440+
#### Info
1441+
1442+
- **CORS**: 🟢 Not needed for files hosted inside the `user-data` directory. Use `useProxy: true` to bypass CORS restrictions when using data from a different server.
1443+
- **Auth**: 🟢 Not Required
1444+
- **Price**: 🟢 Free
1445+
- **Host**: user defined
1446+
- **Privacy**: depends on the user defined host.
1447+
1448+
---
1449+
13011450
### Custom search
13021451

13031452
Allows web search using multiple user-defined search engines and other websites.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
"remedial": "^1.0.8",
3636
"rss-parser": "3.13.0",
3737
"rsup-progress": "^3.2.0",
38-
"simple-icons": "^12.2.0",
38+
"simple-icons": "^14.4.0",
3939
"v-jsoneditor": "^1.4.5",
4040
"v-tooltip": "^2.1.3",
4141
"vue": "^2.7.0",

server.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ const app = express()
147147
.use(ENDPOINTS.statusCheck, (req, res) => {
148148
try {
149149
statusCheck(req.url, async (results) => {
150+
res.setHeader('Content-Type', 'application/json');
150151
await res.end(results);
151152
});
152153
} catch (e) {

src/App.vue

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,11 +155,21 @@ export default {
155155
e.preventDefault();
156156
return 'You may have unsaved edits. Are you sure you want to exit the page?';
157157
},
158+
/* Detect and apply theme based on OS preference */
159+
applyThemeBasedOnOSPreference() {
160+
const prefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
161+
const osTheme = prefersDark ? this.appConfig.nightTheme : this.appConfig.dayTheme;
162+
if (osTheme) {
163+
this.$store.commit(Keys.SET_THEME, osTheme);
164+
this.updateTheme(osTheme);
165+
}
166+
},
158167
},
159168
/* Basic initialization tasks on app load */
160169
async mounted() {
161170
await this.$store.dispatch(Keys.INITIALIZE_CONFIG); // Initialize config before moving on
162171
this.applyLanguage(); // Apply users local language
172+
this.applyThemeBasedOnOSPreference(); // Apply theme based on OS preference
163173
this.hideSplash(); // Hide the splash screen, if visible
164174
if (this.appConfig.customCss) { // Inject users custom CSS, if present
165175
const cleanedCss = this.appConfig.customCss.replace(/<\/?[^>]+(>|$)/g, '');

0 commit comments

Comments
 (0)