-
Notifications
You must be signed in to change notification settings - Fork 11
Set up Windows dev environment with MSYS2
Note: $VARS refer to strings you should substitute yourself. E.g. $DEV -> D:/dev
- Download from
http://msys2.github.io - Install into
$DEV/msys64 - Run
$DEV/msys2_shell.cmd - Run
pacman -Syuu - Close the shell; reopen it, and run
pacman -Syuuagain, just in case :p
pacman is the package manager bundled with msys. Use it to install useful things
like gcc, flex, bison, git. The commands are pretty cryptic, so use the
Pacman/Rosetta.
- Open "Environment Variables > System Variables > Path"
- At the end, add
$DEV/msys64/usr/bin
By default, msys will use $DEV/msys64/home as your home folder.
If you want to use your existing home folder, set a $HOME env variable:
- Under "Environment Variables > User variables", add
HOME->%USERPROFILE%
Then edit $DEV/msys64/etc/nsswitch.conf to set db_home: /%H.
Also, SSH insists on using MSYS' /home, but you can get around that by adding this line to /etc/fstab:
C:/Users /home ntfs binary,noacl,auto 1 1
- Open an msys shell
- Run
pacman -S git - If you want to use
git gui/gitk,- Run
pacman -S mingw-w64-x86_64-tk - Add
$DEV/msys64/mingw64/binto$PATH
- Run
You might get this problem with git gui; to fix, add env var GIT_GUI_LIB_DIR -> $DEV/msys64/usr/share/git-gui/lib.
If you get the Error: fatal: invalid path /home/..., you need to patch $DEV/msys64/usr/lib/git-core/git-gui:
- Find this section (around line 2174):
and replace
if {!$is_submodule} { if {![is_bare]} { cd $_gitworktreecd $_gitworktreewithcd [exec cygpath --windows $_gitworktree] - Find this section (around line 1328):
and, before those two lines, add
set env(GIT_DIR) $_gitdir set env(GIT_WORK_TREE) $_gitworktreeset _gitworktree [exec cygpath --unix $_gitworktree] - (You'll need to apply these changes every time you update Git.)
$DEV/msys64/*_shell.cmd opens $DEV/msys64/usr/bin/mintty.exe, which has problems
with the Python installed by the official Python installers. If you prefer, you can use
$DEV/msys64/usr/bin/bash.exe by making a shortcut to it (on your desktop, for example).
To customize:
- (right-click shortcut) > Properties
- Change "Shortcut > Start in:" to be the directory you want it to open to, e.g.
%HOME%/Desktop - Fiddle with settings in Options, Font, Layout, and Colors
Environment variables in windows are under:
- (right-click start) > System > Advanced System Settings > Advanced > Environment Variables...
You can also set env vars in your .bash_profile/.bashrc.
Create tabspace filter:
git config --global filter.tabspace.smudge '/usr/bin/unexpand --tabs=4 --first-only'
git config --global filter.tabspace.clean '/usr/bin/expand --tabs=4 --initial'
Then in the repo's .git/info/attributes, add:
*.py filter=tabspace
Then, in your (clean; if not, stash) repo do:
rm .git/index
git checkout HEAD -- "$(git rev-parse --show-toplevel)"
To use virtualenvs without the activate/deactivate nonsense, in your .bashrc add:
PYROOT=/path/to/your/python/install
function py {
if [ -d ".venv" ]; then
local PRE=.venv/Scripts
else
local PRE=$PYROOT
fi
$PRE/python "$@"
}
function pyp {
py -m pip "$@"
}
and use py instead of python (and pyp instead of pip) from now on. To help enforce this, you should also add:
function pip {
echo "Don't use \`pip\`. Use \`pyp\` or \`py -m pip\`."
}
function python {
echo "Don't use \`python\`. Use \`py\`."
}
Now, when you run py or pyp, it first tries to use python inside the current directory, then the parent directory, and finally the global one.
For executables installed by python packages (e.g. django-admin ...), figure out the equivalent py -m <module name> ... for doing the same thing.
git-bash has a special --cd option to set the directory on startup, which regular bash doesn't. To get around that, create $DEV/bash.bat:
@echo off
if not "z%1" == "z" cd "%1"
"$DEV/msys64/usr/bin/bash.exe"Next, create a regedit file (*.reg):
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\SOFTWARE\Classes\Directory\Background\shell\bash]
@="Bash"
"Icon"="C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe"
"Position"="Bottom"
[HKEY_CURRENT_USER\SOFTWARE\Classes\Directory\Background\shell\bash\command]
@="d:\\dev\\bash.bat"
[HKEY_CURRENT_USER\SOFTWARE\Classes\Directory\shell\bash]
@="Bash"
"Icon"="C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe"
"Position"="Bottom"
[HKEY_CURRENT_USER\SOFTWARE\Classes\Directory\shell\bash\command]
@="d:\\dev\\bash.bat \"%1\""
Note the paths have to be Windows-style, with escaped (double) backslashes, and that the "Background" entry's command should not contain %1. Feel free to change the "Icon" and "Position" properties. Execute the regedit file and you're done.