How to specify a custom path for my .zshrc file?

I'm trying to move .zshrc to a folder where I keep this kind of files synced with Github.

But now whenever I start a zsh session it doesn't use that config file.

Assuming I changed the file to ~/.dotfiles how can I add ~/.dotfiles/.zshrc to the PATH(?!) to make zsh start with that config?

Doing source ~./dotfiles/.zshrc only works for that session. Doesn't work anymore if I close the terminal.

Upvotes: 20

Views: 29173

Answers (7)

Caleb Santos
Caleb Santos

Reputation: 89

In Linux, you can check if your zsh is loading /etc/zsh/zshrc, and edit it.

If that's the case, redirect this to your custom script by adding:

sh $HOME/.dotfiles/zshrc

Upvotes: 0

bigxia
bigxia

Reputation: 19

Please use the export command mentioned below to solve your problem.

export ZDOTDIR=$HOME/.dotfiles

Upvotes: 1

Cliff P
Cliff P

Reputation: 57

You can put this in ~/.zshrc, even as its entire contents:

if [ -r ~/.dotfiles/.zshrc ]; then
    source ~/.dotfiles/.zshrc
fi

Upvotes: 1

Accidental brine
Accidental brine

Reputation: 369

Here is an interesting hack that doesn't require you to use sym-links. In your .xsession, (or .*wmrc) have the following:

xterm -e 'zsh -c ". ~/.dotfiles/.zshrc; zsh"'.

instead of just:

xterm
Make sure to put the -e at the end after all of your other xterm options.

Upvotes: -1

Joe Block
Joe Block

Reputation: 1912

Alternatively, you can do what I do and use GNU Stow. I've got my dotfiles in a repository, one subdirectory per category, like so:

dotfilerepo/zsh/.zshrc
dotfilerepo/zsh/.zlogin
dotfilerepo/git/.gitconfig
dotfilerepo/vim/.vimrc

then I can cd into repo and do stow zsh and it'll create a symlink from ~/.zshrc to repo/zsh/.zshrc, another from zsh/.zlogin to ~/.zlogin. stow vim to create symlinks from the vim subdirectory to ~, etc.

I've got a script, install-linkfarm, that does all the stow commands so when I move onto a new machine, I clone my repo, cd to it and run install-linkfarm and am good to go.

Upvotes: 10

chepner
chepner

Reputation: 530773

One alternative to a symlink is to put this in ~/.zshenv:

ZDOTDIR=~/.dotfiles

If you want .zshenv in ~/.dotfiles as well, you can look into setting ZDOTDIR in one of the global configuration files (/etc/zshenv is a good choice).

Upvotes: 21

nitishagar
nitishagar

Reputation: 9403

You can symlink:

ln -s /path/to/original /path/to/symlink

For the zshrc you can do something like:

ln -s ~/.dotiles/.zshrc ~/.zshrc

Upvotes: 24

Related Questions