Skip to content

Instantly share code, notes, and snippets.

@nandordudas
Last active November 4, 2024 20:51
Show Gist options
  • Save nandordudas/a80971a3cf4a4563a26bc9aa3cfc8c00 to your computer and use it in GitHub Desktop.
Save nandordudas/a80971a3cf4a4563a26bc9aa3cfc8c00 to your computer and use it in GitHub Desktop.
Setup WSL 2 on Windows 11

Windows Development Environment Setup Guide

Warning

This is a work in progress.

TODO: fzf, nvm, delta, exiftool

This guide provides step-by-step instructions for setting up a complete development environment on Windows, including WSL, package managers, and essential tools.

Table of Contents

Prerequisites

Ensure your Windows system meets these requirements:

  • Windows 10 version 2004+ or Windows 11
  • At least 8GB RAM (16GB recommended)
  • Virtualization enabled in BIOS
  • Administrator access

Package Managers

Scoop Installation

# Set execution policy
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

# Install Scoop
$env:SCOOP = "$env:USERPROFILE\Scoop"
[Environment]::SetEnvironmentVariable('SCOOP', $env:SCOOP, 'User')
Invoke-RestMethod -Uri 'https://get.scoop.sh' | Invoke-Expression

# Add essential buckets
scoop install git
scoop bucket add extras
scoop bucket add nerd-fonts

WinGet Setup

# Update existing packages
winget upgrade --all --silent --include-unknown

# Install essential tools
winget install --id Microsoft.PowerShell
winget install --id Microsoft.PowerToys
winget install --id Microsoft.WindowsTerminal

Terminal and Shell Setup

Font Installation

# Install Maple Mono font (recommended)
scoop install Maple-Mono Maple-Mono-NF

# Alternative fonts
scoop install FiraCode-NF
scoop install CascadiaCode-NF

Starship Prompt

# Install Starship
scoop install starship

# Configure PowerShell profile
if (!(Test-Path -Path $PROFILE)) {
  New-Item -ItemType File -Path $PROFILE -Force
}

# Add to PowerShell profile
Add-Content -Path $PROFILE -Value @"
# Initialize Starship
Invoke-Expression (&starship init powershell)

# Custom aliases
Set-Alias -Name g -Value git
Set-Alias -Name c -Value code

# Better directory navigation
function .. { Set-Location .. }
function ... { Set-Location ../.. }
"@

Windows Terminal Settings

{
  "profiles": {
    "defaults": {
      "colorScheme": "Vitesse Dark Soft",
      "cursorShape": "underscore",
      "font": {
        "face": "Maple Mono NF",
        "features": {
          "cv02": 1,
          "cv03": 1
        }
      },
      "opacity": 80,
      "useAcrylic": true
    },
    "list": [
      {
        "guid": "{574e775e-4f2a-5b96-ac1e-a2962a402336}",
        "hidden": false,
        "name": "PowerShell",
        "source": "Windows.Terminal.PowershellCore",
        "commandline": "pwsh.exe -NoLogo"
      }
    ]
  },
  "schemes": [
    {
      "background": "#222222",
      "black": "#393A34",
      "blue": "#6394BF",
      "brightBlack": "#777777",
      "brightBlue": "#6394BF",
      "brightCyan": "#5EAAB5",
      "brightGreen": "#4D9375",
      "brightPurple": "#D9739F",
      "brightRed": "#CB7676",
      "brightWhite": "#FFFFFF",
      "brightYellow": "#E6CC77",
      "cursorColor": "#DBD7CA",
      "cyan": "#5EAAB5",
      "foreground": "#DBD7CA",
      "green": "#4D9375",
      "name": "Vitesse Dark Soft",
      "purple": "#D9739F",
      "red": "#CB7676",
      "selectionBackground": "#EEEEEE",
      "white": "#DBD7CA",
      "yellow": "#E6CC77"
    },
    {
      "background": "#F1F0E9",
      "black": "#121212",
      "blue": "#296AA3",
      "brightBlack": "#AAAAAA",
      "brightBlue": "#296AA3",
      "brightCyan": "#2993A3",
      "brightGreen": "#1E754F",
      "brightPurple": "#8A63D2",
      "brightRed": "#AB5959",
      "brightWhite": "#DDDDDD",
      "brightYellow": "#BDA437",
      "cursorColor": "#393A34",
      "cyan": "#2993A3",
      "foreground": "#393A34",
      "green": "#1E754F",
      "name": "Vitesse Light Soft",
      "purple": "#6F42C1",
      "red": "#AB5959",
      "selectionBackground": "#222222",
      "white": "#DBD7CA",
      "yellow": "#BDA437"
    }
  ]
}

Development Tools

Visual Studio Code

# Install VS Code
winget install Microsoft.VisualStudioCode

# Essential extensions
code --install-extension ms-vscode-remote.remote-wsl
code --install-extension ms-vscode-remote.remote-containers
code --install-extension github.copilot
code --install-extension eamodio.gitlens

Docker Setup

# Install Docker Desktop
winget install Docker.DockerDesktop

# Alternative: Docker in WSL
wsl -d Ubuntu-24.04 -u root bash -c '
  apt update && apt upgrade -y
  curl -fsSL https://get.docker.com -o get-docker.sh
  sh get-docker.sh
  usermod -aG docker $SUDO_USER
  systemctl enable docker
  systemctl start docker
'

WSL Setup

Basic Installation

# Install WSL with Ubuntu
wsl --install --distribution Ubuntu-24.04
wsl --set-default Ubuntu-24.04
wsl --update

# Configure WSL
$wslConfig = @"
[wsl2]
memory=8GB
processors=4
swap=2GB
localhostForwarding=true

[interop]
enabled=true
appendWindowsPath=false
"@

$wslConfigPath = "$env:USERPROFILE\.wslconfig"
Set-Content -Path $wslConfigPath -Value $wslConfig

WSL Backup and Migration

# Create WSL backup directory
$wslPath = "E:\WSL"
New-Item -ItemType Directory -Path $wslPath -Force

# Export WSL distribution
wsl --shutdown
wsl --export Ubuntu-24.04 "$wslPath\Ubuntu-24.04.tar"
wsl --unregister Ubuntu-24.04
wsl --import Ubuntu-24.04 "$wslPath\Ubuntu-24.04" "$wslPath\Ubuntu-24.04.tar"
wsl --set-default Ubuntu-24.04

Git Configuration

Delta Installation in WSL

#!/bin/bash
# Install Delta and ExifTool
VERSION=$(curl -s "https://api.github.com/repos/dandavison/delta/releases/latest" | grep -Po '"tag_name": "\K.*?(?=")')
wget "https://github.com/dandavison/delta/releases/download/${VERSION}/git-delta_${VERSION}_amd64.deb"
sudo dpkg -i git-delta_${VERSION}_amd64.deb
sudo apt install -y exiftool
rm git-delta_${VERSION}_amd64.deb

Multi-Repository Setup

# Create repository structure
mkdir -p ~/Code/{GitHub,GitLab,BitBucket}

# Configure repository-specific settings
for repo in GitHub GitLab BitBucket; do
  git config --global --add "includeIf.gitdir:$HOME/Code/$repo/**/.git.path" "$HOME/Code/$repo/.gitconfig"
done

# Configure fetch specs
git config --file="$HOME/Code/GitHub/.gitconfig" --add remote.origin.fetch "+refs/pull/*/head:refs/remotes/origin/pull_requests/*"
git config --file="$HOME/Code/GitLab/.gitconfig" --add remote.origin.fetch "+refs/merge-requests/*/head:refs/remotes/origin/merge_requests/*"
git config --file="$HOME/Code/BitBucket/.gitconfig" --add remote.origin.fetch "+refs/pull-requests/*/from:refs/remotes/origin/pull_requests/*"

Additional Configuration

GPG Setup

# Install GPG
scoop install sudo
sudo scoop install gpg4win

# Configure GPG in WSL
wsl -d Ubuntu-24.04 bash -c '
  echo "export GPG_TTY=$(tty)" >> ~/.bashrc
  echo "export GPG_TTY=$(tty)" >> ~/.zshrc
'

ZSH Configuration in WSL

# Install and configure ZSH
sudo apt install -y zsh curl git
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
curl -sS https://starship.rs/install.sh | sh

# Add to ~/.zshrc
cat << 'EOF' >> ~/.zshrc
eval "$(starship init zsh)"

# Custom aliases
alias g='git'
alias c='code'
alias d='docker'
alias dc='docker compose'

# Better directory navigation
alias ..='cd ..'
alias ...='cd ../..'
EOF

Troubleshooting

Common Issues

  1. WSL Installation Fails

    • Enable Virtual Machine Platform: dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all
    • Enable WSL: dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all
  2. Docker Issues

    • Reset Docker: wsl --shutdown && net stop com.docker.service
    • Clear Docker data: rm -rf ~/.docker (both in Windows and WSL)
  3. GPG Signing Issues

    • Ensure GPG agent is running: gpg-agent --daemon
    • Check key availability: gpg --list-secret-keys --keyid-format LONG

References

#!/usr/bin/env bash
#-------------------------------------------------------------------------------
# Git Configuration Manager
# Version: 1.2.0
# Description: Comprehensive Git configuration setup script with modular settings
#-------------------------------------------------------------------------------
set -o nounset
set -o errexit
set -o pipefail
IFS=$'\n\t'
#-------------------------------------------------------------------------------
# Constants and Global Variables
#-------------------------------------------------------------------------------
readonly CONFIG_FILE="$HOME/.gitconfig"
readonly GPG_KEY_ALGORITHM="ed25519/cert,sign+cv25519/encr"
TIMESTAMP="$(date +%F_%T)"
declare -A cache
#-------------------------------------------------------------------------------
# Logging Functions
#-------------------------------------------------------------------------------
log_info() {
printf "\033[0;34m➜\033[0m %s\n" "$1"
}
log_success() {
printf "\033[0;32m✓\033[0m %s\n" "$1"
}
log_warning() {
printf "\033[0;33m⚠\033[0m %s\n" "$1" >&2
}
log_error() {
printf "\033[0;31m✗\033[0m %s\n" "$1" >&2
}
#-------------------------------------------------------------------------------
# Utility Functions
#-------------------------------------------------------------------------------
backup_config() {
if [[ -e "$CONFIG_FILE" ]]; then
local backup_file="${CONFIG_FILE}-${TIMESTAMP}.bak"
mv "${CONFIG_FILE}" "${backup_file}"
log_info "Backed up existing config to: ${backup_file}"
fi
}
exists() {
command -v "$1" >/dev/null 2>&1
}
confirm() {
local title="$1"
local answer
while true; do
read -rp "$(log_info "$title (Y/n): ")" answer
case ${answer,,} in
y|yes|'') return 0 ;;
n|no) return 1 ;;
*) log_warning "Invalid input. Please enter 'Y' or 'N'." ;;
esac
done
}
validate_email() {
local email="$1"
local email_regex="^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$"
if [[ ! $email =~ $email_regex ]]; then
log_error "Invalid email format: $email"
return 1
fi
}
get_secret_keys() {
local email="$1"
if [[ -n "${cache[$email]:-}" ]]; then
echo "${cache[$email]}"
return
fi
local result
result=$(gpg --list-secret-keys "$email" 2>/dev/null | sed -n '2s/.*\(.\{16\}\)$/\1/p')
cache["$email"]=$result
echo "$result"
}
#-------------------------------------------------------------------------------
# Git Configuration Functions
#-------------------------------------------------------------------------------
get_user_settings() {
local email="$1"
local name="$2"
validate_email "$email" || return 1
declare -A settings=(
["user.email"]="$email"
["user.name"]="$name"
["user.useConfigOnly"]="true"
)
declare -p settings
}
get_core_settings() {
local autocrlf_value="input"
if [[ "$OSTYPE" == "msys" || "$OSTYPE" == "win32" ]]; then
autocrlf_value="true"
fi
declare -A settings=(
["advice.detachedHead"]="false"
["core.autocrlf"]="${autocrlf_value}"
["core.abbrev"]="12"
["core.fsmonitor"]="true"
["core.quotePath"]="false"
["core.untrackedCache"]="true"
["core.whitespace"]="fix,-indent-with-non-tab,trailing-space,cr-at-eol"
)
declare -p settings
}
get_branch_settings() {
local settings
declare -A settings
if confirm "Do you prefer rebasing instead of merging?"; then
settings=(
["branch.autoSetupRebase"]="always"
["pull.rebase"]="merges"
["rebase.updateRefs"]="true"
)
else
settings=(
["branch.autoSetupRebase"]="never"
["pull.rebase"]="false"
)
fi
declare -p settings
}
get_color_settings() {
declare -A settings=(
["color.pager"]="true"
["color.ui"]="true"
["color.branch.current"]="yellow reverse"
["color.branch.local"]="yellow"
["color.branch.remote"]="green"
["color.branch.commit"]="227 bold"
["color.branch.frag"]="magenta bold"
["color.branch.meta"]="227"
["color.branch.new"]="green bold"
["color.branch.old"]="red bold 52"
["color.branch.whitespace"]="red reverse"
["color.diff-highlight.newHighlight"]="green bold 22"
["color.diff-highlight.newNormal"]="green bold"
["color.diff-highlight.oldHighlight"]="red bold 52"
["color.diff-highlight.oldNormal"]="red bold"
["color.status.added"]="yellow"
["color.status.changed"]="green"
["color.status.untracked"]="cyan"
)
declare -p settings
}
get_delta_settings() {
if ! exists "delta" || ! exists "exiftool"; then
log_error "Required dependencies not found:"
[[ ! -x "$(command -v delta)" ]] && log_error "- Delta: https://github.com/dandavison/delta"
[[ ! -x "$(command -v exiftool)" ]] && log_error "- Exiftool: https://exiftool.org/"
return 1
fi
declare -A settings=(
["core.pager"]="delta"
["delta.commit-decoration-style"]="bold yellow box ul"
["delta.file-style"]="bold yellow ul"
["delta.hunk-header-decoration-style"]="yellow box"
["delta.line-numbers"]="true"
["delta.minus-color"]="#340001"
["delta.plus-color"]="#012800"
["delta.side-by-side"]="true"
["delta.whitespace-error-style"]="22 reverse"
["diff.exif.textconv"]="exiftool"
["interactive.diffFilter"]="delta --color-only"
)
declare -p settings
}
get_diff_settings() {
declare -A settings=(
["diff.algorithm"]="histogram"
["diff.colorMoved"]="default"
["diff.indentHeuristic"]="true"
["diff.mnemonicPrefix"]="true"
["diff.renames"]="copies"
["difftool.prompt"]="false"
)
declare -p settings
}
get_fetch_settings() {
declare -A settings=(
["fetch.prune"]="true"
["fetch.pruneTags"]="true"
["fetch.writeCommitGraph"]="true"
)
declare -p settings
}
get_misc_settings() {
declare -A settings=(
["feature.experimental"]="true"
["gc.cruftPacks"]="true"
["grep.column"]="true"
["grep.fullName"]="true"
["grep.lineNumber"]="true"
["init.defaultBranch"]="main"
["interactive.singleKey"]="true"
["maintenance.auto"]="false"
["maintenance.strategy"]="incremental"
["pack.writeReverseIndex"]="true"
["revert.reference"]="true"
["status.showUntrackedFiles"]="all"
["tag.sort"]="version:refname"
["transfer.fsckObjects"]="true"
)
declare -p settings
}
get_merge_settings() {
declare -A settings=(
["merge.conflictStyle"]="diff3"
["merge.ff"]="only"
["mergetool.prompt"]="false"
)
declare -p settings
}
get_push_settings() {
declare -A settings=(
["push.autoSetupRemote"]="true"
["push.default"]="simple"
["push.followTags"]="true"
["push.useForceIfIncludes"]="true"
)
declare -p settings
}
get_rebase_settings() {
declare -A settings=(
["rebase.abbreviateCommands"]="true"
["rebase.autoSquash"]="true"
["rebase.autoStash"]="true"
["rebase.updateRefs"]="true"
)
declare -p settings
}
get_rerere_settings() {
declare -A settings=(
["rerere.autoUpdate"]="true"
["rerere.enabled"]="true"
)
declare -p settings
}
get_url_settings() {
declare -A settings=(
["url.https://bitbucket.org/.insteadOf"]="bb:"
["url.https://github.com/.insteadOf"]="gh:"
["url.https://gitlab.com/.insteadOf"]="gl:"
)
declare -p settings
}
get_gpg_settings() {
local email="$1"
local name="$2"
local existing_key
existing_key=$(get_secret_keys "$email")
if [[ -z "$existing_key" ]]; then
log_info "Generating new GPG key..."
gpg --quick-generate-key "$name <$email>" "${GPG_KEY_ALGORITHM}"
existing_key=$(get_secret_keys "$email")
fi
declare -A settings=(
["commit.gpgSign"]="true"
["tag.forceSignAnnotated"]="true"
["tag.gpgSign"]="true"
["user.signingKey"]="${existing_key}"
)
declare -p settings
}
get_vscode_settings() {
declare -A settings=(
["core.editor"]="code --wait"
["diff.tool"]="default-difftool"
["difftool.default-difftool.cmd"]="code --wait --diff \$LOCAL \$REMOTE"
["merge.tool"]="code"
["mergetool.code.cmd"]="code --wait --merge \$REMOTE \$LOCAL \$BASE \$MERGED"
)
declare -p settings
}
#-------------------------------------------------------------------------------
# Configuration Application Function
#-------------------------------------------------------------------------------
apply_settings() {
local settings_string="$1"
local -A settings
eval "$settings_string"
for key in "${!settings[@]}"; do
git config --global "$key" "${settings[$key]}"
log_success "Applied setting: $key = ${settings[$key]}"
done
}
#-------------------------------------------------------------------------------
# Main Function
#-------------------------------------------------------------------------------
main() {
local email name
local -a config_settings
# Ensure we're not running as root
if [[ $EUID -eq 0 ]]; then
log_error "This script should not be run as root"
exit 1
fi
log_info "Starting Git configuration setup..."
# Backup existing configuration
backup_config
# Get user information
while true; do
read -rp "$(log_info "Enter your email: ")" email
if validate_email "$email"; then
break
fi
done
read -rp "$(log_info "Enter your name: ")" name
# Collect all settings
config_settings+=("$(get_user_settings "$email" "$name")")
config_settings+=("$(get_core_settings)")
config_settings+=("$(get_branch_settings)")
config_settings+=("$(get_color_settings)")
config_settings+=("$(get_diff_settings)")
config_settings+=("$(get_fetch_settings)")
config_settings+=("$(get_misc_settings)")
config_settings+=("$(get_merge_settings)")
config_settings+=("$(get_push_settings)")
config_settings+=("$(get_rebase_settings)")
config_settings+=("$(get_rerere_settings)")
config_settings+=("$(get_url_settings)")
if confirm "Set up delta (colorized git diff viewer)?"; then
config_settings+=("$(get_delta_settings)")
fi
if confirm "Set up GPG key for signing commits?"; then
config_settings+=("$(get_gpg_settings "$email" "$name")")
fi
if exists "code" && confirm "Set up Visual Studio Code as Git editor?"; then
config_settings+=("$(get_vscode_settings)")
fi
# Apply all collected settings
log_info "Applying Git configurations..."
for settings in "${config_settings[@]}"; do
apply_settings "$settings"
done
log_success "Git configuration completed successfully!"
# Show final configuration
log_info "Current Git configuration:"
git config --list --show-origin
}
# Execute main function
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
trap 'log_error "Script interrupted. Exiting..."' INT TERM
main "$@"
fi
[alias]
#------------------------------------------------------------
# Basic Operations
#------------------------------------------------------------
# Edit global git configuration
conf = config --global --edit
# Add changes interactively
addp = add --patch
#------------------------------------------------------------
# Commit Operations
#------------------------------------------------------------
# Amend the last commit without editing the message
mnd = commit --all --amend --no-edit
# Amend staged files to the latest commit
amend = mnd --reuse-message=HEAD
# Undo the last commit, keeping changes staged
undo = reset HEAD~1 --mixed
#------------------------------------------------------------
# Branch and Merge Operations
#------------------------------------------------------------
# Merge without fast-forward
mff = merge --no-ff
# Cherry-pick without committing
pick = cherry-pick --no-commit
# Continue a rebase operation
cont = rebase --continue
#------------------------------------------------------------
# Stash Operations
#------------------------------------------------------------
# Stash changes while keeping index
stashk = stash push --keep-index
# Discard working directory changes
discard = checkout --
#------------------------------------------------------------
# Rebase Operations
#------------------------------------------------------------
# Interactive rebase onto specified branch (defaults to main)
rebase-onto = "!f() { \
git rebase --onto ${1-main} ${2-main}; \
}; f"
# Interactive rebase with specified number of commits
reb = "!r() { \
git rebase --interactive HEAD~$1; \
}; r"
# Rebase all commits on current branch
rebase-branch = "!f() { \
git rebase --interactive $(git merge-base HEAD ${1-main}); \
}; f"
#------------------------------------------------------------
# Remote Operations
#------------------------------------------------------------
# Fetch all remotes and prune deleted branches
fp = fetch --all --prune
# Push force with safety checks
pushf = push --force-with-lease --force-if-includes
# Interactive rebase with remote main
promi = "!r() { \
git pull --rebase=interactive origin ${1-main}; \
}; r"
#------------------------------------------------------------
# Log and History
#------------------------------------------------------------
# Pretty graph log
lg = log --graph \
--abbrev-commit \
--decorate \
--date=relative \
--format=format:'%C(bold blue)%h%C(reset)%C(bold yellow)%d%C(reset) %C(white)%s%C(reset) %C(bold green)(%ar)%C(reset)' \
--all
# Show new commits compared to main
new = lg main..HEAD
# Show commits missing from current branch
missing = lg HEAD..main
# List commits ahead of main
ahead = "!git log main..HEAD --oneline"
#------------------------------------------------------------
# Maintenance and Cleanup
#------------------------------------------------------------
# Initialize new repository with maintenance
iint = "!f() { \
git init && \
git maintenance register && \
git commit --allow-empty --message 'chore: initial commit'; \
}; f"
# Comprehensive cleanup and maintenance
cleanup = "!f() { \
# Remove merged branches
git branch --merged main | \
grep -vE '(^\\*|main)' | \
sed 's/^ *//;s/ *$//' | \
xargs -r -n 1 git branch -d && \
# Run maintenance tasks
git fsck && \
git maintenance run --task=gc && \
git repack -Ad && \
git rerere gc; \
}; f"
# System Environment Manager
# Manages system packages and environment initialization
# Version: 1.0.0
using namespace System.Management.Automation
#Region Configuration
$script:CONFIG = @{
RequiredModules = @('Microsoft.PowerShell.Management')
PackageManagers = @{
Scoop = @{
Command = 'scoop'
UpdateCmd = 'update --all --quiet'
CleanupCmd = @(
'cleanup --all --cache'
'cache rm --all'
)
}
WinGet = @{
Command = 'winget'
UpdateCmd = 'upgrade --all --silent --include-unknown'
}
WSL = @{
Command = 'wsl'
UpdateCmd = '--update'
LinuxCmds = @(
'apt update --yes && apt upgrade --yes && apt autoremove --yes'
'if apt list --upgradable 2>/dev/null | grep -qv "Listing..."; then apt list --upgradable 2>/dev/null | awk -F/ "NR>1 {print \$1}" | xargs sudo apt install -y; else echo "No packages to upgrade"; fi'
)
}
}
}
#EndRegion Configuration
#Region Enums
enum SystemAction {
None
Restart
Logoff
Shutdown
}
#EndRegion Enums
#Region Helper Functions
function Test-AdminPrivileges {
[CmdletBinding()]
[OutputType([bool])]
param()
$identity = [Security.Principal.WindowsIdentity]::GetCurrent()
$principal = New-Object Security.Principal.WindowsPrincipal($identity)
return $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
}
function Test-CommandAvailability {
[CmdletBinding()]
[OutputType([bool])]
param(
[Parameter(Mandatory = $true)]
[string]$CommandName
)
return [bool](Get-Command $CommandName -ErrorAction SilentlyContinue)
}
function Write-LogMessage {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[string]$Message,
[Parameter()]
[ValidateSet('Info', 'Warning', 'Error')]
[string]$Level = 'Info',
[Parameter()]
[ConsoleColor]$ForegroundColor = 'White'
)
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$logMessage = "[$timestamp] [$Level] $Message"
switch ($Level) {
'Warning' { Write-Warning $Message }
'Error' { Write-Error $Message }
default { Write-Host $logMessage -ForegroundColor $ForegroundColor }
}
}
function Invoke-SystemAction {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[SystemAction]$Action
)
switch ($Action) {
'Restart' {
Write-LogMessage "Restarting computer..." -ForegroundColor Yellow
Restart-Computer -Force
}
'Logoff' {
Write-LogMessage "Logging off user..." -ForegroundColor Yellow
logoff
}
'Shutdown' {
Write-LogMessage "Shutting down computer..." -ForegroundColor Yellow
Stop-Computer -Force
}
}
}
#EndRegion Helper Functions
#Region Package Management Functions
function Update-ScoopPackages {
[CmdletBinding()]
param()
$config = $script:CONFIG.PackageManagers.Scoop
if (-not (Test-CommandAvailability $config.Command)) {
Write-LogMessage "Scoop is not installed" -Level Warning
return
}
try {
Write-LogMessage "Updating Scoop packages..." -ForegroundColor Cyan
Invoke-Expression "$($config.Command) $($config.UpdateCmd)"
foreach ($cmd in $config.CleanupCmd) {
Invoke-Expression "$($config.Command) $cmd"
}
}
catch {
Write-LogMessage "Failed to update Scoop: $_" -Level Error
}
}
function Update-WinGetPackages {
[CmdletBinding()]
param()
$config = $script:CONFIG.PackageManagers.WinGet
if (-not (Test-CommandAvailability $config.Command)) {
Write-LogMessage "WinGet is not installed" -Level Warning
return
}
try {
Write-LogMessage "Updating WinGet packages..." -ForegroundColor Cyan
Invoke-Expression "$($config.Command) $($config.UpdateCmd)"
}
catch {
Write-LogMessage "Failed to update WinGet: $_" -Level Error
}
}
function Update-WslPackages {
[CmdletBinding()]
param()
$config = $script:CONFIG.PackageManagers.WSL
if (-not (Test-CommandAvailability $config.Command)) {
Write-LogMessage "WSL is not installed" -Level Warning
return
}
try {
Write-LogMessage "Updating WSL..." -ForegroundColor Cyan
Invoke-Expression "$($config.Command) $($config.UpdateCmd)"
foreach ($cmd in $config.LinuxCmds) {
wsl --user root -- sh -c $cmd
}
}
catch {
Write-LogMessage "Failed to update WSL: $_" -Level Error
}
}
#EndRegion Package Management Functions
#Region Main Functions
function Initialize-Environment {
[CmdletBinding()]
[OutputType([bool])]
param()
Begin {
Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'
}
Process {
try {
# Load required modules
foreach ($module in $script:CONFIG.RequiredModules) {
if (-not (Get-Module -Name $module -ErrorAction SilentlyContinue)) {
Import-Module $module
}
}
# Initialize Starship if available
if (Test-CommandAvailability 'starship') {
Invoke-Expression (& starship init powershell)
}
else {
Write-LogMessage "Starship is not installed" -Level Warning
}
return $true
}
catch {
Write-LogMessage "Failed to initialize environment: $_" -Level Error
return $false
}
}
}
function Update-SystemPackages {
[CmdletBinding()]
param (
[Parameter()]
[switch]$RestartComputer,
[Parameter()]
[switch]$LogOffUser,
[Parameter()]
[switch]$ShutdownComputer,
[Parameter()]
[switch]$ForceElevate
)
Begin {
Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'
# Check for admin privileges if force elevate is specified
if ($ForceElevate -and -not (Test-AdminPrivileges)) {
Start-Process powershell.exe -Verb RunAs -ArgumentList @(
'-NoProfile',
'-Command',
"& {$(Get-Command $MyInvocation.MyCommand.Name).ScriptBlock} $($PSBoundParameters | ConvertTo-Json)"
)
return
}
}
Process {
try {
# Start transcript logging
$logPath = Join-Path $env:TEMP "SystemUpdate_$(Get-Date -Format 'yyyyMMdd_HHmmss').log"
Start-Transcript -Path $logPath
# Update packages
Update-ScoopPackages
Update-WinGetPackages
Update-WslPackages
# Determine system action
$action = 'None'
if ($RestartComputer) { $action = 'Restart' }
elseif ($LogOffUser) { $action = 'Logoff' }
elseif ($ShutdownComputer) { $action = 'Shutdown' }
if ($action -ne 'None') {
Invoke-SystemAction -Action $action
}
}
catch {
Write-LogMessage "System update failed: $_" -Level Error
}
finally {
Stop-Transcript
}
}
}
#EndRegion Main Functions
#Region Initialization
# Create aliases
Set-Alias -Name upb -Value Update-SystemPackages -Force
# Initialize environment
if (-not (Initialize-Environment)) {
Write-LogMessage "Environment initialization failed" -Level Warning
}
#EndRegion Initialization
# Export members
Export-ModuleMember -Function @(
'Initialize-Environment',
'Update-SystemPackages'
) -Alias 'upb'
<#
.SYNOPSIS
System Environment Manager Module
.DESCRIPTION
This module provides functions for managing system packages and environment initialization.
It handles updates for Scoop, WinGet, and WSL, along with system environment configuration.
.EXAMPLE
Update-SystemPackages -Verbose
# Updates all packages with detailed output
.EXAMPLE
Update-SystemPackages -RestartComputer
# Updates all packages and restarts the computer
.EXAMPLE
upb -ForceElevate
# Updates all packages with admin privileges
.NOTES
Requires PowerShell 5.1 or later
Some features require administrative privileges
#>
#!/usr/bin/env zsh
#-------------------------------------------------------------------------------
# Environment Variables
#-------------------------------------------------------------------------------
export ZSH="$HOME/.oh-my-zsh"
export NVM_DIR="$HOME/.nvm"
export DISABLE_MAGIC_FUNCTIONS="true"
export ENABLE_CORRECTION="true"
export HIST_STAMPS="yyyy-mm-dd"
#-------------------------------------------------------------------------------
# Helper Functions
#-------------------------------------------------------------------------------
function is_readable() {
[[ -f "$1" && -r "$1" && -s "$1" ]]
}
function exists() {
command -v "$1" &>/dev/null
}
function install_if_missing() {
local command="$1"
local install_command="$2"
if ! exists "$command"; then
echo "Installing $command..."
eval "$install_command"
fi
}
#-------------------------------------------------------------------------------
# Custom Navigation Functions
#-------------------------------------------------------------------------------
# Unalias any existing 'z' command
unalias z 2>/dev/null
function z() {
if [ $# -gt 0 ]; then
zshz "$*" && return
fi
cd "$(zshz -l 2>&1 |
fzf --height 40% \
--nth 2.. \
--reverse \
--inline-info \
+s \
--tac \
--query "${*##-* }" |
sed 's/^[0-9,.]* *//')"
}
#-------------------------------------------------------------------------------
# Plugin Management (Antigen)
#-------------------------------------------------------------------------------
function setup_antigen() {
local antigen_file="$HOME/antigen.zsh"
if ! is_readable "$antigen_file"; then
curl --location https://git.io/antigen >"$antigen_file"
fi
source "$antigen_file"
# Configure Antigen bundles
antigen use oh-my-zsh
antigen bundle zsh-users/zsh-autosuggestions
antigen bundle z-shell/F-Sy-H --branch=main
antigen apply
}
setup_antigen
#-------------------------------------------------------------------------------
# Oh My Zsh Configuration
#-------------------------------------------------------------------------------
plugins=(git z)
zstyle ':omz:plugins:git' aliases no
source "$ZSH/oh-my-zsh.sh"
#-------------------------------------------------------------------------------
# Aliases
#-------------------------------------------------------------------------------
alias zshconfig='code --wait ~/.zshrc && source ~/.zshrc'
alias qfind='find . -name'
alias gg='cd ~/Code/GitHub/nandordudas'
# Use modern 'eza' if available, fallback to standard 'ls'
if exists eza; then
alias ls="eza -laF --icons --git"
else
alias ls="ls -laF"
fi
#-------------------------------------------------------------------------------
# Development Environment Setup
#-------------------------------------------------------------------------------
# NVM (Node Version Manager)
function setup_nvm() {
if is_readable "${NVM_DIR}/nvm.sh"; then
source "${NVM_DIR}/nvm.sh"
nvm use default --silent
fi
if is_readable "${NVM_DIR}/bash_completion"; then
source "${NVM_DIR}/bash_completion"
fi
}
# PNPM Setup and Completion
function setup_pnpm() {
local completion_file="$HOME/completion-for-pnpm.zsh"
install_if_missing "pnpm" "npm install --global pnpm@latest"
if ! is_readable "$completion_file"; then
pnpm completion zsh >"$completion_file"
fi
source "$completion_file"
}
setup_nvm
setup_pnpm
#-------------------------------------------------------------------------------
# Additional Tools Setup
#-------------------------------------------------------------------------------
# FZF
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
# Starship Prompt
install_if_missing "starship" "curl --silent --show-error https://starship.rs/install.sh | sh"
eval "$(starship init zsh)"
#-------------------------------------------------------------------------------
# Key Bindings
#-------------------------------------------------------------------------------
bindkey "${key[Up]}" fzf-history-widget
#-------------------------------------------------------------------------------
# Cleanup
#-------------------------------------------------------------------------------
# Clean up helper functions after configuration is complete
unset -f is_readable exists install_if_missing setup_antigen setup_nvm setup_pnpm
{
"Print to console": {
"scope": "typescript,typescriptreact,vue",
"prefix": "clog",
"body": ["console.log($0) // eslint-disable-line no-console"],
"description": "Log output to the console"
},
"Variable - const or let": {
"scope": "typescript,typescriptreact,vue",
"prefix": "$",
"body": ["${1|const,let|} ${3:{ username \\}} = ${2:{ username: 'John' \\}}"],
"description": "Create hoisted variable"
},
"Export module": {
"scope": "typescript,typescriptreact",
"prefix": "ex",
"body": ["export ${2:{ default as ${3:Component} \\}} from '$1'"],
"description": "Export module"
},
"Import module": {
"scope": "typescript,typescriptreact,vue",
"prefix": "im",
"body": ["import ${2:{ ${3:resolve} \\}} from '${1:node:path}'"],
"description": "Import module"
}
}
// Place your key bindings in this file to override the defaults
[
{
"key": "ctrl+e w",
"command": "editor.emmet.action.wrapWithAbbreviation"
},
{
"key": "shift+alt+right",
"command": "-cursorWordEndRightSelect",
"when": "editorTextFocus"
},
{
"key": "shift+alt+left",
"command": "-cursorWordStartLeftSelect",
"when": "editorTextFocus"
},
{
"key": "alt alt",
"command": "workbench.action.showCommands",
"when": "editorTextFocus"
},
{
"key": "shift shift",
"command": "workbench.action.quickOpen",
"when": "editorTextFocus"
}
]
# WSL Version Manager
# Helps manage and update WSL Ubuntu distributions
# Author: Nándor Dudás
# Version: 1.0.0
using namespace System.IO
using namespace System.Management.Automation
#Region Configuration
$script:CONFIG = @{
DefaultWslPath = "E:\WSL"
MinimumDiskSpace = 10GB # Minimum required disk space
ValidUbuntuVersions = @('22.04', '23.04', '23.10')
}
#EndRegion Configuration
#Region Enums
enum WslOperation {
Export
Import
Unregister
SetDefault
}
#EndRegion Enums
#Region Helper Functions
function Test-WslPrerequisites {
[CmdletBinding()]
[OutputType([bool])]
param()
Write-Verbose "Checking WSL prerequisites..."
# Check if WSL is installed
if (-not (Get-Command wsl -ErrorAction SilentlyContinue)) {
throw [System.ComponentModel.Win32Exception]::new(
"WSL is not installed or not in the system PATH."
)
}
# Check if running with admin privileges
$isAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if (-not $isAdmin) {
throw [UnauthorizedAccessException]::new(
"This script requires administrative privileges."
)
}
return $true
}
function Test-DiskSpace {
[CmdletBinding()]
[OutputType([bool])]
param(
[Parameter(Mandatory = $true)]
[string]$Path
)
Write-Verbose "Checking available disk space..."
$drive = (Get-Item $Path).PSDrive
$freeSpace = $drive.Free
if ($freeSpace -lt $script:CONFIG.MinimumDiskSpace) {
throw [System.IO.IOException]::new(
"Insufficient disk space. Required: $($script:CONFIG.MinimumDiskSpace / 1GB)GB, Available: $([math]::Round($freeSpace / 1GB, 2))GB"
)
}
return $true
}
function Invoke-WslCommand {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[WslOperation]$Operation,
[Parameter(Mandatory = $true)]
[hashtable]$Params
)
$command = switch ($Operation) {
'Export' { "wsl --export `"$($Params.Distribution)`" `"$($Params.Path)`"" }
'Import' { "wsl --import `"$($Params.Distribution)`" `"$($Params.InstallPath)`" `"$($Params.SourcePath)`"" }
'Unregister' { "wsl --unregister `"$($Params.Distribution)`"" }
'SetDefault' { "wsl --set-default `"$($Params.Distribution)`"" }
}
Write-Verbose "Executing WSL command: $command"
$result = Invoke-Expression $command
if ($LASTEXITCODE -ne 0) {
throw [System.Runtime.InteropServices.ExternalException]::new(
"WSL command failed with exit code: $LASTEXITCODE"
)
}
return $result
}
#EndRegion Helper Functions
#Region Main Function
function Update-UbuntuVersion {
[CmdletBinding()]
param (
[Parameter(Mandatory = $true)]
[ValidateScript({
if ($_ -in $script:CONFIG.ValidUbuntuVersions) { return $true }
throw "Invalid Ubuntu version. Valid versions are: $($script:CONFIG.ValidUbuntuVersions -join ', ')"
})]
[string]$PreviousVersion,
[Parameter(Mandatory = $true)]
[ValidateScript({
if ($_ -in $script:CONFIG.ValidUbuntuVersions) { return $true }
throw "Invalid Ubuntu version. Valid versions are: $($script:CONFIG.ValidUbuntuVersions -join ', ')"
})]
[string]$NextVersion,
[Parameter()]
[ValidateScript({
if (Test-Path $_ -IsValid) { return $true }
throw "Invalid path format: $_"
})]
[string]$WslPath = $script:CONFIG.DefaultWslPath
)
Begin {
Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'
# Create timestamp for logging
$timestamp = Get-Date -Format "yyyy-MM-dd_HH-mm-ss"
$logFile = Join-Path $WslPath "wsl_update_$timestamp.log"
Start-Transcript -Path $logFile
Write-Verbose "Started logging to: $logFile"
}
Process {
try {
# Validate prerequisites
Test-WslPrerequisites
Test-DiskSpace -Path $WslPath
# Ensure WSL path exists
if (-not(Test-Path -Path $WslPath)) {
New-Item -ItemType Directory -Path $WslPath -Force | Out-Null
Write-Verbose "Created WSL directory: $WslPath"
}
# Shut down WSL
Write-Verbose "Shutting down WSL..."
wsl --shutdown
# Prepare paths
$exportPath = Join-Path -Path $WslPath -ChildPath "Ubuntu-$NextVersion.tar"
$importPath = Join-Path -Path $WslPath -ChildPath "Ubuntu-$NextVersion"
$oldVersionPath = Join-Path -Path $WslPath -ChildPath "Ubuntu-$PreviousVersion"
# Export previous version
Write-Verbose "Exporting Ubuntu-$PreviousVersion..."
Invoke-WslCommand -Operation Export -Params @{
Distribution = "Ubuntu-$PreviousVersion"
Path = $exportPath
}
# Unregister previous version
Write-Verbose "Unregistering Ubuntu-$PreviousVersion..."
Invoke-WslCommand -Operation Unregister -Params @{
Distribution = "Ubuntu-$PreviousVersion"
}
# Import new version
Write-Verbose "Importing Ubuntu-$NextVersion..."
Invoke-WslCommand -Operation Import -Params @{
Distribution = "Ubuntu-$NextVersion"
InstallPath = $importPath
SourcePath = $exportPath
}
# Set as default
Write-Verbose "Setting Ubuntu-$NextVersion as default..."
Invoke-WslCommand -Operation SetDefault -Params @{
Distribution = "Ubuntu-$NextVersion"
}
# Clean up old version directory
if (Test-Path -Path $oldVersionPath) {
Write-Verbose "Removing old version directory: $oldVersionPath"
Remove-Item -Path $oldVersionPath -Force -Recurse
}
Write-Output "Successfully updated Ubuntu from $PreviousVersion to $NextVersion"
}
catch {
Write-Error "Failed to update Ubuntu version: $_"
throw
}
finally {
# Cleanup temporary files
if (Test-Path $exportPath) {
Remove-Item -Path $exportPath -Force
Write-Verbose "Removed temporary file: $exportPath"
}
Stop-Transcript
}
}
}
#EndRegion Main Function
#Region Exports
Export-ModuleMember -Function Update-UbuntuVersion
#EndRegion Exports
<#
.SYNOPSIS
Updates WSL Ubuntu version from one version to another.
.DESCRIPTION
This script facilitates the upgrade process of WSL Ubuntu distributions by
handling the export, unregister, and import operations required to move
from one Ubuntu version to another.
.PARAMETER PreviousVersion
The current Ubuntu version (e.g., "22.04")
.PARAMETER NextVersion
The target Ubuntu version to upgrade to (e.g., "23.10")
.PARAMETER WslPath
Optional. The path where WSL distributions are stored. Defaults to E:\WSL
.EXAMPLE
Update-UbuntuVersion -PreviousVersion "22.04" -NextVersion "23.10" -Verbose
.EXAMPLE
Update-UbuntuVersion -PreviousVersion "22.04" -NextVersion "23.10" -WslPath "D:\CustomWSLPath" -Verbose
.NOTES
Requires administrative privileges and WSL installation.
Minimum required disk space: 10GB
Valid Ubuntu versions: 22.04, 23.04, 23.10
#>
{
/* */
"[vue]": {
"editor.defaultFormatter": "Vue.volar"
},
/* */
"[dotenv][json][jsonc][markdown][properties]": {
"editor.rulers": []
},
"[properties]": {
"editor.detectIndentation": false,
"editor.insertSpaces": false
},
/* antfu.file-nesting */
"explorer.fileNesting.enabled": true,
"explorer.fileNesting.expand": false,
"explorer.fileNesting.patterns": {
"//": "Last update at 10/30/2024, 9:34:12 PM",
".clang-tidy": ".clang-format, .clangd, compile_commands.json",
".env": "*.env, .env.*, .envrc, env.d.ts",
".gitignore": ".gitattributes, .gitmodules, .gitmessage, .mailmap, .git-blame*",
".project": ".classpath",
"+layout.svelte": "+layout.ts,+layout.ts,+layout.js,+layout.server.ts,+layout.server.js,+layout.gql",
"+page.svelte": "+page.server.ts,+page.server.js,+page.ts,+page.js,+page.gql",
"ansible.cfg": "ansible.cfg, .ansible-lint, requirements.yml",
"app.config.*": "*.env, .babelrc*, .codecov, .cssnanorc*, .env.*, .envrc, .htmlnanorc*, .lighthouserc.*, .mocha*, .postcssrc*, .terserrc*, api-extractor.json, ava.config.*, babel.config.*, capacitor.config.*, contentlayer.config.*, cssnano.config.*, cypress.*, env.d.ts, formkit.config.*, formulate.config.*, histoire.config.*, htmlnanorc.*, i18n.config.*, ionic.config.*, jasmine.*, jest.config.*, jsconfig.*, karma*, lighthouserc.*, panda.config.*, playwright.config.*, postcss.config.*, puppeteer.config.*, rspack.config.*, sst.config.*, svgo.config.*, tailwind.config.*, tsconfig.*, tsdoc.*, uno.config.*, unocss.config.*, vitest.config.*, vuetify.config.*, webpack.config.*, windi.config.*",
"artisan": "*.env, .babelrc*, .codecov, .cssnanorc*, .env.*, .envrc, .htmlnanorc*, .lighthouserc.*, .mocha*, .postcssrc*, .terserrc*, api-extractor.json, ava.config.*, babel.config.*, capacitor.config.*, contentlayer.config.*, cssnano.config.*, cypress.*, env.d.ts, formkit.config.*, formulate.config.*, histoire.config.*, htmlnanorc.*, i18n.config.*, ionic.config.*, jasmine.*, jest.config.*, jsconfig.*, karma*, lighthouserc.*, panda.config.*, playwright.config.*, postcss.config.*, puppeteer.config.*, rspack.config.*, server.php, sst.config.*, svgo.config.*, tailwind.config.*, tsconfig.*, tsdoc.*, uno.config.*, unocss.config.*, vitest.config.*, vuetify.config.*, webpack.config.*, webpack.mix.js, windi.config.*",
"astro.config.*": "*.env, .babelrc*, .codecov, .cssnanorc*, .env.*, .envrc, .htmlnanorc*, .lighthouserc.*, .mocha*, .postcssrc*, .terserrc*, api-extractor.json, ava.config.*, babel.config.*, capacitor.config.*, contentlayer.config.*, cssnano.config.*, cypress.*, env.d.ts, formkit.config.*, formulate.config.*, histoire.config.*, htmlnanorc.*, i18n.config.*, ionic.config.*, jasmine.*, jest.config.*, jsconfig.*, karma*, lighthouserc.*, panda.config.*, playwright.config.*, postcss.config.*, puppeteer.config.*, rspack.config.*, sst.config.*, svgo.config.*, tailwind.config.*, tsconfig.*, tsdoc.*, uno.config.*, unocss.config.*, vitest.config.*, vuetify.config.*, webpack.config.*, windi.config.*",
"build-wrapper.log": "build-wrapper*.log, build-wrapper-dump*.json, build-wrapper-win*.exe, build-wrapper-linux*, build-wrapper-macosx*",
"BUILD.bazel": "*.bzl, *.bazel, *.bazelrc, bazel.rc, .bazelignore, .bazelproject, WORKSPACE",
"Cargo.toml": ".clippy.toml, .rustfmt.toml, cargo.lock, clippy.toml, cross.toml, rust-toolchain.toml, rustfmt.toml",
"CMakeLists.txt": "*.cmake, *.cmake.in, .cmake-format.yaml, CMakePresets.json, CMakeCache.txt",
"composer.json": ".php*.cache, composer.lock, phpunit.xml*, psalm*.xml",
"default.nix": "shell.nix",
"deno.json*": "*.env, .env.*, .envrc, api-extractor.json, deno.lock, env.d.ts, import-map.json, import_map.json, jsconfig.*, tsconfig.*, tsdoc.*",
"Dockerfile": "*.dockerfile, .devcontainer.*, .dockerignore, captain-definition, compose.*, docker-compose.*, dockerfile*",
"flake.nix": "flake.lock",
"gatsby-config.*": "*.env, .babelrc*, .codecov, .cssnanorc*, .env.*, .envrc, .htmlnanorc*, .lighthouserc.*, .mocha*, .postcssrc*, .terserrc*, api-extractor.json, ava.config.*, babel.config.*, capacitor.config.*, contentlayer.config.*, cssnano.config.*, cypress.*, env.d.ts, formkit.config.*, formulate.config.*, gatsby-browser.*, gatsby-node.*, gatsby-ssr.*, gatsby-transformer.*, histoire.config.*, htmlnanorc.*, i18n.config.*, ionic.config.*, jasmine.*, jest.config.*, jsconfig.*, karma*, lighthouserc.*, panda.config.*, playwright.config.*, postcss.config.*, puppeteer.config.*, rspack.config.*, sst.config.*, svgo.config.*, tailwind.config.*, tsconfig.*, tsdoc.*, uno.config.*, unocss.config.*, vitest.config.*, vuetify.config.*, webpack.config.*, windi.config.*",
"gemfile": ".ruby-version, gemfile.lock",
"go.mod": ".air*, go.sum",
"go.work": "go.work.sum",
"hatch.toml": ".editorconfig, .flake8, .isort.cfg, .python-version, hatch.toml, requirements*.in, requirements*.pip, requirements*.txt, tox.ini",
"I*.cs": "$(capture).cs",
"Makefile": "*.mk",
"mix.exs": ".credo.exs, .dialyzer_ignore.exs, .formatter.exs, .iex.exs, .tool-versions, mix.lock",
"next.config.*": "*.env, .babelrc*, .codecov, .cssnanorc*, .env.*, .envrc, .htmlnanorc*, .lighthouserc.*, .mocha*, .postcssrc*, .terserrc*, api-extractor.json, ava.config.*, babel.config.*, capacitor.config.*, contentlayer.config.*, cssnano.config.*, cypress.*, env.d.ts, formkit.config.*, formulate.config.*, histoire.config.*, htmlnanorc.*, i18n.config.*, ionic.config.*, jasmine.*, jest.config.*, jsconfig.*, karma*, lighthouserc.*, next-env.d.ts, next-i18next.config.*, panda.config.*, playwright.config.*, postcss.config.*, puppeteer.config.*, rspack.config.*, sst.config.*, svgo.config.*, tailwind.config.*, tsconfig.*, tsdoc.*, uno.config.*, unocss.config.*, vitest.config.*, vuetify.config.*, webpack.config.*, windi.config.*",
"nuxt.config.*": "*.env, .babelrc*, .codecov, .cssnanorc*, .env.*, .envrc, .htmlnanorc*, .lighthouserc.*, .mocha*, .nuxtignore, .nuxtrc, .postcssrc*, .terserrc*, api-extractor.json, ava.config.*, babel.config.*, capacitor.config.*, contentlayer.config.*, cssnano.config.*, cypress.*, env.d.ts, formkit.config.*, formulate.config.*, histoire.config.*, htmlnanorc.*, i18n.config.*, ionic.config.*, jasmine.*, jest.config.*, jsconfig.*, karma*, lighthouserc.*, panda.config.*, playwright.config.*, postcss.config.*, puppeteer.config.*, rspack.config.*, sst.config.*, svgo.config.*, tailwind.config.*, tsconfig.*, tsdoc.*, uno.config.*, unocss.config.*, vitest.config.*, vuetify.config.*, webpack.config.*, windi.config.*",
"package.json": "*.code-workspace, .browserslist*, .circleci*, .commitlint*, .cz-config.js, .czrc, .dlint.json, .dprint.json*, .editorconfig, .eslint*, .firebase*, .flowconfig, .github*, .gitlab*, .gitmojirc.json, .gitpod*, .huskyrc*, .jslint*, .knip.*, .lintstagedrc*, .markdownlint*, .node-version, .nodemon*, .npm*, .nvmrc, .pm2*, .pnp.*, .pnpm*, .prettier*, .pylintrc, .release-please*.json, .releaserc*, .ruff.toml, .sentry*, .simple-git-hooks*, .stackblitz*, .styleci*, .stylelint*, .tazerc*, .textlint*, .tool-versions, .travis*, .versionrc*, .vscode*, .watchman*, .xo-config*, .yamllint*, .yarnrc*, Procfile, apollo.config.*, appveyor*, azure-pipelines*, biome.json*, bower.json, build.config.*, bun.lockb, bunfig.toml, commitlint*, crowdin*, dangerfile*, dlint.json, dprint.json*, electron-builder.*, eslint*, firebase.json, grunt*, gulp*, jenkins*, knip.*, lerna*, lint-staged*, nest-cli.*, netlify*, nixpacks*, nodemon*, npm-shrinkwrap.json, nx.*, package-lock.json, package.nls*.json, phpcs.xml, pm2.*, pnpm*, prettier*, pullapprove*, pyrightconfig.json, release-please*.json, release-tasks.sh, release.config.*, renovate*, rollup.config.*, rspack*, ruff.toml, simple-git-hooks*, sonar-project.properties, stylelint*, tslint*, tsup.config.*, turbo*, typedoc*, unlighthouse*, vercel*, vetur.config.*, webpack*, workspace.json, wrangler.toml, xo.config.*, yarn*",
"Pipfile": ".editorconfig, .flake8, .isort.cfg, .python-version, Pipfile, Pipfile.lock, requirements*.in, requirements*.pip, requirements*.txt, tox.ini",
"pubspec.yaml": ".metadata, .packages, all_lint_rules.yaml, analysis_options.yaml, build.yaml, pubspec.lock, pubspec_overrides.yaml",
"pyproject.toml": ".commitlint*, .dlint.json, .dprint.json*, .editorconfig, .eslint*, .flake8, .flowconfig, .isort.cfg, .jslint*, .lintstagedrc*, .markdownlint*, .pdm-python, .pdm.toml, .prettier*, .pylintrc, .python-version, .ruff.toml, .stylelint*, .textlint*, .xo-config*, .yamllint*, MANIFEST.in, Pipfile, Pipfile.lock, biome.json*, commitlint*, dangerfile*, dlint.json, dprint.json*, eslint*, hatch.toml, lint-staged*, pdm.lock, phpcs.xml, poetry.lock, poetry.toml, prettier*, pyproject.toml, pyrightconfig.json, requirements*.in, requirements*.pip, requirements*.txt, ruff.toml, setup.cfg, setup.py, stylelint*, tox.ini, tslint*, uv.lock, uv.toml, xo.config.*",
"quasar.conf.js": "*.env, .babelrc*, .codecov, .cssnanorc*, .env.*, .envrc, .htmlnanorc*, .lighthouserc.*, .mocha*, .postcssrc*, .terserrc*, api-extractor.json, ava.config.*, babel.config.*, capacitor.config.*, contentlayer.config.*, cssnano.config.*, cypress.*, env.d.ts, formkit.config.*, formulate.config.*, histoire.config.*, htmlnanorc.*, i18n.config.*, ionic.config.*, jasmine.*, jest.config.*, jsconfig.*, karma*, lighthouserc.*, panda.config.*, playwright.config.*, postcss.config.*, puppeteer.config.*, quasar.extensions.json, rspack.config.*, sst.config.*, svgo.config.*, tailwind.config.*, tsconfig.*, tsdoc.*, uno.config.*, unocss.config.*, vitest.config.*, vuetify.config.*, webpack.config.*, windi.config.*",
"readme*": "AUTHORS, Authors, BACKERS*, Backers*, CHANGELOG*, CITATION*, CODEOWNERS, CODE_OF_CONDUCT*, CONTRIBUTING*, CONTRIBUTORS, COPYING*, CREDITS, Changelog*, Citation*, Code_Of_Conduct*, Codeowners, Contributing*, Contributors, Copying*, Credits, GOVERNANCE.MD, Governance.md, HISTORY.MD, History.md, LICENSE*, License*, MAINTAINERS, Maintainers, README-*, README_*, RELEASE_NOTES*, ROADMAP.MD, Readme-*, Readme_*, Release_Notes*, Roadmap.md, SECURITY.MD, SPONSORS*, Security.md, Sponsors*, authors, backers*, changelog*, citation*, code_of_conduct*, codeowners, contributing*, contributors, copying*, credits, governance.md, history.md, license*, maintainers, readme-*, readme_*, release_notes*, roadmap.md, security.md, sponsors*",
"Readme*": "AUTHORS, Authors, BACKERS*, Backers*, CHANGELOG*, CITATION*, CODEOWNERS, CODE_OF_CONDUCT*, CONTRIBUTING*, CONTRIBUTORS, COPYING*, CREDITS, Changelog*, Citation*, Code_Of_Conduct*, Codeowners, Contributing*, Contributors, Copying*, Credits, GOVERNANCE.MD, Governance.md, HISTORY.MD, History.md, LICENSE*, License*, MAINTAINERS, Maintainers, README-*, README_*, RELEASE_NOTES*, ROADMAP.MD, Readme-*, Readme_*, Release_Notes*, Roadmap.md, SECURITY.MD, SPONSORS*, Security.md, Sponsors*, authors, backers*, changelog*, citation*, code_of_conduct*, codeowners, contributing*, contributors, copying*, credits, governance.md, history.md, license*, maintainers, readme-*, readme_*, release_notes*, roadmap.md, security.md, sponsors*",
"README*": "AUTHORS, Authors, BACKERS*, Backers*, CHANGELOG*, CITATION*, CODEOWNERS, CODE_OF_CONDUCT*, CONTRIBUTING*, CONTRIBUTORS, COPYING*, CREDITS, Changelog*, Citation*, Code_Of_Conduct*, Codeowners, Contributing*, Contributors, Copying*, Credits, GOVERNANCE.MD, Governance.md, HISTORY.MD, History.md, LICENSE*, License*, MAINTAINERS, Maintainers, README-*, README_*, RELEASE_NOTES*, ROADMAP.MD, Readme-*, Readme_*, Release_Notes*, Roadmap.md, SECURITY.MD, SPONSORS*, Security.md, Sponsors*, authors, backers*, changelog*, citation*, code_of_conduct*, codeowners, contributing*, contributors, copying*, credits, governance.md, history.md, license*, maintainers, readme-*, readme_*, release_notes*, roadmap.md, security.md, sponsors*",
"remix.config.*": "*.env, .babelrc*, .codecov, .cssnanorc*, .env.*, .envrc, .htmlnanorc*, .lighthouserc.*, .mocha*, .postcssrc*, .terserrc*, api-extractor.json, ava.config.*, babel.config.*, capacitor.config.*, contentlayer.config.*, cssnano.config.*, cypress.*, env.d.ts, formkit.config.*, formulate.config.*, histoire.config.*, htmlnanorc.*, i18n.config.*, ionic.config.*, jasmine.*, jest.config.*, jsconfig.*, karma*, lighthouserc.*, panda.config.*, playwright.config.*, postcss.config.*, puppeteer.config.*, remix.*, rspack.config.*, sst.config.*, svgo.config.*, tailwind.config.*, tsconfig.*, tsdoc.*, uno.config.*, unocss.config.*, vitest.config.*, vuetify.config.*, webpack.config.*, windi.config.*",
"requirements.txt": ".editorconfig, .flake8, .isort.cfg, .python-version, requirements*.in, requirements*.pip, requirements*.txt, tox.ini",
"rush.json": "*.code-workspace, .browserslist*, .circleci*, .commitlint*, .cz-config.js, .czrc, .dlint.json, .dprint.json*, .editorconfig, .eslint*, .firebase*, .flowconfig, .github*, .gitlab*, .gitmojirc.json, .gitpod*, .huskyrc*, .jslint*, .knip.*, .lintstagedrc*, .markdownlint*, .node-version, .nodemon*, .npm*, .nvmrc, .pm2*, .pnp.*, .pnpm*, .prettier*, .pylintrc, .release-please*.json, .releaserc*, .ruff.toml, .sentry*, .simple-git-hooks*, .stackblitz*, .styleci*, .stylelint*, .tazerc*, .textlint*, .tool-versions, .travis*, .versionrc*, .vscode*, .watchman*, .xo-config*, .yamllint*, .yarnrc*, Procfile, apollo.config.*, appveyor*, azure-pipelines*, biome.json*, bower.json, build.config.*, bun.lockb, bunfig.toml, commitlint*, crowdin*, dangerfile*, dlint.json, dprint.json*, electron-builder.*, eslint*, firebase.json, grunt*, gulp*, jenkins*, knip.*, lerna*, lint-staged*, nest-cli.*, netlify*, nixpacks*, nodemon*, npm-shrinkwrap.json, nx.*, package-lock.json, package.nls*.json, phpcs.xml, pm2.*, pnpm*, prettier*, pullapprove*, pyrightconfig.json, release-please*.json, release-tasks.sh, release.config.*, renovate*, rollup.config.*, rspack*, ruff.toml, simple-git-hooks*, sonar-project.properties, stylelint*, tslint*, tsup.config.*, turbo*, typedoc*, unlighthouse*, vercel*, vetur.config.*, webpack*, workspace.json, wrangler.toml, xo.config.*, yarn*",
"sanity.config.*": "sanity.cli.*, sanity.types.ts, schema.json",
"setup.cfg": ".editorconfig, .flake8, .isort.cfg, .python-version, MANIFEST.in, requirements*.in, requirements*.pip, requirements*.txt, setup.cfg, tox.ini",
"setup.py": ".editorconfig, .flake8, .isort.cfg, .python-version, MANIFEST.in, requirements*.in, requirements*.pip, requirements*.txt, setup.cfg, setup.py, tox.ini",
"shims.d.ts": "*.d.ts",
"svelte.config.*": "*.env, .babelrc*, .codecov, .cssnanorc*, .env.*, .envrc, .htmlnanorc*, .lighthouserc.*, .mocha*, .postcssrc*, .terserrc*, api-extractor.json, ava.config.*, babel.config.*, capacitor.config.*, contentlayer.config.*, cssnano.config.*, cypress.*, env.d.ts, formkit.config.*, formulate.config.*, histoire.config.*, houdini.config.*, htmlnanorc.*, i18n.config.*, ionic.config.*, jasmine.*, jest.config.*, jsconfig.*, karma*, lighthouserc.*, mdsvex.config.js, panda.config.*, playwright.config.*, postcss.config.*, puppeteer.config.*, rspack.config.*, sst.config.*, svgo.config.*, tailwind.config.*, tsconfig.*, tsdoc.*, uno.config.*, unocss.config.*, vite.config.*, vitest.config.*, vuetify.config.*, webpack.config.*, windi.config.*",
"vite.config.*": "*.env, .babelrc*, .codecov, .cssnanorc*, .env.*, .envrc, .htmlnanorc*, .lighthouserc.*, .mocha*, .postcssrc*, .terserrc*, api-extractor.json, ava.config.*, babel.config.*, capacitor.config.*, contentlayer.config.*, cssnano.config.*, cypress.*, env.d.ts, formkit.config.*, formulate.config.*, histoire.config.*, htmlnanorc.*, i18n.config.*, ionic.config.*, jasmine.*, jest.config.*, jsconfig.*, karma*, lighthouserc.*, panda.config.*, playwright.config.*, postcss.config.*, puppeteer.config.*, rspack.config.*, sst.config.*, svgo.config.*, tailwind.config.*, tsconfig.*, tsdoc.*, uno.config.*, unocss.config.*, vitest.config.*, vuetify.config.*, webpack.config.*, windi.config.*",
"vue.config.*": "*.env, .babelrc*, .codecov, .cssnanorc*, .env.*, .envrc, .htmlnanorc*, .lighthouserc.*, .mocha*, .postcssrc*, .terserrc*, api-extractor.json, ava.config.*, babel.config.*, capacitor.config.*, contentlayer.config.*, cssnano.config.*, cypress.*, env.d.ts, formkit.config.*, formulate.config.*, histoire.config.*, htmlnanorc.*, i18n.config.*, ionic.config.*, jasmine.*, jest.config.*, jsconfig.*, karma*, lighthouserc.*, panda.config.*, playwright.config.*, postcss.config.*, puppeteer.config.*, rspack.config.*, sst.config.*, svgo.config.*, tailwind.config.*, tsconfig.*, tsdoc.*, uno.config.*, unocss.config.*, vitest.config.*, vuetify.config.*, webpack.config.*, windi.config.*",
"*.asax": "$(capture).*.cs, $(capture).*.vb",
"*.ascx": "$(capture).*.cs, $(capture).*.vb",
"*.ashx": "$(capture).*.cs, $(capture).*.vb",
"*.aspx": "$(capture).*.cs, $(capture).*.vb",
"*.axaml": "$(capture).axaml.cs",
"*.bloc.dart": "$(capture).event.dart, $(capture).state.dart",
"*.c": "$(capture).h",
"*.cc": "$(capture).hpp, $(capture).h, $(capture).hxx, $(capture).hh",
"*.cjs": "$(capture).cjs.map, $(capture).*.cjs, $(capture)_*.cjs",
"*.component.ts": "$(capture).component.html, $(capture).component.spec.ts, $(capture).component.css, $(capture).component.scss, $(capture).component.sass, $(capture).component.less",
"*.cpp": "$(capture).hpp, $(capture).h, $(capture).hxx, $(capture).hh",
"*.cs": "$(capture).*.cs",
"*.cshtml": "$(capture).cshtml.cs",
"*.csproj": "*.config, *proj.user, appsettings.*, bundleconfig.json",
"*.css": "$(capture).css.map, $(capture).*.css",
"*.cxx": "$(capture).hpp, $(capture).h, $(capture).hxx, $(capture).hh",
"*.dart": "$(capture).freezed.dart, $(capture).g.dart",
"*.db": "*.db-shm, *.db-wal",
"*.ex": "$(capture).html.eex, $(capture).html.heex, $(capture).html.leex",
"*.fs": "$(capture).fs.js, $(capture).fs.js.map, $(capture).fs.jsx, $(capture).fs.ts, $(capture).fs.tsx, $(capture).fs.rs, $(capture).fs.php, $(capture).fs.dart",
"*.go": "$(capture)_test.go",
"*.java": "$(capture).class",
"*.js": "$(capture).js.map, $(capture).*.js, $(capture)_*.js, $(capture).d.ts",
"*.jsx": "$(capture).js, $(capture).*.jsx, $(capture)_*.js, $(capture)_*.jsx, $(capture).less, $(capture).module.less, $(capture).module.less.d.ts, $(capture).scss, $(capture).module.scss, $(capture).module.scss.d.ts",
"*.master": "$(capture).*.cs, $(capture).*.vb",
"*.md": "$(capture).*",
"*.mjs": "$(capture).mjs.map, $(capture).*.mjs, $(capture)_*.mjs",
"*.module.ts": "$(capture).resolver.ts, $(capture).controller.ts, $(capture).service.ts",
"*.mts": "$(capture).mts.map, $(capture).*.mts, $(capture)_*.mts",
"*.pubxml": "$(capture).pubxml.user",
"*.py": "$(capture).pyi",
"*.razor": "$(capture).razor.cs, $(capture).razor.css, $(capture).razor.scss",
"*.resx": "$(capture).*.resx, $(capture).designer.cs, $(capture).designer.vb",
"*.tex": "$(capture).acn, $(capture).acr, $(capture).alg, $(capture).aux, $(capture).bbl, $(capture).blg, $(capture).fdb_latexmk, $(capture).fls, $(capture).glg, $(capture).glo, $(capture).gls, $(capture).idx, $(capture).ind, $(capture).ist, $(capture).lof, $(capture).log, $(capture).lot, $(capture).out, $(capture).pdf, $(capture).synctex.gz, $(capture).toc, $(capture).xdv",
"*.ts": "$(capture).js, $(capture).d.ts.map, $(capture).*.ts, $(capture)_*.js, $(capture)_*.ts",
"*.tsx": "$(capture).ts, $(capture).*.tsx, $(capture)_*.ts, $(capture)_*.tsx, $(capture).less, $(capture).module.less, $(capture).module.less.d.ts, $(capture).scss, $(capture).module.scss, $(capture).module.scss.d.ts, $(capture).css.ts",
"*.vbproj": "*.config, *proj.user, appsettings.*, bundleconfig.json",
"*.vue": "$(capture).*.ts, $(capture).*.js, $(capture).story.vue",
"*.w": "$(capture).*.w, I$(capture).w",
"*.xaml": "$(capture).xaml.cs"
},
/* */
"editor.accessibilitySupport": "off",
"files.associations": {
".env*": "dotenv", /* mikestead.dotenv */
".gitconfig": "properties",
".nuxtrc": "properties"
},
"files.autoSave": "onWindowChange",
"workbench.startupEditor": "none",
/* */
"window.autoDetectColorScheme": true,
/* */
"workbench.iconTheme": "catppuccin-latte", /* Catppuccin.catppuccin-vsc-icons */
"workbench.preferredDarkColorTheme": "Maple Dark", /* subframe7536.theme-maple */
"workbench.preferredLightColorTheme": "Maple Light", /* subframe7536.theme-maple */
"workbench.productIconTheme": "icons-carbon", /* antfu.icons-carbon */
/* antfu.where-am-i */
"where-am-i.icon": "flame",
"where-am-i.textTransfrom": "none",
/* eamodio.gitlens */
"gitlens.codeLens.enabled": false,
"gitlens.currentLine.enabled": false,
"gitlens.menus": {
"editor": {
"blame": false,
"clipboard": true,
"compare": true,
"history": false,
"remote": false
},
"editorGroup": {
"blame": true,
"compare": false
}
},
/* usernamehw.errorlens */
"errorLens.fontFamily": "Maple Mono",
"errorLens.fontStyleItalic": true,
"errorLens.gutterIconsEnabled": true,
"errorLens.scrollbarHackEnabled": true,
/* streetsidesoftware.code-spell-checker */
"cSpell.allowCompoundWords": true,
"cSpell.userWords": [
"antfu",
"asax",
"ashx",
"astro",
"axaml",
"bazel",
"bazelignore",
"bazelproject",
"bazelrc",
"cascadia",
"catppuccin",
"clangd",
"clippy",
"codecov",
"codeimg",
"codeium",
"consolas",
"czrc",
"dlint",
"dprint",
"dudás",
"eamodio",
"envrc",
"gitmojirc",
"heex",
"histoire",
"huskyrc",
"iosevka",
"isort",
"knip",
"latexmk",
"leex",
"lighthouserc",
"lintstagedrc",
"lockb",
"mdsvex",
"nándor",
"nuxt",
"nuxtignore",
"nuxtrc",
"phpcs",
"postcssrc",
"pylintrc",
"pyproject",
"pyrightconfig",
"releaserc",
"resx",
"rspack",
"rustfmt",
"scminput",
"styleci",
"tazerc",
"terserrc",
"tsdoc",
"tsup",
"unlighthouse",
"unocss",
"usernamehw",
"versionrc",
"vetur",
"vitest",
"vuetify",
"windi"
],
/* Vue.volar */
"vue.inlayHints.destructuredProps": true,
"vue.inlayHints.inlineHandlerLeading": true,
"vue.inlayHints.missingProps": true,
"vue.inlayHints.optionsWrapper": true,
"vue.inlayHints.vBindShorthand": true,
/* */
"javascript.inlayHints.enumMemberValues.enabled": true,
"javascript.inlayHints.functionLikeReturnTypes.enabled": true,
"javascript.inlayHints.parameterNames.enabled": "all",
"javascript.inlayHints.parameterTypes.enabled": true,
"javascript.inlayHints.propertyDeclarationTypes.enabled": true,
"javascript.inlayHints.variableTypes.enabled": true,
"javascript.updateImportsOnFileMove.enabled": "always",
/* subframe7536.codeimg */
"codeimg.showLineNumbers": false,
"codeimg.showWindowControls": false,
"codeimg.showWindowTitle": false,
"codeimg.windowControlsColor": false,
/* Catppuccin.catppuccin-vsc-icons */
"catppuccin-icons.associations.files": {
"nuxt.ts": "nuxt",
"vitest.ts": "vitest"
},
"catppuccin-icons.hidesExplorerArrows": true
/* */
}
{
/* */
"breadcrumbs.enabled": false,
"breadcrumbs.icons": false,
"breadcrumbs.symbolPath": "off",
/* */
"chat.editor.wordWrap": "on",
/* */
"debug.onTaskErrors": "debugAnyway",
/* */
"diffEditor.experimental.showEmptyDecorations": true,
"diffEditor.experimental.showMoves": true,
"diffEditor.ignoreTrimWhitespace": false,
"diffEditor.renderSideBySide": false,
"diffEditor.wordWrap": "on",
/* */
"editor.acceptSuggestionOnEnter": "smart",
"editor.accessibilitySupport": "off",
"editor.colorDecorators": true,
"editor.copyWithSyntaxHighlighting": false,
"editor.cursorBlinking": "phase",
"editor.cursorSmoothCaretAnimation": "explicit",
"editor.cursorStyle": "underline-thin",
"editor.detectIndentation": false,
"editor.emptySelectionClipboard": false,
"editor.find.addExtraSpaceOnTop": false,
"editor.find.autoFindInSelection": "multiline",
"editor.foldingImportsByDefault": false,
"editor.fontFamily": "Maple Mono, Cascadia Code, Consolas, monospace",
"editor.fontLigatures": "'cv02', 'cv03'",
"editor.fontSize": 14,
"editor.fontWeight": 400,
"editor.formatOnSave": false,
"editor.formatOnSaveMode": "modificationsIfAvailable",
"editor.gotoLocation.multipleDeclarations": "goto",
"editor.gotoLocation.multipleDefinitions": "goto",
"editor.gotoLocation.multipleImplementations": "goto",
"editor.gotoLocation.multipleReferences": "goto",
"editor.gotoLocation.multipleTypeDefinitions": "goto",
"editor.guides.bracketPairs": "active",
"editor.guides.bracketPairsHorizontal": false,
"editor.guides.indentation": false,
"editor.hideCursorInOverviewRuler": true,
"editor.hover.delay": 300,
"editor.hover.enabled": true,
"editor.hover.sticky": true,
"editor.inlayHints.enabled": "offUnlessPressed",
"editor.inlayHints.fontFamily": "Maple Mono",
"editor.inlayHints.fontSize": 12,
"editor.inlayHints.padding": true,
"editor.inlineSuggest.enabled": true,
"editor.inlineSuggest.fontFamily": "Maple Mono",
"editor.inlineSuggest.suppressSuggestions": true,
"editor.insertSpaces": true,
"editor.largeFileOptimizations": false,
"editor.lightbulb.enabled": "off",
"editor.lineHeight": 1.7,
"editor.lineNumbers": "off",
"editor.linkedEditing": true,
"editor.matchBrackets": "near",
"editor.minimap.enabled": false,
"editor.occurrencesHighlight": "off",
"editor.overviewRulerBorder": false,
"editor.padding.top": 16,
"editor.parameterHints.enabled": true,
"editor.quickSuggestions": {
"comments": "off",
"other": "off",
"strings": "on"
},
"editor.quickSuggestionsDelay": 10,
"editor.renderControlCharacters": false,
"editor.renderLineHighlight": "none",
"editor.renderWhitespace": "none",
"editor.rulers": [
{
"color": "#9AD6A402",
"column": 80
},
{
"color": "#F49A9A04",
"column": 120
}
],
"editor.selectionHighlight": false,
"editor.smoothScrolling": true,
"editor.snippetSuggestions": "inline",
"editor.suggest.localityBonus": true,
"editor.suggest.selectionMode": "whenQuickSuggestion",
"editor.suggest.showStatusBar": true,
"editor.suggest.snippetsPreventQuickSuggestions": false,
"editor.suggestFontSize": 12,
"editor.suggestLineHeight": 24,
"editor.suggestOnTriggerCharacters": true,
"editor.suggestSelection": "first",
"editor.tabCompletion": "off",
"editor.tabSize": 2,
"editor.wordBasedSuggestions": "matchingDocuments",
"editor.wordWrapColumn": 120,
"editor.wrappingIndent": "indent",
"editor.wrappingStrategy": "advanced",
/* */
"explorer.compactFolders": true,
"explorer.confirmDelete": false,
"explorer.confirmDragAndDrop": false,
"explorer.sortOrder": "type",
/* */
"files.encoding": "utf8",
"files.eol": "\n",
"files.insertFinalNewline": true,
"files.trimFinalNewlines": true,
"files.trimTrailingWhitespace": true,
/* */
"git.allowForcePush": true,
"git.allowNoVerifyCommit": true,
"git.alwaysShowStagedChangesResourceGroup": true,
"git.autofetch": true,
"git.autoStash": true,
"git.branchProtection": [
"main"
],
"git.confirmForcePush": false,
"git.confirmNoVerifyCommit": false,
"git.confirmSync": false,
"git.decorations.enabled": false,
"git.enableCommitSigning": true,
"git.enableSmartCommit": true,
"git.fetchOnPull": true,
"git.followTagsWhenSync": true,
"git.inputValidation": true,
"git.openDiffOnClick": false,
"git.pruneOnFetch": true,
"git.pullBeforeCheckout": true,
"git.replaceTagsWhenPull": true,
"git.untrackedChanges": "separate",
/* */
"problems.decorations.enabled": false,
"problems.showCurrentInStatus": true,
/* */
"remote.autoForwardPortsSource": "hybrid",
/* */
"scm.defaultViewMode": "tree",
"scm.diffDecorations": "gutter",
"scm.diffDecorationsGutterPattern": {
"added": true,
"modified": true
},
"scm.compactFolders": true,
"scm.diffDecorationsGutterVisibility": "hover",
"scm.diffDecorationsGutterWidth": 2,
"scm.inputFontFamily": "Maple Mono",
"scm.inputFontSize": 12,
/* */
"search.exclude": {
"**/.git": true,
"**/.github": true,
"**/.gitlab": true,
"**/.nuxt": true,
"**/.output": true,
"**/.pnpm": true,
"**/.turbo": true,
"**/.vscode": true,
"**/.yarn": true,
"**/bower_components": true,
"**/build/**": true,
"**/CHANGELOG*": true,
"**/coverage": true,
"**/dist/**": true,
"**/LICENSE*": true,
"**/logs": true,
"**/node_modules": true,
"**/package-lock.json": true,
"**/pnpm-lock.yaml": true,
"**/public": true,
"**/tmp": true,
"**/yarn.lock": true
},
"search.mode": "newEditor",
"search.searchOnType": true,
"search.seedWithNearestWord": true,
"search.showLineNumbers": false,
"search.useIgnoreFiles": false,
/* */
"task.reconnection": true,
/* */
"terminal.integrated.autoReplies": {
"[oh-my-zsh] Would you like to update? [Y/n]": "Y\r"
},
"terminal.integrated.cursorBlinking": true,
"terminal.integrated.cursorStyle": "underline",
"terminal.integrated.defaultProfile.linux": "zsh",
"terminal.integrated.fontFamily": "Maple Mono NF, Cascadia Mono, Consolas, monospace",
"terminal.integrated.fontSize": 12,
"terminal.integrated.fontWeight": 400,
"terminal.integrated.lineHeight": 1.3,
"terminal.integrated.persistentSessionReviveProcess": "never",
"terminal.integrated.rescaleOverlappingGlyphs": true,
"terminal.integrated.smoothScrolling": true,
/* */
"typescript.inlayHints.enumMemberValues.enabled": true,
"typescript.inlayHints.functionLikeReturnTypes.enabled": true,
"typescript.inlayHints.parameterNames.enabled": "all",
"typescript.inlayHints.parameterTypes.enabled": true,
"typescript.inlayHints.propertyDeclarationTypes.enabled": true,
"typescript.inlayHints.variableTypes.enabled": true,
"typescript.preferences.preferTypeOnlyAutoImports": true,
"typescript.updateImportsOnFileMove.enabled": "always",
/* */
"window.commandCenter": false,
/* */
"workbench.activityBar.location": "bottom",
"workbench.editor.closeOnFileDelete": true,
"workbench.editor.doubleClickTabToToggleEditorGroupSizes": "off",
"workbench.editor.enablePreview": true,
"workbench.editor.enablePreviewFromQuickOpen": false,
"workbench.editor.highlightModifiedTabs": true,
"workbench.editor.limit.enabled": true,
"workbench.editor.limit.perEditorGroup": true,
"workbench.editor.limit.value": 8,
"workbench.editor.showTabs": "multiple",
"workbench.editor.tabActionCloseVisibility": false,
"workbench.list.smoothScrolling": true,
"workbench.panel.showLabels": false,
"workbench.sideBar.location": "right",
"workbench.startupEditor": "none",
"workbench.statusBar.visible": true,
"workbench.tips.enabled": false,
"workbench.tree.indent": 15
/* */
}
# code --list-extensions
Extensions installed on WSL: Ubuntu-24.10:
antfu.file-nesting
antfu.goto-alias
antfu.iconify
antfu.open-in-github-button
antfu.pnpm-catalog-lens
antfu.where-am-i
bradlc.vscode-tailwindcss
dbaeumer.vscode-eslint
eamodio.gitlens
fabiospampinato.vscode-open-in-github
foxundermoon.shell-format
github.vscode-github-actions
github.vscode-pull-request-github
mhutchie.git-graph
neotan.vscode-auto-restart-typescript-eslint-servers
orta.vscode-twoslash-queries
sonarsource.sonarlint-vscode
streetsidesoftware.code-spell-checker
subframe7536.codeimg
vitest.explorer
vue.volar
vunguyentuan.vscode-postcss
yoavbls.pretty-ts-errors
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment