author(s): khuynh
Dotfile management using a bare git repository method (see here).
This section is mostly optional, you can always clone over https, but it's recommended to setup your ssh key.
- create a new ssh-key
ssh-keygen -t rsa -b 4096
- print ssh key and copy to the clipboard
cat ~/.ssh/id_rsa.pub
- add your ssh key to github
The following instructions works for any new UNIX-like machine. We will use
zsh
and configure it using oh-my-zsh
. If you don't
wish to use zsh
and prefer to use an alternative shell, you can skip the
first step below.
- install oh-my-zsh (this is required before setting up the repository, your .zshrc will be overwritten later)
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
- clone the dotfiles repository onto your machine
git clone --bare [email protected]:hkennyv/dotfiles.git $HOME/.cfg
- define alias for config temporarily
alias config='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME'
- checkout the actual content from the bare repository into your
$HOME
directory
config checkout
- configure git to ignore untracked files
config config --local status.showUntrackedFiles no
- check the dotfiles were cloned and checked out correctly. run the following
command and your output should confirm you are on the
main
branch with no new commits
config status
your output should match something along these lines (ensure your current working directory is $HOME):
On branch main
nothing to commit (use -u to show untracked files)
After successfully setting up the shell, see the OS specific instructions to get started installing some applications.
Install brew using the following:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
- update brew formulae and brew
brew update
- install brew bundle
brew tap Homebrew/bundle
- install the
.Brewfile
. this will install all of the packages and cask applications listed in the file. i've included the packages and applications i use daily along with some qol packages (e.g. ripgrep to replace grep, fzf, etc...). I've included a seperate brewfile for some SDL dependencies that you can also install if you wish.
Use the following command to install the .Brewfile
:
brew bundle --file $HOME/.khuynh/Brewfile
This will install the following packages (check the file in the repository for the most up to date list):
- python3, pip3
- node
- yarn
- fzf
- rg
and the following applications:
-
iterm2 terminal emulator
-
rectangle wm
-
discord
-
slack
-
transmission torrent client
-
vim 8.0+
check the version of vim with vim --version
and install with brew if version
is less than 8.0.
- rustup
- vscode insiders (to uninstall the
stable version that is installed with the
.Brewfile
, deleteVisual Studio Code.app
) - XCode - you want to install both XCode and the Command Line Tools for XCode
- install vim-plug vim package manager
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
- open vim and run
:PlugInstall
to install all the plugins listed in your.vimrc
- update apt
sudo apt update && sudo apt -y upgrade
- install packages from
.khuynh/packages.txt
cat ~/.khuynh/packages.txt | xargs sudo apt install -y
-
follow the instructions for installing your ssh-key and add it to github
-
follow the instructions for setting up your shell to get setup with zsh
-
see the toolchain setup section for instructions for specific languages/toolchains
Head over to https://ninite.com/ and select the following programs:
- chrome
- teamviewer
- windirstat
- winscp
- vlc
- qbittorrent
- malwarebytes
- steam
Run the ninite installer to have all the programs installed.
Follow the instructions here to install Windows Subsystem for Linux (WSL). I prefer Ubuntu 20.04 LTS.
From here, follow the instructions in Ubuntu Setup.
Follow instructions to install MSYS2 to get a proper unix(ish) shell environment set up.
Open to C:\msys64\msys2_shell.cmd
and edit the file to uncomment the line:
rem set MSYS2_PATH_TYPE=inherit
to
set MSYS2_PATH_TYPE=inherit
This will bring inherit your windows path into your MSYS2 PATH. You can verify this by using the following command in your MSYS2 shell (after you restart it):
echo $PATH
This section contains instructions for installing specific language toolchains.
For UNIX-like environments, use pyenv to manage your python environments. Install the dependencies:
brew install openssl readline sqlite3 xz zlib
Or via apt:
sudo apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev python-openssl git
Finally, install pyenv (mac os):
brew install pyenv
or via curl (mac os or linux):
curl https://pyenv.run | bash
Then follow the instructions from pyenv to install your version of choice.
Don't forget to add the shims to your .profile.local
!
If you're using WSL, install using the instructions above. If not, you can use the installer directly from the Python website.
*ensure to check the box that adds python to your PATH
On Mac OS, you can install nodejs & npm via brew:
brew install nodejs
Install node.js and npm via the node.js site installer.
You can install via the NodeSource binary distribution channel.
TODO
Although this installation targets zsh, you can use it with any shell. Simply source the following files:
.aliases
- contains all aliases.profile
- modifies $PATH, don't add user-specific paths in here, use.profile.local
to do that.profile.local
- user-specific $PATH modifications
Application specific configuration include:
.vimrc
- user vim configuration.zshrc
- zsh configuration
Inside of .aliases
, we have:
alias config="$(which git) --git-dir=$HOME/.cfg/ --work-tree=$HOME"
It essentially aliases config
to git
. To add/modify/remove files from
this git repo, you can use pretty much any regular git command except
substite git
for config
. See the example of adding a .vimrc
below:
config status
config add .vimrc
config commit -m 'add vimrc'
config add .bashrc
config commit -m 'add bashrc'
config push