This repository contains my personal dotfiles, as well as some instructions on how to replicate my setup.
These are the main files in this repository and are imho worth having a look at.
| File | Description | Highlights |
|---|---|---|
.zshrc |
Configuration file for zsh shell | language setups; fzf-completions; TODO |
.p10k.zsh |
Configuration file for powerlevel10k | |
.gitconfig |
Configuration file for Git | git-delta |
.gemrc |
Configuration file for RubyGems |
I follow the approach described in Drew DeVault's blog post "Managing my dotfiles as a git repository".
cd ~
git init
git remote add origin https://github.com/MultifokalHirn/.dotfiles.git
git fetch --allThe next step will be to merge the repository contents with your current setup. Please be very careful here!
Attention! If you are not on a fresh system, make a backup before proceeding! Or at least go through the repo's contents, and for all files that you probably do not want to get overwritten, rename them to
<name>.bakor somesuch.
I recommend you first run the following, which will already work, if your home folder does not conflict with the repo
git checkout main # 'main' is this repo's main branch If that did produce an error, you can force the checkout as per below.
Again, please make backups and make sure that you will not be able to overwrite anything that cannot be restored.
git checkout --force mainNote: Some of the topics here may be specific to macOS.
I use iTerm2 as a replacement for Terminal, which comes shipped with macOS. Please refer to the iterm2 homepage to learn more about its features and how to install it.
Note: Whether you use iTerm2, Terminal, or some other terminal emulator has no effect on the rest described herein.
brew is a package manager for macOS similar to apt-get and yum, meaing it can be used to install a wide range of stuff - anything from fundamental (CLI) tools like ssh or git to GUI apps like Handbrake or Firefox.
You can install brew like so:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"In Brewfile-MultifokalHirn I have collected a
set of packages and applications that are essential to how I work and use my computer. I added a short explanation for each, so please have a look at the Brewfile to learn more.
You can install the packages contained within like so:
brew bundle --file=~/Brewfile-MultifokalHirnSee https://gist.github.com/ilessing/7ff705de0f594510e463146762cef779 for more info
brew install pandoc basictex
# to build pdf files have pdflatex from basictex in your PATH
la /Library/TeX/texbin/pdflatex
# lrwxrwxrwx - root 26 May 11:37 /Library/TeX/texbin/pdflatex -> pdftex
ln -s -v /Library/TeX/texbin/pdflatex /opt/homebrew/bin/pdflatexTemplate files are in .pandoc folder. You will nee these to build pdfs with eisvogel.
sudo tlmgr install soul adjustbox babel-german background bidi collectbox csquotes everypage filehook footmisc footnotebackref framed fvextra letltxmacro ly1 mdframed mweights needspace pagecolor sourcecodepro sourcesanspro titling ucharcat unicode-math upquote xecjk xurl zref draftwatermarkpandoc README.md -o Downloads/README.pdf --template eisvogelI use zsh in combination with the config framework
ohmyzsh (mostly out of habit, I have
not looked at other alternatives to plain bash so far).
zsh will be installed if you used my Brewfile, otherwise you can install it like so:
brew install zsh # consider setting it as you default shellPlease refer to my .zshrc to check out the configuration I use. For me, the config results in shell that extremely fun and quick to use, while also being aesthetically pleasing (at least to me).
You can install ohmyzsh like so (please refer to the
official documentation for more
information):
sh -c "$(curl -fsSL https://install.ohmyz.sh/)"To install custom themes or plugins, you have to clone them into the respective directory in the folder assigned to $ZSH_CUSTOM (which is usually ~/.oh-my-zsh/custom/).
To activate a theme, you have to set the ZSH_THEME variable in your .zshrc to the name of the theme you want to use.
I use the powerlevel10k theme, which is a very powerful and customizable theme. I highly recommend it. See my .p10k.zsh for my configuration.
cd $ZSH_CUSTOM/themes/
# powerlevel10k
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git
p10k configure
# spaceship-prompt - I do not use this anymore, but it is a great theme
git clone https://github.com/spaceship-prompt/spaceship-prompt.gitTo install plugins, you have to clone them into the $ZSH_CUSTOM/plugins/ directory and add them to the plugins array in your .zshrc.
cd $ZSH_CUSTOM/plugins/
# zinsults
# throws funny insults at you when you mistyped a command
git clone https://github.com/ahmubashshir/zinsults.git
# OhMyZsh-full-autoupdate
# keep plugins and themes up to date automatically
git clone https://github.com/Pilaton/OhMyZsh-full-autoupdate.git
# zsh-autosuggestions
# suggests commands as you type based on history and completions
git clone https://github.com/zsh-users/zsh-autosuggestions.git
# fzf-tab
# fzf-based completion selection menu
fzf --version || brew install fzf
git clone https://github.com/Aloxaf/fzf-tab.git
# fzf-tab-source
# collection of option sources for fzf-tab
git clone https://github.com/Freed-Wu/fzf-tab-source.git
# zsh-completions
# additional completion definitions
git clone https://github.com/zsh-users/zsh-completions.git
# fast-syntax-highlighting
# fast syntax highlighting
git clone https://github.com/zdharma-continuum/fast-syntax-highlighting.git
# zsh-nvm
# auto-switch between node versions depending on the current directory
git clone https://github.com/lukechilds/zsh-nvm.git
# zsh-pyenv-lazy
# lazy loading of pyenv; eval "$(pyenv init -)" is executed the first time pyenv is called
git clone https://github.com/davidparsson/zsh-pyenv-lazy.git
# wakatime
# time tracking for developers
git clone https://github.com/sobolevn/wakatime-zsh-plugin.git wakatime;"To browse files under UNIX the excellent viewer less can be used. By setting the environment variable LESSOPEN, less can be enhanced by external filters to become even more powerful. Most Linux distributions come already with a "lesspipe.sh" that covers the most common situations."
cd /usr/local/bin/
wget https://raw.githubusercontent.com/wofr06/lesspipe/refs/heads/lesspipe/lesspipe.sh
chmod +x /usr/local/bin/lesspipe.shI always recommend to use pyenv when developing software using python.
It allows you to install and switch between different versions of python and
decouples your development environment from the system python which Apple
will update from time to time, potentially breaking your development setup.
brew install pyenv python-argcomplete
activate-global-python-argcomplete --user
pyenv install 3.13.0 # example version
pyenv global 3.13.0 # set global python version to 3.13.0 (default is system python) pipx is a tool to install and use packages 'globally'.
It installs pipx itself into a separate virtual environment from your
default python interpreter, and makes sure that when you run pipx command,
it uses the pipx virtual environment.
python -V # check whether you are using the intended python version
brew install pipx # NEW - global pip packages are best installed using brew in 2024 apparently
# OLD: pip install --upgrade pipx
pipx ensurepath
pipx install ruff virtualenvwrapper bpython # example packagesmacOS has a built-in version of ruby. However, I highly advise installing
separate ruby versions and only using those in when developing. On a
fresh system, you will see the following behavior:
which ruby
# /usr/bin/ruby
/usr/bin/ruby -v
# ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.x86_64-darwin21]
/usr/bin/ruby -e 'puts Gem.user_dir'
# /Users/my_user/.gem/ruby/2.6.0To install a ruby version can run the following:
TODO- rewrite usingrbenv
brew install rubyYour ruby version should - at least once you reload the shell - be the one installed by brew and behave
similar to the following:
which ruby
# /usr/local/opt/ruby/bin/ruby
ruby -v
# ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-darwin21]
ruby -e 'puts Gem.user_dir'
# /Users/my_user/.gem/ruby/3.2.0You can install rustup like so:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shsccache is a compiler cache. It speeds up compilation by caching previous compilations and detecting when the same compilation is being done again.
cargo install sccache