Hello!
This repo contains opinionated and work-in-progress settings for my environment. You will find the tools, extensions, and configurations I use. The right tools configured the right way can increase our productivity, and that is what I am looking for here. I am not saying my environment is perfect.
The image below shows what my terminal looks like.
And this is what my Visual Studio Code looks like. For the ones who love dark themes, I had my time using dark themes, and now I am back to light themes! Do not judge me!
Take a look, and if you like what you see, please give me a star! :)
To install, follow these steps:
- Install a font from Nerd Fonts. I use CaskaydiaCove Nerd Font on Windows Terminal and Visual Studio Code.
- Clone the repo wherever you want.
- Open an elevated Command Prompt and go to the directory where you cloned.
- Execute setup.cmd. It will create some symlinks to point the tools to this repo.
- Follow the remaining sections here to install and configure the tools.
The Windows features below are the only ones I have enabled.
- Containers
- Hyper-V
- Microsoft Print to PDF
- Print and Document Services
- Remote Differential Compression API Support
- SMB Direct
- Telnet Client
- Virtual Machine Platform
- Windows Hypervisor Platform
- Windows Sandbox (take a look at the downloads.wsb file for a sample sandbox)
- Windows Subsystem for Linux
I use winget to install most of my applications. Below, you can find the ones I use formatted as command line ready for use. They are grouped by subject.
# Kubernetes
winget install Helm.Helm
winget install Kubernetes.kubectl
# Git & GitHub
winget install Git.Git
winget install GitHub.GitLFS
winget install GitHub.cli
# Machine Learning
winget install LutzRoeder.Netron
# Gaming
winget install Valve.Steam
winget install EpicGames.EpicGamesLauncher
# Shell
winget install Microsoft.PowerShell
winget install JanDeDobbeleer.OhMyPosh
winget install Neovim.Neovim
# General
winget install RARLab.WinRAR
winget install Microsoft.VisualStudioCode
winget install AgileBits.1Password
winget install WhatsApp.WhatsApp
winget install HHDSoftware.FreeHexEditorNeo
winget install Adobe.Acrobat.Reader.64-bit
winget install OBSProject.OBSStudio
winget install Google.GoogleDrive
winget install Microsoft.PowerToys
winget install Audacity.Audacity
winget install SweetScape.010Editor
winget install GIMP.GIMP
winget install JGraph.Draw
# Best video player PERIOD
winget install VideoLAN.VLC
# Best bookmark manager ever!
winget install RustemMussabekov.Raindrop
# Windows Subsystem for Linux. 9PKR34TNCV07 is Kali Linux from Microsoft Store.
winget install Canonical.Ubuntu.2204
winget install 9PKR34TNCV07
# CLI to manage the best cloud! :)
winget install Microsoft.AzureCLI
# Who doesn't love low level stuff?
winget install Microsoft.WinDbg
winget install Hex-Rays.IDA.Free
# General Developer Tools
winget install DBBrowserForSQLite.DBBrowserForSQLite
winget install BurntSushi.ripgrep.MSVC
winget install Docker.DockerDesktop
winget install Microsoft.VisualStudio.2022.Community --override "--quiet --add Microsoft.VisualStudio.Workload.NativeDesktop --add Microsoft.VisualStudio.Workload.NativeCrossPlat"
winget install Kitware.CMake
# .NET development.
winget install Microsoft.DotNet.SDK.7
winget install icsharpcode.ILSpy
# Rust
winget install Rustlang.Rustup
# Go
winget install GoLang.Go
# Node.js
winget install OpenJS.NodeJS.LTS
# I love games, so I have a gamer PC and need to install these ones.
# 9NFKC78BRS8W is Kingston FURY CTRL from Microsof Store.
winget install 9NFKC78BRS8W
winget install Corsair.iCUE.4
winget install Elgato.StreamDeck
I am studying artificial intelligence, so I must master Python. I also use winget to install Python, and I keep the last three versions installed.
winget install Python.Python.3.10
winget install Python.Python.3.11
winget install Python.Python.3.12
To manage the many versions installed, I use Python Launcher. At the command line, I use the following to specify which Python to use.
py -3.11 -m pip list
For my projects, I am using pipenv to manage dependencies and environments. I also use the excellent Visual Studio Code extension Python Environment Manager.
Below is my Git configuration. I configure my name and email, turn off any line-breaking handling, and consider all directories safe.
git config --global user.name "George Luiz Bittencourt"
git config --global user.email "george@georgeluiz.com"
git config --global core.autocrlf false
git config --global --add safe.directory *
I use 1Password to manage my passwords and I ๐ this tool! I have been using it for the last four years, and it is worth every penny. One feature I like is the SSH agent it has so that I can store my key pairs inside it, and SSH can use it transparently.
However, Git for Windows has its own SSH installed, and this version does not use the SSH agent from 1Password. To fix that, I had to specify globally what SSH to use using the command line below.
git config --global core.sshCommand C:/Windows/System32/OpenSSH/ssh.exe
Microsoft invested a lot in Windows Terminal, and today, there is no better terminal! It is an open-source project, has many features, and is fully customizable.
My configuration file is here. My customizations are:
- The number of columns (220) and rows (60) are customized for my screen resolution. I use a QHD resolution, so I have much more space.
- Add an entry in the command palette for each profile with the _ prefix to find them easily.
- F1 will open the command palette. I use the same shortcut for Visual Studio Code and Windows Terminal.
- F2 will duplicate my terminal.
- F3 will open the search box.
- F4 will close the current terminal.
- F9 will open a new PowerShell tab.
- F10 will open a new Ubuntu tab.
- F11 will open a new Kali Linux tab.
Oh My Posh is the best companion for Windows Terminal and PowerShell. You can download it from here, and my configuration file is here.
I customized it based on a template I liked and added several segments to provide context for my tools. The customizations are:
- It will show my current Azure subscription.
- My current Kubernetes context is shown.
- Python version and environment will be shown as well.
- The Git integration is fantastic. It will show my current branch, the difference between local and remote clones, etc.
These are the environment variables I have defined to customize my environment.
Env Var | Content | Description |
---|---|---|
HF_DATASETS_CACHE | datasets dir path | Directory where the Hugging Face datasets lib will save the downloaded datasets. |
_NT_SYMBOL_PATH | check the section Debugging Symbols | Path where tools like WinDbg, and NVIDIA Nsight can find debugging symbols on Windows. |
Quickly access the Docker volumes from Windows Explorer creating a symbolic link to the location where they are stored using the command line below. It needs to be executed as administrator.
New-Item -ItemType SymbolicLink -Path "c:\dockervols" -Target "\\wsl.localhost\docker-desktop\tmp\docker-desktop-root\var\lib\docker\volumes"
The install.sh script (one-liner command below) can be used to configure a Linux distribution the way I like. Right now only Ubuntu is supported.
wget -O - https://raw.githubusercontent.com/glzbcrt/my-env/main/install.sh | bash
I have created a curated package of several open source tools that can be used to do reverse engineering, malware analysis, and others. You can download the package here. It is a self-extracing RAR file I created using this file here.
This package was created to speed-up the process of creating a lab environment for analysis of malware and reverse engineering.
As far as I know all tools are free from malware, at least my anti-virus didn't report any issue with them, but use at your own risk. There are not any pirate software in this package, all tools are free, and I download them directly from the owners websites.
I love debugging, and all the low level stuff we need to know to do that. For a successfully debugging session we need the debugging symbols (PDB files on Windows) generated during the build process. Microsoft publishes symbols for their software, and other companies are also doing that.
To use these symbols we must define the symbol path. This path is like a PATH on Windows or Linux, which is a list of paths where the symbols can be found. Below I am documenting the ones I am using.
From all these symbols stores, my final symbol path is:
C:\dev\python\311\DLLs;C:\dev\python\311;srv*D:\symbols*https://msdl.microsoft.com/download/symbols*https://driver-symbols.nvidia.com
I have developed the functions below to facilitate my work. I will add more functions as needed. You can find their source code here. Simply load this file from your .bashrc file.
- pinfo
- cinfo
PowerShell is my official shell (I am still thinking if I will adopt it in Linux instead of bash/zsh), and it is amazing to see how it evolved. With PowerShell Core it is possible to use it in Linux, too! :)
You can find my customized profile here. The customizations I created are:
- I use the famous Terminal-Icons module to include icons in my directory listing.
- The module PSReadLine is configured to show in listview format my history as soon as I start typing a command from my history.
- CTRL+B will open the current directory in File Explorer.
- CTRL+G will jump to my projects directory.
- It will load Oh My Posh.
- I have the following aliases for common commands/actions:
Alias | Command |
---|---|
k | kubectl |
d | docker |
he | helm |
g | git |
t | terraform |
vi | vim |
l | Get-ChildItem |
ll | Get-ChildItem |
kctx | kubectx |
kns | kubens |
gcl | git clone |
gs | git status |
kaf | k apply -f |
kgp | k get pods |
kgd | k get deployment -n |
gcoph | git add -A; git commit -m ; git push |
kcreds | az aks get-credentials |
vs | add Visual Studio tools to the path |
Before I can use my customized PowerShell, I must install the following modules:
Install-Module -Name Terminal-Icons -Repository PSGallery
Install-Module -Name Az -Repository PSGallery -Force
Here, you will find the Visual Studio Code extensions I use and recommend. I have split them between profiles to lower the number of extensions loaded. You can download my profiles here and load them into your Visual Studio Code.
I use Settings Sync to keep my settings synchronized between the computers I use and GitHub Codespaces. You can find my settings here.
The table below shows all my extensions I use organized by type and profile.
Id | Name | Type | Profile |
---|---|---|---|
42crunch.vscode-openapi | OpenAPI (Swagger) Editor | API | Default |
adamhartford.vscode-base64 | vscode-base64 | Productivity | Default |
azapi-vscode.azapi | Terraform AzApi Provider | IaC | Default |
bierner.github-markdown-preview | GitHub Markdown Preview | Markdown | Default |
charliermarsh.ruff | Ruff | Python | Default |
codezombiech.gitignore | gitignore | Git | Default |
DavidAnson.vscode-markdownlint | markdownlint | Markdown | Default |
donjayamanne.githistory | Git History | Git | Default |
donjayamanne.python-extension-pack | Python Extension Pack | Python | Default |
eamodio.gitlens | GitLens โ Git supercharged | Git | Default |
editorconfig.editorconfig | EditorConfig for VS Code | Productivity | Default |
esbenp.prettier-vscode | Prettier - Code formatter | Productivity | Default |
GitHub.codespaces | GitHub Codespaces | GitHub | Default |
GitHub.copilot | GitHub Copilot | GitHub | Default |
github.github-vscode-theme | GitHub Theme | Themes | Default |
github.remotehub | GitHub Repositories | GitHub | Default |
github.vscode-github-actions | GitHub Actions | GitHub | Default |
github.vscode-pull-request-github | GitHub Pull Requests and Issues | GitHub | Default |
GrapeCity.gc-excelviewer | Excel Viewer | Productivity | Default |
Gruntfuggly.todo-tree | Todo Tree | Productivity | Default |
hashicorp.terraform | HashiCorp Terraform | IaC | Default |
heaths.vscode-guid | Insert GUID | Productivity | Default |
humao.rest-client | REST Client | Productivity | Default |
ipedrazas.kubernetes-snippets | Kubernetes Support | Kubernetes | Default |
lunuan.kubernetes-templates | Kubernetes Templates | Kubernetes | Default |
mads-hartmann.bash-ide-vscode | Bash IDE | Shell | Default |
mhutchie.git-graph | Git Graph | Git | Default |
ms-azure-devops.azure-pipelines | Azure Pipelines | Azure DevOps | Default |
ms-azuretools.vscode-apimanagement | Azure API Management | Azure | Default |
ms-azuretools.vscode-azurefunctions | Azure Functions | Azure | Default |
ms-azuretools.vscode-azureterraform | Azure Terraform | IaC | Default |
ms-azuretools.vscode-bicep | Bicep | IaC | Default |
ms-azuretools.vscode-docker | Docker | Container | Default |
ms-dotnettools.dotnet-interactive-vscode | Polyglot Notebooks | Notebook | Default |
ms-kubernetes-tools.vscode-aks-tools | Azure Kubernetes Service | Azure | Default |
ms-kubernetes-tools.vscode-kubernetes-tools | Kubernetes | Kubernetes | Default |
mikestead.dotenv | DotENV | Productivity | Default |
tamasfe.even-better-toml | Even Better TOML | Productivity | Default |
ms-python.autopep8 | autopep8 | Python | Default |
ms-python.isort | isort | Python | Default |
ms-python.mypy-type-checker | Mypy Type Checker | Python | Default |
ms-toolsai.jupyter | Jupyter | Notebook | Default |
ms-toolsai.vscode-ai | Azure Machine Learning | Azure | Default |
ms-toolsai.vscode-ai-remote | Azure Machine Learning - Remote | Azure | Default |
ms-vscode-remote.vscode-remote-extensionpack | Remote Development | Productivity | Default |
ms-vscode.hexeditor | Hex Editor | Productivity | Default |
ms-vscode.powershell | PowerShell | Shell | Default |
ms-vsliveshare.vsliveshare | Live Share | Productivity | Default |
msazurermtools.azurerm-vscode-tools | Azure Resource Manager (ARM) Tools | IaC | Default |
okteto.kubernetes-context | Kubernetes Context | Kubernetes | Default |
quicktype.quicktype | Paste JSON as Code | Development | Default |
redhat.ansible | Ansible | IaC | Default |
redhat.vscode-xml | XML | Productivity | Default |
redhat.vscode-yaml | YAML | Productivity | Default |
rosshamish.kuskus-kusto-syntax-highlighting | [Kuskus] Kusto Syntax Highlighting | Azure | Default |
streetsidesoftware.code-spell-checker | Code Spell Checker | Productivity | Default |
shakram02.bash-beautify | Bash Beautify | Shell | Default |
tyriar.sort-lines | Sort lines | Productivity | Default |
visualstudioexptteam.vscodeintellicode | IntelliCode | Productivity | Default |
vscode-icons-team.vscode-icons | vscode-icons | Theme | Default |
william-voyek.vscode-nginx | NGINX Configuration | NGINX | Default |
dbaeumer.vscode-eslint | ESLint | Linter | Javascript |
xabikos.JavaScriptSnippets | JavaScript (ES6) code snippets | Snippers | Javascript |
golang.go | Go | Go | Go |
rust-lang.rust-analyzer | rust-analyzer | Rust | Rust |
ms-vscode.cpptools-extension-pack | C/C++ Extension Pack | C++ & CUDA | C++ & CUDA |
nvidia.nsight-vscode-edition | Nsight Visual Studio Code Edition | C++ & CUDA | C++ & CUDA |
ms-vscode.makefile-tools | Makefile Tools | C++ & CUDA | C++ & CUDA |
ms-dotnettools.csharp | C# | C# | C# |
ms-dotnettools.csdevkit | C# Dev Kit | C# | C# |
I hope you got here and enjoyed it! As I told you in the beginning, this is a work in progress, so I will be updating it from time to time to reflect the changes I applied.
Thanks!