Conversation
Picking a theme, layout or item size wrote the value into `configSource` as well as localStorage. `configSource` is what gets written back to conf.yml, so the next save to disk - from the config editor, or the "Save Changes to Disk" button on the local config banner - pushed one user's personal choice out as the default for everybody else. `patchAppConfigField` already takes a `storageKey`, passed only by the quick-pickers (theme, layout, item size, language) and omitted by authored edits such as custom CSS. Use it as the discriminator: with a key, update the rendered config and localStorage and stop there.
The view (default/minimal/workspace) had no per-browser persistence: it was resolved by a router guard reading appConfig.startingView from the shared config, before the local-override layer is consulted. Theme, layout and item size already persist per browser, so people sharing an instance could each keep their own look but not their own view. An explicit pick from either view switcher is now stored under a `startingView` localStorage key and wins over appConfig.startingView. Only an explicit pick is stored, so following a link to /minimal doesn't quietly rewrite someone's landing view, and an unrecognised stored value falls back rather than breaking routing. Reset Local Settings clears it alongside the existing theme and layout overrides.
✅ Deploy Preview for dashy-dev ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
`patchAppConfigField` can't be reached from a test while it lives in store.js: importing the store pulls ConfigHelpers, whose self-executing `config` block constructs a ConfigAccumulator that reads `$store.state` before the store module has finished initialising. Move the function to its own module so it can be imported directly, and cover both branches - a personal preference stays out of configSource, an authored edit still reaches it. Also covers resolveStartingView and rememberStartingView: the stored pick winning over the configured one, the legacy 'default' alias, and an unrecognised stored value falling back rather than breaking routing.
|
I'm in a fight with my coworkers over the theme, layout, and compactness. Even though I set it up, and imported all of our internal services into the dashboard they love to make all the graphical changes that annoy me, I would mind if they didn't change it every 20 minutes to mess with each other too. I do have it locked down so only I can make config changes. The changes are as simple as I could make them. |
|
Edit: Ah you're just talking about remembering the starting view, right? |
|
Let me check my settings, I have guest enabled but I have a local user with
a sha256 set to admin. I have it set to only admins can see edit/config.
…On Fri, Sep 4, 2026 at 6:12 AM Alicia Sykes ***@***.***> wrote:
*lissy93* left a comment (lissy93/dashy#2332)
<#2332 (comment)>
Hmm, so if you've disabled config, then it should not override the
theme/layout when someone makes a change locally, already.
—
Reply to this email directly, view it on GitHub
<#2332?email_source=notifications&email_token=AALWQ4Y4HVLOOCI2NZMUHN35NKIQHA5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTKNJTHA4TOOBXGUZKM4TFMFZW63VGMF2XI2DPOKSWK5TFNZ2KYZTPN52GK4S7MNWGSY3L#issuecomment-5538978752>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AALWQ45HFOUTQFAKBGACUKT5NKIQHAVCNFSNUABFKJSXA33TNF2G64TZHMZTIMZQG44DANRQHNEXG43VMU5TKMZUGI3TKNBQGYZ2C5QC>
.
Triage notifications, keep track of coding agent tasks and review pull
requests on the go with GitHub Mobile for iOS
<https://github.com/notifications/mobile/ios/AALWQ44AKCMU3NA74NISI735NKIQHA5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTKNJTHA4TOOBXGUZKM4TFMFZW63VGMF2XI2DPOKSWK5TFNZ2KUZTPN52GK4S7NFXXG>
and Android
<https://github.com/notifications/mobile/android/AALWQ4Y7HH4Q5E7UX3E6DUL5NKIQHA5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTKNJTHA4TOOBXGUZKM4TFMFZW63VGMF2XI2DPOKSWK5TFNZ2K4ZTPN52GK4S7MFXGI4TPNFSA>.
Download it today!
You are receiving this because you authored the thread.Message ID:
***@***.***>
|
|
Yeah, I'm just trying to understand what this PR does, and why it's needed. As it's not super clear to me from the code or description. |
|
When I tested the installation here at home, it worked as expected. But on
my work install, when a user changes their theme, layout, etc., refreshing
my browser shows me their settings. The version at home was just pulled,
the version is work in a month old, I didn't see anything in the commits
that would have affected that specifically.
Seems like state.confgSource is getting written back to the on disk
conf.yml.
…On Fri, Sep 4, 2026 at 8:26 AM Alicia Sykes ***@***.***> wrote:
*lissy93* left a comment (lissy93/dashy#2332)
<#2332 (comment)>
Yeah, I'm just trying to understand what this PR does, and why it's
needed. As it's not super clear to me from the code or description.
—
Reply to this email directly, view it on GitHub
<#2332?email_source=notifications&email_token=AALWQ462MOXZMMEBBNIKBHL5NKYIBA5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTKNJUGA2DAMZZGIY2M4TFMFZW63VGMF2XI2DPOKSWK5TFNZ2KYZTPN52GK4S7MNWGSY3L#issuecomment-5540403921>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AALWQ443Y3NEA4THIAQCYEL5NKYIBAVCNFSNUABFKJSXA33TNF2G64TZHMZTIMZQG44DANRQHNEXG43VMU5TKMZUGI3TKNBQGYZ2C5QC>
.
Triage notifications, keep track of coding agent tasks and review pull
requests on the go with GitHub Mobile for iOS
<https://github.com/notifications/mobile/ios/AALWQ45BUFPMFJC2HTJLVID5NKYIBA5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTKNJUGA2DAMZZGIY2M4TFMFZW63VGMF2XI2DPOKSWK5TFNZ2KUZTPN52GK4S7NFXXG>
and Android
<https://github.com/notifications/mobile/android/AALWQ47P6B6OOI7M2MOTJHT5NKYIBA5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTKNJUGA2DAMZZGIY2M4TFMFZW63VGMF2XI2DPOKSWK5TFNZ2K4ZTPN52GK4S7MFXGI4TPNFSA>.
Download it today!
You are receiving this because you authored the thread.Message ID:
***@***.***>
|
|
The expected behaviour is:
|
|
Ok, I was trying to be nice to let users add additional items but I think
they were getting caught with the edit button and causing the change, I
think bullet 2.
Is there a checkbox that disable ability for anybody to change the theme
globally, even in edit mode?
…On Fri, Sep 4, 2026 at 12:16 PM Alicia Sykes ***@***.***> wrote:
*lissy93* left a comment (lissy93/dashy#2332)
<#2332 (comment)>
The expected behaviour is:
- Themes and layout changes remembered locally in your browser. So
that each user can set their own.
- If you then go and edit config from browser, these will get carried
over
- Users who aren't admins, or don't have edit access cannot change any
UI stuff for any other users. Just their own, locally.
—
Reply to this email directly, view it on GitHub
<#2332?email_source=notifications&email_token=AALWQ47EF7VVEWDQXBRN2DT5NLTFZA5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTKNJUGMZTINJQGY42M4TFMFZW63VGMF2XI2DPOKSWK5TFNZ2KYZTPN52GK4S7MNWGSY3L#issuecomment-5543345069>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AALWQ4ZVSLQ6QAJRKWT2J7T5NLTFZAVCNFSNUABFKJSXA33TNF2G64TZHMZTIMZQG44DANRQHNEXG43VMU5TKMZUGI3TKNBQGYZ2C5QC>
.
Triage notifications, keep track of coding agent tasks and review pull
requests on the go with GitHub Mobile for iOS
<https://github.com/notifications/mobile/ios/AALWQ4YHEZR3DX74G7ONT4L5NLTFZA5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTKNJUGMZTINJQGY42M4TFMFZW63VGMF2XI2DPOKSWK5TFNZ2KUZTPN52GK4S7NFXXG>
and Android
<https://github.com/notifications/mobile/android/AALWQ46N3Z2OPE4PP4YRIM35NLTFZA5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTKNJUGMZTINJQGY42M4TFMFZW63VGMF2XI2DPOKSWK5TFNZ2K4ZTPN52GK4S7MFXGI4TPNFSA>.
Download it today!
You are receiving this because you authored the thread.Message ID:
***@***.***>
|
|
I understand what you mean now. Yeah, it's a bit of a design flaw 🫤... I wanted users to be able to change visual aspects of their dashboard and make local changes, even when they don't have admin write access. But then if an admin spends ages tweaking their design, before then going into edit and clicking "Save to Disk", then I think they'd expect their changes to get saved centrally. I'm not really sure what the solution is 🤔 |
|
It still might be able to give you some ideas on what it recommend then you
could decide the right fix and implement it when you have time.
…On Fri, Sep 4, 2026 at 12:43 PM Alicia Sykes ***@***.***> wrote:
*lissy93* left a comment (lissy93/dashy#2332)
<#2332 (comment)>
I understand what you mean now. Yeah, it's a bit of a design flaw 🫤...
I wanted users to be able to change visual aspects of their dashboard and
make local changes, even when they don't have admin write access.
But then if an admin spends ages tweaking their design, before then going
into edit and clicking "Save to Disk", then I think they'd expect their
changes to get saved centrally.
I'm not really sure what the solution is 🤔
It's not quite as simple as just adding a checkbox, as it would change how
the store and state system works.
And I don't want to just ask AI to solve it, because it'll write 500+
lines of code I won't be able to maintain into the future 😅 I want to keep
things clean and readable, so as to not introduce bugs.
—
Reply to this email directly, view it on GitHub
<#2332?email_source=notifications&email_token=AALWQ4ZKWFCQOJHSG7YOUIT5NLWLXA5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTKNJUGM3DMMZSGE4KM4TFMFZW63VGMF2XI2DPOKSWK5TFNZ2KYZTPN52GK4S7MNWGSY3L#issuecomment-5543663218>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AALWQ42GJVXJX2A45SKNS5T5NLWLXAVCNFSNUABFKJSXA33TNF2G64TZHMZTIMZQG44DANRQHNEXG43VMU5TKMZUGI3TKNBQGYZ2C5QC>
.
Triage notifications, keep track of coding agent tasks and review pull
requests on the go with GitHub Mobile for iOS
<https://github.com/notifications/mobile/ios/AALWQ42R3KNCP4VL5CS7DZ35NLWLXA5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTKNJUGM3DMMZSGE4KM4TFMFZW63VGMF2XI2DPOKSWK5TFNZ2KUZTPN52GK4S7NFXXG>
and Android
<https://github.com/notifications/mobile/android/AALWQ4ZDLF6ODZ7H2C5NS435NLWLXA5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTKNJUGM3DMMZSGE4KM4TFMFZW63VGMF2XI2DPOKSWK5TFNZ2K4ZTPN52GK4S7MFXGI4TPNFSA>.
Download it today!
You are receiving this because you authored the thread.Message ID:
***@***.***>
|
Problem
Dashy holds two copies of the config in the Vuex store:
state.config— what's rendered right nowstate.configSource— what gets written back toconf.yml, and is therefore shared by every user of the instanceThe quick-pickers for theme, layout and item size wrote to both, plus
localStorage. Nothing looks wrong until someone saves: Save to Disk, from the config editor or the "You're using a local config" banner, serialisesconfigSource— which by then carries whatever theme, layout and item size that user happened to be viewing with. Those land in the sharedconf.yml. On successcarefullyClearLocalStorage()drops their local override, so the value is now purely file-backed, and every other user (having no override of their own) falls back to the file and inherits it.The result: on a shared instance, one person changing their theme and saving any unrelated config edit silently changes the theme for everybody.
Separately, the view (default / minimal / workspace) had no per-browser persistence at all.
theme,layout,iconSizeandlanguageare all remembered per browser viaconfigScope()/readLocalOverrides(), but the view is resolved by the router'sbeforeEnterguard readingappConfig.startingViewdirectly, before that local-override layer is ever consulted. So users sharing an instance could each keep their own look, but not their own view.Changes
Two commits, reviewable independently.
1. Keep personal display preferences out of the shared config —
src/store.js, +8/-3patchAppConfigFieldalready receives astorageKey, and it is passed only by the personal quick-pickers (SET_THEME,SET_ITEM_LAYOUT,SET_ITEM_SIZE,SET_LANGUAGE); authored edits such asUPDATE_CUSTOM_CSSpass nothing. That existing argument becomes the discriminator — when present, updatestate.configandlocalStorage, then return without touchingconfigSource:Rendering is unchanged — the getters read
state.config. Authoring an instance-wide default from the interactive editor is unchanged too, sincetheme,layoutandiconSizegetters already bypasslocalStoragewhilestate.editModeis on.2. Remember the view each user picks, per browser — +49/-17
defaults.js: newlocalStorageKeys.STARTING_VIEW('startingView')ConfigHelpers.js:resolveStartingView(stored, configured)andrememberStartingView(view), next to the existingVIEW_META;clearScopedLocalConfig()removes the keyrouter.js: the landing guard consults the stored pick first, thenappConfig.startingView, thenhomeOptionsPanel.vueandViewSwitcher.vue: both view switchers record an explicit pickOnly an explicit pick from a switcher is stored, so following a link or bookmark to
/minimaldoesn't quietly rewrite someone's landing view. An unrecognised stored value falls through to the configured value rather than breaking routing, and Config → Reset Local Settings clears it alongside the existing theme and layout overrides.Behaviour
appConfig.startingViewconf.ymlon diskCompatibility
No config format change. Existing
conf.ymlfiles work untouched,appConfig.startingViewstill sets the default for anyone who hasn't picked a view, and the legacydefaultalias forhomeis still accepted. The newlocalStoragekey is additive, and its absence is the pre-existing behaviour.Testing
Verified manually against a running instance, in two browser profiles:
conf.ymlwith the authored theme intact — the viewing user's choice does not appear in the fileappConfig.startingView; after picking Minimal,/lands on/minimalfor that browser only, while a second profile still lands on the configured viewEach of the two behaviours was also confirmed to regress when its change is reverted, so the checks above distinguish the fix from the prior behaviour rather than passing either way.
Existing suite: 536 tests pass, lint clean.