microsoft / vscode

Visual Studio Code
https://code.visualstudio.com
MIT License
162.99k stars 28.78k forks source link

Explore user profiles #116740

Closed miguelsolorio closed 1 year ago

miguelsolorio commented 3 years ago

Overview

This issue aims to explore what adding "profiles" could look like in the product. These profiles can be used in education, presentations, or can even be language specific. The explorations should cover being able to setup and switch between profiles. Ideally these profiles should be synced with Settings Sync (if used) so you can use those profiles anywhere.

One idea for settings is to introduce a new settings object like:

{
    "profiles": {
        "demos": {
            "files.autoSave": "onFocusChange",
            "editor.fontSize": 18,
            "editor.tabSize": 2,
            "editor.fontWeight": "600",
            "screencastMode.enabled": true,
        }
    },

    "editor.fontFamily": "Cascadia Code",
    "editor.renderWhitespace": "all",
}

The "Demos" profile inherits the current settings a user has and adds additional settings on top of the current ones. Also, when profiles are enabled we will create a "Default" profile where the user can switch back to their default mode.

Related issues

jcrben commented 2 years ago

When I export it looks like this - does it really need all these \\\?

image

I will probably be looking to commit and edit these code-profiles

jmevel commented 2 years ago

Hello guys,

First of all thanks for all the work you've done to make this new feature, I think many of us were waiting for it. Now there's something I'm a bit confused, I'm not sure that's even possible with this first version of the profiles feature.

Is it possible to enable/disable extensions based on the profile we use? When I disable an extension I don't see any change in the user settings neither in the profile settings. Searching on internet it seems it's not yet possible so does it mean the profile feature doesn't have this ability yet? Do you have this feature tracked in your backlog already?

What I'd personally love is to be able to enable/disable extensions simply based on the selected profile, not just based on the current opened workspace. The simple use case of it is to easily switch settings between work and home as my needs are very different in these two environments (however I still want to sync all my settings so I can easily retrive my work/home profiles from any computer).

I hope this feature could be added to your backlog and tracked for future release, I think I'm not the only one waiting for it 🙂

Thanks for your answers!

ZaLiTHkA commented 2 years ago

Is it possible to enable/disable extensions based on the profile we use?

hey @jmevel, have you played with these "Profiles" yourself yet, or are you checking details before you do..?

I've just tested on my side by creating a new empty profile, and VSCode switched to what looks like a fresh installation with none of my explicitly installed third-party extensions.

switching back to "Default" re-enabled everything again as I had it. this sounds exactly the same as what you're asking about.


..and while I'm here, just some general feedback: I've been following this thread for ages, but I haven't actually tried this feature until now.. going to spend some time now setting things up.

I regularly switch between project types:

suffice to say, I am very much looking forward to having VSCode not initialise my collection of Redhat Java extensions whenever I open my Ionic Cordova projects... 😁

jmevel commented 2 years ago

Is it possible to enable/disable extensions based on the profile we use?

hey @jmevel, have you played with these "Profiles" yourself yet, or are you checking details before you do..?

I've just tested on my side by creating a new empty profile, and VSCode switched to what looks like a fresh installation with none of my explicitly installed third-party extensions.

switching back to "Default" re-enabled everything again as I had it. this sounds exactly the same as what you're asking about.

You are right sir, I'm sorry for my useless comment.

I guess I'm too used to configuring eveything in the settings.json file but also I think I was fooled by what's written when selecting any extension This extension is enabled globally or This extension is disabled globally by the user. The globaly is a bit misleading now in my opinion...

Anyway, thanks for your answer, this is a wonderful news 😇

EDIT: wow it even works with installed/uninstalled extensions, this is even better than I thought 😀

jmevel commented 2 years ago

However one thing I just noticed and absolutely need to be added in my opinion is the synchronization our profiles! I was surprised yesterday evening not to find my profiles on my personal laptop and indeed it seems not possible to configure it for syncing. (The workbench.experimental.settingsProfiles.enabled setting was also missing even though it's in the default settings.json file)

image

Is it because this feature is still in experimental state for the moment?

sandy081 commented 2 years ago

We are planning to support syncing profiles in current (September 2022) milestone - https://github.com/microsoft/vscode/issues/154243

PeterWone commented 2 years ago

A long time coming but well thought through and neatly integrated. With the imminent profile syncing and support for extension installation/enablement, you have produced a capability (usable roaming profiles) that Windows has promised since the nineties and never quite delivered. This is no small achievement.

Oh-Turry commented 2 years ago

Is there any chance of this to work in WSL?

Chaphasilor commented 2 years ago

I noticed that the window.autoDetectColorScheme setting doesn't work well with user profiles. When my laptop switches from dark to light theme, previously all instances would be switched to the light theme (as they all shared the same settings).
Now with the settings profile, only the currently "active" profile (i.e. profile used by the first VS Code instance/window I focus after the OS theme change) is switched to light mode, all other profiles, whether open or closed, continue to use the dark theme until manually switching theme.
Same goes for the other way around, light theme -> dark theme.

I'm guessing this is due to the profiles not yet having a shared "base profile" that they all dynamically inherit from. I think this was discussed previously, as it would make a lot of sense. Aside from the automatic theme switching, things like common keyboard shortcuts should be the same in all profiles, and it would be nice to have an option to selectively enforce this somehow :)

equiman commented 2 years ago

I'm trying to use the new settings profile to do some experiments.

I'm actually on the "Default" profile and I'm trying to create a new one with "Create Empty Settings Profile..." but when I open the settings editor the settings are the same (but grayed)

Default (Left) vs New Profile (right) image

I see that the extension is the only thing that is different between the profiles, but not the settings file.

For example. I've added this color configuration on the new one (right side) and I hope only applies on that, but the most strange part is, that the color is saved and applied on the default (left side) 🤪

image

Additional Information: image

gjsjohnmurray commented 2 years ago

@equiman after you ran the command to create the empty profile did you switch to it? Look on the gearwheel menu at the foot of the Activity Bar. There's probably a Command Palette entry for doing that too. When your profile is active you should see a clickable 2-letter 'pill' below the gearwheel showing the first 2 letters of your profile's name. Now just change user settings normally, or enable / disable extensions.

sandy081 commented 2 years ago

Thanks for providing some info @gjsjohnmurray, but @equiman is on stable and the pointers you recommended are in insiders.

@equiman Thanks for trying profiles. You are right that every profile has its own settings. May I know how you are opening settings (file) when you are in a window that is not using default profile? If you are using settings UI, you shall see two options to open profile specific settings and application specific user settings on the top right corner

image

You can open profile specific settings file by using the first action from above picture. Every profile (except default) uses default settings.json file for configuring application scoped settings like application update configuration. Hence when you opened the default settings.json in a window with custom profile, all those settings which are not application specific are dimmed mentioning that they are not applicable in this window. Any changes in the default settings.json file will effect the default profile. To customise profile specific settings, you have to open profile specific settings file as shown above. I agree this is bit confusing but this is mitigated by Settings UI showing them as expected by the User.

Please let me know if it clear. Thanks

jmevel commented 2 years ago

@equiman As @sandy081 already pointed out, you must open the settings file of your current profile after you've switched.

VS Code Notice on the right one it has a generated ID in its path because that's a user profile and on the left it doesn't have it because that's the default settings.

I advise you to write a comment on top of each file so you can quickly make sure which settings file you're currently viewing/editing.

equiman commented 2 years ago

Thanks @sandy081 now is clear, how to open the profile settings. image

Now I can see and change the file related to this profile image

@jmevel thanks for the comment tip

isidorn commented 2 years ago

My name is Isidor and I am helping @sandy081 with the profile work. Right now we are interested in feedback regarding sharing profiles. So if you have 30 mins to chat and are:

Please drop me an email at inikolic@microsoft.com so we get together and quickly talk. Thanks 🙏

ZaLiTHkA commented 2 years ago

My name is Isidor and I am helping @sandy081 with the profile work. Right now we are interested in feedback regarding sharing profiles.

just for clarification, is there any plan to work on the concept of "profile inheritence"? for example, profile "My Cool Profile" that inherits the configuration defined in "My Base Profile", which might in turn inherit from "Default"..

I spent some time configuring a few profiles the other evening, starting from a completely blank slate: I first configured the built-in "Default" profile, installing a few common extensions and setting some personal preferences. then while on "Default", I created another using the "Create from Current Settings Profile..." option. I then switched back to "Default" and did this again for another profile, adding different extensions and setting more custom preferences.

tl;dr: the amount of overlap between my profiles is incredibly high, and I'm now concerned that I've created a maintenance monster in my IDE. 🤔

isidorn commented 2 years ago

@ZaLiTHkA thanks for your feedback, we are still debating this. Our current feeling is that we will allow profiles to inherit from the default profile. But there will be no inheritance between any two profiles.

ZaLiTHkA commented 2 years ago

thanks @isidorn, I can fully appreciate wanting to avoid profiles inheriting from other custom profiles.. but optionally setting one custom profile to inherit from the internal "Default" profile would be absolutely epic.

mrwensveen commented 2 years ago

It would be cool if we could source in another json file, be it another profile or just another json file. That would basically give you all the inheritance functionality you'd need.

equiman commented 1 year ago

Is there a way o flag to set on vscode project settings to set the profile to use on this project?

sandy081 commented 1 year ago

There is not such a flag, but you can open a workspace and associate the profile and this will be remembered. You can also associate a profile from cli. Eg: code --profile <name> <folder>

AverTry commented 1 year ago

Please have default extensions reflect changes to created from.

If I have a basic set that I would need in all profiles, then I don't have to make changes across multiple profiles, manually. Or a way to drag n drop between profiles. As I just had to make changes across 5 profiles and adjust key-shortcuts in each.

Thanks for this amazing feature, and it's possibilities, because I always mess up the settings sync, and makes me not use it.

moseleyi commented 1 year ago

Will we be able to assign a profile to language/folder/workspace?

kamenminkov commented 1 year ago

Will we be able to assign a profile to language/folder/workspace?

The way I see it you could already assign settings to a language even before profiles (e.g. the "[<language>]" syntax in settings.json) whereas the idea of profiles as I get it is for them to be easily switchable. I guess you can expand on that idea by using language-specific settings inside a profile's settings.json. As for folders and workspaces, some previous comments mention that this is already working like that.

carlocardella commented 1 year ago

We are planning to support syncing profiles in current (September 2022) milestone - #154243

How should profile sync work? I assume profiles created on one machine should be sync'ed to other logged in with the same account (GitHub, in my case)? Sync is working for all settings except profiles (I am using the latest Insiders).

Version: 1.73.0-insider (user setup)
Commit: fad3a77833b9249158dfd88477114a06435e46a2
Date: 2022-10-07T05:18:17.049Z
Electron: 19.0.17
Chromium: 102.0.5005.167
Node.js: 16.14.2
V8: 10.2.154.15-electron.0
OS: Windows_NT x64 10.0.22621
Sandboxed: Yes

No errors or any reference to "profile" in Log (Setting Sync) Output panel or in Sync Activity

image

image

susickypavel commented 1 year ago

Hi 👋, it seems like the profile badge in the Activity Bar has a misaligned short name when the Activity bar is right positioned.

image
gjsjohnmurray commented 1 year ago

Hi 👋, it seems like the profile badge in the Activity Bar has a misaligned short name when the Activity bar is right positioned.

Already reported and fixed in Insiders.

sandy081 commented 1 year ago

@carlocardella Can you please share the settings sync logs (from Output panel) from both machines?

carlocardella commented 1 year ago

@carlocardella Can you please share the settings sync logs (from Output panel) from both machines?

Source machine (where I have created the profile I want to sync):

[2022-10-11 16:54:52.688] [settingssync] [info] Using settings sync service https://vscode-sync.trafficmanager.net/
[2022-10-11 16:54:52.688] [settingssync] [info] Auto Sync is enabled.
[2022-10-11 16:54:52.688] [settingssync] [info] Auto Sync: Suspended until auth token is available.
[2022-10-11 16:55:02.488] [settingssync] [info] Auto Sync: Triggered by Interval
[2022-10-11 16:55:02.489] [settingssync] [info] Sync started.
[2022-10-11 16:55:02.900] [settingssync] [info] Settings: No changes found during synchronizing settings.
[2022-10-11 16:55:02.928] [settingssync] [info] Keybindings: No changes found during synchronizing keybindings.
[2022-10-11 16:55:02.958] [settingssync] [info] Snippets: No changes found during synchronizing snippets.
[2022-10-11 16:55:02.972] [settingssync] [info] Tasks: No changes found during synchronizing tasks.
[2022-10-11 16:55:09.820] [settingssync] [info] GlobalState: No changes found during synchronizing ui state.
[2022-10-11 16:55:10.925] [settingssync] [info] Extensions: No changes found during synchronizing extensions.
[2022-10-11 16:55:10.931] [settingssync] [info] Sync done. Took 8443ms
[2022-10-11 16:57:01.333] [settingssync] [info] Auto Sync: Triggered by Activity
[2022-10-11 16:57:01.333] [settingssync] [info] Sync started.
[2022-10-11 16:57:01.485] [settingssync] [info] Settings: No changes found during synchronizing settings.
[2022-10-11 16:57:01.500] [settingssync] [info] Keybindings: No changes found during synchronizing keybindings.
[2022-10-11 16:57:01.520] [settingssync] [info] Snippets: No changes found during synchronizing snippets.
[2022-10-11 16:57:01.530] [settingssync] [info] Tasks: No changes found during synchronizing tasks.
[2022-10-11 16:57:01.538] [settingssync] [info] GlobalState: No changes found during synchronizing ui state.
[2022-10-11 16:57:01.791] [settingssync] [info] Extensions: No changes found during synchronizing extensions.
[2022-10-11 16:57:01.796] [settingssync] [info] Sync done. Took 464ms
[2022-10-11 16:58:27.225] [settingssync] [info] Auto Sync: Triggered by Activity
[2022-10-11 16:58:27.225] [settingssync] [info] Sync started.
[2022-10-11 16:58:27.449] [settingssync] [info] Settings: No changes found during synchronizing settings.
[2022-10-11 16:58:27.459] [settingssync] [info] Keybindings: No changes found during synchronizing keybindings.
[2022-10-11 16:58:27.489] [settingssync] [info] Snippets: No changes found during synchronizing snippets.
[2022-10-11 16:58:27.511] [settingssync] [info] Tasks: No changes found during synchronizing tasks.
[2022-10-11 16:58:27.523] [settingssync] [info] GlobalState: No changes found during synchronizing ui state.
[2022-10-11 16:58:28.116] [settingssync] [info] Extensions: No changes found during synchronizing extensions.
[2022-10-11 16:58:28.118] [settingssync] [info] Sync done. Took 894ms
[2022-10-11 17:01:08.871] [settingssync] [info] Auto Sync: Triggered by Activity
[2022-10-11 17:01:08.871] [settingssync] [info] Sync started.
[2022-10-11 17:01:09.002] [settingssync] [info] Settings: No changes found during synchronizing settings.
[2022-10-11 17:01:09.013] [settingssync] [info] Keybindings: No changes found during synchronizing keybindings.
[2022-10-11 17:01:09.038] [settingssync] [info] Snippets: No changes found during synchronizing snippets.
[2022-10-11 17:01:09.049] [settingssync] [info] Tasks: No changes found during synchronizing tasks.
[2022-10-11 17:01:09.058] [settingssync] [info] GlobalState: No changes found during synchronizing ui state.
[2022-10-11 17:01:09.300] [settingssync] [info] Extensions: No changes found during synchronizing extensions.
[2022-10-11 17:01:09.303] [settingssync] [info] Sync done. Took 433ms
[2022-10-11 17:04:50.759] [settingssync] [info] Auto Sync: Triggered by Activity

In case it matters, there is no "profiles" file apparently sync'ed here: image

Target machine (where I expect the profile to show up)

[2022-10-11 17:09:56.527] [settingssync] [info] Using settings sync service https://vscode-sync.trafficmanager.net/
[2022-10-11 17:09:56.527] [settingssync] [info] Auto Sync is enabled.
[2022-10-11 17:09:56.528] [settingssync] [info] Auto Sync: Suspended until auth token is available.
[2022-10-11 17:10:07.183] [settingssync] [info] Auto Sync: Triggered by Interval
[2022-10-11 17:10:07.184] [settingssync] [info] Sync started.
[2022-10-11 17:10:07.954] [settingssync] [info] Settings: No changes found during synchronizing settings.
[2022-10-11 17:10:07.976] [settingssync] [info] Keybindings: No changes found during synchronizing keybindings.
[2022-10-11 17:10:08.003] [settingssync] [info] Snippets: No changes found during synchronizing snippets.
[2022-10-11 17:10:08.018] [settingssync] [info] Tasks: No changes found during synchronizing tasks.
[2022-10-11 17:10:08.031] [settingssync] [info] GlobalState: No changes found during synchronizing ui state.
[2022-10-11 17:10:08.807] [settingssync] [info] Extensions: Skipped synchronizing extension because the extension is not found. ev2team.ev2-authoring-extension
[2022-10-11 17:10:08.817] [settingssync] [info] Extensions: Updated last synchronized extensions. Skipped: ["ev2team.ev2-authoring-extension","laurenttreguier.vscode-simple-icons","alanwalk.markdown-toc"].
[2022-10-11 17:10:08.822] [settingssync] [info] Sync done. Took 1640ms
[2022-10-11 17:10:14.792] [settingssync] [info] Auto Sync: Triggered by Activity
[2022-10-11 17:10:14.792] [settingssync] [info] Sync started.
[2022-10-11 17:10:15.277] [settingssync] [info] Settings: No changes found during synchronizing settings.
[2022-10-11 17:10:15.290] [settingssync] [info] Keybindings: No changes found during synchronizing keybindings.
[2022-10-11 17:10:15.324] [settingssync] [info] Snippets: No changes found during synchronizing snippets.
[2022-10-11 17:10:15.347] [settingssync] [info] Tasks: No changes found during synchronizing tasks.
[2022-10-11 17:10:15.578] [settingssync] [info] GlobalState: Updated remote ui state
[2022-10-11 17:10:15.587] [settingssync] [info] GlobalState: Updated last synchronized ui state
[2022-10-11 17:10:16.082] [settingssync] [info] Extensions: Updated remote extensions. Updated: ["ev2team.ev2-authoring-extension"].
[2022-10-11 17:10:16.090] [settingssync] [info] Extensions: Updated last synchronized extensions. Skipped: ["ev2team.ev2-authoring-extension","laurenttreguier.vscode-simple-icons","alanwalk.markdown-toc"].
[2022-10-11 17:10:16.095] [settingssync] [info] Sync done. Took 1305ms
[2022-10-11 17:15:16.101] [settingssync] [info] Auto Sync: Triggered by Interval
[2022-10-11 17:15:16.101] [settingssync] [info] Sync started.
[2022-10-11 17:15:16.403] [settingssync] [info] Settings: No changes found during synchronizing settings.
[2022-10-11 17:15:16.415] [settingssync] [info] Keybindings: No changes found during synchronizing keybindings.
[2022-10-11 17:15:16.443] [settingssync] [info] Snippets: No changes found during synchronizing snippets.
[2022-10-11 17:15:16.462] [settingssync] [info] Tasks: No changes found during synchronizing tasks.
[2022-10-11 17:15:16.477] [settingssync] [info] GlobalState: No changes found during synchronizing ui state.
[2022-10-11 17:15:16.931] [settingssync] [info] Extensions: No changes found during synchronizing extensions.
[2022-10-11 17:15:16.934] [settingssync] [info] Sync done. Took 833ms

Interestingly, the target machine has a Settings Profiles file image

This is its content:

{"ref":"0","content":null}

Out of curiosity, I tried to create an empty profile with the same name on the target machine and force a sync, just to see what would happen if the profile already exists: still the sync does not seem to happen

Source machine:

[2022-10-11 17:18:58.886] [settingssync] [info] Sync started.
[2022-10-11 17:18:59.012] [settingssync] [info] Settings: No changes found during synchronizing settings.
[2022-10-11 17:18:59.022] [settingssync] [info] Keybindings: No changes found during synchronizing keybindings.
[2022-10-11 17:18:59.037] [settingssync] [info] Snippets: No changes found during synchronizing snippets.
[2022-10-11 17:18:59.044] [settingssync] [info] Tasks: No changes found during synchronizing tasks.
[2022-10-11 17:18:59.050] [settingssync] [info] GlobalState: No changes found during synchronizing ui state.
[2022-10-11 17:18:59.500] [settingssync] [info] Extensions: Updated remote extensions. Updated: ["ev2team.ev2-authoring-extension"].
[2022-10-11 17:18:59.527] [settingssync] [info] Extensions: Updated last synchronized extensions. Skipped: ["ev2team.ev2-authoring-extension","laurenttreguier.vscode-simple-icons","alanwalk.markdown-toc"].
[2022-10-11 17:18:59.534] [settingssync] [info] Sync done. Took 650ms

Target machine:

[2022-10-11 17:19:06.510] [settingssync] [info] Sync started.
[2022-10-11 17:19:06.739] [settingssync] [info] Settings: No changes found during synchronizing settings.
[2022-10-11 17:19:06.750] [settingssync] [info] Keybindings: No changes found during synchronizing keybindings.
[2022-10-11 17:19:06.784] [settingssync] [info] Snippets: No changes found during synchronizing snippets.
[2022-10-11 17:19:06.800] [settingssync] [info] Tasks: No changes found during synchronizing tasks.
[2022-10-11 17:19:06.811] [settingssync] [info] GlobalState: No changes found during synchronizing ui state.
[2022-10-11 17:19:07.426] [settingssync] [info] Extensions: Skipped synchronizing extension because the extension is not found. ev2team.ev2-authoring-extension
[2022-10-11 17:19:07.434] [settingssync] [info] Extensions: Updated last synchronized extensions. Skipped: ["ev2team.ev2-authoring-extension","laurenttreguier.vscode-simple-icons","alanwalk.markdown-toc"].
[2022-10-11 17:19:07.438] [settingssync] [info] Sync done. Took 932ms
sandy081 commented 1 year ago

It seems both machines are using stable settings sync service - Using settings sync service https://vscode-sync.trafficmanager.net/ and syncing profiles is not supported when using stable service.

ZaLiTHkA commented 1 year ago

It seems both machines are using stable settings sync service - Using settings sync service https://vscode-sync.trafficmanager.net/ and syncing profiles is not supported when using stable service.

so just to clarify, this means we can use "Settings Profiles" in VSCode Stable, but we cannot sync them across machines unless we use VSCode Insiders? looks like I'm going back to Insiders again.. 😎


hmmm.. so I just signed in to Insiders using GitHub (as I had done previously) and it synchronised my settings and extensions list from a long time back, but I don't see any extensions.json file in my Code - Insiders data folder, even though VSCode Insiders has extensions installed. this raises a few questions now..

can we simply move our existing %APPDATA%\Code\User\profiles folder over to %APPDATA%\Code - Insiders\User, or do we need to recreate the profiles manually? so, that didn't work.. I'll reconfigure my other profiles later.

does VSCode Insiders store the "default" profile's extensions list differently now?

carlocardella commented 1 year ago

It seems both machines are using stable settings sync service - Using settings sync service https://vscode-sync.trafficmanager.net/ and syncing profiles is not supported when using stable service.

Uhm... Yes, I'm using the sync stable service since I want to sync my settings across VSCode Insiders and Stable versions (and VSCode Stable cannot use the insiders sync).

I can try, but can I suggest to clarify the documentation? It says to use VSCode Insiders, not the insiders sync service specifically

https://code.visualstudio.com/updates/v1_72

Note: This feature is currently available only in the Insiders release of VS Code.

sandy081 commented 1 year ago

so just to clarify, this means we can use "Settings Profiles" in VSCode Stable, but we cannot sync them across machines unless we use VSCode Insiders? looks like I'm going back to Insiders again..

Unfortunately Yes. This feature is still in preview and we are in the process of experimenting and getting feedback and stabilising it. We would like to have syncing enabled in insiders for a milestone before enabling it in stable, so that we can fix any strange issues.

does VSCode Insiders store the "default" profile's extensions list differently now?

We do not create extensions.json if there are no profiles. This is being compatible with old behaviour when there are no profiles and all extensions are read from extensions installation folder. But we also have plans to make it consistent that default profile extensions are stored in extensions.json always. This needs some migration though.

equiman commented 1 year ago

There is not such a flag, but you can open a workspace and associate the profile and this will be remembered. You can also associate a profile from cli. Eg: code --profile <name> <folder>

Well, while this tag was created. I'm using some aliases as you recommended. Thanks!

# VSCode
alias vc="code"
alias vco="vc ."
alias vd="code --profile \".Net\""
alias vdo="vd ."
alias vr="code --profile \"React\""
alias vro="vr ."
alias vn="code --profile \"Node\""
alias vno="vn ."
ChocoTonic commented 1 year ago

Would it be possible to add keybindings.json to each settings profile?

hughlilly commented 1 year ago

I'm actually on the "Default" profile and I'm trying to create a new one with "Create Empty Settings Profile..."

How do I get to this option? I can’t find it… I only have “Import from…” and “Settings Profiles: Export (Default)…”.

sandy081 commented 1 year ago

@hughlilly This is an experimental feature and can be enabled using the setting workbench.experimental.settingsProfiles.enabled

sschneider-ihre-pvs commented 1 year ago

might be hidden in the side panel even when enabled :D And I guess it is enabled by default in insiders?

ZaLiTHkA commented 1 year ago

might be hidden in the side panel even when enabled :D And I guess it is enabled by default in insiders?

as far as I can see, the workbench.experimental.settingsProfiles.enabled setting no longer exists in the Insiders build, the "User Profiles" feature is just "enabled".

take note: I believe there are still some aspects of this feature that are Insiders-only (such as "profile syncing" for now), so it's not finished yet, but it is getting there pretty quickly. :)

equiman commented 1 year ago

Today I found a bug trying to install the same extension on different profiles.

If you start to install the extension but don't wait to finish and switch to other profiles, the extension never changes the message again and freezes the button to 'installing' (need VScode reload)

sandy081 commented 1 year ago

@equiman This is already tracked here - https://github.com/microsoft/vscode/issues/162645

moseleyi commented 1 year ago

Will we be able to assign a profile to language/folder/workspace?

The way I see it you could already assign settings to a language even before profiles (e.g. the "[<language>]" syntax in settings.json) whereas the idea of profiles as I get it is for them to be easily switchable. I guess you can expand on that idea by using language-specific settings inside a profile's settings.json. As for folders and workspaces, some previous comments mention that this is already working like that.

Really? Can I set different indentation based on folder+language in settings.json? It's only to conform to rules set by my clients

studgeek commented 1 year ago

Excited for this feature! Is there a single place where the current documentation for Settings Profiles is located, or do we have to read through the last few release notes?

And what is the precedence of a profile relative to user, workspace, and folder? They seem to always be stored at user level, but I do think it would be helpful to have profiles that work at the workspace level (and override workspace-level settings). As an example, a user may want interact with a folder/workspace in different ways (e.g. different toolchains or different build targets (which might result in different clang settings, search paths, etc); different focuses between triaging/debugging/coding).

mrwensveen commented 1 year ago

@studgeek You could solve the workspace-level settings by using different workspace files (e.g. triage.code-workspace, develop.code-workspace, etc.).

I'm not sure if the profile is between the user and workspace level or if it replaces the user level settings.

sandy081 commented 1 year ago

@studgeek

Excited for this feature! Is there a single place where the current documentation for Settings Profiles is located, or do we have to read through the last few release notes?

This feature is still in preview. We will have a wiki document once we make it stable.

Profiles are defined at user level and you can associate a folder/workspace or multiple to a profile. They are like an environment in which you want to work. Nevertheless, folder/workspace settings always take precedence because they are defined relatively specific to that workspace/folder. If you think a workspace can be interacted in different environments, I think then they such environment configurations shall not be defined at workspace level. Its VS Code phenomena that if something is defined at workspace level then the workspace shall respect that in any environment.

thistlillo commented 1 year ago

How is a profile defined? I read this in the upgrade log, but cannot understand what it is exactly:

Preview features Profiles We have been working the last couple of months to support Profiles in VS Code, which is one of the most popular asks from the community. This feature is available for preview via the workbench.experimental.settingsProfiles.enabled setting. Try it out and give us your feedback by creating issues in the vscode repository or commenting in issue #116740.

sschneider-ihre-pvs commented 1 year ago

How is a profile defined? I read this in the upgrade log, but cannot understand what it is exactly:

Preview features Profiles We have been working the last couple of months to support Profiles in VS Code, which is one of the most popular asks from the community. This feature is available for preview via the workbench.experimental.settingsProfiles.enabled setting. Try it out and give us your feedback by creating issues in the vscode repository or commenting in issue #116740.

image

sschneider-ihre-pvs commented 1 year ago

https://code.visualstudio.com/updates/v1_74#_preview-features

DiegoBM commented 1 year ago

When you switch profiles, are extensions effectively unloaded from memory? I've two profiles, the default one with barely any extensions or configuration, and another one with a decent amount of extensions, some of them theoretically heavy like the C++ and C# extensions. But when switching from the "heavy" one to the default one, there is barely a difference in memory consumption according to the Task Manager in Windows 11.

sandy081 commented 1 year ago

Yes, switching profiles shall unload extensions from memory. Can you please take a memory profile and see which process is consuming the memory