From 66c83a9b8c481270172ad670e74fb86532a8ed2c Mon Sep 17 00:00:00 2001 From: aspen Date: Wed, 10 Sep 2025 01:23:55 +1200 Subject: [PATCH 1/6] Add 'hidden' boolean property to item configuration schema; default set to false --- src/utils/ConfigSchema.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/utils/ConfigSchema.json b/src/utils/ConfigSchema.json index 92039798ab..e7edd4a0e5 100644 --- a/src/utils/ConfigSchema.json +++ b/src/utils/ConfigSchema.json @@ -955,6 +955,12 @@ "nullable": true, "description": "An icon, either as a font-awesome, simple-icon, selfh.st, or mdi identifier, emoji, favicon, generative or the URL/path to a local or remote icon asset" }, + "hidden": { + "title": "Hidden from Homepage", + "type": "boolean", + "default": false, + "description": "If true, this item will be hidden from the homepage/dashboard but still searchable." + }, "url": { "title": "Service URL", "type": "string", From 30a8f3397e8809234c530d470c1256a079340bc5 Mon Sep 17 00:00:00 2001 From: aspen Date: Wed, 10 Sep 2025 01:27:05 +1200 Subject: [PATCH 2/6] add searchTerm prop to receive search state from parent component; modify sortedItems so that it hides hidden items during normal browsing mode. --- src/components/LinkItems/Section.vue | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/components/LinkItems/Section.vue b/src/components/LinkItems/Section.vue index f1659ed582..55cafc9945 100644 --- a/src/components/LinkItems/Section.vue +++ b/src/components/LinkItems/Section.vue @@ -128,6 +128,7 @@ export default { widgets: Array, index: Number, isWide: Boolean, + searchTerm: String, }, components: { Collapsable, @@ -178,7 +179,14 @@ export default { }, /* If the sortBy attribute is specified, then return sorted data */ sortedItems() { - const items = [...this.items]; + // Filter out items with hidden: true, unless in edit mode or searching + let items = [...this.items]; + if (!this.isEditMode) { + // Include hidden items only when there's an active search term + if (!this.searchTerm || this.searchTerm.trim() === '') { + items = items.filter(item => !item.hidden); + } + } if (this.appConfig.disableSmartSort) return items; if (this.sortOrder === 'alphabetical') { return this.sortAlphabetically(items); From 92d2e4b3a96c43da3d3f39381e67e23e3842bb74 Mon Sep 17 00:00:00 2001 From: aspen Date: Thu, 11 Sep 2025 07:01:12 +1200 Subject: [PATCH 3/6] Ensures hidden property is properly converted from string input to boolean value when saving --- src/components/InteractiveEditor/EditItem.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/InteractiveEditor/EditItem.vue b/src/components/InteractiveEditor/EditItem.vue index d8c0be0a70..edd908eb0a 100644 --- a/src/components/InteractiveEditor/EditItem.vue +++ b/src/components/InteractiveEditor/EditItem.vue @@ -240,6 +240,7 @@ export default { return str === 'true'; }; if (newItem.tags) newItem.tags = strToTags(newItem.tags); + if (newItem.hidden !== undefined) newItem.hidden = strToBool(newItem.hidden); if (newItem.statusCheck) newItem.statusCheck = strToBool(newItem.statusCheck); if (newItem.statusCheckAllowInsecure) { newItem.statusCheckAllowInsecure = strToBool(newItem.statusCheckAllowInsecure); From 5c7f49668a0cf3a2c8d8a1f608a8d10f4aff918b Mon Sep 17 00:00:00 2001 From: aspen Date: Wed, 1 Oct 2025 04:10:28 +1300 Subject: [PATCH 4/6] =?UTF-8?q?docs:=20add=20=E2=80=98hidden=E2=80=99=20it?= =?UTF-8?q?em=20attribute=20with=20YAML=20example?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/configuring.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/docs/configuring.md b/docs/configuring.md index 62b876f7ab..a9d388cf37 100644 --- a/docs/configuring.md +++ b/docs/configuring.md @@ -254,6 +254,7 @@ 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) +**`hidden`** | `boolean` | _Optional_ | If set to `true`, this item will be hidden from the default homepage view. It will still appear in search results, and will remain visible while using the Interactive Edit Mode. Defaults to `false`. **`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 @@ -283,6 +284,22 @@ For more info, see the **[Authentication Docs](/docs/authentication.md)** **[⬆️ Back to Top](#configuring)** +### Example: Hiding an item from the homepage + +```yaml +sections: +- name: Media + items: + - title: Admin Panel + url: https://example.local/admin + icon: fa fa-tools + hidden: true # hidden from the default homepage, but still searchable + - title: Plex + url: https://plex.local + icon: favicon +``` + + ## `section.widgets` _(optional)_ **Field** | **Type** | **Required**| **Description** From 91ef5c9b2713c0cf664764c6d87f035c8d36bc97 Mon Sep 17 00:00:00 2001 From: aspen Date: Wed, 1 Oct 2025 04:10:46 +1300 Subject: [PATCH 5/6] docs: update checklist with example for documenting new options --- docs/development-guides.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/development-guides.md b/docs/development-guides.md index ffc6bd75e3..8f506bac4e 100644 --- a/docs/development-guides.md +++ b/docs/development-guides.md @@ -159,6 +159,7 @@ Checklist: - [ ] Update the [Schema](https://github.com/Lissy93/dashy/blob/master/src/utils/ConfigSchema.js) with the parameters for your new option - [ ] 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 + - For example, if adding an item-level flag like `hidden: true`, document its purpose, default, and behavior (e.g., hidden on homepage but still searchable) - [ ] Ensure your changes are backwards compatible, and that nothing breaks if the attribute isn't specified --- From dd7921cdfb64058344fb654160dd9c08a8cbca27 Mon Sep 17 00:00:00 2001 From: aspen Date: Wed, 1 Oct 2025 04:11:03 +1300 Subject: [PATCH 6/6] docs: note hidden items remain searchable --- docs/searching.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/searching.md b/docs/searching.md index 6595950cda..7dc4c8844f 100644 --- a/docs/searching.md +++ b/docs/searching.md @@ -4,6 +4,9 @@ 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. +> Note +> Items marked as hidden in your configuration (using `hidden: true`) will not be shown on the homepage by default, but they will still appear in search results. + ## Navigating You can navigate through your items or search results using the keyboard. You can use Tab to cycle through results, and Shift + Tab to go backwards. Or use the arrow keys, , , and .