{"id":13572690,"url":"https://github.com/martin-svk/dot-files","last_synced_at":"2025-04-04T10:31:09.318Z","repository":{"id":14154427,"uuid":"16860228","full_name":"martin-svk/dot-files","owner":"martin-svk","description":":zap: Well documented, terminal centric web developer's dot files. Neovim, Zsh, Tmux, Git, etc.","archived":false,"fork":false,"pushed_at":"2025-03-30T18:42:51.000Z","size":8917,"stargazers_count":215,"open_issues_count":0,"forks_count":19,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-03-30T19:33:09.840Z","etag":null,"topics":["dotfiles","git","neovim","tmux","vim","zsh"],"latest_commit_sha":null,"homepage":"","language":"Vim Script","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/martin-svk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2014-02-15T09:52:02.000Z","updated_at":"2025-02-10T15:12:37.000Z","dependencies_parsed_at":"2025-03-30T19:27:43.350Z","dependency_job_id":"f45bc78b-e155-4361-a2af-81acc6ec115c","html_url":"https://github.com/martin-svk/dot-files","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martin-svk%2Fdot-files","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martin-svk%2Fdot-files/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martin-svk%2Fdot-files/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martin-svk%2Fdot-files/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/martin-svk","download_url":"https://codeload.github.com/martin-svk/dot-files/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247160369,"owners_count":20893816,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dotfiles","git","neovim","tmux","vim","zsh"],"created_at":"2024-08-01T14:01:32.705Z","updated_at":"2025-04-04T10:31:09.292Z","avatar_url":"https://github.com/martin-svk.png","language":"Vim Script","funding_links":[],"categories":["Vim Script"],"sub_categories":[],"readme":"# Well documented, terminal centric web developer's dot files\n\nHey everybody. I am Martin, a software developer with an obsession for workflow improvement.\nBelow I present the most interesting parts of my config files. **Feel free to be inspired**.\n\n| [Credits](#credits) | [License](#license) |\n\n## What's included\n\n* [Neovim](#neovim) ([source](./neovim/init.vim))\n* [ZSH](#zsh) ([source](./shell/zshrc))\n* [Tmux](#tmux) ([source](./tmux/tmux.conf))\n* [Git](#git) ([source](./git/gitconfig))\n* [Xterm](#xterm) ([source](./shell/Xresources))\n* [Ruby utilities (pry, gem, IRB)](#pry-gem-irb)\n* [Other utilities (Ag search, Devilspie2)](#ag-devilspie2)\n\n## Neovim\n\nI am using [Neovim](http://neovim.org/) which is a **Vim** fork focused on maintainability.\nBelow are the most interesting parts of my Neovim configuration.\n\n### Show me the end result first\n\nHere you go.\n\n![Neovim + Tender](./data/screenshots/tender.png)\n\nWant more? Scroll down to the appropriate [section](#screenshots-and-cheatsheets).\n\n### Plugins\n\nI use the excellent [vim-plug](https://github.com/junegunn/vim-plug) package manager.\nIt supports parallel fetching, lazy loading, after install hooks, etc. You should consider using it :)\n\nAnd which plugins I use? Currently I use about **75** plugins. Some of the most interesting are:\n\n* [Neomake](https://github.com/benekastah/neomake) - Linter integration (Syntastic alternative) with asynchronous support.\n* [Unite](https://github.com/Shougo/unite.vim) - Search and display information from arbitrary sources.\n* [Deoplete](https://github.com/Shougo/deoplete.nvim) - Autocomplete with Neovim asynchronous support.\n* [Lightline](https://github.com/itchyny/lightline.vim) - Lightweight but extensible and configurable status line.\n* [Lexima](https://github.com/cohama/lexima.vim) - Auto-closing (,\",' and some language constructs (ruby blocks). Dot repeat supported.\n\nFor a complete list, look [here](./neovim/init.vim#L24).\n\n### Utility scripts\n\nIn the code snippets below I ofter call `utils#xxx()` functions. Those are just simple multiple lines long\nvimscript functions (often inspired by other people). You can find them [here](./neovim/autoload/utils.vim).\n\n### Vim defaults overriding (improving)\n\n```VimL\n\" Easier window switching\nnmap \u003csilent\u003e \u003cC-w\u003e\u003cC-w\u003e :call utils#intelligentCycling()\u003cCR\u003e\nnnoremap \u003cC-h\u003e \u003cC-w\u003eh\nnnoremap \u003cC-j\u003e \u003cC-w\u003ej\nnnoremap \u003cC-k\u003e \u003cC-w\u003ek\nnnoremap \u003cC-l\u003e \u003cC-w\u003el\n\n\" Visual linewise up and down by default (and use gj gk to go quicker)\nnnoremap j gj\nnnoremap k gk\nnnoremap gj 5j\nnnoremap gk 5k\nvnoremap j gj\nvnoremap k gk\nvnoremap gj 5j\nvnoremap gk 5k\n\n\" When jump to next match also center screen\nnnoremap n nzz\nnnoremap N Nzz\nvnoremap n nzz\nvnoremap N Nzz\n\n\" Same when moving up and down\nnnoremap \u003cC-u\u003e \u003cC-u\u003ezz\nnnoremap \u003cC-d\u003e \u003cC-d\u003ezz\nnnoremap \u003cC-f\u003e \u003cC-f\u003ezz\nnnoremap \u003cC-b\u003e \u003cC-b\u003ezz\nvnoremap \u003cC-u\u003e \u003cC-u\u003ezz\nvnoremap \u003cC-d\u003e \u003cC-d\u003ezz\nvnoremap \u003cC-f\u003e \u003cC-f\u003ezz\nvnoremap \u003cC-b\u003e \u003cC-b\u003ezz\n\n\" Remap H and L (top, bottom of screen to left and right end of line)\nnnoremap H ^\nnnoremap L $\nvnoremap H ^\nvnoremap L g_\n\n\" More logical Y (default was alias for yy)\nnnoremap Y y$\n\n\" Quick replay q macro\nnnoremap Q @q\n\n\" Don't yank to default register when changing something\nnnoremap c \"xc\nxnoremap c \"xc\n\n\" After block yank and paste, move cursor to the end of operated text\n\" Also, don't copy over-pasted text in visual mode\nvnoremap y y`]\nvnoremap p \"_dP`]\nnnoremap p p`]\n\n\" Use camel-case motion instead of default motions\nmap \u003csilent\u003e w \u003cPlug\u003eCamelCaseMotion_w\nmap \u003csilent\u003e b \u003cPlug\u003eCamelCaseMotion_b\nmap \u003csilent\u003e e \u003cPlug\u003eCamelCaseMotion_e\nmap \u003csilent\u003e ge \u003cPlug\u003eCamelCaseMotion_ge\nsunmap w\nsunmap b\nsunmap e\nsunmap ge\n\n\" Fix the cw at the end of line bug default Vim has special treatment (:help cw)\nnmap cw ce\nnmap dw de\n\n\" Uppercase word in insert mode\ninoremap \u003cC-u\u003e \u003cESC\u003emzgUiw`za\n\n\" Matching brackets with TAB (using matchit) (Breaks the \u003cC-i\u003e jump)\nmap \u003cTAB\u003e %\nsilent! unmap [%\nsilent! unmap ]%\n\n\" Don't cancel visual select when shifting\nxnoremap \u003c  \u003cgv\nxnoremap \u003e  \u003egv\n\n\" Cancel terminal mode with ,escape\nif has('nvim')\n  tnoremap \u003cESC\u003e \u003cC-\\\u003e\u003cC-n\u003e\n  tnoremap ,\u003cESC\u003e \u003cESC\u003e\nendif\n\n\" Stay down after creating fold\nvnoremap zf mzzf`zzz\n```\n\n### Common tasks\n\n```VimL\n\" Quick save and close buffer\nnnoremap ,w :w\u003cCR\u003e\nnnoremap \u003csilent\u003e ,c :Sayonara!\u003cCR\u003e\nnnoremap \u003csilent\u003e ,q :Sayonara\u003cCR\u003e\n\n\" Yank and paste from clipboard\nnnoremap ,y \"+y\nvnoremap ,y \"+y\nnnoremap ,yy \"+yy\nnnoremap ,p \"+p\n\n\" Move visual block\nvnoremap J :m '\u003e+1\u003cCR\u003egv=gv\nvnoremap K :m '\u003c-2\u003cCR\u003egv=gv\n\n\" Ctags navigation (:tselect to select from menu)\nnnoremap ]t :tn\u003cCR\u003e\nnnoremap [t :tp\u003cCR\u003e\n\n\" Quick-fix window navigation\nnnoremap ]q :cnext\u003cCR\u003e\nnnoremap [q :cprevious\u003cCR\u003e\n\n\" Location list navigation\nnnoremap ]l :lnext\u003cCR\u003e\nnnoremap [l :lprevious\u003cCR\u003e\n\n\" Error mnemonic (Neomake uses location list)\nnnoremap ]e :lnext\u003cCR\u003e\nnnoremap [e :lprevious\u003cCR\u003e\n\n\" Reselect last-pasted text\nnnoremap gp `[v`]\n\n\" Keep the cursor in place while joining lines\nnnoremap J mzJ`z\n\n\" Split line (sister to Join lines) S is covered by cc.\nnnoremap S mzi\u003cCR\u003e\u003cESC\u003e`z\n\n\" Easier fold toggling\nnnoremap ,z za\n\n\" Start substitute on current word under the cursor\nnnoremap ,s :%s/\u0012\u0017//gc\u003cLeft\u003e\u003cLeft\u003e\u003cLeft\u003e\n```\n\n### Buffer management\n\n```VimL\n\" Intelligent windows resizing using Ctrl + arrow keys\nnnoremap \u003csilent\u003e \u003cC-Right\u003e :call utils#intelligentVerticalResize('right')\u003cCR\u003e\nnnoremap \u003csilent\u003e \u003cC-Left\u003e :call utils#intelligentVerticalResize('left')\u003cCR\u003e\nnnoremap \u003csilent\u003e \u003cC-Up\u003e :resize +1\u003cCR\u003e\nnnoremap \u003csilent\u003e \u003cC-Down\u003e :resize -1\u003cCR\u003e\n\n\" Buffers navigation and management\nnnoremap \u003csilent\u003e + :bn\u003cCR\u003e\nnnoremap \u003csilent\u003e _ :bp\u003cCR\u003e\n```\n\n### Autocomplete (Deoplete + Ctags)\n\n```VimL\nlet g:deoplete#enable_at_startup=1\nlet g:deoplete#auto_completion_start_length=2\n\nlet g:deoplete#sources={}\nlet g:deoplete#sources._    = ['buffer', 'file', 'ultisnips']\nlet g:deoplete#sources.ruby = ['buffer', 'member', 'file', 'ultisnips']\nlet g:deoplete#sources.vim  = ['buffer', 'member', 'file', 'ultisnips']\nlet g:deoplete#sources.css  = ['buffer', 'member', 'file', 'omni', 'ultisnips']\nlet g:deoplete#sources.scss = ['buffer', 'member', 'file', 'omni', 'ultisnips']\n\n\" Insert \u003cTAB\u003e or select next match\ninoremap \u003csilent\u003e \u003cexpr\u003e \u003cTab\u003e utils#tabComplete()\n\n\" Manually trigger tag autocomplete\ninoremap \u003csilent\u003e \u003cexpr\u003e \u003cC-]\u003e utils#manualTagComplete()\n\n\" \u003cC-h\u003e, \u003cBS\u003e: close popup and delete previous char\ninoremap \u003cexpr\u003e\u003cC-h\u003e deolete#mappings#smart_close_popup().\"\\\u003cC-h\u003e\"\ninoremap \u003cexpr\u003e\u003cBS\u003e deoplete#mappings#smart_close_popup().\"\\\u003cC-h\u003e\"\n```\n\n### Browser and fuzzy searcher for multiple sources ([Unite](https://github.com/Shougo/unite.vim))\n\n```VimL\n\" Matcher settings\ncall unite#filters#matcher_default#use(['matcher_fuzzy', 'matcher_hide_current_file'])\ncall unite#filters#sorter_default#use(['sorter_rank'])\n\n\" Use Ag if available\nif executable('ag')\n  let g:unite_source_grep_command='ag'\n  let g:unite_source_grep_default_opts='--nocolor --line-numbers --nogroup -S -C0'\n  let g:unite_source_grep_recursive_opt=''\n\n  \" Set rec source command\n  let g:unite_source_rec_async_command = ['ag', '--follow', '--nocolor', '--nogroup', '--hidden', '-g', '']\nendif\n\n\" Custom profile\ncall unite#custom#profile('default', 'context', {\n      \\   'prompt': '» ',\n      \\   'winheight': 15,\n      \\ })\n\n\" Add syntax highlighting\nlet g:unite_source_line_enable_highlight=1\n\n\" Don't override status line\nlet g:unite_force_overwrite_statusline=0\n```\n\n#### Unite buffer mappings\n\n```VimL\n\" Custom mappings for the unite buffer\nautocmd FileType unite call s:unite_settings()\nfunction! s:unite_settings()\n  \" Enable navigation with \u003cC-j\u003e and \u003cC-k\u003e in insert mode\n  imap \u003csilent\u003e \u003cbuffer\u003e \u003cC-j\u003e \u003cPlug\u003e(unite_select_next_line)\n  imap \u003csilent\u003e \u003cbuffer\u003e \u003cC-k\u003e \u003cPlug\u003e(unite_select_previous_line)\n  \" Runs 'splits' action by \u003cC-s\u003e and \u003cC-v\u003e\n  imap \u003csilent\u003e \u003cbuffer\u003e \u003cexpr\u003e \u003cC-s\u003e unite#do_action('split')\n  imap \u003csilent\u003e \u003cbuffer\u003e \u003cexpr\u003e \u003cC-v\u003e unite#do_action('vsplit')\n  \" Exit with escape\n  nmap \u003csilent\u003e \u003cbuffer\u003e \u003cESC\u003e \u003cPlug\u003e(unite_exit)\n  \" Mark candidates\n  vmap \u003csilent\u003e \u003cbuffer\u003e m \u003cPlug\u003e(unite_toggle_mark_selected_candidates)\n  nmap \u003csilent\u003e \u003cbuffer\u003e m \u003cPlug\u003e(unite_toggle_mark_current_candidate)\nendfunction\n```\n\n### Improved status line ([Lightline](https://github.com/itchyny/lightline.vim))\n\n```VimL\nlet g:lightline = {\n      \\ 'colorscheme': 'powerline',\n      \\ 'tab': {\n      \\   'active': [ 'filename' ],\n      \\   'inactive': [ 'filename' ]\n      \\ },\n      \\ 'active': {\n      \\   'left': [ [ 'mode', 'paste' ], [ 'readonly', 'filename' ] ],\n      \\   'right': [ [ 'lineinfo' ], [ 'percent' ], [ 'filetype', 'fileencoding', 'fileformat' ] ]\n      \\ },\n      \\ 'component': {\n      \\   'readonly': '%{\u0026filetype==\"help\"?\"HELP\":\u0026readonly?\"RO\":\"\"}'\n      \\ },\n      \\ 'component_function': {\n      \\   'mode': 'utils#lightLineMode',\n      \\   'filename': 'utils#lightLineFilename',\n      \\   'filetype': 'utils#lightLineFiletype',\n      \\   'fileformat': 'utils#lightLineFileformat',\n      \\   'fileencoding': 'utils#lightLineFileencoding'\n      \\ },\n      \\ 'component_visible_condition': {\n      \\   'readonly': '(\u0026readonly)'\n      \\ },\n      \\ 'separator': { 'left': '', 'right': '' },\n      \\ 'subseparator': { 'left': '', 'right': '' }\n      \\ }\n```\n\n### Snippets support ([UltiSnips](https://github.com/SirVer/ultisnips))\n\n```VimL\n\" Disable built-in \u003cC-x\u003e\u003cC-k\u003e to be able to go backward\ninoremap \u003cC-x\u003e\u003cC-k\u003e \u003cNOP\u003e\nlet g:UltiSnipsExpandTrigger='\u003cC-j\u003e'\nlet g:UltiSnipsListSnippets='\u003cC-l\u003e'\nlet g:UltiSnipsJumpForwardTrigger='\u003cC-j\u003e'\nlet g:UltiSnipsJumpBackwardTrigger='\u003cC-k\u003e'\n```\n\n### Color settings based on time\n\n```viml\n\" Syntax highlighting\nsyntax on\n\n\" Color scheme based on time\nif strftime(\"%H\") \u003c 16\n  let g:rehash256 = 1\n  colorscheme molokai\nelse\n  colorscheme jellybeans\nendif\n\n\" Highlight VCS conflict markers\nmatch ErrorMsg '^\\(\u003c\\|=\\|\u003e\\)\\{7\\}\\([^=].\\+\\)\\?$'\n\n\" Highlight term cursor differently\nhighlight TermCursor ctermfg=green guifg=green\n\n\" Remove underline in folded lines\nhi! Folded term=NONE cterm=NONE gui=NONE ctermbg=NONE\n\n\" List chars highlighting\nhighlight NonText ctermfg=235 guifg=gray\nhighlight SpecialKey ctermfg=235 guifg=gray\n\n\" Link highlight groups to improve buffer tab line colors\nhi! link BufTabLineCurrent Identifier\nhi! link BufTabLineActive Comment\nhi! link BufTabLineHidden Comment\nhi! link BufTabLineFill Comment\n```\n\n### Screenshots and Cheatsheets\n\n[Iceberg](./data/screenshots/iceberg.png)\n\n[Hybrid](./data/screenshots/hybrid.png)\n\n[Image cheatsheet](./data/cheatsheet.png)\n\n[PDF cheatsheet](./data/cheatsheet2.pdf)\n\n## Zsh\n\nMy shell interpreter of choice. Here are some options to improve the behavior to my taste.\n\n```zsh\n# Disable control flow (\u003cC-s\u003e / \u003cC-q\u003e)\nstty stop '' -ixoff -ixon\n\n# Set spelling correction\nsetopt correct\n\n# Don't raise errors when regex nomatch fires\nunsetopt nomatch\n```\n\nI am also using the excellent [oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh) framework.\n\n```zsh\n# Path to your oh-my-zsh installation.\nexport ZSH=$HOME/.oh-my-zsh\n\n# Set name of the theme to load.\nZSH_THEME=\"martinus\"\n\n# Disable auto title setting\nDISABLE_AUTO_TITLE=\"true\"\n\n# Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*)\nplugins=(adb bgnotify bower bundler common-aliases docker extract gem gitfast gulp heroku httpie jsontools meteor mix\n         npm rails rbenv redis-cli rsync tmux tmuxinator vagrant zsh-syntax-highlighting)\n\nsource $ZSH/oh-my-zsh.sh\nsource $ZSH/plugins/history-substring-search/history-substring-search.zsh\n\n# History substring search plugin binding\nbindkey '^[[A' history-substring-search-up\nbindkey '^[[B' history-substring-search-down\n```\n\n## Tmux\n\nI am a heavy user of tmux. I am using the [tpm](https://github.com/tmux-plugins/tpm) package manager\nand mainly it's [tmux resurrect](https://github.com/tmux-plugins/tmux-resurrect) plugin which allows me\nto persist sessions on the disk.\n\nI am also using the [tmuxinator](https://github.com/tmuxinator/tmuxinator) gem to\nquickly bootstrap new tmux sessions. Below are the most interesting settings in my tmux config file:\n\n### Settings\n\n```tmux\n# Unset ruby version so it respects .ruby-version files\nset-environment -gu RBENV_VERSION\n\n# UTF-8 settings\nset -g status-utf8 on\nset -g utf8 on\n\n# Fastest command sequences (http://superuser.com/a/252717/65504)\nset -s escape-time 0\n\n# For nice colors\nset -g default-terminal \"screen-256color\"\n\n# XTerm compatibility\nset -g xterm-keys on\n\n# Vi keys in copy mode\nset -g mode-keys vi\n\n# History boost\nset -g history-limit 50000\n\n# Enable mouse\nset -g mode-mouse on\nset -g mouse-select-pane on\nset -g mouse-resize-pane on\nset -g mouse-select-window on\n\n# Emacs key bindings in command prompt (prefix + :) are better than vi keys, even for vim users\nset -g status-keys emacs\n\n# Focus events enabled for terminals that support them\nset -g focus-events on\n\n# Super useful when using \"grouped sessions\" and multi-monitor setup\nsetw -g aggressive-resize on\n\n# Messages are displayed for 3 seconds\nset -g display-time 3000\n```\n\n### Key bindings\n\n```tmux\n# Backtick as Prefix\nunbind C-b\nset -g prefix `\nbind-key ` send-prefix\n\n# Reload the file with Prefix r\nbind R source-file ~/.tmux.conf \\; display \"Sourced tmux.conf\"\n\n# Next and prev window like in vim\nbind -r - previous-window\nbind -r = next-window\n\n# New windows and panes in the same dir\nbind-key n new-window -c \"#{pane_current_path}\"\nbind-key i split-window -h -c \"#{pane_current_path}\"\nbind-key v split-window -c \"#{pane_current_path}\"\n\n# Pane switching\nbind-key h select-pane -L\nbind-key j select-pane -D\nbind-key k select-pane -U\nbind-key l select-pane -R\nbind-key \\ select-pane -l\n\n# Resize panes with arrows\nbind-key -r Left resize-pane -L 1\nbind-key -r Down resize-pane -D 1\nbind-key -r Up resize-pane -U 1\nbind-key -r Right resize-pane -R 1\n\n# \u003cprefix\u003e r to rename window\nbind-key r command-prompt 'rename-window %%'\n\n# \u003cprefix\u003e p to paste buffer\nunbind p\nbind p paste-buffer\n\n# \u003cprefix\u003e P to choose which buffer to paste\nbind P choose-buffer\n```\n\n### Plugins\n\n```zsh\n# List of plugins\nset -g @plugin 'tmux-plugins/tpm'\nset -g @plugin 'tmux-plugins/tmux-yank' # yanking helpers\nset -g @plugin 'tmux-plugins/tmux-sessionist' # session helpers prefix + C (new session)\nset -g @plugin 'tmux-plugins/tmux-resurrect' # prefix + \u003cC-s\u003e save, \u003cC-r\u003e restore\nset -g @plugin 'tmux-plugins/tmux-battery' # Batter percentage\nset -g @plugin 'tmux-plugins/tmux-online-status' # Online status\n\n# Initialize plugin manager (keep this line at the very bottom of tmux.conf)\nrun '~/.tmux/plugins/tpm/tpm'\n```\n\n## Git\n\nWhat about my git config? Maybe some useful aliases:\n\n```git\n[alias]\n  a = add\n  aa = add --all\n  di = diff\n  ds = diff --staged\n  dt = difftool --no-prompt\n  ci = commit --verbose\n  amend = commit --amend --verbose\n  co = checkout\n  pl = pull\n  ps = push\n  pom = push origin master\n  pod = push origin develop\n  rb = rebase -i HEAD~10\n  st = status -sb\n  br = branch\n  lo = log --oneline -n 15\n  lg = log --pretty=format:'%h | %cd | %an | %s' -n 15\n  ls = log --stat -n 5\n  lol = log --oneline --graph --all --decorate\n  g1 = log --graph --all --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%cr)%C(reset) %C(white)%s%C(reset) %C(bold white)— %cn%C(reset)%C(bold yellow)%d%C(reset)' --abbrev-commit --date=relative\n  g2 = log --graph --all --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%cD%C(reset) %C(bold green)(%cr)%C(reset)%C(bold yellow)%d%C(reset)%n'' %C(white)%s%C(reset) %C(bold white)— %cn%C(reset)' --abbrev-commit\n  wc = whatchanged -p --abbrev-commit --pretty=medium\n  unstage = reset HEAD --\n  edit = \"!nvim `git ls-files -m`\"\n```\n\n## Xterm\n\nMy terminal emulator of choice. Below are some interesting settings I use:\n\n```xdefaults\n! Unicode support\nxterm*utf8: 1\n\n! Color support\nxterm*customization: -color\nxterm*termName: xterm-256color\n\n! Font settings\nxterm*faceName: Droid Sans Mono for Powerline:Bold\nxterm*faceSize: 9\nxterm*allowBoldFonts: false\n\n! For inclusion of all necessary environment variables\nxterm*loginShell: true\n\n! Scrollback setting\nxterm*savelines: 10000\n\n! Disable right scrollbar\nxterm*ScrollBar: false\n\n! Stop output to terminal from jumping down to bottom of scroll again\nxterm*scrollTtyOutput: false\n\n! Save selections to clipboard\nxterm*selectToClipboard: true\n```\n\n## Pry, Gem, IRB\n\nDon't install RI docs when installing gems (put into your gemrc):\n\n```bash\ngem: --no-ri --no-rdoc\n```\n\nUse editor to edit bigger blocks of code when in pry (put into your pryrc):\n\n```bash\n# === EDITOR ===\nPry.config.editor = 'nvim'\n```\n\nRequire Rubygems in *irbrc* to have access while in IRB session (I recommend using Pry):\n\n```ruby\nrequire 'rubygems'\n```\n\n## Ag, Devilspie2\n\n[Ag](http://geoff.greer.fm/ag/) is a popular and blazingly fast find on steroids optimized for developers.\nI recommend to create *agignore* to specify extra path to ignore. While Ag is pretty intelligent most of things\nare already ignored.\n\n```bash\n*.log\ntmp/*\n```\n\n[Devilspie2](http://www.gusnan.se/devilspie2/) is a window matching utility, allowing the user to perform\nscripted actions on windows as they are created. I use it mainly to move application to their reserved\nworkspace and to make them go full screen automatically.\n\nBelow is an example of such script:\n\n```lua\n-- XTerm\nif (get_application_name()==\"xterm\") then\n  set_window_workspace(2);\n  maximize();\nend\n```\n\n# Credits\n\nVery big portion of these configuration files was inspired and often even copied\nfrom other people, plugin authors, blog writers, etc. I want to say **Thank You** to all of them.\n\nEspecially, I want to mention these guys:\n\n* [tpope](https://github.com/tpope)\n* [garybernhardt](https://github.com/garybernhardt)\n* [Shougo](https://github.com/Shougo)\n\nFor their contribution to Vim and Neovim ecosystem. Speaking of [Neovim](https://github.com/neovim/neovim),\nthe whole [team](https://github.com/neovim/neovim/graphs/contributors) should be mentioned for their great work.\n\n# License\n\nWell documented, terminal centric web developer's dot files.\nCopyright (C) Martin Toma\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the \"Software\"),\nto deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE\nOR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmartin-svk%2Fdot-files","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmartin-svk%2Fdot-files","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmartin-svk%2Fdot-files/lists"}