[{"data":1,"prerenderedAt":3317},["Reactive",2],{"navigation":3,"aAII9Cz3yR":204,"tags-development box setup":397},[4,192,200],{"title":5,"_path":6,"children":7,"icon":191},"Blog","/posts",[8,11,14,17,20,23,26,29,32,35,38,41,44,47,50,53,56,59,62,65,68,71,74,77,80,83,86,89,92,95,98,101,104,107,110,113,116,119,122,125,128,131,134,137,140,143,146,149,152,155,158,161,164,167,170,173,176,179,182,185,188],{"title":9,"_path":10},"Testing your API with REST Client","/posts/testing-your-api-with-rest-client",{"title":12,"_path":13},"HTML templating in Xamarin","/posts/html-templating-in-xamarin",{"title":15,"_path":16},"Goodbye Azure Portal, Welcome Azure CLI","/posts/welcome-azure-cli",{"title":18,"_path":19},"Coming across Gitpod","/posts/gitpod",{"title":21,"_path":22},"Handle token retrieval while querying an API","/posts/delegating-handler",{"title":24,"_path":25},"Clean up your local git branches.","/posts/cleaning-git-branches",{"title":27,"_path":28},"Automate configuration of Teams Tab SSO with PowerShell.","/posts/teams-sso-powershell",{"title":30,"_path":31},"How to do a technology watch? - Part 1","/posts/technology-watch-part1",{"title":33,"_path":34},"How to do a technology watch? - Part 2","/posts/technology-watch-part2",{"title":36,"_path":37},"You almost no longer need Key Vault references for Azure Functions.","/posts/azure-functions-custom-configuration",{"title":39,"_path":40},"How to do a technology watch? - Part 3","/posts/technology-watch-part3",{"title":42,"_path":43},"Forget DevOps, the future is already here!","/posts/devops-future",{"title":45,"_path":46},"Week 9, 2021 - Tips I learned this week","/posts/w09-2021-tips-learned-this-week",{"title":48,"_path":49},"Week 12, 2021 - Tips I learned this week","/posts/w12-2021-tips-learned-this-week",{"title":51,"_path":52},"Week 14, 2021 - Tips I learned this week","/posts/w14-2021-tips-learned-this-week",{"title":54,"_path":55},"Once upon a time in .NET","/posts/once-upon-a-time-in-dotnet",{"title":57,"_path":58},"Install your applications with winget","/posts/winget-import",{"title":60,"_path":61},"Customize your applications when installing them with winget","/posts/winget-override",{"title":63,"_path":64},"Week 22, 2021 - Tips I learned this week","/posts/w22-2021-tips-learned-this-week",{"title":66,"_path":67},"How to connect to an Azure SQL Database from C# using Azure AD","/posts/sqlclient-active-directory-authent",{"title":69,"_path":70},"Producing packages for Windows Package Manager","/posts/wingetcreate",{"title":72,"_path":73},"4 tips about GitHub Actions environment variables and contexts","/posts/github-actions-var-and-context",{"title":75,"_path":76},"AzureWebJobsStorage, the secret you don't need in your Function App.","/posts/azure-functions-without-azurewebjobsstorage",{"title":78,"_path":79},"ASP.NET Core - Lost in configuration","/posts/lost-in-configuration",{"title":81,"_path":82},"Week 39, 2021 - Tips I learned this week","/posts/w39-2021-tips-learned-this-week",{"title":84,"_path":85},"Week 41, 2021 - Tips I learned this week","/posts/w41-2021-tips-learned-this-week",{"title":87,"_path":88},"Migrating and open-sourcing my blog","/posts/migrating-blog",{"title":90,"_path":91},"Week 45, 2021 - Tips I learned this week","/posts/w45-2021-tips-learned-this-week",{"title":93,"_path":94},"Organize your GitHub stars with Astral","/posts/astral",{"title":96,"_path":97},"Pulumi with an Azure Blob Storage backend","/posts/pulumi-azure-backend",{"title":99,"_path":100},"IaC Hot Reload with Pulumi Watch","/posts/pulumi-watch",{"title":102,"_path":103},"Week 2, 2022 - Tips I learned this week","/posts/w02-2022-tips-learned-this-week",{"title":105,"_path":106},"Week 3, 2022 - Tips I learned this week","/posts/w03-2022-tips-learned-this-week",{"title":108,"_path":109},"Week 5, 2022 - Tips I learned this week","/posts/w05-2022-tips-learned-this-week",{"title":111,"_path":112},"How to provision an Azure SQL Database with Active Directory authentication","/posts/sqldatabase-active-directory-authent",{"title":114,"_path":115},"Why will I choose Pulumi over Terraform for my next project?","/posts/pulumi-vs-terraform",{"title":117,"_path":118},"Week 19, 2022 - Tips I learned this week","/posts/w19-2022-tips-learned-this-week",{"title":120,"_path":121},"Week 20, 2022 - Tips I learned this week","/posts/w20-2022-tips-learned-this-week",{"title":123,"_path":124},"Keeping secrets secure when using API Clients","/posts/http-clients-secrets",{"title":126,"_path":127},"What made me want to be a developer?","/posts/be-a-developer",{"title":129,"_path":130},"What can we do when stuck with a programming problem?","/posts/get-unstuck",{"title":132,"_path":133},"How did I automate the setup of my developer Windows laptop?","/posts/automate-developer-machine",{"title":135,"_path":136},"Discussion about API clients","/posts/http-clients",{"title":138,"_path":139},"Week 46, 2022 - Tips I learned this week","/posts/w46-2022-tips-learned-this-week",{"title":141,"_path":142},"When Pulumi met Nuke: a .NET love story","/posts/when-pulumi-met-nuke",{"title":144,"_path":145},"A year of learning and sharing - Dev Retro 2022","/posts/2022-retro",{"title":147,"_path":148},"Perform Dynamic Execution of an npm Package","/posts/pnpm-dlx",{"title":150,"_path":151},"Manage multiple Node.js versions","/posts/pnpm-env",{"title":153,"_path":154},"Introducing the Vue.js CI/CD series","/posts/vuecicd-introduction",{"title":156,"_path":157},"Execute commands using your project dependencies","/posts/pnpm-exec",{"title":159,"_path":160},"Vue.js CI/CD: Continuous Integration","/posts/vuecicd-ci",{"title":162,"_path":163},"Who is using pnpm?","/posts/pnpm-who-is-using",{"title":165,"_path":166},"Create an Azure-Ready GitHub Repository using Pulumi","/posts/azure-ready-github-repository",{"title":168,"_path":169},"Deploying to Azure from Azure DevOps without secrets","/posts/ado-workload-identity-federation",{"title":171,"_path":172},"Effortlessly Configure GitHub Repositories for Azure Deployment via OIDC","/posts/scripting-azure-ready-github-repository",{"title":174,"_path":175},"Playing with the .NET 8 Web API template","/posts/playing-with-dotnet8",{"title":177,"_path":178},"Another year of sharing and learning - Dev Retro 2023","/posts/2023-retro",{"title":180,"_path":181},"Week 4, 2024 - Tips I learned this week","/posts/w04-2024-tips-learned-this-week",{"title":183,"_path":184},"Using dependency injection with Azure .NET SDK","/posts/azure-sdk-di",{"title":186,"_path":187},"Having Fun With IT Event Calendars","/posts/it-event-calendars",{"title":189,"_path":190},"Call your Azure AD B2C protected API with authenticated HTTP requests from your JetBrains IDE","/posts/http-clients-oauth2","i-heroicons-newspaper",{"title":193,"_path":194,"children":195,"icon":199},"Goodies","/goodies",[196],{"title":197,"_path":198},"My Git Cheat Sheet","/goodies/gitcheatsheet","i-heroicons-gift-solid",{"title":201,"_path":202,"icon":203},"About","/about","i-heroicons-user-circle-solid",[205,207,209,211,214,217,220,223,226,229,231,234,237,240,242,244,247,250,253,255,258,261,264,267,270,273,276,279,282,285,287,289,292,294,297,300,303,305,308,310,313,316,319,322,325,327,329,332,335,338,341,344,347,350,353,356,359,361,363,366,369,372,375,377,380,383,385,388,391,394],[206,206],"tooling",[208,208],"vscode",[210,210],"rest",[212,213],"http","HTTP",[215,216],"razor","Razor",[218,219],"xamarin","Xamarin",[221,222],"templating","Templating",[224,225],"azure-cli","Azure CLI",[227,228],"azure","Azure",[230,230],"shell",[232,233],"github","GitHub",[235,236],"asp-net-core","ASP.NET Core",[238,239],"net",".NET",[241,241],"git",[243,243],"nushell",[245,246],"microsoft-teams","Microsoft Teams",[248,249],"powershell","PowerShell",[251,252],"azure-active-directory","Azure Active Directory",[254,254],"learning",[256,257],"azure-functions","Azure Functions",[259,260],"azure-key-vault","Azure Key Vault",[262,263],"configuration","Configuration",[265,266],"devops","DevOps",[268,269],"it","IT",[271,272],"tips-learned-this-week","tips learned this week",[274,275],"windows-terminal","Windows Terminal",[277,278],"azure-pipelines","Azure Pipelines",[280,281],"application-insights","Application Insights",[283,284],"azure-iot","Azure IoT",[286,286],"records",[288,288],"refit",[290,291],"development-box-setup","development box setup",[293,293],"winget",[295,296],"package-manager","package manager",[298,299],"azure-sql-database","Azure SQL Database",[301,302],"azure-sdk","Azure SDK",[304,304],"wingetcreate",[306,307],"github-actions","GitHub Actions",[309,309],"jq",[311,312],"pulumi","Pulumi",[314,315],"iac","IaC",[317,318],"azure-storage","Azure Storage",[320,321],"azure-signalr","Azure SignalR",[323,324],"visio","Visio",[326,326],"csharp",[328,328],"jest",[330,331],"statiq","Statiq",[333,334],"open-source","open source",[336,337],"visual-studio","Visual Studio",[339,340],"vue-js","Vue.js",[342,343],"azure-devops","Azure DevOps",[345,346],"vite","Vite",[348,349],"code-analysis","Code analysis",[351,352],"diagram","Diagram",[354,355],"terraform","Terraform",[357,358],"typescript","TypeScript",[360,360],"thoughts",[362,362],"pnpm",[364,365],"nuke","Nuke",[367,368],"pipelines","Pipelines",[370,371],"cicd","CI/CD",[373,374],"openid-connect","OpenID Connect",[376,376],"security",[378,379],"github-cli","GitHub CLI",[381,382],"microsoft-entra-id","Microsoft Entra ID",[384,384],"advent",[386,387],"finops","FinOps",[389,390],"anglesharp","AngleSharp",[392,393],"oauth2","OAuth2",[395,396],"azure-ad-b2c","Azure AD B2C",[398,1980,2209],{"_path":133,"_dir":399,"_draft":400,"_partial":400,"_locale":401,"title":132,"description":402,"lead":403,"date":404,"badge":405,"image":407,"tags":409,"body":410,"_type":1975,"_id":1976,"_source":1977,"_file":1978,"_extension":1979},"posts",false,"","In this article, I talked about my latest project: how I built a script to automate the setup of my developer machine using Boxstarter, Chocolatey, Winget, and PowerShell... and how I learned a few things along the way.","A git repository, 2 packages managers, a little bit of scripting, and here is my new environment ready","2022-09-02T00:00:00.000Z",{"label":406},"Tooling",{"src":408},"/images/laptop_2.jpg",[291,249,293,296,206],{"type":411,"children":412,"toc":1962},"root",[413,420,427,432,437,449,454,479,485,490,515,547,568,598,607,617,637,642,772,784,790,797,819,824,841,847,852,861,866,871,955,963,968,982,996,1002,1024,1062,1067,1337,1360,1365,1413,1421,1427,1432,1623,1643,1649,1654,1663,1668,1718,1730,1807,1812,1817,1823,1828,1850,1864,1869,1896,1910,1916,1928,1933,1938,1951,1956],{"type":414,"tag":415,"props":416,"children":417},"element","p",{},[418],{"type":419,"value":402},"text",{"type":414,"tag":421,"props":422,"children":424},"h2",{"id":423},"context",[425],{"type":419,"value":426},"Context",{"type":414,"tag":415,"props":428,"children":429},{},[430],{"type":419,"value":431},"You have probably already faced this situation when you get a new personal or professional laptop, and you have to reinstall all the software you are using daily on this machine. Usually, you lose a few hours to a day to set up your developer environment and not everything is exactly as it was on your previous laptop because you always forget some things.",{"type":414,"tag":415,"props":433,"children":434},{},[435],{"type":419,"value":436},"It's not even only about installing software but also configuring your environment to meet your habits. And that's important because a properly configured developer environment with the right tools is what makes you productive in your everyday developer life.",{"type":414,"tag":415,"props":438,"children":439},{},[440],{"type":414,"tag":441,"props":442,"children":448},"img",{"alt":443,"className":444,"src":447},"A collection of office supplies laid out on a table.",[445,446],"rounded-lg","mx-auto","/posts/images/automate_developer_machine_tool.jpg",[],{"type":414,"tag":415,"props":450,"children":451},{},[452],{"type":419,"value":453},"A lot of people have solved this issue by scripting their developer environment setup, and I decided it was time for me to do the same. And believe me, it was not for the beauty of having everything automatically installed but to stop wasting my time each time I change or reinstall my laptop.",{"type":414,"tag":415,"props":455,"children":456},{},[457,459,468,470,477],{"type":419,"value":458},"Please note that what I did to setup my developer machine was inspired by the ",{"type":414,"tag":460,"props":461,"children":465},"a",{"href":462,"rel":463},"https://github.com/Microsoft/windows-dev-box-setup-scripts",[464],"nofollow",[466],{"type":419,"value":467},"Windows Dev Box setup scripts",{"type":419,"value":469}," GitHub repository and other repositories using boxstarter (check ",{"type":414,"tag":460,"props":471,"children":474},{"href":472,"rel":473},"https://github.com/laurentkempe/Cacao",[464],[475],{"type":419,"value":476},"Laurent Kempé's repository",{"type":419,"value":478}," for instance) to install their Windows environment.",{"type":414,"tag":421,"props":480,"children":482},{"id":481},"how-does-it-work",[483],{"type":419,"value":484},"How does it work?",{"type":414,"tag":415,"props":486,"children":487},{},[488],{"type":419,"value":489},"There are many ways to automate the setup of a developer machine. Before choosing one, I had a few requirements/preferences:",{"type":414,"tag":491,"props":492,"children":493},"ul",{},[494,500,505,510],{"type":414,"tag":495,"props":496,"children":497},"li",{},[498],{"type":419,"value":499},"installation of my machine should be simple to script and run",{"type":414,"tag":495,"props":501,"children":502},{},[503],{"type":419,"value":504},"no need to pre-install some software before launching the installation of my environment",{"type":414,"tag":495,"props":506,"children":507},{},[508],{"type":419,"value":509},"avoid manual steps or user interaction during the installation",{"type":414,"tag":495,"props":511,"children":512},{},[513],{"type":419,"value":514},"be able easily to share some software configurations between laptops",{"type":414,"tag":415,"props":516,"children":517},{},[518,520,527,529,536,538,545],{"type":419,"value":519},"Because of these requirements, I chose to use ",{"type":414,"tag":460,"props":521,"children":524},{"href":522,"rel":523},"https://boxstarter.org/",[464],[525],{"type":419,"value":526},"Boxstarter",{"type":419,"value":528},". It has several interesting features (check the ",{"type":414,"tag":460,"props":530,"children":533},{"href":531,"rel":532},"https://boxstarter.org/whyboxstarter",[464],[534],{"type":419,"value":535},"website",{"type":419,"value":537},") but the one I like the most is you can launch your installation process directly by ",{"type":414,"tag":460,"props":539,"children":542},{"href":540,"rel":541},"https://boxstarter.org/weblauncher",[464],[543],{"type":419,"value":544},"clicking on a link",{"type":419,"value":546},". You just need an URL like this one:",{"type":414,"tag":548,"props":549,"children":552},"pre",{"className":550,"code":551,"language":212,"meta":401,"style":401},"language-http shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","https://boxstarter.org/package/nr/url?{urlToYourInstallationScript}\n",[553],{"type":414,"tag":554,"props":555,"children":556},"code",{"__ignoreMap":401},[557],{"type":414,"tag":558,"props":559,"children":562},"span",{"class":560,"line":561},"line",1,[563],{"type":414,"tag":558,"props":564,"children":566},{"style":565},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[567],{"type":419,"value":551},{"type":414,"tag":415,"props":569,"children":570},{},[571,573,579,581,588,590,596],{"type":419,"value":572},"The ",{"type":414,"tag":554,"props":574,"children":576},{"className":575},[],[577],{"type":419,"value":578},"{urlToYourInstallationScript}",{"type":419,"value":580}," part is the URL where is stored your installation script. I put mine in a ",{"type":414,"tag":460,"props":582,"children":585},{"href":583,"rel":584},"https://github.com/TechWatching/dotfiles/blob/main/boxstarter.ps1",[464],[586],{"type":419,"value":587},"public GitHub repository",{"type":419,"value":589}," called ",{"type":414,"tag":554,"props":591,"children":593},{"className":592},[],[594],{"type":419,"value":595},"dotfiles",{"type":419,"value":597},".",{"type":414,"tag":415,"props":599,"children":600},{},[601],{"type":414,"tag":441,"props":602,"children":606},{"alt":603,"className":604,"src":605},"Boxstarter website.",[445,446],"/posts/images/automate_developer_machine_boxstarter.png",[],{"type":414,"tag":608,"props":609,"children":611},"callout",{"icon":610},"i-heroicons-chat-bubble-left-20-solid",[612],{"type":414,"tag":415,"props":613,"children":614},{},[615],{"type":419,"value":616},"Boxstarter was a nice discovery, I barely scratched the surface but it can do interesting things like remote installations.",{"type":414,"tag":415,"props":618,"children":619},{},[620,622,628,630,635],{"type":419,"value":621},"In this repository, I also put different scripts (to separate the different steps instead of having one big installation script file), some config files I wanted to use in my setup (my ",{"type":414,"tag":554,"props":623,"children":625},{"className":624},[],[626],{"type":419,"value":627},".gitconfig",{"type":419,"value":629}," file for instance), and a readme with some explanations and the link to launch the installation. I did not reinvent the wheel as it's more or less how the ",{"type":414,"tag":460,"props":631,"children":633},{"href":462,"rel":632},[464],[634],{"type":419,"value":467},{"type":419,"value":636}," work.",{"type":414,"tag":415,"props":638,"children":639},{},[640],{"type":419,"value":641},"Because I wanted to share some software configurations between laptops (or between installations), using a GitHub repository is interesting. The first thing my setup script does is to install Git, then it clones this repository to have access to the other scripts and configuration files.",{"type":414,"tag":548,"props":643,"children":646},{"className":644,"code":645,"language":248,"meta":401,"style":401},"language-powershell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Install git and clone repository containing scripts and config files\nchoco install -y git --params \"/GitOnlyOnPath /NoShellIntegration /WindowsTerminal\"\nRefreshEnv\ngit clone https://github.com/TechWatching/dotfiles.git \"$env:USERPROFILE\\dotfiles\"\n",[647],{"type":414,"tag":554,"props":648,"children":649},{"__ignoreMap":401},[650,659,705,714],{"type":414,"tag":558,"props":651,"children":652},{"class":560,"line":561},[653],{"type":414,"tag":558,"props":654,"children":656},{"style":655},"--shiki-light:#90A4AE;--shiki-default:#546E7A;--shiki-dark:#676E95;--shiki-light-font-style:italic;--shiki-default-font-style:italic;--shiki-dark-font-style:italic",[657],{"type":419,"value":658},"# Install git and clone repository containing scripts and config files\n",{"type":414,"tag":558,"props":660,"children":662},{"class":560,"line":661},2,[663,668,674,679,684,689,694,700],{"type":414,"tag":558,"props":664,"children":665},{"style":565},[666],{"type":419,"value":667},"choco install ",{"type":414,"tag":558,"props":669,"children":671},{"style":670},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[672],{"type":419,"value":673},"-",{"type":414,"tag":558,"props":675,"children":676},{"style":565},[677],{"type":419,"value":678},"y git ",{"type":414,"tag":558,"props":680,"children":681},{"style":670},[682],{"type":419,"value":683},"--",{"type":414,"tag":558,"props":685,"children":686},{"style":565},[687],{"type":419,"value":688},"params ",{"type":414,"tag":558,"props":690,"children":691},{"style":670},[692],{"type":419,"value":693},"\"",{"type":414,"tag":558,"props":695,"children":697},{"style":696},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[698],{"type":419,"value":699},"/GitOnlyOnPath /NoShellIntegration /WindowsTerminal",{"type":414,"tag":558,"props":701,"children":702},{"style":670},[703],{"type":419,"value":704},"\"\n",{"type":414,"tag":558,"props":706,"children":708},{"class":560,"line":707},3,[709],{"type":414,"tag":558,"props":710,"children":711},{"style":565},[712],{"type":419,"value":713},"RefreshEnv\n",{"type":414,"tag":558,"props":715,"children":717},{"class":560,"line":716},4,[718,723,728,734,739,744,748,753,758,763,768],{"type":414,"tag":558,"props":719,"children":720},{"style":565},[721],{"type":419,"value":722},"git clone https:",{"type":414,"tag":558,"props":724,"children":725},{"style":670},[726],{"type":419,"value":727},"//",{"type":414,"tag":558,"props":729,"children":731},{"style":730},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[732],{"type":419,"value":733},"github.com",{"type":414,"tag":558,"props":735,"children":736},{"style":670},[737],{"type":419,"value":738},"/",{"type":414,"tag":558,"props":740,"children":741},{"style":565},[742],{"type":419,"value":743},"TechWatching",{"type":414,"tag":558,"props":745,"children":746},{"style":670},[747],{"type":419,"value":738},{"type":414,"tag":558,"props":749,"children":750},{"style":565},[751],{"type":419,"value":752},"dotfiles.git ",{"type":414,"tag":558,"props":754,"children":755},{"style":670},[756],{"type":419,"value":757},"\"$",{"type":414,"tag":558,"props":759,"children":760},{"style":565},[761],{"type":419,"value":762},"env:USERPROFILE",{"type":414,"tag":558,"props":764,"children":765},{"style":696},[766],{"type":419,"value":767},"\\dotfiles",{"type":414,"tag":558,"props":769,"children":770},{"style":670},[771],{"type":419,"value":704},{"type":414,"tag":415,"props":773,"children":774},{},[775,777,783],{"type":419,"value":776},"The scripts are written in ",{"type":414,"tag":460,"props":778,"children":781},{"href":779,"rel":780},"https://docs.microsoft.com/en-us/powershell/",[464],[782],{"type":419,"value":249},{"type":419,"value":597},{"type":414,"tag":421,"props":785,"children":787},{"id":786},"installing-software",[788],{"type":419,"value":789},"Installing software",{"type":414,"tag":791,"props":792,"children":794},"h3",{"id":793},"package-managers",[795],{"type":419,"value":796},"Package managers",{"type":414,"tag":415,"props":798,"children":799},{},[800,802,809,811,818],{"type":419,"value":801},"The easiest way to automate installing, upgrading, and configuring software is to use package managers. There are several available on Windows but I chose to use ",{"type":414,"tag":460,"props":803,"children":806},{"href":804,"rel":805},"https://docs.microsoft.com/en-us/windows/package-manager/",[464],[807],{"type":419,"value":808},"Windows Package Manager",{"type":419,"value":810}," and ",{"type":414,"tag":460,"props":812,"children":815},{"href":813,"rel":814},"https://chocolatey.org/",[464],[816],{"type":419,"value":817},"Chocolatey",{"type":419,"value":597},{"type":414,"tag":415,"props":820,"children":821},{},[822],{"type":419,"value":823},"Windows Package Manager (aka winget) is relatively new so has fewer features and packages available than other package managers like Chocolatey. However it's very promising, it's getting better every day, it's built-in Windows, and above all, it supports installing Microsoft Store apps. So I chose to use winget by default and fallback to Chocolatey when a package I needed was not available or not up-to-date in winget.",{"type":414,"tag":608,"props":825,"children":826},{"icon":610},[827],{"type":414,"tag":415,"props":828,"children":829},{},[830,832,839],{"type":419,"value":831},"I learned a few things about winget while starting to use it. You can find my articles talking about it ",{"type":414,"tag":460,"props":833,"children":836},{"href":834,"rel":835},"https://www.techwatching.dev/tags/winget/",[464],[837],{"type":419,"value":838},"here",{"type":419,"value":840}," if you are interested.",{"type":414,"tag":791,"props":842,"children":844},{"id":843},"installing-integrated-development-environments-ides",[845],{"type":419,"value":846},"Installing Integrated Development Environments (IDEs)",{"type":414,"tag":415,"props":848,"children":849},{},[850],{"type":419,"value":851},"Visual Studio has been my main IDE for a while, but I have been started recently to use more and more Rider as well. Both are nice IDEs with many features particularly well suited for .NET development which is what I mostly do. I have been a Visual Studio Code long-time user too, mostly using it as a text editor or for front development. I also use vscode to work with Azure because it has nice extensions for a lot of Azure services.",{"type":414,"tag":415,"props":853,"children":854},{},[855],{"type":414,"tag":441,"props":856,"children":860},{"alt":857,"className":858,"src":859},"Visual Studio logo.",[445,446],"/posts/images/automate_developer_machine_visualstudio.jpg",[],{"type":414,"tag":415,"props":862,"children":863},{},[864],{"type":419,"value":865},"You probably want to customize your Visual Studio installation to only include the workloads, components, and language packs you are using. You can specify them as parameters in the winget or chocolatey install command but that's a bit cumbersome. The easiest way is to export your configuration from the Visual Studio installer.",{"type":414,"tag":415,"props":867,"children":868},{},[869],{"type":419,"value":870},"You can then install Visual Studio with this kind of command:",{"type":414,"tag":548,"props":872,"children":874},{"className":644,"code":873,"language":248,"meta":401,"style":401},"winget install -e -h --id Microsoft.VisualStudio.2022.Enterprise --silent --override \"--wait --quiet --addProductLang En-us --config .vsconfig\"\n",[875],{"type":414,"tag":554,"props":876,"children":877},{"__ignoreMap":401},[878],{"type":414,"tag":558,"props":879,"children":880},{"class":560,"line":561},[881,886,890,895,899,904,908,913,919,924,928,933,937,942,946,951],{"type":414,"tag":558,"props":882,"children":883},{"style":565},[884],{"type":419,"value":885},"winget install ",{"type":414,"tag":558,"props":887,"children":888},{"style":670},[889],{"type":419,"value":673},{"type":414,"tag":558,"props":891,"children":892},{"style":565},[893],{"type":419,"value":894},"e ",{"type":414,"tag":558,"props":896,"children":897},{"style":670},[898],{"type":419,"value":673},{"type":414,"tag":558,"props":900,"children":901},{"style":565},[902],{"type":419,"value":903},"h ",{"type":414,"tag":558,"props":905,"children":906},{"style":670},[907],{"type":419,"value":683},{"type":414,"tag":558,"props":909,"children":910},{"style":565},[911],{"type":419,"value":912},"id Microsoft.VisualStudio.",{"type":414,"tag":558,"props":914,"children":916},{"style":915},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[917],{"type":419,"value":918},"2022.",{"type":414,"tag":558,"props":920,"children":921},{"style":565},[922],{"type":419,"value":923},"Enterprise ",{"type":414,"tag":558,"props":925,"children":926},{"style":670},[927],{"type":419,"value":683},{"type":414,"tag":558,"props":929,"children":930},{"style":565},[931],{"type":419,"value":932},"silent ",{"type":414,"tag":558,"props":934,"children":935},{"style":670},[936],{"type":419,"value":683},{"type":414,"tag":558,"props":938,"children":939},{"style":565},[940],{"type":419,"value":941},"override ",{"type":414,"tag":558,"props":943,"children":944},{"style":670},[945],{"type":419,"value":693},{"type":414,"tag":558,"props":947,"children":948},{"style":696},[949],{"type":419,"value":950},"--wait --quiet --addProductLang En-us --config .vsconfig",{"type":414,"tag":558,"props":952,"children":953},{"style":670},[954],{"type":419,"value":704},{"type":414,"tag":608,"props":956,"children":957},{"icon":610},[958],{"type":414,"tag":415,"props":959,"children":960},{},[961],{"type":419,"value":962},"I did not know before trying to automate Visual Studio installation that you could specify parameters to its installer on the command line but that's very useful.",{"type":414,"tag":415,"props":964,"children":965},{},[966],{"type":419,"value":967},"I don't export Visual Studio settings or extensions as most of them can be synchronized through the personalization account (you just have to sign in to Visual Studio with the same account).",{"type":414,"tag":415,"props":969,"children":970},{},[971,973,980],{"type":419,"value":972},"In a similar way, I use ",{"type":414,"tag":460,"props":974,"children":977},{"href":975,"rel":976},"https://code.visualstudio.com/docs/editor/settings-sync",[464],[978],{"type":419,"value":979},"vscode built-in settings synchronization",{"type":419,"value":981}," to share my setup (extensions, settings, keybindings) across machines so I don't have to do a custom installation.",{"type":414,"tag":415,"props":983,"children":984},{},[985,987,994],{"type":419,"value":986},"There is a Rider package available on chocolatey but it is not always up-to-date and I prefer to use the JetBrains ToolBox application to manage the installation and update of my JetBrains tools. Unfortunately, JetBrains ToolBox does not currently have a CLI to automate the installation of Rider and other useful .NET tools (there is an ",{"type":414,"tag":460,"props":988,"children":991},{"href":989,"rel":990},"https://youtrack.jetbrains.com/issue/TBX-653/toolbox-cli",[464],[992],{"type":419,"value":993},"issue",{"type":419,"value":995}," opened though if you want to vote) so I only automated the installation of JetBrains ToolBox and will have to install it Rider manually from it.",{"type":414,"tag":791,"props":997,"children":999},{"id":998},"tools-i-need",[1000],{"type":419,"value":1001},"Tools I need",{"type":414,"tag":415,"props":1003,"children":1004},{},[1005,1007,1014,1016,1022],{"type":419,"value":1006},"Of course, git is a must-have. I use ",{"type":414,"tag":460,"props":1008,"children":1011},{"href":1009,"rel":1010},"https://github.com/coreybutler/nvm-windows",[464],[1012],{"type":419,"value":1013},"NVM for windows",{"type":419,"value":1015}," to manage multiple installations of node.js on my laptop, and ",{"type":414,"tag":460,"props":1017,"children":1020},{"href":1018,"rel":1019},"https://pnpm.io/",[464],[1021],{"type":419,"value":362},{"type":419,"value":1023}," is my preferred package manager for Node.js.",{"type":414,"tag":415,"props":1025,"children":1026},{},[1027,1029,1035,1036,1043,1045,1052,1054,1060],{"type":419,"value":1028},"There are 2 shells I like to use (both of them are cross-platform): ",{"type":414,"tag":460,"props":1030,"children":1033},{"href":1031,"rel":1032},"https://docs.microsoft.com/en-us/powershell/scripting/overview",[464],[1034],{"type":419,"value":249},{"type":419,"value":810},{"type":414,"tag":460,"props":1037,"children":1040},{"href":1038,"rel":1039},"https://www.nushell.sh/",[464],[1041],{"type":419,"value":1042},"Nushell",{"type":419,"value":1044},". I use ",{"type":414,"tag":460,"props":1046,"children":1049},{"href":1047,"rel":1048},"https://ohmyposh.dev/",[464],[1050],{"type":419,"value":1051},"Oh My Posh",{"type":419,"value":1053}," to configure an enhanced prompt for both shells. ",{"type":414,"tag":460,"props":1055,"children":1058},{"href":1056,"rel":1057},"https://docs.microsoft.com/en-us/windows/terminal/",[464],[1059],{"type":419,"value":275},{"type":419,"value":1061}," is my go-to terminal.",{"type":414,"tag":415,"props":1063,"children":1064},{},[1065],{"type":419,"value":1066},"As I work mainly on cloud projects, there are some Azure tools I need on my laptop:",{"type":414,"tag":548,"props":1068,"children":1070},{"className":644,"code":1069,"language":248,"meta":401,"style":401},"winget install -e -h --id Microsoft.AzureCLI\nwinget install -e -h --id Microsoft.AzureCosmosEmulator\nwinget install -e -h --id Microsoft.AzureDataStudio\nwinget install -e -h --id Microsoft.azure-iot-explorer\nwinget install -e -h --id Microsoft.AzureStorageExplorer\nwinget install -e -h --id Pulumi.Pulumi\nwinget install -e -h --id Microsoft.AzureFunctionsCoreTools\n# Azurite can be installed through vscode extension or as a global npm package\n# pnpm add -g azurite\n",[1071],{"type":414,"tag":554,"props":1072,"children":1073},{"__ignoreMap":401},[1074,1106,1138,1170,1220,1253,1286,1319,1328],{"type":414,"tag":558,"props":1075,"children":1076},{"class":560,"line":561},[1077,1081,1085,1089,1093,1097,1101],{"type":414,"tag":558,"props":1078,"children":1079},{"style":565},[1080],{"type":419,"value":885},{"type":414,"tag":558,"props":1082,"children":1083},{"style":670},[1084],{"type":419,"value":673},{"type":414,"tag":558,"props":1086,"children":1087},{"style":565},[1088],{"type":419,"value":894},{"type":414,"tag":558,"props":1090,"children":1091},{"style":670},[1092],{"type":419,"value":673},{"type":414,"tag":558,"props":1094,"children":1095},{"style":565},[1096],{"type":419,"value":903},{"type":414,"tag":558,"props":1098,"children":1099},{"style":670},[1100],{"type":419,"value":683},{"type":414,"tag":558,"props":1102,"children":1103},{"style":565},[1104],{"type":419,"value":1105},"id Microsoft.AzureCLI\n",{"type":414,"tag":558,"props":1107,"children":1108},{"class":560,"line":661},[1109,1113,1117,1121,1125,1129,1133],{"type":414,"tag":558,"props":1110,"children":1111},{"style":565},[1112],{"type":419,"value":885},{"type":414,"tag":558,"props":1114,"children":1115},{"style":670},[1116],{"type":419,"value":673},{"type":414,"tag":558,"props":1118,"children":1119},{"style":565},[1120],{"type":419,"value":894},{"type":414,"tag":558,"props":1122,"children":1123},{"style":670},[1124],{"type":419,"value":673},{"type":414,"tag":558,"props":1126,"children":1127},{"style":565},[1128],{"type":419,"value":903},{"type":414,"tag":558,"props":1130,"children":1131},{"style":670},[1132],{"type":419,"value":683},{"type":414,"tag":558,"props":1134,"children":1135},{"style":565},[1136],{"type":419,"value":1137},"id Microsoft.AzureCosmosEmulator\n",{"type":414,"tag":558,"props":1139,"children":1140},{"class":560,"line":707},[1141,1145,1149,1153,1157,1161,1165],{"type":414,"tag":558,"props":1142,"children":1143},{"style":565},[1144],{"type":419,"value":885},{"type":414,"tag":558,"props":1146,"children":1147},{"style":670},[1148],{"type":419,"value":673},{"type":414,"tag":558,"props":1150,"children":1151},{"style":565},[1152],{"type":419,"value":894},{"type":414,"tag":558,"props":1154,"children":1155},{"style":670},[1156],{"type":419,"value":673},{"type":414,"tag":558,"props":1158,"children":1159},{"style":565},[1160],{"type":419,"value":903},{"type":414,"tag":558,"props":1162,"children":1163},{"style":670},[1164],{"type":419,"value":683},{"type":414,"tag":558,"props":1166,"children":1167},{"style":565},[1168],{"type":419,"value":1169},"id Microsoft.AzureDataStudio\n",{"type":414,"tag":558,"props":1171,"children":1172},{"class":560,"line":716},[1173,1177,1181,1185,1189,1193,1197,1202,1206,1211,1215],{"type":414,"tag":558,"props":1174,"children":1175},{"style":565},[1176],{"type":419,"value":885},{"type":414,"tag":558,"props":1178,"children":1179},{"style":670},[1180],{"type":419,"value":673},{"type":414,"tag":558,"props":1182,"children":1183},{"style":565},[1184],{"type":419,"value":894},{"type":414,"tag":558,"props":1186,"children":1187},{"style":670},[1188],{"type":419,"value":673},{"type":414,"tag":558,"props":1190,"children":1191},{"style":565},[1192],{"type":419,"value":903},{"type":414,"tag":558,"props":1194,"children":1195},{"style":670},[1196],{"type":419,"value":683},{"type":414,"tag":558,"props":1198,"children":1199},{"style":565},[1200],{"type":419,"value":1201},"id Microsoft.azure",{"type":414,"tag":558,"props":1203,"children":1204},{"style":670},[1205],{"type":419,"value":673},{"type":414,"tag":558,"props":1207,"children":1208},{"style":565},[1209],{"type":419,"value":1210},"iot",{"type":414,"tag":558,"props":1212,"children":1213},{"style":670},[1214],{"type":419,"value":673},{"type":414,"tag":558,"props":1216,"children":1217},{"style":565},[1218],{"type":419,"value":1219},"explorer\n",{"type":414,"tag":558,"props":1221,"children":1223},{"class":560,"line":1222},5,[1224,1228,1232,1236,1240,1244,1248],{"type":414,"tag":558,"props":1225,"children":1226},{"style":565},[1227],{"type":419,"value":885},{"type":414,"tag":558,"props":1229,"children":1230},{"style":670},[1231],{"type":419,"value":673},{"type":414,"tag":558,"props":1233,"children":1234},{"style":565},[1235],{"type":419,"value":894},{"type":414,"tag":558,"props":1237,"children":1238},{"style":670},[1239],{"type":419,"value":673},{"type":414,"tag":558,"props":1241,"children":1242},{"style":565},[1243],{"type":419,"value":903},{"type":414,"tag":558,"props":1245,"children":1246},{"style":670},[1247],{"type":419,"value":683},{"type":414,"tag":558,"props":1249,"children":1250},{"style":565},[1251],{"type":419,"value":1252},"id Microsoft.AzureStorageExplorer\n",{"type":414,"tag":558,"props":1254,"children":1256},{"class":560,"line":1255},6,[1257,1261,1265,1269,1273,1277,1281],{"type":414,"tag":558,"props":1258,"children":1259},{"style":565},[1260],{"type":419,"value":885},{"type":414,"tag":558,"props":1262,"children":1263},{"style":670},[1264],{"type":419,"value":673},{"type":414,"tag":558,"props":1266,"children":1267},{"style":565},[1268],{"type":419,"value":894},{"type":414,"tag":558,"props":1270,"children":1271},{"style":670},[1272],{"type":419,"value":673},{"type":414,"tag":558,"props":1274,"children":1275},{"style":565},[1276],{"type":419,"value":903},{"type":414,"tag":558,"props":1278,"children":1279},{"style":670},[1280],{"type":419,"value":683},{"type":414,"tag":558,"props":1282,"children":1283},{"style":565},[1284],{"type":419,"value":1285},"id Pulumi.Pulumi\n",{"type":414,"tag":558,"props":1287,"children":1289},{"class":560,"line":1288},7,[1290,1294,1298,1302,1306,1310,1314],{"type":414,"tag":558,"props":1291,"children":1292},{"style":565},[1293],{"type":419,"value":885},{"type":414,"tag":558,"props":1295,"children":1296},{"style":670},[1297],{"type":419,"value":673},{"type":414,"tag":558,"props":1299,"children":1300},{"style":565},[1301],{"type":419,"value":894},{"type":414,"tag":558,"props":1303,"children":1304},{"style":670},[1305],{"type":419,"value":673},{"type":414,"tag":558,"props":1307,"children":1308},{"style":565},[1309],{"type":419,"value":903},{"type":414,"tag":558,"props":1311,"children":1312},{"style":670},[1313],{"type":419,"value":683},{"type":414,"tag":558,"props":1315,"children":1316},{"style":565},[1317],{"type":419,"value":1318},"id Microsoft.AzureFunctionsCoreTools\n",{"type":414,"tag":558,"props":1320,"children":1322},{"class":560,"line":1321},8,[1323],{"type":414,"tag":558,"props":1324,"children":1325},{"style":655},[1326],{"type":419,"value":1327},"# Azurite can be installed through vscode extension or as a global npm package\n",{"type":414,"tag":558,"props":1329,"children":1331},{"class":560,"line":1330},9,[1332],{"type":414,"tag":558,"props":1333,"children":1334},{"style":655},[1335],{"type":419,"value":1336},"# pnpm add -g azurite\n",{"type":414,"tag":415,"props":1338,"children":1339},{},[1340,1342,1349,1351,1358],{"type":419,"value":1341},"My script also automates the installation of other tools, not related to software development but that I often use (like ",{"type":414,"tag":460,"props":1343,"children":1346},{"href":1344,"rel":1345},"https://www.7-zip.org/",[464],[1347],{"type":419,"value":1348},"7zip",{"type":419,"value":1350},", ",{"type":414,"tag":460,"props":1352,"children":1355},{"href":1353,"rel":1354},"https://docs.microsoft.com/en-us/windows/powertoys/",[464],[1356],{"type":419,"value":1357},"Microsoft Power Toys",{"type":419,"value":1359}," or just browsers).",{"type":414,"tag":415,"props":1361,"children":1362},{},[1363],{"type":419,"value":1364},"Generally, when the applications I want to install are available in the Microsoft Store, I specify winget to install them from there.",{"type":414,"tag":548,"props":1366,"children":1368},{"className":644,"code":1367,"language":248,"meta":401,"style":401},"winget install -e -h --id Microsoft.WindowsTerminal -s msstore\n",[1369],{"type":414,"tag":554,"props":1370,"children":1371},{"__ignoreMap":401},[1372],{"type":414,"tag":558,"props":1373,"children":1374},{"class":560,"line":561},[1375,1379,1383,1387,1391,1395,1399,1404,1408],{"type":414,"tag":558,"props":1376,"children":1377},{"style":565},[1378],{"type":419,"value":885},{"type":414,"tag":558,"props":1380,"children":1381},{"style":670},[1382],{"type":419,"value":673},{"type":414,"tag":558,"props":1384,"children":1385},{"style":565},[1386],{"type":419,"value":894},{"type":414,"tag":558,"props":1388,"children":1389},{"style":670},[1390],{"type":419,"value":673},{"type":414,"tag":558,"props":1392,"children":1393},{"style":565},[1394],{"type":419,"value":903},{"type":414,"tag":558,"props":1396,"children":1397},{"style":670},[1398],{"type":419,"value":683},{"type":414,"tag":558,"props":1400,"children":1401},{"style":565},[1402],{"type":419,"value":1403},"id Microsoft.WindowsTerminal ",{"type":414,"tag":558,"props":1405,"children":1406},{"style":670},[1407],{"type":419,"value":673},{"type":414,"tag":558,"props":1409,"children":1410},{"style":565},[1411],{"type":419,"value":1412},"s msstore\n",{"type":414,"tag":608,"props":1414,"children":1415},{"icon":610},[1416],{"type":414,"tag":415,"props":1417,"children":1418},{},[1419],{"type":419,"value":1420},"Automating the installation of my developer machine was the opportunity to realize all the tools I was using daily, and which ones were really useful.",{"type":414,"tag":791,"props":1422,"children":1424},{"id":1423},"tools-i-dont-need",[1425],{"type":419,"value":1426},"Tools I don't need",{"type":414,"tag":415,"props":1428,"children":1429},{},[1430],{"type":419,"value":1431},"Unnecessary applications that come with Windows out of the box are uninstalled using this function:",{"type":414,"tag":548,"props":1433,"children":1435},{"className":644,"code":1434,"language":248,"meta":401,"style":401},"function removeApp {\n    Param ([string]$appName)\n    Write-Output \"Trying to remove $appName\"\n    Get-AppxPackage $appName -AllUsers | Remove-AppxPackage\n    Get-AppXProvisionedPackage -Online | Where DisplayName -like $appName | Remove-AppxProvisionedPackage -Online\n",[1436],{"type":414,"tag":554,"props":1437,"children":1438},{"__ignoreMap":401},[1439,1458,1492,1523,1560],{"type":414,"tag":558,"props":1440,"children":1441},{"class":560,"line":561},[1442,1448,1453],{"type":414,"tag":558,"props":1443,"children":1445},{"style":1444},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[1446],{"type":419,"value":1447},"function",{"type":414,"tag":558,"props":1449,"children":1450},{"style":730},[1451],{"type":419,"value":1452}," removeApp",{"type":414,"tag":558,"props":1454,"children":1455},{"style":670},[1456],{"type":419,"value":1457}," {\n",{"type":414,"tag":558,"props":1459,"children":1460},{"class":560,"line":661},[1461,1467,1472,1477,1482,1487],{"type":414,"tag":558,"props":1462,"children":1464},{"style":1463},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF;--shiki-light-font-style:italic;--shiki-default-font-style:italic;--shiki-dark-font-style:italic",[1465],{"type":419,"value":1466},"    Param",{"type":414,"tag":558,"props":1468,"children":1469},{"style":670},[1470],{"type":419,"value":1471}," ([",{"type":414,"tag":558,"props":1473,"children":1474},{"style":1444},[1475],{"type":419,"value":1476},"string",{"type":414,"tag":558,"props":1478,"children":1479},{"style":670},[1480],{"type":419,"value":1481},"]$",{"type":414,"tag":558,"props":1483,"children":1484},{"style":565},[1485],{"type":419,"value":1486},"appName",{"type":414,"tag":558,"props":1488,"children":1489},{"style":670},[1490],{"type":419,"value":1491},")\n",{"type":414,"tag":558,"props":1493,"children":1494},{"class":560,"line":707},[1495,1500,1505,1510,1515,1519],{"type":414,"tag":558,"props":1496,"children":1497},{"style":730},[1498],{"type":419,"value":1499},"    Write-Output",{"type":414,"tag":558,"props":1501,"children":1502},{"style":670},[1503],{"type":419,"value":1504}," \"",{"type":414,"tag":558,"props":1506,"children":1507},{"style":696},[1508],{"type":419,"value":1509},"Trying to remove ",{"type":414,"tag":558,"props":1511,"children":1512},{"style":670},[1513],{"type":419,"value":1514},"$",{"type":414,"tag":558,"props":1516,"children":1517},{"style":565},[1518],{"type":419,"value":1486},{"type":414,"tag":558,"props":1520,"children":1521},{"style":670},[1522],{"type":419,"value":704},{"type":414,"tag":558,"props":1524,"children":1525},{"class":560,"line":716},[1526,1531,1536,1541,1545,1550,1555],{"type":414,"tag":558,"props":1527,"children":1528},{"style":730},[1529],{"type":419,"value":1530},"    Get-AppxPackage",{"type":414,"tag":558,"props":1532,"children":1533},{"style":670},[1534],{"type":419,"value":1535}," $",{"type":414,"tag":558,"props":1537,"children":1538},{"style":565},[1539],{"type":419,"value":1540},"appName ",{"type":414,"tag":558,"props":1542,"children":1543},{"style":670},[1544],{"type":419,"value":673},{"type":414,"tag":558,"props":1546,"children":1547},{"style":565},[1548],{"type":419,"value":1549},"AllUsers ",{"type":414,"tag":558,"props":1551,"children":1552},{"style":670},[1553],{"type":419,"value":1554},"|",{"type":414,"tag":558,"props":1556,"children":1557},{"style":730},[1558],{"type":419,"value":1559}," Remove-AppxPackage\n",{"type":414,"tag":558,"props":1561,"children":1562},{"class":560,"line":1222},[1563,1568,1573,1578,1582,1587,1592,1597,1601,1605,1609,1614,1618],{"type":414,"tag":558,"props":1564,"children":1565},{"style":730},[1566],{"type":419,"value":1567},"    Get-AppXProvisionedPackage",{"type":414,"tag":558,"props":1569,"children":1570},{"style":670},[1571],{"type":419,"value":1572}," -",{"type":414,"tag":558,"props":1574,"children":1575},{"style":565},[1576],{"type":419,"value":1577},"Online ",{"type":414,"tag":558,"props":1579,"children":1580},{"style":670},[1581],{"type":419,"value":1554},{"type":414,"tag":558,"props":1583,"children":1584},{"style":1463},[1585],{"type":419,"value":1586}," Where",{"type":414,"tag":558,"props":1588,"children":1589},{"style":565},[1590],{"type":419,"value":1591}," DisplayName ",{"type":414,"tag":558,"props":1593,"children":1594},{"style":670},[1595],{"type":419,"value":1596},"-like",{"type":414,"tag":558,"props":1598,"children":1599},{"style":670},[1600],{"type":419,"value":1535},{"type":414,"tag":558,"props":1602,"children":1603},{"style":565},[1604],{"type":419,"value":1540},{"type":414,"tag":558,"props":1606,"children":1607},{"style":670},[1608],{"type":419,"value":1554},{"type":414,"tag":558,"props":1610,"children":1611},{"style":730},[1612],{"type":419,"value":1613}," Remove-AppxProvisionedPackage",{"type":414,"tag":558,"props":1615,"children":1616},{"style":670},[1617],{"type":419,"value":1572},{"type":414,"tag":558,"props":1619,"children":1620},{"style":565},[1621],{"type":419,"value":1622},"Online\n",{"type":414,"tag":415,"props":1624,"children":1625},{},[1626,1628,1634,1636,1642],{"type":419,"value":1627},"It allows me to get rid of pre-installed applications like ",{"type":414,"tag":554,"props":1629,"children":1631},{"className":1630},[],[1632],{"type":419,"value":1633},"Facebook",{"type":419,"value":1635},"or ",{"type":414,"tag":554,"props":1637,"children":1639},{"className":1638},[],[1640],{"type":419,"value":1641},"Bing News",{"type":419,"value":597},{"type":414,"tag":421,"props":1644,"children":1646},{"id":1645},"configuring-software",[1647],{"type":419,"value":1648},"Configuring software",{"type":414,"tag":415,"props":1650,"children":1651},{},[1652],{"type":419,"value":1653},"Installing software is one part, but configuring it is another. As I previously mentioned, for some applications in which you sign in with an account, settings are synchronized so you don't need to transfer the application settings from your previous laptop. For the others, I decided to use symbolic links.",{"type":414,"tag":415,"props":1655,"children":1656},{},[1657],{"type":414,"tag":441,"props":1658,"children":1662},{"alt":1659,"className":1660,"src":1661},"A light bulb that is turned on.",[445,446],"/posts/images/automate_developer_machine_idea.jpg",[],{"type":414,"tag":415,"props":1664,"children":1665},{},[1666],{"type":419,"value":1667},"Here are some examples of settings I wanted to set up on a new laptop:",{"type":414,"tag":491,"props":1669,"children":1670},{},[1671,1683,1694,1705],{"type":414,"tag":495,"props":1672,"children":1673},{},[1674,1676],{"type":419,"value":1675},"my ",{"type":414,"tag":460,"props":1677,"children":1680},{"href":1678,"rel":1679},"https://github.com/TechWatching/dotfiles/blob/main/config/git/.gitconfig",[464],[1681],{"type":419,"value":1682},".gitconfig file",{"type":414,"tag":495,"props":1684,"children":1685},{},[1686,1687],{"type":419,"value":1675},{"type":414,"tag":460,"props":1688,"children":1691},{"href":1689,"rel":1690},"https://github.com/TechWatching/dotfiles/blob/main/config/windowsTerminal/settings.json",[464],[1692],{"type":419,"value":1693},"Windows Terminal settings",{"type":414,"tag":495,"props":1695,"children":1696},{},[1697,1698],{"type":419,"value":1675},{"type":414,"tag":460,"props":1699,"children":1702},{"href":1700,"rel":1701},"https://github.com/TechWatching/dotfiles/blob/main/config/powershell/Microsoft.PowerShell_profile.ps1",[464],[1703],{"type":419,"value":1704},"PowerShell profile",{"type":414,"tag":495,"props":1706,"children":1707},{},[1708,1709,1716],{"type":419,"value":1675},{"type":414,"tag":460,"props":1710,"children":1713},{"href":1711,"rel":1712},"https://github.com/TechWatching/dotfiles/blob/main/config/prompt/.oh-my-posh.omp.json",[464],[1714],{"type":419,"value":1715},"custom prompt configuration",{"type":419,"value":1717}," done using oh my posh",{"type":414,"tag":415,"props":1719,"children":1720},{},[1721,1723,1728],{"type":419,"value":1722},"To create a symbolic link at the Windows Terminal settings file pointing to the settings file in my ",{"type":414,"tag":554,"props":1724,"children":1726},{"className":1725},[],[1727],{"type":419,"value":595},{"type":419,"value":1729}," cloned repository I can do the following command:",{"type":414,"tag":548,"props":1731,"children":1733},{"className":644,"code":1732,"language":248,"meta":401,"style":401},"New-Item -ItemType SymbolicLink -Path \"$env:USERPROFILE\\AppData\\Local\\Packages\\Microsoft.WindowsTerminal_8wekyb3d8bbwe\\LocalState\\settings.json\" -Target \"$env:USERPROFILE\\dotfiles\\config\\windowsTerminal\\settings.json\"\"\n",[1734],{"type":414,"tag":554,"props":1735,"children":1736},{"__ignoreMap":401},[1737],{"type":414,"tag":558,"props":1738,"children":1739},{"class":560,"line":561},[1740,1745,1749,1754,1758,1763,1767,1771,1776,1780,1784,1789,1793,1797,1802],{"type":414,"tag":558,"props":1741,"children":1742},{"style":730},[1743],{"type":419,"value":1744},"New-Item",{"type":414,"tag":558,"props":1746,"children":1747},{"style":670},[1748],{"type":419,"value":1572},{"type":414,"tag":558,"props":1750,"children":1751},{"style":565},[1752],{"type":419,"value":1753},"ItemType SymbolicLink ",{"type":414,"tag":558,"props":1755,"children":1756},{"style":670},[1757],{"type":419,"value":673},{"type":414,"tag":558,"props":1759,"children":1760},{"style":565},[1761],{"type":419,"value":1762},"Path ",{"type":414,"tag":558,"props":1764,"children":1765},{"style":670},[1766],{"type":419,"value":757},{"type":414,"tag":558,"props":1768,"children":1769},{"style":565},[1770],{"type":419,"value":762},{"type":414,"tag":558,"props":1772,"children":1773},{"style":696},[1774],{"type":419,"value":1775},"\\AppData\\Local\\Packages\\Microsoft.WindowsTerminal_8wekyb3d8bbwe\\LocalState\\settings.json",{"type":414,"tag":558,"props":1777,"children":1778},{"style":670},[1779],{"type":419,"value":693},{"type":414,"tag":558,"props":1781,"children":1782},{"style":670},[1783],{"type":419,"value":1572},{"type":414,"tag":558,"props":1785,"children":1786},{"style":565},[1787],{"type":419,"value":1788},"Target ",{"type":414,"tag":558,"props":1790,"children":1791},{"style":670},[1792],{"type":419,"value":757},{"type":414,"tag":558,"props":1794,"children":1795},{"style":565},[1796],{"type":419,"value":762},{"type":414,"tag":558,"props":1798,"children":1799},{"style":696},[1800],{"type":419,"value":1801},"\\dotfiles\\config\\windowsTerminal\\settings.json",{"type":414,"tag":558,"props":1803,"children":1804},{"style":565},[1805],{"type":419,"value":1806},"\"\"\n",{"type":414,"tag":415,"props":1808,"children":1809},{},[1810],{"type":419,"value":1811},"Because I use symbolic links, when I modify the configuration of my Windows Terminal (event through the UI), the settings file in my git repository is the one being modified so I can commit it and push it so that my other machines have the latest version. And it's the same for all my settings files.",{"type":414,"tag":415,"props":1813,"children":1814},{},[1815],{"type":419,"value":1816},"There are others settings in my repository and I will probably continue to add some later.",{"type":414,"tag":421,"props":1818,"children":1820},{"id":1819},"what-i-did-not-automate-yet",[1821],{"type":419,"value":1822},"What I did not automate ... yet!",{"type":414,"tag":415,"props":1824,"children":1825},{},[1826],{"type":419,"value":1827},"There are many things I did not automate yet and that I will do bit by bit.  Nevertheless, I am happy with the current setup. There is much room for improvement but I've already won some time last time I changed my laptop, and that was the goal.",{"type":414,"tag":415,"props":1829,"children":1830},{},[1831,1833,1840,1842,1848],{"type":419,"value":1832},"As I've just said, there are other configurations I would probably need to store in my repository. ",{"type":414,"tag":460,"props":1834,"children":1837},{"href":1835,"rel":1836},"https://docs.microsoft.com/en-us/windows/powertoys",[464],[1838],{"type":419,"value":1839},"Power Toys",{"type":419,"value":1841}," settings might be one of them unless they add a settings sync (issue already opened ",{"type":414,"tag":460,"props":1843,"children":1846},{"href":1844,"rel":1845},"https://github.com/microsoft/PowerToys/issues/3381",[464],[1847],{"type":419,"value":838},{"type":419,"value":1849},"). It would be better because there are many settings files so only using symbolic links could be cumbersome.",{"type":414,"tag":415,"props":1851,"children":1852},{},[1853,1855,1862],{"type":419,"value":1854},"Most of the software I need is installed by my setup script. One exception is JetBrains products but I hope it will be possible soon. I have some commented lines in my installation script about automating the setup of ",{"type":414,"tag":460,"props":1856,"children":1859},{"href":1857,"rel":1858},"https://docs.microsoft.com/en-us/windows/wsl/install",[464],[1860],{"type":419,"value":1861},"WSL2",{"type":419,"value":1863}," and docker (well installation of Rancher Desktop to be more precise as a replacement of Docker Desktop due to its new license model) that required some windows features to be installed.  I think these lines should work with some adjustments, it's just that I did that manually last time and did not take the time to test the corresponding commands properly.",{"type":414,"tag":415,"props":1865,"children":1866},{},[1867],{"type":419,"value":1868},"There are also some limitations to my current approach to installing my developer machine:",{"type":414,"tag":491,"props":1870,"children":1871},{},[1872,1886,1891],{"type":414,"tag":495,"props":1873,"children":1874},{},[1875,1877,1884],{"type":419,"value":1876},"As everything is contained in a public GitHub repository, I can't keep some files or secrets private obviously (it could be useful to configure a new machine to ",{"type":414,"tag":460,"props":1878,"children":1881},{"href":1879,"rel":1880},"https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits",[464],[1882],{"type":419,"value":1883},"sign commits",{"type":419,"value":1885}," for instance)",{"type":414,"tag":495,"props":1887,"children":1888},{},[1889],{"type":419,"value":1890},"The installation script is not idempotent so it will try to re-install and re-configure everything if I re-run it (not a big deal as I mainly use it to install a new machine, but it would be nice to be able to just re-run it to get on an existing installation all the latest improvements I made on another laptop)",{"type":414,"tag":495,"props":1892,"children":1893},{},[1894],{"type":419,"value":1895},"I did not set up anything to handle multiple configurations (one for my personal laptop and one for my professional laptop for example)",{"type":414,"tag":415,"props":1897,"children":1898},{},[1899,1901,1908],{"type":419,"value":1900},"I think the tool ",{"type":414,"tag":460,"props":1902,"children":1905},{"href":1903,"rel":1904},"https://www.chezmoi.io/",[464],[1906],{"type":419,"value":1907},"chezmoi",{"type":419,"value":1909}," might help to solve some of these limitations. Maybe one day I'll take the time to dig a little deeper to see if I can improve the whole process.",{"type":414,"tag":421,"props":1911,"children":1913},{"id":1912},"to-conclude",[1914],{"type":419,"value":1915},"To conclude",{"type":414,"tag":415,"props":1917,"children":1918},{},[1919,1921,1927],{"type":419,"value":1920},"You can find the repository with all the code I use to automate my installation ",{"type":414,"tag":460,"props":1922,"children":1925},{"href":1923,"rel":1924},"https://github.com/TechWatching/dotfiles",[464],[1926],{"type":419,"value":838},{"type":419,"value":597},{"type":414,"tag":415,"props":1929,"children":1930},{},[1931],{"type":419,"value":1932},"Automating my machine installation was not that fun, but I learned lots of things while doing it about package managers, windows, symbolic links, PowerShell... And in the end, it is very satisfying when everything starts to install automatically and you find a familiar environment on a new laptop.",{"type":414,"tag":415,"props":1934,"children":1935},{},[1936],{"type":419,"value":1937},"Whether you adopt this approach or another to automate the setup of your development machine, I think it's an important thing to do. It does not have to be complex, and you don't need to automate everything. But you should probably at least use a package manager for your software installations, have a list somewhere of the most useful tools you need, and keep a copy of the configuration files of your most important tools.",{"type":414,"tag":415,"props":1939,"children":1940},{},[1941,1943,1950],{"type":419,"value":1942},"This article is part of the ",{"type":414,"tag":460,"props":1944,"children":1947},{"href":1945,"rel":1946},"https://townhall.hashnode.com/4-articles-in-4-weeks-hashnode-writing-contest",[464],[1948],{"type":419,"value":1949},"4 articles in 4 weeks Hashnode writing contest",{"type":419,"value":597},{"type":414,"tag":415,"props":1952,"children":1953},{},[1954],{"type":419,"value":1955},"Happy learning.",{"type":414,"tag":1957,"props":1958,"children":1959},"style",{},[1960],{"type":419,"value":1961},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":401,"searchDepth":661,"depth":661,"links":1963},[1964,1965,1966,1972,1973,1974],{"id":423,"depth":661,"text":426},{"id":481,"depth":661,"text":484},{"id":786,"depth":661,"text":789,"children":1967},[1968,1969,1970,1971],{"id":793,"depth":707,"text":796},{"id":843,"depth":707,"text":846},{"id":998,"depth":707,"text":1001},{"id":1423,"depth":707,"text":1426},{"id":1645,"depth":661,"text":1648},{"id":1819,"depth":661,"text":1822},{"id":1912,"depth":661,"text":1915},"markdown","content:1.posts:42.automate-developer-machine.md","content","1.posts/42.automate-developer-machine.md","md",{"_path":61,"_dir":399,"_draft":400,"_partial":400,"_locale":401,"title":60,"description":1981,"lead":1982,"date":1983,"image":1984,"badge":1986,"tags":1987,"body":1988,"_type":1975,"_id":2207,"_source":1977,"_file":2208,"_extension":1979},"In my last article about Windows Package Manager, I said that with winget I was missing \"being able to specify some parameters for a package installation (like the workload and components to install for Visual Studio 2019)\". Well, that was before I went through a few GitHub issues of the winget-cli repository that mentioned the override option.","The override option of winget install command","2021-05-31T00:00:00.000Z",{"src":1985},"/images/surface_2.jpg",{"label":406},[291,293,296,206],{"type":411,"children":1989,"toc":2200},[1990,2011,2017,2050,2061,2067,2072,2125,2137,2150,2178,2184,2196],{"type":414,"tag":415,"props":1991,"children":1992},{},[1993,1995,2001,2003,2009],{"type":419,"value":1994},"In my last article about Windows Package Manager, I said that with winget I was missing \"",{"type":414,"tag":1996,"props":1997,"children":1998},"em",{},[1999],{"type":419,"value":2000},"being able to specify some parameters for a package installation (like the workload and components to install for Visual Studio 2019)",{"type":419,"value":2002},"\". Well, that was before I went through a few GitHub issues of the winget-cli repository that mentioned the ",{"type":414,"tag":554,"props":2004,"children":2006},{"className":2005},[],[2007],{"type":419,"value":2008},"override",{"type":419,"value":2010}," option.",{"type":414,"tag":421,"props":2012,"children":2014},{"id":2013},"about-the-override-option",[2015],{"type":419,"value":2016},"About the override option",{"type":414,"tag":415,"props":2018,"children":2019},{},[2020,2026,2028,2033,2035,2041,2043,2048],{"type":414,"tag":554,"props":2021,"children":2023},{"className":2022},[],[2024],{"type":419,"value":2025},"winget install",{"type":419,"value":2027}," official documentation says the ",{"type":414,"tag":554,"props":2029,"children":2031},{"className":2030},[],[2032],{"type":419,"value":2008},{"type":419,"value":2034}," option to the ",{"type":414,"tag":554,"props":2036,"children":2038},{"className":2037},[],[2039],{"type":419,"value":2040},"install",{"type":419,"value":2042}," command can be used to provide a \"",{"type":414,"tag":1996,"props":2044,"children":2045},{},[2046],{"type":419,"value":2047},"string that will be passed directly to the installer",{"type":419,"value":2049},"\". What does that mean exactly?",{"type":414,"tag":415,"props":2051,"children":2052},{},[2053,2055,2060],{"type":419,"value":2054},"When you install a program on your laptop, the installer GUI often prompts you to configure some parameters for the program. For instance, Git installer lets you choose how you want to handle CRLF. Each installer has its own parameters that you can specify on the command line if you run the installer exe in your terminal. When using winget CLI, you can also specify these parameters by passing them as the value of the option ",{"type":414,"tag":554,"props":2056,"children":2058},{"className":2057},[],[2059],{"type":419,"value":2008},{"type":419,"value":597},{"type":414,"tag":421,"props":2062,"children":2064},{"id":2063},"an-example-with-visual-studio-2019-installation",[2065],{"type":419,"value":2066},"An example with Visual Studio 2019 installation",{"type":414,"tag":415,"props":2068,"children":2069},{},[2070],{"type":419,"value":2071},"If we take the example of Visual Studio 2019, let's say we want to install it with the English language pack and the Azure workload. To do that we can run the following command:",{"type":414,"tag":548,"props":2073,"children":2075},{"className":644,"code":2074,"language":248,"meta":401,"style":401},"winget install Microsoft.VisualStudio.2019.Enterprise --silent --override \"--wait --quiet --addProductLang En-us --add Microsoft.VisualStudio.Workload.Azure\"\n",[2076],{"type":414,"tag":554,"props":2077,"children":2078},{"__ignoreMap":401},[2079],{"type":414,"tag":558,"props":2080,"children":2081},{"class":560,"line":561},[2082,2087,2092,2096,2100,2104,2108,2112,2116,2121],{"type":414,"tag":558,"props":2083,"children":2084},{"style":565},[2085],{"type":419,"value":2086},"winget install Microsoft.VisualStudio.",{"type":414,"tag":558,"props":2088,"children":2089},{"style":915},[2090],{"type":419,"value":2091},"2019.",{"type":414,"tag":558,"props":2093,"children":2094},{"style":565},[2095],{"type":419,"value":923},{"type":414,"tag":558,"props":2097,"children":2098},{"style":670},[2099],{"type":419,"value":683},{"type":414,"tag":558,"props":2101,"children":2102},{"style":565},[2103],{"type":419,"value":932},{"type":414,"tag":558,"props":2105,"children":2106},{"style":670},[2107],{"type":419,"value":683},{"type":414,"tag":558,"props":2109,"children":2110},{"style":565},[2111],{"type":419,"value":941},{"type":414,"tag":558,"props":2113,"children":2114},{"style":670},[2115],{"type":419,"value":693},{"type":414,"tag":558,"props":2117,"children":2118},{"style":696},[2119],{"type":419,"value":2120},"--wait --quiet --addProductLang En-us --add Microsoft.VisualStudio.Workload.Azure",{"type":414,"tag":558,"props":2122,"children":2123},{"style":670},[2124],{"type":419,"value":704},{"type":414,"tag":415,"props":2126,"children":2127},{},[2128,2130,2136],{"type":419,"value":2129},"You can find the documentation of the visual studio installer with the parameters I used ",{"type":414,"tag":460,"props":2131,"children":2134},{"href":2132,"rel":2133},"https://docs.microsoft.com/en-us/visualstudio/install/use-command-line-parameters-to-install-visual-studio?view=vs-2019#bootstrapper-commands-and-command-line-parameters",[464],[2135],{"type":419,"value":838},{"type":419,"value":597},{"type":414,"tag":421,"props":2138,"children":2140},{"id":2139},"why-override",[2141,2143,2148],{"type":419,"value":2142},"Why ",{"type":414,"tag":554,"props":2144,"children":2146},{"className":2145},[],[2147],{"type":419,"value":2008},{"type":419,"value":2149},"?",{"type":414,"tag":415,"props":2151,"children":2152},{},[2153,2155,2160,2162,2167,2169,2176],{"type":419,"value":2154},"So ",{"type":414,"tag":554,"props":2156,"children":2158},{"className":2157},[],[2159],{"type":419,"value":2008},{"type":419,"value":2161}," is a really useful option because it allows us to customize our program installations. The name ",{"type":414,"tag":554,"props":2163,"children":2165},{"className":2164},[],[2166],{"type":419,"value":2008},{"type":419,"value":2168}," could seem a bit strange but it is to indicate that we override the default parameters that could have been specified in the manifest of the package you are installing. By the way, the packages and their manifests can be found in ",{"type":414,"tag":460,"props":2170,"children":2173},{"href":2171,"rel":2172},"https://github.com/microsoft/winget-pkgs/",[464],[2174],{"type":419,"value":2175},"this GitHub repository",{"type":419,"value":2177},". If you look at some of them you will see what parameters they use by default and be able to know if you need to override them to fit your needs.",{"type":414,"tag":421,"props":2179,"children":2181},{"id":2180},"pros-and-cons",[2182],{"type":419,"value":2183},"Pros and cons",{"type":414,"tag":415,"props":2185,"children":2186},{},[2187,2189,2194],{"type":419,"value":2188},"As we said, each installer has its own parameters so if we want to customize our installations we will have to look at the documentation of each installer which can be quite tiresome. If we compare to Chocolatey it is more or less the same but on Chocolatey site, each package has a page with most of the time the parameters documentation or at least a link to the documentation of the installer. Winget clearly lacks that. Yet, even if it requires a bit of effort to find the parameters of a package, thanks to the ",{"type":414,"tag":554,"props":2190,"children":2192},{"className":2191},[],[2193],{"type":419,"value":2008},{"type":419,"value":2195}," option we can fully customize its installation and that's great.",{"type":414,"tag":1957,"props":2197,"children":2198},{},[2199],{"type":419,"value":1961},{"title":401,"searchDepth":661,"depth":661,"links":2201},[2202,2203,2204,2206],{"id":2013,"depth":661,"text":2016},{"id":2063,"depth":661,"text":2066},{"id":2139,"depth":661,"text":2205},"Why override?",{"id":2180,"depth":661,"text":2183},"content:1.posts:18.winget-override.md","1.posts/18.winget-override.md",{"_path":58,"_dir":399,"_draft":400,"_partial":400,"_locale":401,"title":57,"description":2210,"lead":2211,"date":2212,"image":2213,"badge":2214,"tags":2215,"body":2216,"_type":1975,"_id":3315,"_source":1977,"_file":3316,"_extension":1979},"Using Windows Package Manager import to install multiple applications.","Winget import a promising feature","2021-05-26T00:00:00.000Z",{"src":1985},{"label":406},[291,293,296,206],{"type":411,"children":2217,"toc":3309},[2218,2224,2243,2248,2262,2281,2287,2314,2331,2340,2346,2373,2378,3254,3266,3282,3287,3293,3305],{"type":414,"tag":421,"props":2219,"children":2221},{"id":2220},"about-windows-package-manager",[2222],{"type":419,"value":2223},"About Windows Package Manager",{"type":414,"tag":415,"props":2225,"children":2226},{},[2227,2229,2234,2236,2241],{"type":419,"value":2228},"You probably have already heard of the new ",{"type":414,"tag":460,"props":2230,"children":2232},{"href":804,"rel":2231},[464],[2233],{"type":419,"value":808},{"type":419,"value":2235}," and its command-line tool ",{"type":414,"tag":554,"props":2237,"children":2239},{"className":2238},[],[2240],{"type":419,"value":293},{"type":419,"value":2242}," that allows you to automate installing and upgrading software on your Windows 10 computer.",{"type":414,"tag":415,"props":2244,"children":2245},{},[2246],{"type":419,"value":2247},"With winget you can install an application very easily simply by executing in your terminal a command like this one which installs PowerToys:",{"type":414,"tag":548,"props":2249,"children":2251},{"className":644,"code":2250,"language":248,"meta":401,"style":401},"winget install powertoys\n",[2252],{"type":414,"tag":554,"props":2253,"children":2254},{"__ignoreMap":401},[2255],{"type":414,"tag":558,"props":2256,"children":2257},{"class":560,"line":561},[2258],{"type":414,"tag":558,"props":2259,"children":2260},{"style":565},[2261],{"type":419,"value":2250},{"type":414,"tag":415,"props":2263,"children":2264},{},[2265,2267,2272,2274,2279],{"type":419,"value":2266},"Currently, Windows Package Manager only offers basic features and has far fewer packages compared to other package managers like ",{"type":414,"tag":460,"props":2268,"children":2270},{"href":813,"rel":2269},[464],[2271],{"type":419,"value":817},{"type":419,"value":2273},". However, even if ",{"type":414,"tag":554,"props":2275,"children":2277},{"className":2276},[],[2278],{"type":419,"value":293},{"type":419,"value":2280}," is still in its early days, there are some promising features that make it a tool to consider when setting up a Windows 10 machine.",{"type":414,"tag":421,"props":2282,"children":2284},{"id":2283},"installing-microsoft-store-applications",[2285],{"type":419,"value":2286},"Installing Microsoft Store applications",{"type":414,"tag":415,"props":2288,"children":2289},{},[2290,2292,2297,2299,2304,2306,2312],{"type":419,"value":2291},"First, winget can install Microsoft Store applications. Most of the software you use as a developer probably does not come from Microsoft Store, but there are still some applications that it is handy to get from it. For instance, the new Windows Terminal is available as a Microsoft Store application. As far as I know, apart from ",{"type":414,"tag":554,"props":2293,"children":2295},{"className":2294},[],[2296],{"type":419,"value":293},{"type":419,"value":2298},", there is no other easy way to install a Microsoft Store application from the command line. With ",{"type":414,"tag":554,"props":2300,"children":2302},{"className":2301},[],[2303],{"type":419,"value":293},{"type":419,"value":2305}," you can just do: ",{"type":414,"tag":554,"props":2307,"children":2309},{"className":2308},[],[2310],{"type":419,"value":2311},"winget install Microsoft.WindowsTerminal -s msstore",{"type":419,"value":2313}," to install the new WindowsTerminal application from Microsoft Store.",{"type":414,"tag":608,"props":2315,"children":2317},{"icon":2316},"i-fluent-emoji-flat-pushpin",[2318],{"type":414,"tag":415,"props":2319,"children":2320},{},[2321,2323,2329],{"type":419,"value":2322},"Please note that at the time of writing, installing store applications from winget is an experimental feature that you have to enable in ",{"type":414,"tag":554,"props":2324,"children":2326},{"className":2325},[],[2327],{"type":419,"value":2328},"winget settings",{"type":419,"value":2330}," and that only a subset of Microsoft Store applications can be installed.",{"type":414,"tag":415,"props":2332,"children":2333},{},[2334],{"type":414,"tag":441,"props":2335,"children":2339},{"alt":2336,"className":2337,"src":2338},"Winget configuration file.",[445,446],"/posts/images/winget_import_1.png",[],{"type":414,"tag":421,"props":2341,"children":2343},{"id":2342},"installing-several-packages-with-the-import-command",[2344],{"type":419,"value":2345},"Installing several packages with the import command",{"type":414,"tag":415,"props":2347,"children":2348},{},[2349,2351,2357,2359,2365,2367],{"type":419,"value":2350},"Second, winget has an ",{"type":414,"tag":554,"props":2352,"children":2354},{"className":2353},[],[2355],{"type":419,"value":2356},"import",{"type":419,"value":2358}," command that allows you installing all the package specified in a JSON file you pass in parameter. It means that instead of writing a script with many install commands for each of the packages you want to install, you can write a ",{"type":414,"tag":554,"props":2360,"children":2362},{"className":2361},[],[2363],{"type":419,"value":2364},"package.json",{"type":419,"value":2366}," file that will contain all the packages you want to install, their version, the source of the package (place to find them, msstore for Microsoft Store applications), ... and you will be able to install the software with one command: ",{"type":414,"tag":554,"props":2368,"children":2370},{"className":2369},[],[2371],{"type":419,"value":2372},"winget import packages.json",{"type":414,"tag":415,"props":2374,"children":2375},{},[2376],{"type":419,"value":2377},"Here is an example of such a file:",{"type":414,"tag":548,"props":2379,"children":2383},{"className":2380,"code":2381,"language":2382,"meta":401,"style":401},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n    \"$schema\" : \"https://aka.ms/winget-packages.schema.2.0.json\",\n    \"CreationDate\" : \"2021-05-23T14:41:38.200-00:00\",\n    \"Sources\" : \n    [\n        {\n            \"Packages\" : \n            [\n                {\n                    \"PackageIdentifier\" : \"Microsoft.Whiteboard\"\n                },\n                {\n                    \"PackageIdentifier\" : \"Microsoft.WindowsTerminal\"   \n                }\n            ],\n            \"SourceDetails\" : \n            {\n                \"Argument\" : \"https://winget.azureedge.net/msstore\",\n                \"Identifier\" : \"Microsoft.Winget.MSStore.Source_8wekyb3d8bbwe\",\n                \"Name\" : \"msstore\",\n                \"Type\" : \"Microsoft.PreIndexed.Package\"\n            }\n        },\n        {\n            \"Packages\" : \n            [\n                {\n                    \"PackageIdentifier\": \"Microsoft.AzureCLI\"\n                },\n                {\n                    \"PackageIdentifier\" : \"Microsoft.PowerToys\"\n                }\n            ],\n            \"SourceDetails\" : \n            {\n                \"Argument\" : \"https://winget.azureedge.net/cache\",\n                \"Identifier\" : \"Microsoft.Winget.Source_8wekyb3d8bbwe\",\n                \"Name\" : \"winget\",\n                \"Type\" : \"Microsoft.PreIndexed.Package\"\n            }\n        }\n    ],\n    \"WinGetVersion\" : \"0.4.11391\"\n}\n","json",[2384],{"type":414,"tag":554,"props":2385,"children":2386},{"__ignoreMap":401},[2387,2395,2435,2472,2497,2505,2513,2539,2547,2555,2590,2599,2607,2645,2654,2663,2688,2697,2736,2774,2812,2846,2855,2864,2872,2896,2904,2912,2946,2954,2962,2995,3003,3011,3035,3043,3080,3117,3153,3185,3193,3202,3211,3245],{"type":414,"tag":558,"props":2388,"children":2389},{"class":560,"line":561},[2390],{"type":414,"tag":558,"props":2391,"children":2392},{"style":670},[2393],{"type":419,"value":2394},"{\n",{"type":414,"tag":558,"props":2396,"children":2397},{"class":560,"line":661},[2398,2403,2408,2412,2417,2421,2426,2430],{"type":414,"tag":558,"props":2399,"children":2400},{"style":670},[2401],{"type":419,"value":2402},"    \"",{"type":414,"tag":558,"props":2404,"children":2405},{"style":1444},[2406],{"type":419,"value":2407},"$schema",{"type":414,"tag":558,"props":2409,"children":2410},{"style":670},[2411],{"type":419,"value":693},{"type":414,"tag":558,"props":2413,"children":2414},{"style":670},[2415],{"type":419,"value":2416}," :",{"type":414,"tag":558,"props":2418,"children":2419},{"style":670},[2420],{"type":419,"value":1504},{"type":414,"tag":558,"props":2422,"children":2423},{"style":696},[2424],{"type":419,"value":2425},"https://aka.ms/winget-packages.schema.2.0.json",{"type":414,"tag":558,"props":2427,"children":2428},{"style":670},[2429],{"type":419,"value":693},{"type":414,"tag":558,"props":2431,"children":2432},{"style":670},[2433],{"type":419,"value":2434},",\n",{"type":414,"tag":558,"props":2436,"children":2437},{"class":560,"line":707},[2438,2442,2447,2451,2455,2459,2464,2468],{"type":414,"tag":558,"props":2439,"children":2440},{"style":670},[2441],{"type":419,"value":2402},{"type":414,"tag":558,"props":2443,"children":2444},{"style":1444},[2445],{"type":419,"value":2446},"CreationDate",{"type":414,"tag":558,"props":2448,"children":2449},{"style":670},[2450],{"type":419,"value":693},{"type":414,"tag":558,"props":2452,"children":2453},{"style":670},[2454],{"type":419,"value":2416},{"type":414,"tag":558,"props":2456,"children":2457},{"style":670},[2458],{"type":419,"value":1504},{"type":414,"tag":558,"props":2460,"children":2461},{"style":696},[2462],{"type":419,"value":2463},"2021-05-23T14:41:38.200-00:00",{"type":414,"tag":558,"props":2465,"children":2466},{"style":670},[2467],{"type":419,"value":693},{"type":414,"tag":558,"props":2469,"children":2470},{"style":670},[2471],{"type":419,"value":2434},{"type":414,"tag":558,"props":2473,"children":2474},{"class":560,"line":716},[2475,2479,2484,2488,2492],{"type":414,"tag":558,"props":2476,"children":2477},{"style":670},[2478],{"type":419,"value":2402},{"type":414,"tag":558,"props":2480,"children":2481},{"style":1444},[2482],{"type":419,"value":2483},"Sources",{"type":414,"tag":558,"props":2485,"children":2486},{"style":670},[2487],{"type":419,"value":693},{"type":414,"tag":558,"props":2489,"children":2490},{"style":670},[2491],{"type":419,"value":2416},{"type":414,"tag":558,"props":2493,"children":2494},{"style":565},[2495],{"type":419,"value":2496}," \n",{"type":414,"tag":558,"props":2498,"children":2499},{"class":560,"line":1222},[2500],{"type":414,"tag":558,"props":2501,"children":2502},{"style":670},[2503],{"type":419,"value":2504},"    [\n",{"type":414,"tag":558,"props":2506,"children":2507},{"class":560,"line":1255},[2508],{"type":414,"tag":558,"props":2509,"children":2510},{"style":670},[2511],{"type":419,"value":2512},"        {\n",{"type":414,"tag":558,"props":2514,"children":2515},{"class":560,"line":1288},[2516,2521,2527,2531,2535],{"type":414,"tag":558,"props":2517,"children":2518},{"style":670},[2519],{"type":419,"value":2520},"            \"",{"type":414,"tag":558,"props":2522,"children":2524},{"style":2523},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[2525],{"type":419,"value":2526},"Packages",{"type":414,"tag":558,"props":2528,"children":2529},{"style":670},[2530],{"type":419,"value":693},{"type":414,"tag":558,"props":2532,"children":2533},{"style":670},[2534],{"type":419,"value":2416},{"type":414,"tag":558,"props":2536,"children":2537},{"style":565},[2538],{"type":419,"value":2496},{"type":414,"tag":558,"props":2540,"children":2541},{"class":560,"line":1321},[2542],{"type":414,"tag":558,"props":2543,"children":2544},{"style":670},[2545],{"type":419,"value":2546},"            [\n",{"type":414,"tag":558,"props":2548,"children":2549},{"class":560,"line":1330},[2550],{"type":414,"tag":558,"props":2551,"children":2552},{"style":670},[2553],{"type":419,"value":2554},"                {\n",{"type":414,"tag":558,"props":2556,"children":2558},{"class":560,"line":2557},10,[2559,2564,2569,2573,2577,2581,2586],{"type":414,"tag":558,"props":2560,"children":2561},{"style":670},[2562],{"type":419,"value":2563},"                    \"",{"type":414,"tag":558,"props":2565,"children":2566},{"style":915},[2567],{"type":419,"value":2568},"PackageIdentifier",{"type":414,"tag":558,"props":2570,"children":2571},{"style":670},[2572],{"type":419,"value":693},{"type":414,"tag":558,"props":2574,"children":2575},{"style":670},[2576],{"type":419,"value":2416},{"type":414,"tag":558,"props":2578,"children":2579},{"style":670},[2580],{"type":419,"value":1504},{"type":414,"tag":558,"props":2582,"children":2583},{"style":696},[2584],{"type":419,"value":2585},"Microsoft.Whiteboard",{"type":414,"tag":558,"props":2587,"children":2588},{"style":670},[2589],{"type":419,"value":704},{"type":414,"tag":558,"props":2591,"children":2593},{"class":560,"line":2592},11,[2594],{"type":414,"tag":558,"props":2595,"children":2596},{"style":670},[2597],{"type":419,"value":2598},"                },\n",{"type":414,"tag":558,"props":2600,"children":2602},{"class":560,"line":2601},12,[2603],{"type":414,"tag":558,"props":2604,"children":2605},{"style":670},[2606],{"type":419,"value":2554},{"type":414,"tag":558,"props":2608,"children":2610},{"class":560,"line":2609},13,[2611,2615,2619,2623,2627,2631,2636,2640],{"type":414,"tag":558,"props":2612,"children":2613},{"style":670},[2614],{"type":419,"value":2563},{"type":414,"tag":558,"props":2616,"children":2617},{"style":915},[2618],{"type":419,"value":2568},{"type":414,"tag":558,"props":2620,"children":2621},{"style":670},[2622],{"type":419,"value":693},{"type":414,"tag":558,"props":2624,"children":2625},{"style":670},[2626],{"type":419,"value":2416},{"type":414,"tag":558,"props":2628,"children":2629},{"style":670},[2630],{"type":419,"value":1504},{"type":414,"tag":558,"props":2632,"children":2633},{"style":696},[2634],{"type":419,"value":2635},"Microsoft.WindowsTerminal",{"type":414,"tag":558,"props":2637,"children":2638},{"style":670},[2639],{"type":419,"value":693},{"type":414,"tag":558,"props":2641,"children":2642},{"style":565},[2643],{"type":419,"value":2644},"   \n",{"type":414,"tag":558,"props":2646,"children":2648},{"class":560,"line":2647},14,[2649],{"type":414,"tag":558,"props":2650,"children":2651},{"style":670},[2652],{"type":419,"value":2653},"                }\n",{"type":414,"tag":558,"props":2655,"children":2657},{"class":560,"line":2656},15,[2658],{"type":414,"tag":558,"props":2659,"children":2660},{"style":670},[2661],{"type":419,"value":2662},"            ],\n",{"type":414,"tag":558,"props":2664,"children":2666},{"class":560,"line":2665},16,[2667,2671,2676,2680,2684],{"type":414,"tag":558,"props":2668,"children":2669},{"style":670},[2670],{"type":419,"value":2520},{"type":414,"tag":558,"props":2672,"children":2673},{"style":2523},[2674],{"type":419,"value":2675},"SourceDetails",{"type":414,"tag":558,"props":2677,"children":2678},{"style":670},[2679],{"type":419,"value":693},{"type":414,"tag":558,"props":2681,"children":2682},{"style":670},[2683],{"type":419,"value":2416},{"type":414,"tag":558,"props":2685,"children":2686},{"style":565},[2687],{"type":419,"value":2496},{"type":414,"tag":558,"props":2689,"children":2691},{"class":560,"line":2690},17,[2692],{"type":414,"tag":558,"props":2693,"children":2694},{"style":670},[2695],{"type":419,"value":2696},"            {\n",{"type":414,"tag":558,"props":2698,"children":2700},{"class":560,"line":2699},18,[2701,2706,2711,2715,2719,2723,2728,2732],{"type":414,"tag":558,"props":2702,"children":2703},{"style":670},[2704],{"type":419,"value":2705},"                \"",{"type":414,"tag":558,"props":2707,"children":2708},{"style":915},[2709],{"type":419,"value":2710},"Argument",{"type":414,"tag":558,"props":2712,"children":2713},{"style":670},[2714],{"type":419,"value":693},{"type":414,"tag":558,"props":2716,"children":2717},{"style":670},[2718],{"type":419,"value":2416},{"type":414,"tag":558,"props":2720,"children":2721},{"style":670},[2722],{"type":419,"value":1504},{"type":414,"tag":558,"props":2724,"children":2725},{"style":696},[2726],{"type":419,"value":2727},"https://winget.azureedge.net/msstore",{"type":414,"tag":558,"props":2729,"children":2730},{"style":670},[2731],{"type":419,"value":693},{"type":414,"tag":558,"props":2733,"children":2734},{"style":670},[2735],{"type":419,"value":2434},{"type":414,"tag":558,"props":2737,"children":2739},{"class":560,"line":2738},19,[2740,2744,2749,2753,2757,2761,2766,2770],{"type":414,"tag":558,"props":2741,"children":2742},{"style":670},[2743],{"type":419,"value":2705},{"type":414,"tag":558,"props":2745,"children":2746},{"style":915},[2747],{"type":419,"value":2748},"Identifier",{"type":414,"tag":558,"props":2750,"children":2751},{"style":670},[2752],{"type":419,"value":693},{"type":414,"tag":558,"props":2754,"children":2755},{"style":670},[2756],{"type":419,"value":2416},{"type":414,"tag":558,"props":2758,"children":2759},{"style":670},[2760],{"type":419,"value":1504},{"type":414,"tag":558,"props":2762,"children":2763},{"style":696},[2764],{"type":419,"value":2765},"Microsoft.Winget.MSStore.Source_8wekyb3d8bbwe",{"type":414,"tag":558,"props":2767,"children":2768},{"style":670},[2769],{"type":419,"value":693},{"type":414,"tag":558,"props":2771,"children":2772},{"style":670},[2773],{"type":419,"value":2434},{"type":414,"tag":558,"props":2775,"children":2777},{"class":560,"line":2776},20,[2778,2782,2787,2791,2795,2799,2804,2808],{"type":414,"tag":558,"props":2779,"children":2780},{"style":670},[2781],{"type":419,"value":2705},{"type":414,"tag":558,"props":2783,"children":2784},{"style":915},[2785],{"type":419,"value":2786},"Name",{"type":414,"tag":558,"props":2788,"children":2789},{"style":670},[2790],{"type":419,"value":693},{"type":414,"tag":558,"props":2792,"children":2793},{"style":670},[2794],{"type":419,"value":2416},{"type":414,"tag":558,"props":2796,"children":2797},{"style":670},[2798],{"type":419,"value":1504},{"type":414,"tag":558,"props":2800,"children":2801},{"style":696},[2802],{"type":419,"value":2803},"msstore",{"type":414,"tag":558,"props":2805,"children":2806},{"style":670},[2807],{"type":419,"value":693},{"type":414,"tag":558,"props":2809,"children":2810},{"style":670},[2811],{"type":419,"value":2434},{"type":414,"tag":558,"props":2813,"children":2815},{"class":560,"line":2814},21,[2816,2820,2825,2829,2833,2837,2842],{"type":414,"tag":558,"props":2817,"children":2818},{"style":670},[2819],{"type":419,"value":2705},{"type":414,"tag":558,"props":2821,"children":2822},{"style":915},[2823],{"type":419,"value":2824},"Type",{"type":414,"tag":558,"props":2826,"children":2827},{"style":670},[2828],{"type":419,"value":693},{"type":414,"tag":558,"props":2830,"children":2831},{"style":670},[2832],{"type":419,"value":2416},{"type":414,"tag":558,"props":2834,"children":2835},{"style":670},[2836],{"type":419,"value":1504},{"type":414,"tag":558,"props":2838,"children":2839},{"style":696},[2840],{"type":419,"value":2841},"Microsoft.PreIndexed.Package",{"type":414,"tag":558,"props":2843,"children":2844},{"style":670},[2845],{"type":419,"value":704},{"type":414,"tag":558,"props":2847,"children":2849},{"class":560,"line":2848},22,[2850],{"type":414,"tag":558,"props":2851,"children":2852},{"style":670},[2853],{"type":419,"value":2854},"            }\n",{"type":414,"tag":558,"props":2856,"children":2858},{"class":560,"line":2857},23,[2859],{"type":414,"tag":558,"props":2860,"children":2861},{"style":670},[2862],{"type":419,"value":2863},"        },\n",{"type":414,"tag":558,"props":2865,"children":2867},{"class":560,"line":2866},24,[2868],{"type":414,"tag":558,"props":2869,"children":2870},{"style":670},[2871],{"type":419,"value":2512},{"type":414,"tag":558,"props":2873,"children":2875},{"class":560,"line":2874},25,[2876,2880,2884,2888,2892],{"type":414,"tag":558,"props":2877,"children":2878},{"style":670},[2879],{"type":419,"value":2520},{"type":414,"tag":558,"props":2881,"children":2882},{"style":2523},[2883],{"type":419,"value":2526},{"type":414,"tag":558,"props":2885,"children":2886},{"style":670},[2887],{"type":419,"value":693},{"type":414,"tag":558,"props":2889,"children":2890},{"style":670},[2891],{"type":419,"value":2416},{"type":414,"tag":558,"props":2893,"children":2894},{"style":565},[2895],{"type":419,"value":2496},{"type":414,"tag":558,"props":2897,"children":2899},{"class":560,"line":2898},26,[2900],{"type":414,"tag":558,"props":2901,"children":2902},{"style":670},[2903],{"type":419,"value":2546},{"type":414,"tag":558,"props":2905,"children":2907},{"class":560,"line":2906},27,[2908],{"type":414,"tag":558,"props":2909,"children":2910},{"style":670},[2911],{"type":419,"value":2554},{"type":414,"tag":558,"props":2913,"children":2915},{"class":560,"line":2914},28,[2916,2920,2924,2928,2933,2937,2942],{"type":414,"tag":558,"props":2917,"children":2918},{"style":670},[2919],{"type":419,"value":2563},{"type":414,"tag":558,"props":2921,"children":2922},{"style":915},[2923],{"type":419,"value":2568},{"type":414,"tag":558,"props":2925,"children":2926},{"style":670},[2927],{"type":419,"value":693},{"type":414,"tag":558,"props":2929,"children":2930},{"style":670},[2931],{"type":419,"value":2932},":",{"type":414,"tag":558,"props":2934,"children":2935},{"style":670},[2936],{"type":419,"value":1504},{"type":414,"tag":558,"props":2938,"children":2939},{"style":696},[2940],{"type":419,"value":2941},"Microsoft.AzureCLI",{"type":414,"tag":558,"props":2943,"children":2944},{"style":670},[2945],{"type":419,"value":704},{"type":414,"tag":558,"props":2947,"children":2949},{"class":560,"line":2948},29,[2950],{"type":414,"tag":558,"props":2951,"children":2952},{"style":670},[2953],{"type":419,"value":2598},{"type":414,"tag":558,"props":2955,"children":2957},{"class":560,"line":2956},30,[2958],{"type":414,"tag":558,"props":2959,"children":2960},{"style":670},[2961],{"type":419,"value":2554},{"type":414,"tag":558,"props":2963,"children":2965},{"class":560,"line":2964},31,[2966,2970,2974,2978,2982,2986,2991],{"type":414,"tag":558,"props":2967,"children":2968},{"style":670},[2969],{"type":419,"value":2563},{"type":414,"tag":558,"props":2971,"children":2972},{"style":915},[2973],{"type":419,"value":2568},{"type":414,"tag":558,"props":2975,"children":2976},{"style":670},[2977],{"type":419,"value":693},{"type":414,"tag":558,"props":2979,"children":2980},{"style":670},[2981],{"type":419,"value":2416},{"type":414,"tag":558,"props":2983,"children":2984},{"style":670},[2985],{"type":419,"value":1504},{"type":414,"tag":558,"props":2987,"children":2988},{"style":696},[2989],{"type":419,"value":2990},"Microsoft.PowerToys",{"type":414,"tag":558,"props":2992,"children":2993},{"style":670},[2994],{"type":419,"value":704},{"type":414,"tag":558,"props":2996,"children":2998},{"class":560,"line":2997},32,[2999],{"type":414,"tag":558,"props":3000,"children":3001},{"style":670},[3002],{"type":419,"value":2653},{"type":414,"tag":558,"props":3004,"children":3006},{"class":560,"line":3005},33,[3007],{"type":414,"tag":558,"props":3008,"children":3009},{"style":670},[3010],{"type":419,"value":2662},{"type":414,"tag":558,"props":3012,"children":3014},{"class":560,"line":3013},34,[3015,3019,3023,3027,3031],{"type":414,"tag":558,"props":3016,"children":3017},{"style":670},[3018],{"type":419,"value":2520},{"type":414,"tag":558,"props":3020,"children":3021},{"style":2523},[3022],{"type":419,"value":2675},{"type":414,"tag":558,"props":3024,"children":3025},{"style":670},[3026],{"type":419,"value":693},{"type":414,"tag":558,"props":3028,"children":3029},{"style":670},[3030],{"type":419,"value":2416},{"type":414,"tag":558,"props":3032,"children":3033},{"style":565},[3034],{"type":419,"value":2496},{"type":414,"tag":558,"props":3036,"children":3038},{"class":560,"line":3037},35,[3039],{"type":414,"tag":558,"props":3040,"children":3041},{"style":670},[3042],{"type":419,"value":2696},{"type":414,"tag":558,"props":3044,"children":3046},{"class":560,"line":3045},36,[3047,3051,3055,3059,3063,3067,3072,3076],{"type":414,"tag":558,"props":3048,"children":3049},{"style":670},[3050],{"type":419,"value":2705},{"type":414,"tag":558,"props":3052,"children":3053},{"style":915},[3054],{"type":419,"value":2710},{"type":414,"tag":558,"props":3056,"children":3057},{"style":670},[3058],{"type":419,"value":693},{"type":414,"tag":558,"props":3060,"children":3061},{"style":670},[3062],{"type":419,"value":2416},{"type":414,"tag":558,"props":3064,"children":3065},{"style":670},[3066],{"type":419,"value":1504},{"type":414,"tag":558,"props":3068,"children":3069},{"style":696},[3070],{"type":419,"value":3071},"https://winget.azureedge.net/cache",{"type":414,"tag":558,"props":3073,"children":3074},{"style":670},[3075],{"type":419,"value":693},{"type":414,"tag":558,"props":3077,"children":3078},{"style":670},[3079],{"type":419,"value":2434},{"type":414,"tag":558,"props":3081,"children":3083},{"class":560,"line":3082},37,[3084,3088,3092,3096,3100,3104,3109,3113],{"type":414,"tag":558,"props":3085,"children":3086},{"style":670},[3087],{"type":419,"value":2705},{"type":414,"tag":558,"props":3089,"children":3090},{"style":915},[3091],{"type":419,"value":2748},{"type":414,"tag":558,"props":3093,"children":3094},{"style":670},[3095],{"type":419,"value":693},{"type":414,"tag":558,"props":3097,"children":3098},{"style":670},[3099],{"type":419,"value":2416},{"type":414,"tag":558,"props":3101,"children":3102},{"style":670},[3103],{"type":419,"value":1504},{"type":414,"tag":558,"props":3105,"children":3106},{"style":696},[3107],{"type":419,"value":3108},"Microsoft.Winget.Source_8wekyb3d8bbwe",{"type":414,"tag":558,"props":3110,"children":3111},{"style":670},[3112],{"type":419,"value":693},{"type":414,"tag":558,"props":3114,"children":3115},{"style":670},[3116],{"type":419,"value":2434},{"type":414,"tag":558,"props":3118,"children":3120},{"class":560,"line":3119},38,[3121,3125,3129,3133,3137,3141,3145,3149],{"type":414,"tag":558,"props":3122,"children":3123},{"style":670},[3124],{"type":419,"value":2705},{"type":414,"tag":558,"props":3126,"children":3127},{"style":915},[3128],{"type":419,"value":2786},{"type":414,"tag":558,"props":3130,"children":3131},{"style":670},[3132],{"type":419,"value":693},{"type":414,"tag":558,"props":3134,"children":3135},{"style":670},[3136],{"type":419,"value":2416},{"type":414,"tag":558,"props":3138,"children":3139},{"style":670},[3140],{"type":419,"value":1504},{"type":414,"tag":558,"props":3142,"children":3143},{"style":696},[3144],{"type":419,"value":293},{"type":414,"tag":558,"props":3146,"children":3147},{"style":670},[3148],{"type":419,"value":693},{"type":414,"tag":558,"props":3150,"children":3151},{"style":670},[3152],{"type":419,"value":2434},{"type":414,"tag":558,"props":3154,"children":3156},{"class":560,"line":3155},39,[3157,3161,3165,3169,3173,3177,3181],{"type":414,"tag":558,"props":3158,"children":3159},{"style":670},[3160],{"type":419,"value":2705},{"type":414,"tag":558,"props":3162,"children":3163},{"style":915},[3164],{"type":419,"value":2824},{"type":414,"tag":558,"props":3166,"children":3167},{"style":670},[3168],{"type":419,"value":693},{"type":414,"tag":558,"props":3170,"children":3171},{"style":670},[3172],{"type":419,"value":2416},{"type":414,"tag":558,"props":3174,"children":3175},{"style":670},[3176],{"type":419,"value":1504},{"type":414,"tag":558,"props":3178,"children":3179},{"style":696},[3180],{"type":419,"value":2841},{"type":414,"tag":558,"props":3182,"children":3183},{"style":670},[3184],{"type":419,"value":704},{"type":414,"tag":558,"props":3186,"children":3188},{"class":560,"line":3187},40,[3189],{"type":414,"tag":558,"props":3190,"children":3191},{"style":670},[3192],{"type":419,"value":2854},{"type":414,"tag":558,"props":3194,"children":3196},{"class":560,"line":3195},41,[3197],{"type":414,"tag":558,"props":3198,"children":3199},{"style":670},[3200],{"type":419,"value":3201},"        }\n",{"type":414,"tag":558,"props":3203,"children":3205},{"class":560,"line":3204},42,[3206],{"type":414,"tag":558,"props":3207,"children":3208},{"style":670},[3209],{"type":419,"value":3210},"    ],\n",{"type":414,"tag":558,"props":3212,"children":3214},{"class":560,"line":3213},43,[3215,3219,3224,3228,3232,3236,3241],{"type":414,"tag":558,"props":3216,"children":3217},{"style":670},[3218],{"type":419,"value":2402},{"type":414,"tag":558,"props":3220,"children":3221},{"style":1444},[3222],{"type":419,"value":3223},"WinGetVersion",{"type":414,"tag":558,"props":3225,"children":3226},{"style":670},[3227],{"type":419,"value":693},{"type":414,"tag":558,"props":3229,"children":3230},{"style":670},[3231],{"type":419,"value":2416},{"type":414,"tag":558,"props":3233,"children":3234},{"style":670},[3235],{"type":419,"value":1504},{"type":414,"tag":558,"props":3237,"children":3238},{"style":696},[3239],{"type":419,"value":3240},"0.4.11391",{"type":414,"tag":558,"props":3242,"children":3243},{"style":670},[3244],{"type":419,"value":704},{"type":414,"tag":558,"props":3246,"children":3248},{"class":560,"line":3247},44,[3249],{"type":414,"tag":558,"props":3250,"children":3251},{"style":670},[3252],{"type":419,"value":3253},"}\n",{"type":414,"tag":415,"props":3255,"children":3256},{},[3257,3259,3264],{"type":419,"value":3258},"It contains packages from Microsoft Store and packages from the ",{"type":414,"tag":554,"props":3260,"children":3262},{"className":3261},[],[3263],{"type":419,"value":293},{"type":419,"value":3265}," package repository hence the 2 arrays of packages (one by each source).",{"type":414,"tag":608,"props":3267,"children":3268},{"icon":2316},[3269],{"type":414,"tag":415,"props":3270,"children":3271},{},[3272,3274,3280],{"type":419,"value":3273},"You can easily edit this JSON in vscode with autocompletion thanks to the link to the JSON ",{"type":414,"tag":554,"props":3275,"children":3277},{"className":3276},[],[3278],{"type":419,"value":3279},"schema",{"type":419,"value":3281}," at the beginning of the JSON.",{"type":414,"tag":415,"props":3283,"children":3284},{},[3285],{"type":419,"value":3286},"Import is great but there are still things missing like the ability to silently install the applications which is possible with the install command.",{"type":414,"tag":421,"props":3288,"children":3290},{"id":3289},"final-thoughts",[3291],{"type":419,"value":3292},"Final thoughts",{"type":414,"tag":415,"props":3294,"children":3295},{},[3296,3298,3303],{"type":419,"value":3297},"Chocolatey will continue to be my main package manager for now: on the one hand for the number of packages available and on the other hand for being able to specify some parameters for a package installation (like the workload and components to install for Visual Studio 2019). Yet, ",{"type":414,"tag":554,"props":3299,"children":3301},{"className":3300},[],[3302],{"type":419,"value":293},{"type":419,"value":3304}," will be part of my toolbox as well to install some packages (including Microsoft Store applications) and I expect it to continue to get better and better.",{"type":414,"tag":1957,"props":3306,"children":3307},{},[3308],{"type":419,"value":1961},{"title":401,"searchDepth":661,"depth":661,"links":3310},[3311,3312,3313,3314],{"id":2220,"depth":661,"text":2223},{"id":2283,"depth":661,"text":2286},{"id":2342,"depth":661,"text":2345},{"id":3289,"depth":661,"text":3292},"content:1.posts:17.winget-import.md","1.posts/17.winget-import.md",1716749600691]