Denys Dovhanβs dotfiles
There are tons of useful things in here:
- The usefulness of Oh My ZSH! is already builtβin.
- Spaceship as a prompt.
- Fish-like autosuggestion in Zsh.
- Syntax highlighting of commands while they are typed.
- Automatically closing and deleting of quotes and brackets when you type them.
- Browser-like substring search for history.
- zgen for dependency management.
- Lots of useful aliases.
- Modern CLI tools like
eza (smarter ls), bat (smarter cat), zoxide (smarter cd).
- Git config, global
.gitignore file and aliases.
- Homebrew bundle for bootstrapping a macOS workstation.
- A lot of useful bins.
update script for updating dotfiles, Zsh plugins, brew, and apt packages.
Missing feature? Fork this repo and make it better.
Installation
Dotfiles are installed by running one of the following commands in your terminal, just copy one of the following commands and execute in the terminal:
Tell Git who you are using these commands:
git config -f ~/.gitlocal user.email "[email protected]"
git config -f ~/.gitlocal user.name "Name Lastname"
Clone dotfiles repo:
# Clone dotfiles repo
git clone https://github.com/denysdovhan/dotfiles.git $HOME/.dotfiles
# Go to the dotfiles directory
cd $HOME/.dotfiles
# Install dotfiles
./install
./install also links agents/AGENTS.md into supported agent config directories when those directories already exist (~/.codex, ~/.cursor, ~/.config/agents, ~/.config/github-copilot, and ~/.config/opencode).
Updating
Use single command to get the latest updates:
update
This command refreshes sudo, pulls the latest dotfiles, reruns ./install --except shell, updates zgen and Zsh plugins, and updates brew when available.
Under the hood
Note: You may put your custom settings into ~/.zshlocal.
Projects tree
I suggest you to organize project folder as follows:
~/Projects
βββ Forks # for GitHub fork
βββ Job # for job projects
βββ Playground # for short-term experiments
βββ Repos # for long-term projects
Aliases
Aliases are going to make your work fast and enjoyable. See code in $DOTFILES/lib/aliases.zsh. Here is what's included:
- Aliases from Oh-My-Zsh. See Oh-My-Zsh Cheatsheet for more.
- Easier navigation
.. β cd ..
... β cd ../..
.... β cd ../../..
..... β cd ../../../..
~ β cd ~
- β cd -
- Folders shortcuts
dl β cd ~/Downloads
dt β cd ~/Desktop
pj β cd ~/Projects
pjr β cd ~/Projects/Repos
pjf β cd ~/Projects/Forks
pjj β cd ~/Projects/Job
pjl β cd ~/Projects/Playground
- Commands Shortcuts
e β $EDITOR
+x β chmod +x
x+ β chmod +x
reload β reload ~/.zshrc
clr β clear
- Open
open <FILE> β open file from terminal.
o <FILE> β open file from terminal.
oo β open current folder.
term β open iTerm.
- Misc
update β get updates (Runs $DOTFILES/scripts/update.sh).
bootstrap β run machine bootstrap (Runs $DOTFILES/scripts/bootstrap.sh).
dotfiles β jump quickly into dotfiles folder.
myip β my local IP address.
password β generate random password, copies it into clipboard and outputs it to terminal.
path β print $PATH in readable view.
getpage β download web page with all assets.
get β download file with original filename.
git-root β jump to the current repo root.
help β use tldr when available.
lg β open lazygit when available.
Depending on installed tools, ls uses eza, cat uses bat, cd uses zoxide, and rm uses trash.
Oh-My-Zsh plugins
These OMZ plugins are included:
brew β Homebrew completions and helpers.
git β git aliases and functions.
history-substring-search β browser-like history search.
npm β provides completion as well as adding many useful aliases.
yarn β the same as for npm, but for yarn
nvm β auto-sourcing nvm.
fnm β fnm integration.
pyenv β pyenv integration.
gh β GitHub CLI aliases and completions.
sudo β [Esc] [Esc] to re-run previous command with sudo.
ssh-agent β automatically starts ssh-agent to set up and load whichever credentials you want for ssh connections.
gpg-agent β enables gpg-agent if it is not running.
docker and docker-compose β Docker helpers.
fzf, direnv, bun, deno, and more.
- More are listed in
.zshrc (it's hard to keep the list updated).
Bin
Dotfiles also include some functions that will make your life easier. See code in bin/.
emptytrash β empty the Trash on all mounted volumes and the main HDD.
git-cleanup β removes old Git branches and does other cleanup.
git-fork β add remote upstream.
git-upstream β sync branch with upstream.
gz β get gzipped file size
n β runs given command using binary in node_modules/.bin of the current project.
nyan β print nyan cat.
password β generate a random password and copy it to the clipboard.
Git
Note: Add your git user data and custom settings to ~/.gitlocal.
Configuration
- UI color is
auto.
- Default branch is
main.
- Diff colors are:
white bold for meta information;
cyan bold for frag;
red bold for old lines;
green bold for new lines.
- Default editor is Vim instead of Vi.
push.default set as current.
pull.rebase set to true.
push.autoSetupRemote set to true.
rerere enabled for conflict resolution reuse.
- Automatic replacement
git://github.com/, gh:, github: addresses as [email protected]: for GitHub.
- Automatic replacement
git://gist.github.com/, gst:, gist: addresses as [email protected]: for Gists.
- User custom settings gets from a
~/.gitlocal file.
Git Aliases
git a β git add β patch mode for specified files.
git ua β git reset HEAD β unstage files.
git b β git branch β list, create, or delete branches.
git c β git commit β record changes to the repository.
git m β git merge β merge branches.
git mc β git merge --continue β continue merge after resolving conflicts.
git co β git checkout β checkout a branch or paths to the working tree.
git cb β git checkout -b β create and checkout branch.
git sw β git switch β switch branches.
git swc β git switch -c β create and switch branch.
git ap β git add -p β add file contents to the index.
git ca β git commit -a β commit with automatically stage files that have been modified and deleted.
git cm β git commit -m β commit with commit message.
git cam β git commit -am β add all files and commit with message.
git s β git status -sb β short status with current branch.
git main β go to main branch and pull from remote.
git master β go to master branch and pull from remote.
git develop β go to develop branch and pull from remote.
git remain β fetch latest main and merge it into the current branch.
git remaster β fetch latest master and merge it into the current branch.
git git β do not complain about git git.
git l β commits log with pretty single line format.
git ll β log with list of changed files for each commit.
git ignore β ignore files: append file to .gitignore.
git this β initialize, add all files and commit.
git amend β amend last commit.
git redo β amend last commit with its original message.
git undo β reset --mixed HEAD^ β reset index changes, but not the working tree.
git discard β checkout -- β discard changes.
git contrib β list of contributors and how many commits each person has.
git today β see how many lines of code you have written today.
git sync β pull and push changes from/to remote.
git lazy β open lazygit.
git-root β go to repo root.
git-cleanup [--force] β removes old Git branches.
git-fork <original-author> β add remote upstream.
git-upstream [branch] β sync branch with upstream (defaults to master).
Resources
Resources that I used to make these dotfiles better:
- GitHub β€ ~/
- Mathiasβs dotfiles
License
MIT Β© Denys Dovhan