Skip to content
No description, website, or topics provided.
Shell Vim script Vim Snippet
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.


Type Name Latest commit message Commit time
Failed to load latest commit information.


from nicknisi-dotfiles

install setup and installation


First, you may want to backup any existing files that exist so this doesn't overwrite your work.

Run install/ to backup all symlinked files to a ~/dotfiles-backup directory.

This will not delete any of these files, and the install scripts will not overwrite any existing. After the backup is complete, you can delete the files from your home directory to continue installation.


  • A Unix-like operation system: macOS, Linux.
  • Zsh should be installed (v4.3.9 or more recent). If not pre-installed (run zsh --version to confirm), check the following instructions here: Installing ZSH
  • curl or wget should be installed
  • git should be installed

If on OSX, you will need to install the XCode CLI tools before continuing. To do so, open a terminal and type

➜ xcode-select --install

Basic Installation

Dotfiles is installed by running one of the follwing commands in your terminal. You can install this via the command-line with either curl or wget.

via curl

➜ sh -c "$(curl -fsSL"

via wget

➜ sh -c "$(wget -O-"

Manual inspection

➜ curl -Lo
➜ sh will start by initializing the submodules used by this repository (if any). Read through this file and comment out anything you don't want installed. Then, it will install all symbolic links into your home directory. Every file with a .symlink extension will be symlinked to the home directory with a . in front of it. As an example, vimrc.symlink will be symlinked in the home directory as ~/.vimrc. Then, this script will create a ~/.vim-tmp directory in your home directory, as this is where vim is configured to place its temporary files. Additionally, all files in the $DOTFILES/config directory will be symlinked to the ~/.config/ directory for applications that follow the XDG base directory specification, such as neovim.

Next, the install script will perform a check to see if it is running on an OSX machine. If so, it will install Homebrew if it is not currently installed and will install the homebrew packages listed in Then, it will run and change some OSX configurations. This file is pretty well documented and so it is advised that you read through and comment out any changes you do not want. Next, nginx (installed from Homebrew) will be configured with the provided configuration file. If a nginx.conf file already exists in /usr/local/etc, a backup will be made at /usr/local/etc/nginx/nginx.conf.original.

ZSH Setup

ZSH is configured in the zshrc.symlink file, which will be symlinked to the home directory. The following occurs in this file:

  • set the EDITOR to nvim
  • Load any ~/.terminfo setup
  • Set the CODE_DIR variable, pointing to the location where the code projects exist for exclusive autocompletion with the c command
  • Recursively search the $DOTFILES/zsh directory for files ending in .zsh and source them
  • Setup zplug plugin manager for zsh plugins and installed them.
  • source a ~/.localrc if it exists so that additional configurations can be made that won't be kept track of in this dotfiles repo. This is good for things like API keys, etc.
  • Add the ~/bin and $DOTFILES/bin directories to the path


The prompt is meant to be simple while still providing a lot of information to the user, particularly about the status of the git project, if the PWD is a git project. This prompt sets precmd, PROMPT and RPROMPT. The precmd shows the current working directory in it and the RPROMPT shows the git and suspended jobs info. The main symbol used on the actual prompt line is .

The prompt attempts to speed up certain information lookups by allowing for the prompt itself to be asynchronously rewritten as data comes in. This prevents the prompt from feeling sluggish when, for example, the user is in a large git repo and the git prompt commands take a considerable amount of time.

It does this by writing the actual text that will be displayed int he prompt to a temp file, which is then used to update the prompt information when a signal is trapped.

Git Prompt

  • + - New files were added
  • ! - Existing files were modified
  • ? - Untracked files exist that are not ignored
  • » - Current changes include file renaming
  • - An existing tracked file has been deleted
  • $ - There are currently stashed files
  • = - There are unmerged files
  • - Branch is ahead of the remote (indicating a push is needed)
  • - Branch is behind the remote (indicating a pull is needed)
  • - The branches have diverged (indicating history has changed and maybe a force-push is needed)
  • - The current working directory is clean

Jobs Prompt

The prompt will also display a character in the RPROMPT indicating that there is a suspended job that exists in the background. This is helpful in keeping track of putting vim in the background by pressing CTRL-Z.

Node Prompt

If a package.json file or a node_modules directory exists in the current working directory, display the node symbol, along with the current version of Node. This is useful information when switching between projects that depend on different versions of Node.

Vim and Neovim Setup


Vim Neovim
Main Configuratin File ~/.vimrc ~/.config/nvim/init.vim
Configuration directory ~/.vim ~/.config/nvim


Vim is likely already installed on your system. If using a Mac, MacVim will be installed from Homebrew. Neovim will also be installed from Homebrew by default on a Mac. For other systems, you may need to install Neovim manually. See their web site for more information.

setup_link() will symlink the XDG configuration directory into your home directory and will then create symlinks for .vimrc and .vim over to the Neovim configuration so that Vim and Neovim will both be configured in the same way from the same files. The benefit of this configuration is that you only have to maintain a single vim configuration for both, so that if Neovim (which is still alpha software) has issues, you can very seamlessly transition back to vim with no big impact to your productivity.

Inside of .zshrc, the EDITOR shell variable is set to nvim, defaulting to Neovim for editor tasks, such as git commit messages. Additionally, I have aliased vim to nvim in aliases.zsh You can remove this if you would rather not alias the vim command to nvim.

vim and neovim should just work once the correct plugins are installed. To install the plugins, you will need to open Neovim in the following way:

➜ nvim +PlugInstall

Tmux Configuration

Tmux is a terminal multiplexor which lets you create windows and splits in the terminal that you can attach and detach from. I use it to keep multiple projects open in separate windows and to create an IDE-like environment to work in where I can have my code open in vim/neovim and a shell open to run tests/scripts. Tmux is configured in ~/.tmux.conf, and in tmux/, which defines the colors used, the layout of the tmux bar, and what what will be displayed, including the time and date, open windows, tmux session name, computer name, and current iTunes song playing. If not running on macOS, this configuration should be removed.

When tmux starts up, login-shell will be run and if it determines you are running this on macOS, it will call reattach-to-user-namespace, to fix the system clipboard for use inside of tmux.


cd into your top level project directory, then run the following docker command:

docker run \
  --rm -it \
  [-e UID="1000" \]
  [-e GID="1000" \]
  [-v <your init.vim directory>:/home/neovim/.config/nvim \]
  -v <your workspace top level dir>:/mnt/workspace \
  geeksaga/apline-neovim:latest \
  [nvim arguments]


  • Open neovim with file1 and file2 stacked horizontally:

docker run \
    --rm -it \
    -v $(pwd):/mnt/workspace \
    geeksaga/apline-neovim:latest \
    -o file1 file2
  • Open neovim with file1 and use your custom neovim configuration stored in the .dotfile directory under your $HOME:
docker run \
    --rm -it \
    -v $(pwd):/mnt/workspace \
    -v $HOME/.dotfiles/nvim:/home/neovim/.config/nvim \
    geeksaga/apline-neovim:latest \
  • File permission issues may arise if the default user id (1000) and group id (1000) of the container does not match user id and group id of the host.
docker run \
    --rm -it \
    -v $(pwd):/mnt/workspace \
    -e UID="1003" \
    -e GID="1004" \
    geeksaga/apline-neovim:latest \
    -o file1 file2

You can find out your host user id and group id with the following command: $ id


If you have questions, notice issues, or would like to see improvements, please open an issue and I'm happy to help you out!

You can’t perform that action at this time.