Configure Windows for Development

Environment Variables

I still use some development tools that are used by most Linux users and these tools need some environment variables like LC_ALLHOME, etc. When I have a new PC with Windows 10, I start to use with defining these variables. Take a look at this post for more detail.

PowerShell Core

It’s possible to use BASH on Windows indeed, but I think PowerShell Core is a good alternative. Git integration is working well, defining aliases and functions is easy:

# Extensions
Import-Module posh-git
Import-Module PSReadLine

# DOSH settings
$env:ENV = "DEV"
Set-Alias dosh .\do.ps1

# Readline settings
Set-PSReadLineOption -EditMode Emacs

# Git prompt settings
$GitPromptSettings.DefaultPromptPath.ForegroundColor = 0xFFA500
$GitPromptSettings.DefaultPromptWriteStatusFirst = $true
$GitPromptSettings.DefaultPromptBeforeSuffix.Text = '`n$([DateTime]::now.ToString("MM-dd HH:mm:ss"))'
$GitPromptSettings.DefaultPromptBeforeSuffix.ForegroundColor = 0x808080
$GitPromptSettings.DefaultPromptSuffix = ' $((Get-History -Count 1).id + 1)$(" >" * ($nestedPromptLevel + 1)) '

# Helper commands
function which ($command) {
    Get-Command $command | Select-Object -ExpandProperty Definition
}

function touch ($filename) {
    $null > $filename
}

Readline is a familiar extension for BASH users. If you want to use Emacs key bindings in PowerShell, I suggest you add Readline to the dependencies list.

What if we want to use a Linux command-line app? Like Nano? Indeed, it’s possible to use it as a default git-commit editor but, let’s consider it’s a program that only available in Linux. I use WSL for that case. Just install Ubuntu or another Linux distro with WSL, open PowerShell and run this command:

> wsl -e nano README.md

So you can reach all Ubuntu programs using this magic command. There’s only a little problem here, you have to keep your configuration files (like .nanorc) in your WSL instead of in your local. You can find my configuration repo here.

Git-apply EOL Problem

If you don’t ignore space changes in your patch command, you will get an error because the whitespaces in Linux environments. To solve this problem, use git-apply with these parameters:

$ git apply --ignore-space-change --ignore-whitespace a.diff