Skip to content

davidosomething/dotfiles

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dotfiles

My dotfiles. https://github.com/davidosomething/dotfiles
My /uses post may be of interest to you!

terminal screenshot

Screenshot of my ZSH prompt

Tool Link
OS support Arch, macOS, Debian, Ubuntu
Terminal emulator wezterm
Font Maple Mono
Shell zsh
Shell plugins zinit
Editor neovim
Tooling/env mise

Installation

See macOS specific notes in mac/README.md

Generally:

git clone https://github.com/davidosomething/dotfiles ~/.dotfiles

Then, run the bootstrap/symlink script.

After symlinking, restart the shell. Aliases will be available. The sshkeygen alias will help in generating a new SSH key.

Run bootstrap/cleanup to clean up stray dotfiles, moving into their XDG Base Directory supported directories and deleting unnecessary things (with confirmation).

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.
  • 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
  • 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.
  • nvim/
  • python/
    • Never sudo pip. Set up a python virtual environment.

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().
  • Function bodies
    • Never use the fn() ( subshell body in parentheses ) format, always use curly braces first for consistency: fn() { ( subshell body ); }.
  • 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