An opinionated dev environment for C#, TypeScript, and SCSS on Linux (GNOME) with VS Code integration. Each project gets its own isolated shell, consistent color theme, terminal profile, icon, and fonts.
- Per-project isolation and reproducible setup
- Unified colors across VS Code, Oh My Posh, and Ptyxis or GNOME Terminal
- One-command install and clean uninstall
- Ready for Blazor, MAUI, and general C#/TS/SCSS projects
fnmFast Node ManagerpnpmFast, disk space efficient package manager.NET8, 9, 10 SDK, Runtime, and ASP.NET CorePtyxisorGNOME TerminalOh My PoshpromptBashconfiguration- Unified color schemes for
VS Code,Ptyxis,GNOME TerminalandOh My Posh 19predefined dark themes: list, switch, and auto-update config when changing themes
ESLint+@antfu/eslint-configxmljsonyamltypescript- Microsoft Build Platform (MSBuild) files
slnxpropstargetscsprojcsproj.userpubxmlnuspecpkgproj
- XAML files
xaml
- Apple plist files
plist
- SVG files
svg
Stylelintfor SCSS withstylelint-config-twbs-bootstrapMarkdownlintfor Markdown
- Linux
- GNOME
- Git
Note
GNOME 46 or later is required
sudo pacman -Syu
# Ptyxis
sudo pacman -S bash git bc curl bzip2 trash-cli ptyxis
# GNOME Terminal
sudo pacman -S bash git bc curl bzip2 trash-cli gnome-terminal
git clone https://aur.archlinux.org/yay.git && cd yay && makepkg -si --noconfirm
yay -S visual-studio-code-binsudo apt update && sudo apt upgrade -y
# Ptyxis (Only Ubuntu 25.10 and Debian 13)
sudo apt install bash git bc curl bzip2 trash-cli ptyxis
# GNOME Terminal
sudo apt install bash git bc curl bzip2 trash-cli gnome-terminal
curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /usr/share/keyrings/microsoft-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/microsoft-archive-keyring.gpg] https://packages.microsoft.com/repos/code stable main" | sudo tee /etc/apt/sources.list.d/vscode.list
sudo apt update && sudo apt install codesudo dnf update -y
# Ptyxis
sudo dnf install bash git bc curl bzip2 trash-cli ptyxis
# GNOME Terminal
sudo dnf install bash git bc curl bzip2 trash-cli gnome-terminal
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
echo "[code]
name=Visual Studio Code
baseurl=https://packages.microsoft.com/yumrepos/vscode
enabled=1
gpgcheck=1
gpgkey=https://packages.microsoft.com/keys/microsoft.asc" | sudo tee /etc/yum.repos.d/vscode.repo
sudo dnf install codesudo zypper update -y
# Ptyxis
sudo zypper install bash git bc curl bzip2 trash-cli ptyxis
# GNOME Terminal
sudo zypper install bash git bc curl bzip2 trash-cli gnome-terminal
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo zypper addrepo https://packages.microsoft.com/yumrepos/vscode vscode
sudo zypper install codeDownload the latest devenv release and extract it:
mkdir ~/myawesomeproject
# and/or
cd ~/myawesomeproject
wget https://github.com/czirok/devenv/releases/download/v2026.02.18/devenv.tar.bz2
# Safe extraction - won't overwrite existing files
tar xjfv devenv.tar.bz2 --skip-old-filesImportant
The install script .vscode/.linux/install.sh must be run from the root of the git repository or project root. This ensures correct environment variables and paths are set.
The environment is self-managing: running any command will regenerate related files from templates, overwriting manual changes.
.vscode/.linux/install.sh --helpAdd -v or --verbose for detailed output for each command.
First, check dependencies and then install any missing components with your package manager:
.vscode/.linux/install.sh --dependencyEdit the .vscode/.linux/install.env file to suit your project:
PROJECT_TITLE="Dev Env" <- "My Awesome Project"
PROJECT_ID="devenv" <- "myawesomeproject"
PROJECT_ENV="DEVENV" <- "MYPROJECTENV"
THEME="Steel Blue" <- "Storm Cloud"
EDITOR_FONT="FiraCode Nerd Font Mono" <- "My editor font"
FONTED_FONT="Adwaita Sans" <- "My UI font"
PROJECT_TERMINAL="gnome-terminal" <- "ptyxis" or "gnome-terminal"
GNOME_TERMINAL_ID="105c376f-f0e3-43d4-a021-b19e9d94b1d4"PROJECT_TITLE: Project name, displayed in Oh My Posh prompt and the desktop app. E.g.:"My Awesome Project"PROJECT_ID: Unique project identifier. Used in desktop file, icon, and Ptyxis profile. E.g.:"myawesomeproject"PROJECT_ENV: Environment variable that stores the project path. E.g.:"MYPROJECTENV"->export MYPROJECTENV="/home/user/projects/myawesomeproject"THEME: Developer environment color scheme. E.g.:"Storm Cloud"EDITOR_FONT: Font used in the editor. E.g.:"FiraCode Nerd Font Mono"FONTED_FONT: Font used in the UI. E.g.:"Adwaita Sans"PROJECT_TERMINAL: Terminal emulator used for the project. E.g.:"ptyxis"or"gnome-terminal".
If you choose gnome-terminal, set the GNOME_TERMINAL_ID variable as well. Every project must have a unique GUID!
GNOME_TERMINAL_ID: Unique identifier for the GNOME terminal profile. E.g.:"977d30fd-43fd-4f0a-a80e-be80e64f4f7d".
GUIDs find in the install.env file or generate a new one with:
uuidgenIf you already have a font installed that you want to use, set it in the .vscode/.linux/install.env file. To list font names, use the following command:
.vscode/.linux/install.sh --list-fontsIf the font is not installed, copy it to the .vscode/.linux/fonts folder. To list the names in that folder, run:
.vscode/.linux/install.sh --list-fonts .vscode/.linux/fonts/Edit the .vscode/.linux/install.env file and set the font names:
EDITOR_FONT="My editor font"
FONTED_FONT="My UI font"Install the fonts:
.vscode/.linux/install.sh --fontCaution
--uninstall-font removes only fonts installed by this environment from your user fonts directory ~/.local/share/fonts. Fonts that existed before the first install are preserved.
Uninstall the fonts:
.vscode/.linux/install.sh --uninstall-fontEdit the .vscode/.linux/install.svg file to match your project. For example:
inkscape .vscode/.linux/install.svgAfter editing, you can replace specific colors in install.svg with environment variables so that the icon harmonizes with your project if you want. For example, replace the #07072c color code with the COLOR_ACCENT environment variable. When you change themes, the icon will update automatically. Available variables:
COLOR_ACCENTCOLOR_ACCENT_LIGHTERCOLOR_HIGHLIGHTCOLOR_TEXT
.vscode/.linux/install.sh --terminalCaution
You need to log out and back in for the environment variables to take effect!
After installing the terminal, log out and back in, then open a new Ptyxis or GNOME Terminal "My Awesome Project" and continue installing the remaining components there.
Important
First time you open the terminal, it will prompt you to install the required Node.js version if it's not already installed. Say y to install it:
Can't find an installed Node version matching v24.13.1.
Do you want to install it? answer [y/N]: y
.vscode/.linux/install.sh --allList available themes:
.vscode/.linux/install.sh --list-themesSwitch theme:
.vscode/.linux/install.sh --change-theme "Deep Teal"Install VS Code settings:
.vscode/.linux/install.sh --vscodeIf you haven't already, log out and back in, then install project dependencies in the project terminal:
pnpm installAfter that, you can launch VS Code (without the leading dot), and install the suggested extensions:
codeNote
After installing the extensions, you can change the VS Code UI font settings. Read the Fonted documentation for more information.
This steps need after fresh VS Code installation or upgrade.
Before start VS Code, set write permissions for the workbench files:
sudo chmod 666 /opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.*sudo chmod 666 /usr/share/code/resources/app/out/vs/code/electron-browser/workbench/workbench.*Start the VS Code, press F1 and find the Fonted and enable it.
After enabled, don't click the restart, close it completely and restore the original permissions:
sudo chmod 644 /opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.*sudo chmod 644 /usr/share/code/resources/app/out/vs/code/electron-browser/workbench/workbench.*
Start VS Code again, code+enter and disable the Don't show again.
Node.js tools only:
.vscode/.linux/install.sh --fnm --pnpm.NET 8 Runtime and ASP.NET Core only (no SDK):
.vscode/.linux/install.sh --net8runtime --net8aspnetNote
Uninstall commands remove only what was installed by this environment. Your data and configuration files are not touched.
.vscode/.linux/install.sh --uninstall-all # Uninstall all components
.vscode/.linux/install.sh --uninstall-fnm # Uninstall fnm
.vscode/.linux/install.sh --uninstall-pnpm # Uninstall pnpm
.vscode/.linux/install.sh --uninstall-icon # Uninstall application icon
.vscode/.linux/install.sh --uninstall-desktop # Uninstall desktop application file
.vscode/.linux/install.sh --uninstall-font # Uninstall application font
.vscode/.linux/install.sh --uninstall-oh-my-posh # Uninstall Oh My Posh
.vscode/.linux/install.sh --uninstall-bashrc # Uninstall .bashrc configuration
.vscode/.linux/install.sh --uninstall-environment # Uninstall environment variables
.vscode/.linux/install.sh --uninstall-terminal # Uninstall terminal
.vscode/.linux/install.sh --uninstall-vscode # Uninstall VS Code
.vscode/.linux/install.sh --uninstall-node-modules # Uninstall all node_modules directories
.vscode/.linux/install.sh --uninstall-dotnet # Uninstall .NETCaution
The environment is self-managing. Running any command will regenerate the related files from templates, overwriting manual changes.
To customize, edit the templates located in .vscode/.linux/templates and the .vscode/.linux/.themes/Colors.txt file.
You may freely modify these files, but do not change the names of the environment variables.
Variable names from .vscode/.linux/.themes/Colors.txt:
COLOR_ACCENTCOLOR_ACCENT_LIGHTERCOLOR_HIGHLIGHTCOLOR_TEXTCOLOR_NAME
Variable names from .vscode/.linux/install.env:
PROJECT_TITLEPROJECT_IDPROJECT_ENVTHEMEEDITOR_FONTFONTED_FONTPROJECT_TERMINALGNOME_TERMINAL_ID
After making changes, apply and test them with one or more of the following commands:
.vscode/.linux/install.sh --icon
.vscode/.linux/install.sh --desktop
.vscode/.linux/install.sh --oh-my-posh
.vscode/.linux/install.sh --terminal
.vscode/.linux/install.sh --bashrc
.vscode/.linux/install.sh --vscodeThe project includes a packages/css and a packages/js directory with sample setups for compiling SCSS and TypeScript.
See the .github/releases folder for the changelog.





