Skip to content
dev
Switch branches/tags
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
ack
 
 
ag
 
 
aws
 
 
 
 
bat
 
 
bin
 
 
 
 
 
 
 
 
 
 
git
 
 
go
 
 
 
 
 
 
 
 
lib
 
 
 
 
 
 
 
 
lua
 
 
mac
 
 
 
 
 
 
 
 
 
 
php
 
 
 
 
 
 
r
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vim
 
 
 
 
zsh
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

dotfiles

My dotfiles. https://github.com/davidosomething/dotfiles

terminal screenshot

Screenshot of my ZSH prompt

My /uses post my be of interest to you!

Installation

See macOS specific notes in mac/README.md

Generally:

git clone --recurse-submodules https://github.com/davidosomething/dotfiles ~/.dotfiles

Then, run the bootstrap/symlink script for linux or bootstrap/mac for macOS.

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

Dev environment setup

After symlinking and restarting shell, aliases will be available. The sshkeygen alias will help in generating a new SSH key.

ruby

For user-land ruby, install chruby and ruby-install. Then, use ruby-install to install a version of ruby. Preferably install the latest ruby. The dotfiles alias ruby-install to use ${XDG_DATA_HOME}/rubies as the installation path.

ruby-install --latest ruby

node

For user-land node, install fnm using bootstrap/fnm

python

For user-land python, use pyenv-installer to install pyenv and pyenv-virtualenv.

Create virtualenvs for Neovim using bootstrap/pyenv

Provisioning scripts

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

Updating

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

Notes

  • 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/README.md 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:

/etc/profile
.xprofile
  shell/vars
    shell/xdg

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)

Credits

Logo from jglovier/dotfiles-logo