/dotfiles-1

mac OS, Arch Linux, and Debian/Ubuntu

Primary LanguageShell

dotfiles

Build Status Updates

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

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 install the latest ruby. The dotfiles alias ruby-install to use ${XDG_DATA_HOME}/rubies as the installation path.

    ruby-install --latest ruby
  • 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.

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