Skip to content
mac OS, Arch Linux, and Debian/Ubuntu
Vim script Shell Lua JavaScript Ruby PHP Other
Branch: dev
Clone or download
Latest commit 28cb30b Jan 20, 2020
Type Name Latest commit message Commit time
Failed to load latest commit information.
ack ack Feb 23, 2017
ag more zinit migration Jan 20, 2020
bat base16 bat theme May 25, 2019
bin typescriptreact sp settings, pipx in dotfiles update Jan 17, 2020
bootstrap add ssid for mac, mac os -> macOS Jan 16, 2020
checkstyle move nvimsocket, add google checkstyle for java and use it in neomake… Oct 16, 2017
chromium upd exts Jan 16, 2020
coc/extensions Ensure coc using default npm package registry Nov 10, 2019
curl update curl defaults Jan 17, 2019
git use new git cmd Dec 26, 2019
go make installer Oct 27, 2017
ideavim ideavim Oct 5, 2018
kitty launchctl instructions Nov 22, 2019
lib fix prefer Oct 4, 2019
linux remove old arch linux+openbox stuff, fix some grepping Dec 21, 2019
local keep local dir Dec 2, 2015
logs add ignored logs folder Apr 30, 2015
lua PWD is available, no need to subshell Jul 1, 2019
mac remove old script Jan 17, 2020
markdownlint fix maybemkdir and symlink dir creation; markdownlint rc can be globa… Nov 10, 2017
meta vim screen, remove potatopro screens Jan 16, 2020
neofetch move neofetch conf Dec 23, 2019
node remove some default pkgs Dec 14, 2019
php fix dko helper call name changes Nov 12, 2017
prettier prettier and eslint settings Jun 27, 2018
python start moving python cli tools to pipx Jan 16, 2020
r renviron filename May 5, 2017
remark more linting settings WIP Aug 17, 2018
ruby PWD is available, no need to subshell Jul 1, 2019
shell mykey outputs now Jan 20, 2020
subversion macOS refs May 11, 2017
tests update filetypes for vim8 Nov 2, 2019
tmux forward some env vars Aug 25, 2019
uncrustify uncrustify, ideavim settings, ignore classpaths Aug 16, 2018
universal-ctags ctags phpcomplete working now Nov 3, 2016
vale/styles vale setup Jul 20, 2018
vim check for autochdir Jan 20, 2020
zsh not ready Jan 20, 2020
.alexignore add alexignore Jul 17, 2018
.editorconfig echint global, neoinclude coc ext, inc suggest timeout Mar 22, 2019
.eslintrc.js move eslint config out of package.json since coc-eslint can't find it Jan 16, 2020
.gitignore move bitbar into mac May 9, 2019
.gitmodules add tpm as gitmodule, vim tmux compatibility, tmux config Feb 21, 2016
.ignore move mac apps stuff into mac/ May 9, 2019
.npmrc ensure this project uses standard registry Oct 30, 2019
.pyup.yml switch to security only Jun 7, 2018
.remarkrc.js remarkrc Aug 17, 2018
.travis.yml use python -m Nov 2, 2019
.vale.ini vale setup Jul 20, 2018
.vintrc.yml yamllinting Nov 14, 2017
.yamllint more zinit migration Jan 20, 2020 stopped using greenkeeper -- renovate only Jan 20, 2020
package-lock.json Update dependency eslint to v6.8.0 Dec 20, 2019
package.json more zinit migration Jan 20, 2020
renovate.json no preserve Mar 25, 2019
requirements.txt Update dependency vim-vint to v0.4a3 Jan 17, 2020


Build Status Updates

My dotfiles.

terminal screenshot

Screenshot of my ZSH prompt

My /uses post my be of interest to you!


See macOS specific notes in mac/


git clone --recurse-submodules ~/.dotfiles

Then, run symlink or mac in bootstrap/. After symlinking, bootstrap/cleanup can detect and move pre-existing dotfiles that conflict with these (mac does this).

Dev environment setup

Install these using the system package manager. For macOS/OS X there are helper scripts.

  • For user-land ruby, install chruby and ruby-install. Then, use ruby-install to install a version of ruby (preferably latest, and into ~/.config/rubies/ruby-1.2.3 using flags)
  • For user-land node, install nvm MANUALLY via git clone into $XDG_CONFIG_HOME, then use it to install a version of node
  • php, composer, use composer to install wp-cli
  • For user-land python, use pyenv-installer to install pyenv and pyenv-virtualenv.

Provisioning scripts

These will assist in installing packages and dotfiles. Best to have the environment set up first.


u is an alias to dot. Use u without arguments for usage.


  • bin/
    • There's a readme in bin/ describing each script/binary. This directory is in the $PATH.
  • local/
    • Unversioned folder, put zshrc, bashrc, npmrc, and gitconfig here and they will be automatically sourced, LAST, by the default scripts. No dots on the filenames.
  • git/
    • The comment character is # instead of ; so I can use Markdown in my commit messages without trimming the headers as comments. This is also reflected in a custom Vim highlighting syntax in vim/after/syntax/gitcommit.vim.
  • python/
  • ruby/
    • Never sudo gem. Set up a chruby env first, and then you can install gems into the userspace local to the active ruby env.
  • vim/
    • If curl and git are available, vim-plug can automatically download and install itself on first run. See vim/ for more information.

rc script source order

If you have node installed, the dkosourced command will show you (not exhaustively) the order scripts get sourced. Without node echo $DKO_SOURCE works.

For X apps (no terminal) the value may be:


Shell script code style

  • Script architecture
    • Use the #!/usr/bin/env bash shebang and write with bash compatibility
    • Create a private main function with the same name as the shell script. E.g. for a script called fun, there should be a __fun() that gets called with the original arguments __fun $@
    • Two space indents
    • Prefer . over source
  • Function names
    • For private functions in a script, use two underscores __private_func() These function names are safe to reuse after running the script once. When namespaced, they are in the form of __dko_function_name().
  • Variable interpolation
    • Always use curly braces around the variable name when interpolating in double quotes.
  • Variable names
    • Stick to nouns, lower camel case
  • Variable scope
    • Use local and readonly variables as much as possible over global/shell-scoped variables.
  • Comparison
    • Not strict on POSIX, but portability
    • Do NOT use BASH arrays, use ZSH or Python if need something complicated
    • Use BASH == for string comparison
    • Use BASH (( A == 2 )) for integer comparison (note not $A, $ not needed)


Logo from jglovier/dotfiles-logo

You can’t perform that action at this time.