34

I have installed MinGW-w64 and MSYS2. But how do I change the HOME directory in MSYS2? So that when I type cd $home or cd ~ it goes to another directory that I defined.

And how do I write a code so that the starting directory is always where the .bat file is placed on?

In cmd I used this code:

%~d1 cd "%~p1" call cmd

so when I open cmd on my desktop, it starts from the directory on desktop.

How can I do a similar thing with msys2?

Coder88
  • 1,015
  • 3
  • 10
  • 23

8 Answers8

56

If you would like to use your windows home folder as the home folder for MSYS2, you can edit /etc/nsswitch.conf and write:

db_home: windows
Samuel Harmer
  • 4,264
  • 5
  • 33
  • 67
dr ganjoo
  • 624
  • 7
  • 5
  • 2
    I couldn't get this to work for me for some reason. Is there something else I need to do? – wheeler Jul 11 '17 at 21:00
  • 2
    `/etc/nsswitch.conf` not `/etc/nssswitch.conf ` – Jay Killeen Nov 09 '17 at 08:09
  • 2
    This worked for me. I just had to fix the spelling mistake in the answer. I'll make an edit but need to change at least 6 characters. So there may be 5 other unrelated character changes for me to fix this answer. – Jay Killeen Nov 09 '17 at 08:12
  • 2
    didn't work for me, but this did `db_home: env windows /C/your-dot-files` as suggested here [ https://conemu.github.io/en/CygwinHome.html] – Joel Santos Rico Jun 29 '20 at 15:10
  • 1
    @JoelSantosRico your link has the closing "]" included in the link. Here is the working link: https://conemu.github.io/en/CygwinHome.html – go2null Aug 31 '21 at 14:37
  • This works in conjunction with setting the HOME environment variable. https://newbedev.com/how-to-change-home-directory-and-start-directory-on-msys2 – joe_maya Oct 15 '21 at 21:56
6

Msys2 will use windows %HOME% as it's $HOME dir. If you set %HOME% in environment variables (to the windows directory you need Msys2 to use) it will work.

Adna Kateg
  • 93
  • 1
  • 6
  • 1
    the problem is that git use the same environment variable for storing ssh keys as msys2. how to change that %HOME% env variable to something else ? I already started a new thread on [here](https://stackoverflow.com/questions/65788934/how-to-run-msys2-separately-from-git) – Cristian F. Jan 19 '21 at 14:28
5

I prefer to just update /etc/fstab @ fstab.

# cat /etc/fstab
# For a description of the file format, see the Users Guide
# https://cygwin.com/cygwin-ug-net/using.html#mount-table

# DO NOT REMOVE NEXT LINE. It remove cygdrive prefix from path
none / cygdrive binary,posix=0,noacl,user 0 0
##################################################################
# Canonicalize the two home directories by mounting the windows  #
# user home with the same path mapping as unix.                  #
##################################################################
none /c/Users/Edward /home/Edward binary,posix=0,noacl,user 0 0
Edward J Beckett
  • 5,061
  • 1
  • 41
  • 41
  • 1
    I like this idea as it's a more pure Unix way. But the syntax on the last line should actually be `C:/Users /home ntfs binary,posix=0,noacl,user 0 0`. BTW I prefer to mount the entire `C:\Users` to `/home`, as it's easier to comply. – Johann Chang Nov 11 '21 at 07:10
3

Besides the above anwsers, there is another way using the Windows command mklink to make a directory symbol link, similar to ln of Linux.

First make a directory of e:\msys\home, then run cmd as Administrator, then run:

cd c:\msys64
mklink /j home e:\msys\home

no other change required.

Occasionally after specific base updates, the link got invalid, need to be made once again, after the newly generated 'home' directory cleared or renamed.

sdrkyj
  • 75
  • 1
  • 10
2

In one of your shell startup scripts (e.g. ~/.bash_profile where ~ is the default/original home directory) you can change the $HOME environment variable:

export HOME=/something/else

If you want your shell to open in that directory you might need to run cd (with no arguments) after setting $HOME; I have not tested it.

David Grayson
  • 84,103
  • 24
  • 152
  • 189
2

Create or modify an MSYS2 /etc/passwd file. Two ways of doing this are shown below.

The following command can be run from an MSYS2 shell, and works safely whether or not the file exists and whether or not it already contains the current user:

$ grep "^${USERNAME}:" /etc/passwd >/dev/null 2>&1 || mkpasswd | grep "^${USERNAME}:" >>/etc/passwd

Next, edit /etc/passwd, and change the relevant user's home directory field (the 6th colon-delimited field).

$ vim /etc/passwd

BONUS: It is also possible to change the MSYS2 username by editing the first field.

As desired, move current home directory content to the new home directory.

Log off, then log back in.

The /etc/passwd edits can be done without manual editing, but this makes for a more complex command-line to paste into the MSYS2 shell, and, it might not work if the /etc/passwd file already exists and has the username in it already:

__DIR="/path/to/home"
mkpasswd | grep "^${USERNAME}:" | \
awk -v DIR="${__DIR}" -v RS=":" -v ORS="/n" \
'NR == 6 { printf(DIR ":"); next } { printf("%s", $0) } NR < 7 { printf(":") }' - >>/etc/passwd
kbulgrien
  • 4,384
  • 2
  • 26
  • 43
0

I add HOME='E:/Users/your_directory' in /etc/profile. It looks as follows:

...
# Setup some default paths. Note that this order will allow user installed
# software to override 'system' software.
# Modifying these default path settings can be done in different ways.
# To learn more about startup files, refer to your shell's man page.

MSYS2_PATH="/usr/local/bin:/usr/bin:/bin"
MANPATH='/usr/local/man:/usr/share/man:/usr/man:/share/man'
INFOPATH='/usr/local/info:/usr/share/info:/usr/info:/share/info'
HOME='e:/Users/HP'

case "${MSYS2_PATH_TYPE:-minimal}" in
...

but the shell shows the path fully, not just ~.

  • This does not really answer the question. If you have a different question, you can ask it by clicking [Ask Question](https://stackoverflow.com/questions/ask). To get notified when this question gets new answers, you can [follow this question](https://meta.stackexchange.com/q/345661). Once you have enough [reputation](https://stackoverflow.com/help/whats-reputation), you can also [add a bounty](https://stackoverflow.com/help/privileges/set-bounties) to draw more attention to this question. - [From Review](/review/late-answers/33879319) – Ihor Baklykov Feb 24 '23 at 09:51
-1

I've created a batch file which sets the HOME variable:

set HOME=C:\Users\%USERNAME%
C:\LocalApp\PortableGit\git-bash.exe

This allows me to put my .bash_profile in this HOME (rather than on the default network location which performs very slowly).