diff --git a/README.md b/README.md index 09cf89f1c..a247e7e7d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,9 @@ -# My Mac Configuration +# My P(ersonal) C(omputer) Settings + I'm documenting this primarily for personal use. This reposity contains shell configs, vim configs, emacs configs, a list of commonly used applications, and other items. +Ironically, I prefer to use a Mac as my personal computer, so hopefully the name, `pc_settings` isn't misleading. + The overall goal of this repository is to reduce the time it takes to adopt a new computer and equip it with the necessary tooling to do meaningful work. @@ -68,16 +71,18 @@ To support ligatures make sure Hasklig is installed (link at the bottom). Ensure ### Commonly used applications -* dash - provides quick access to offline documentation (use with Alfred) -* Alfred - replaces macOS Spotlight and integrates with external Apps like Dash -* homebrew - necessary for procuring shell applications -* karabiner - `key-repeat: 50ms delay-until-repeat: 300ms` increase your Mac's key repeat settings beyond the default range -* spectacle - resize and move your windows with keyboard shortcuts -* iterm - substitute for Terminal application -* oh my zsh - a full suite of z-shell extensions +* Emacs OS X - text editor * sublime text - text editor * webstorm - web IDE * pycharm - python IDE +* dash - provides quick access to offline documentation (use with Alfred) +* Alfred - replaces macOS Spotlight and integrates with external Apps like Dash +* iterm - substitute for Terminal application +* homebrew - necessary for procuring shell applications +* spectacle - resize and move your windows with keyboard shortcuts +* iterm - substitute for Terminal application +* Fish Shell - a more modern alternative to Bash or Zsh +* oh my zsh - a full suite of z-shell extensions * docker - for running containers and virtual environments * mou - markdown editor * f.lux - modulates the blue amount from the screen throughout the day @@ -108,6 +113,6 @@ To support ligatures make sure Hasklig is installed (link at the bottom). Ensure * Install [Hasklig](https://github.com/i-tu/Hasklig) for ligature support in Elm, Elixir, etc * Install [FiraCode](https://github.com/tonsky/FiraCode/wiki) for ligature support * Install [Operator Mono](http://www.typography.com/blog/introducing-operator) for expressive Italics -* Install powerline fonts +* Install powerline fonts * add Adobe Source Code Pro font for shell and text editors * increase trackpad / mouse speed to maximum levels diff --git a/aliases.sh b/aliases.sh index 36149a41a..ed4613271 100644 --- a/aliases.sh +++ b/aliases.sh @@ -26,3 +26,6 @@ alias wdirs='dirs | tr " " "\n" | sort -r' # Pretty-print git history alias glp="git log --graph --pretty=format:'%Cred%h%Creset -%Cblue %an %Creset - %C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative" +# Convenient alias for git status +alias gst="git status" + diff --git a/configs/#.vimrc# b/configs/#.vimrc# new file mode 100644 index 000000000..84fc89065 --- /dev/null +++ b/configs/#.vimrc# @@ -0,0 +1,479 @@ +" -- BEGIN: Vundle config -- +set nocompatible " be iMproved, required +filetype off " required + +" set the runtime path to include Vundle and initialize +set rtp+=~/.vim/bundle/Vundle.vim +call vundle#begin() +" alternatively, pass a path where Vundle should install plugins +"call vundle#begin('~/some/path/here') + +" let Vundle manage Vundle, required +Plugin 'VundleVim/Vundle.vim' + +" The following are examples of different formats supported. +" Keep Plugin commands between vundle#begin/end. + +" Displays git information in airline. +Plugin 'tpope/vim-fugitive' + +" Displays git-tracked C*UD ops within gutter. +Plugin 'airblade/vim-gitgutter' + +" Fuzzy-finder +Plugin 'kien/ctrlp.vim' + +" Grep file contents +Plugin 'mileszs/ack.vim' + +" JS support +Plugin 'pangloss/vim-javascript' + +" Visual dir-tree navigation +Plugin 'scrooloose/nerdtree' + +" Syntax Highlighting Support +Plugin 'lambdatoast/elm.vim' + + this is a test + so is this + + +" Elixir Plugins +Plugin 'elixir-lang/vim-elixir' +Plugin 'slashmili/alchemist.vim' +Plugin 'powerman/vim-plugin-AnsiEsc' + +" TypeScript Plugins +Plugin 'rschmukler/typescript-vim' + +" Themes +Plugin 'sickill/vim-monokai' +Plugin 'altercation/vim-colors-solarized' +Plugin 'mhartington/oceanic-next' + +" Executes shell commands and pipes output into new Vim buffer. +Plugin 'sjl/clam.vim' + +" Multiple cursors for simultaneous edits. +" NOTE: use to run miltiple cursors not +Plugin 'terryma/vim-multiple-cursors' + +" Visualize buffers +Plugin 'vim-airline/vim-airline' +Plugin 'vim-airline/vim-airline-themes' + +" Visually align assignments +Plugin 'godlygeek/tabular' + +" Visually Highlight and comment code. +Plugin 'tpope/vim-commentary' + +" Macros for quotes, parens, etc. +Plugin 'tpope/vim-surround' + +" Allows Plugins to be repeated with `.` character +Plugin 'tpope/vim-repeat' + +" Seamlessly navigate Vim and Tmux with similar bindings. +Plugin 'christoomey/vim-tmux-navigator' + +" Async `:make` for code linting etc. +Plugin 'neomake/neomake' + +" Color pack +Plugin 'flazz/vim-colorschemes' + +" Dash integration (macOS only) +Plugin 'rizzatti/dash.vim' + +" Better buffer mgt than CtrlP +Plugin 'yegappan/mru' + +Plugin 'zanglg/nova.vim' + +call vundle#end() " required +filetype plugin indent on " required +" Put your non-Plugin stuff after this line +" -- END: Vundle config -- + + +" Basic settings +set number +set wrap! +set tabstop=2 +set expandtab +set shiftwidth=2 +set background=dark + +syntax enable +colorscheme nova + +set termguicolors + +set history=1000 +set undolevels=1000 + +set t_Co=255 + +" Support italics +highlight Comment cterm=italic + +" Changes to character. +let mapleader = " " + + +" Auto resize window splits +autocmd VimResized * wincmd = + + +" Neomake Settings +autocmd! BufWritePost * Neomake + +" Elixir linting +let g:neomake_elixir_credo_maker = { + \ 'exe': 'mix', + \ 'args': ['credo', 'list', '%:p', '--format=oneline'], + \ 'errorformat': + \ '%W[F] %. %f:%l:%c %m,' . + \ '%W[F] %. %f:%l %m,' . + \ '%W[R] %. %f:%l:%c %m,' . + \ '%W[R] %. %f:%l %m,' . + \ '%I[C] %. %f:%l:%c %m,' . + \ '%I[C] %. %f:%l %m,' . + \ '%-Z%.%#' + \ } + + +" Alchemist settings +let g:alchemist#elixir_erlang_src = '/usr/local/share/src' + + +" Airline Settings +" Enables the list of buffers. +let g:airline#extensions#tabline#enabled = 1 + +" Buffer numbers alongside files +let g:airline#extensions#tabline#buffer_nr_show = 1 + +" Shows the filename only. +let g:airline#extensions#tabline#fnamemod = ':t' + +" Allow glyphs in airline +let g:airline_powerline_fonts = 1 + +" Change Airline theme +let g:airline_theme = 'hybrid' + + +" Jump to buffers. +nmap :1b +nmap :2b +nmap :3b +nmap :4b +nmap :5b +nmap :6b +nmap :7b +nmap :8b +nmap :9b + + +" It's the twenty-first century...no swaps. +set noswapfile + + +" Allow visual tab completion in command mode +set wildmenu + + +" Show Vim commands as they're being input. +set showcmd + + +" Code folding +set foldmethod=indent +set foldnestmax=10 +set nofoldenable +set foldlevel=4 + + +" Use relative line numbers +set relativenumber + + +" emulate ci" and ci' behavior +nnoremap ci( f(%ci( +nnoremap ci[ f[%ci[ + + +" extend functionality of & scrolling +nnoremap j +vnoremap j +nnoremap k +vnoremap k + + +" Opens all folds within the buffer +nnoremap ZZ zR + +" Closes all folds within the buffer +nnoremap zz zM + +" Opens all folds beneath the cursor +" NOTE: j is the character to go down +nnoremap zJ zO + +" Opens single fold beneath the cursor +" NOTE: j is the character to go down +nnoremap zj zo + +" Opens single fold beneath the cursor +" NOTE: k is the character to go down +nnoremap zK zC + +" Opens single fold beneath the cursor +" NOTE: k is the character to go down +nnoremap zk zc + + +" Lookup Dash word under cursor in Dash +nnoremap j :Dash + + +" Save shortcut +nnoremap :w + + +" Switch to MRU'd buffer +nnoremap + + +" Alternative MRU to CtrlP MRU +nnoremap b :MRU + + +" Supports mouse interaction. +set mouse=a + + +" Highlights matches during a search. +set hlsearch + +" Clear highlight +noremap / :nohlsearch + + +" backspace settings +set backspace=2 +set backspace=indent,eol,start + + +" Javascript specific variables +let g:javascript_plugin_jsdoc = 1 + +" GlobalListchars +set list +set listchars=tab:··,trail:·,nbsp:· + + +" Keeps everything concealed at all times. Even when cursor is on the word. +set conceallevel=1 +set concealcursor=nvic + + +" map jk to +inoremap jk + + +" Conventional Emacs line-editor defaults +" NOTE: interferes w/ current tmux prefix +inoremap I +inoremap A + + +" Manage Vertical and Horizontal splits +nnoremap sl :vsl +nnoremap sh :vs +nnoremap sj :spj +nnoremap sk :sp + + +" Delete (i.e. "close") the currently opened buffer +" TODO: unless it's a split window, which should be :q +nnoremap q :bdelete + + +" Set CtrlP runtime path +set runtimepath^=~/.vim/bundle/ctrlp.vim + + +" Buffer creation and management +" Buffer movement +nnoremap :1bnext +nnoremap :1bprevious + + +" make Y do what is intuitive given: +" D: deletes until EOL +" C: changes until EOL +" Y: (should) yank until EOL +nnoremap Y y$ + + +" scrolling and maintaing mouse position +" nnoremap j +" nnoremap k + + +" Shorter binding for window rotations +nnoremap + + +" remap redo key that is eclipsed by `rotate` currently +nnoremap U :redo + + +" Define highlighting groups +" NOTE: The ANSII aliases for colors will change when iTerm2 settings are +" changed. +highlight InterestingWord1 ctermbg=Magenta ctermfg=Black +highlight InterestingWord2 ctermbg=Blue ctermfg=Black + +" h1 highlighting +nnoremap 1 :execute '2match InterestingWord1 /\<\>/' +nnoremap x1 :execute '2match none' +vnoremap 1 :execute '2match InterestingWord1 /\<\>/' + +" h2 highlighting +nnoremap 2 :execute '3match InterestingWord2 /\<\>/' +nnoremap x2 :execute '3match none' + +"clear all highlighted groups +nnoremap xx :execute '2match none' :execute '3match none' hh + + +" pasteboard copy & paste +nnoremap V"+y +vnoremap "+y + +inoremap "+pa +" nnoremap o"+p +vnoremap "+p + + +" Manage 80 char line limits +highlight OverLength1 ctermbg=Magenta ctermfg=Black +highlight OverLength2 ctermbg=LightMagenta ctermfg=Black +highlight OverLength3 ctermbg=White ctermfg=Black +" match OverLength3 /\%81v.\+/ +match OverLength2 /\%91v.\+/ +" match OverLength3 /\%101v.\+/ + + +" Toggle word-wrapping +nnoremap w :set wrap! + + +" Resize split to 10,20,...,100 chars +" Uncomment the next lines for support at those sizes. +" These bindings interfere with the highlight groups, however. +" Increases the width of a vertical split. +" nnoremap 1 :vertical resize 10 +" nnoremap 2 :vertical resize 20 +nnoremap 3 :vertical resize 30 +nnoremap 4 :vertical resize 40 +nnoremap 5 :vertical resize 50 +nnoremap 6 :vertical resize 60 +nnoremap 7 :vertical resize 70 +nnoremap 8 :vertical resize 80 +nnoremap 9 :vertical resize 90 +nnoremap 0 :vertical resize 100 + + +" Increases the height of a horizontal split. +nnoremap v1 :resize 5 +nnoremap v2 :resize 10 +nnoremap v3 :resize 15 +nnoremap v4 :resize 20 +nnoremap v5 :resize 25 +nnoremap v6 :resize 30 +nnoremap v7 :resize 35 +nnoremap v8 :resize 40 +nnoremap v9 :resize 45 +nnoremap v0 :resize 50 + + +" NERDTree settings +" Show hidden files by default. (Toggle with capital 'i') +let NERDTreeShowHidden = 1 + +" View Directory tree with ctrl + n +nnoremap n :NERDTreeToggle + +" View open buffer location in tree. +nnoremap f :NERDTreeFind + + +" BOL and EOL +nnoremap H ^ +vnoremap H ^ +nnoremap L $ +vnoremap L $ + + +" Search for visually selected text +vnoremap // y/"N + + +" trim trailing whitespace on save +autocmd BufWritePre *.{js,py,tpl,less,html,ex,exs,txt} :%s/\s\+$//e + + +" Use .gitignore file to populate Ctrl-P +let g:ctrlp_user_command = ['.git', 'cd %s && git ls-files . -co --exclude-standard', 'find %s -type f'] + + +" Ignores dirs and files +let g:ctrlp_custom_ignore = { + \ 'dir': 'node_modules', + \ 'file': '\v\.(exe|dll|png|jpg|jpeg)$' +\} + + +" WIP: Run elixir tests on that line +" TODO: only register binding in *.exs? file extensions +nnoremap t :call ExTestToggle() + + +" Jumps from an Elixir module file to an Elixir test file. +fun! ExTestToggle() + if expand('%:e') == "ex" + + let test_file_name = expand('%:t:r') . "_test.exs" + let test_file_dir = substitute(expand('%:p:h'), "/lib/", "/test/", "") + let full_test_path = join([test_file_dir, test_file_name], "/") + + e `=full_test_path` + + elseif match(expand('%:t'), "_test.exs") != -1 + + let test_file_name = expand('%:t:r') + let offset_amt = strlen(test_file_name) - strlen("_test") + let module_file_name = strpart(test_file_name, 0, offset_amt) . ".ex" + let module_file_dir = substitute(expand('%:p:h'), "/test/", "/lib/", "") + let full_module_path = join([module_file_dir, module_file_name], "/") + + e `=full_module_path` + + endif +endfun + + +" Creates intermediate directories and file to match current buffer's filepath +fun! CreateNonExistingDirsAndFile() + ! echo "Creating directory..." && mkdir -p %:p:h && echo "Created directory." && echo "Creating file..." && touch %:t:p && echo "Created file." + + " Write the buffer to the recently created file. + w +endfun + diff --git a/configs/.emacs b/configs/.emacs index dd72ff9df..71b43f730 100644 --- a/configs/.emacs +++ b/configs/.emacs @@ -1,4 +1,4 @@ -;; William Carroll's Emacs configuration +; William Carroll's Emacs configuration ;; From `https://github.com/melpa/melpa` @@ -104,6 +104,11 @@ (global-set-key (kbd "") 'toggle-frame-fullscreen) +;; Dired Settings +(require 'dired) +(define-key dired-mode-map (kbd "c") 'find-file) + + ;; Helm Settings (require 'helm) (require 'helm-config) diff --git a/elixir-tooling.md b/elixir-tooling.md new file mode 100644 index 000000000..9410fa1fe --- /dev/null +++ b/elixir-tooling.md @@ -0,0 +1,19 @@ +# Elixir Tooling + +Disclaimer: This file is intended to document learnings about tooling text editors to work with Elixir. + +## Emacs + +### Useful plugins + +* `Elixir-mode`: font-locking, indentation, etc. +* `Alchemist`: IEx, mix, autocompletion via `company`, etc. +* `Flycheck`: works with linters, `Dogma` and `Credo` + +When running an umbrella app, to allow `Alchemist` to properly jump to function definitions run... + +```bash +$ ln -sf ../../_build _build +``` + +...where `../../_build` is the path to the umbrella root directory.