├── .aliases.sh ├── .editorconfig ├── .gitconfig ├── .gitignore ├── .vimrc ├── .zshrc ├── LICENSE ├── README.md ├── SublimeText ├── Material-Theme-Darker.sublime-theme ├── Preferences.sublime-settings └── sublime-plugins.md ├── applications.md └── sublime.png /.aliases.sh: -------------------------------------------------------------------------------- 1 | # Make directory and enter it 2 | function mkd() { 3 | mkdir -p "$@" && cd "$@" 4 | } 5 | 6 | # pretty visual git history 7 | alias git-pretty="git log --graph --oneline --all --decorate" 8 | 9 | # open up emoji cheat sheet in browser 10 | alias emojis="open http://www.emoji-cheat-sheet.com/" 11 | 12 | # restart window 13 | alias wtf="source ~/.zshrc" 14 | 15 | # open these directories from anywhere 16 | alias Dev="~/Desktop/Dev" 17 | alias Bustle="~/Desktop/Dev/Bustle" 18 | 19 | # install all the things 20 | alias start-project="bundle install && bower install && npm install" 21 | 22 | # instant web server 23 | alias serve-me="python -m SimpleHTTPServer 8000" 24 | 25 | # let terminal speak for me with 's' 26 | alias s="say -v 'vicki'" 27 | 28 | # Kills all processes running on the specified port (e.g. 'killport 8080') 29 | killport() { 30 | lsof -i tcp:$1 | awk '(NR!=1) && ($1!="Google") && ($1!="firefox") {print $2}' | xargs kill 31 | } 32 | 33 | # Open a Github pull request locally 34 | # usage: pr-me 35 | 36 | function pr-me() { 37 | if [ $# -eq 0 ]; then 38 | print "please enter the PR id and branch name to create it on. i.e. pr-me 54 branch-name" 39 | else 40 | git fetch origin pull/$1/head:$2; 41 | git checkout $2 42 | fi 43 | } 44 | 45 | ## Shruggie 46 | alias shruggie="printf \"¯\_(ツ)_/¯\" | pbcopy && echo \"¯\_(ツ)_/¯ copied to clipboard\"" 47 | 48 | ## Download mp3 audio from Youbtube (need youtube-dl first) 49 | function get-audio() { 50 | if [ $# -eq 0 ]; then 51 | print "Oops. Please enter a url: get-audio " 52 | else 53 | youtube-dl --extract-audio --audio-format mp3 $1 54 | fi 55 | } 56 | 57 | # Removes all branches that have already been merged to master (or dev) 58 | alias clean-branches='git branch --merged | egrep -v "(^\* |master|dev)" | xargs git branch -d' 59 | 60 | # Removes node modules and reinstalls with yarn 61 | alias clean_start="rm -rf node_modules && yarn install && yarn start" 62 | 63 | # Quick Navigation 64 | alias ..="cd .." 65 | alias ...="cd ../.." 66 | alias ....="cd ../../.." 67 | 68 | # Gets IP 69 | alias myip="ifconfig -a | grep -o 'inet6\? \(addr:\)\?\s\?\(\(\([0-9]\+\.\)\{3\}[0-9]\+\)\|[a-fA-F0-9:]\+\)' | awk '{ sub(/inet6? (addr:)? ?/, \"\"); print }'" 70 | 71 | #Away from keyboard :smoking: 72 | alias afk="/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend" 73 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # Top-most editorconfig file 2 | 3 | root = true 4 | 5 | [*] 6 | end_of_line = lf 7 | tab_width = 8 8 | indent_size = 2 9 | 10 | [*.[ch]] 11 | indent_size = 4 12 | -------------------------------------------------------------------------------- /.gitconfig: -------------------------------------------------------------------------------- 1 | [user] 2 | name = Una Kravets 3 | email = una.kravets@gmail.com 4 | [core] 5 | excludesfile = /Users/unakravets/.gitignore 6 | editor = /usr/bin/vim 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OS generated files # 2 | ###################### 3 | .DS_Store 4 | .DS_Store? 5 | ._* 6 | .Spotlight-V100 7 | .Trashes 8 | ehthumbs.db 9 | Thumbs.db 10 | 11 | # Sass Files # 12 | ############## 13 | .sass-cache 14 | 15 | # log files # 16 | .npm-debug.log 17 | -------------------------------------------------------------------------------- /.vimrc: -------------------------------------------------------------------------------- 1 | " Modeline and Notes { 2 | " vim: set sw=4 ts=4 sts=4 et tw=78 foldmarker={,} foldlevel=0 foldmethod=marker spell: 3 | " 4 | " __ _ _____ _ 5 | " ___ _ __ / _/ |___ / __ __(_)_ __ ___ 6 | " / __| '_ \| |_| | |_ \ _____\ \ / /| | '_ ` _ \ 7 | " \__ \ |_) | _| |___) |_____|\ V / | | | | | | | 8 | " |___/ .__/|_| |_|____/ \_/ |_|_| |_| |_| 9 | " |_| 10 | " 11 | " This is the personal .vimrc file of Una Kravets, adopted from Steve Francia -- http://spf13.com 12 | " 13 | " Copyright 2014 Steve Francia 14 | " 15 | " Licensed under the Apache License, Version 2.0 (the "License"); 16 | " you may not use this file except in compliance with the License. 17 | " You may obtain a copy of the License at 18 | " 19 | " http://www.apache.org/licenses/LICENSE-2.0 20 | " 21 | " Unless required by applicable law or agreed to in writing, software 22 | " distributed under the License is distributed on an "AS IS" BASIS, 23 | " WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 24 | " See the License for the specific language governing permissions and 25 | " limitations under the License. 26 | " } 27 | 28 | " Environment { 29 | 30 | " Identify platform { 31 | silent function! OSX() 32 | return has('macunix') 33 | endfunction 34 | silent function! LINUX() 35 | return has('unix') && !has('macunix') && !has('win32unix') 36 | endfunction 37 | silent function! WINDOWS() 38 | return (has('win16') || has('win32') || has('win64')) 39 | endfunction 40 | " } 41 | 42 | " Basics { 43 | set nocompatible " Must be first line 44 | if !WINDOWS() 45 | set shell=/bin/sh 46 | endif 47 | " } 48 | 49 | " Windows Compatible { 50 | " On Windows, also use '.vim' instead of 'vimfiles'; this makes synchronization 51 | " across (heterogeneous) systems easier. 52 | if WINDOWS() 53 | set runtimepath=$HOME/.vim,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,$HOME/.vim/after 54 | endif 55 | " } 56 | 57 | " } 58 | 59 | " Use before config if available { 60 | if filereadable(expand("~/.vimrc.before")) 61 | source ~/.vimrc.before 62 | endif 63 | " } 64 | 65 | " Use bundles config { 66 | if filereadable(expand("~/.vimrc.bundles")) 67 | source ~/.vimrc.bundles 68 | endif 69 | " } 70 | 71 | " General { 72 | 73 | set background=dark " Assume a dark background 74 | " if !has('gui') 75 | "set term=$TERM " Make arrow and other keys work 76 | " endif 77 | filetype plugin indent on " Automatically detect file types. 78 | syntax on " Syntax highlighting 79 | set mouse=a " Automatically enable mouse usage 80 | set mousehide " Hide the mouse cursor while typing 81 | scriptencoding utf-8 82 | 83 | if has('clipboard') 84 | if has('unnamedplus') " When possible use + register for copy-paste 85 | set clipboard=unnamed,unnamedplus 86 | else " On mac and Windows, use * register for copy-paste 87 | set clipboard=unnamed 88 | endif 89 | endif 90 | 91 | " Most prefer to automatically switch to the current file directory when 92 | " a new buffer is opened; to prevent this behavior, add the following to 93 | " your .vimrc.before.local file: 94 | " let g:spf13_no_autochdir = 1 95 | if !exists('g:spf13_no_autochdir') 96 | autocmd BufEnter * if bufname("") !~ "^\[A-Za-z0-9\]*://" | lcd %:p:h | endif 97 | " Always switch to the current file directory 98 | endif 99 | 100 | "set autowrite " Automatically write a file when leaving a modified buffer 101 | set shortmess+=filmnrxoOtT " Abbrev. of messages (avoids 'hit enter') 102 | set viewoptions=folds,options,cursor,unix,slash " Better Unix / Windows compatibility 103 | set virtualedit=onemore " Allow for cursor beyond last character 104 | set history=1000 " Store a ton of history (default is 20) 105 | set spell " Spell checking on 106 | set hidden " Allow buffer switching without saving 107 | set iskeyword-=. " '.' is an end of word designator 108 | set iskeyword-=# " '#' is an end of word designator 109 | set iskeyword-=- " '-' is an end of word designator 110 | 111 | " Instead of reverting the cursor to the last position in the buffer, we 112 | " set it to the first line when editing a git commit message 113 | au FileType gitcommit au! BufEnter COMMIT_EDITMSG call setpos('.', [0, 1, 1, 0]) 114 | 115 | " http://vim.wikia.com/wiki/Restore_cursor_to_file_position_in_previous_editing_session 116 | " Restore cursor to file position in previous editing session 117 | " To disable this, add the following to your .vimrc.before.local file: 118 | " let g:spf13_no_restore_cursor = 1 119 | if !exists('g:spf13_no_restore_cursor') 120 | function! ResCur() 121 | if line("'\"") <= line("$") 122 | normal! g`" 123 | return 1 124 | endif 125 | endfunction 126 | 127 | augroup resCur 128 | autocmd! 129 | autocmd BufWinEnter * call ResCur() 130 | augroup END 131 | endif 132 | 133 | " Setting up the directories { 134 | set backup " Backups are nice ... 135 | if has('persistent_undo') 136 | set undofile " So is persistent undo ... 137 | set undolevels=1000 " Maximum number of changes that can be undone 138 | set undoreload=10000 " Maximum number lines to save for undo on a buffer reload 139 | endif 140 | 141 | " To disable views add the following to your .vimrc.before.local file: 142 | " let g:spf13_no_views = 1 143 | if !exists('g:spf13_no_views') 144 | " Add exclusions to mkview and loadview 145 | " eg: *.*, svn-commit.tmp 146 | let g:skipview_files = [ 147 | \ '\[example pattern\]' 148 | \ ] 149 | endif 150 | " } 151 | 152 | " } 153 | 154 | " Vim UI { 155 | 156 | if filereadable(expand("~/.vim/bundle/vim-colors-solarized/colors/solarized.vim")) 157 | let g:solarized_termcolors=256 158 | let g:solarized_termtrans=1 159 | let g:solarized_contrast="normal" 160 | let g:solarized_visibility="normal" 161 | color solarized " Load a colorscheme 162 | endif 163 | 164 | set tabpagemax=15 " Only show 15 tabs 165 | set showmode " Display the current mode 166 | 167 | set cursorline " Highlight current line 168 | 169 | highlight clear SignColumn " SignColumn should match background 170 | highlight clear LineNr " Current line number row will have same background color in relative mode 171 | "highlight clear CursorLineNr " Remove highlight color from current line number 172 | 173 | if has('cmdline_info') 174 | set ruler " Show the ruler 175 | set rulerformat=%30(%=\:b%n%y%m%r%w\ %l,%c%V\ %P%) " A ruler on steroids 176 | set showcmd " Show partial commands in status line and 177 | " Selected characters/lines in visual mode 178 | endif 179 | 180 | if has('statusline') 181 | set laststatus=2 182 | 183 | " Broken down into easily includeable segments 184 | set statusline=%<%f\ " Filename 185 | set statusline+=%w%h%m%r " Options 186 | set statusline+=%{fugitive#statusline()} " Git Hotness 187 | set statusline+=\ [%{&ff}/%Y] " Filetype 188 | set statusline+=\ [%{getcwd()}] " Current dir 189 | set statusline+=%=%-14.(%l,%c%V%)\ %p%% " Right aligned file nav info 190 | endif 191 | 192 | set backspace=indent,eol,start " Backspace for dummies 193 | set linespace=0 " No extra spaces between rows 194 | set nu " Line numbers on 195 | set showmatch " Show matching brackets/parenthesis 196 | set incsearch " Find as you type search 197 | set hlsearch " Highlight search terms 198 | set winminheight=0 " Windows can be 0 line high 199 | set ignorecase " Case insensitive search 200 | set smartcase " Case sensitive when uc present 201 | set wildmenu " Show list instead of just completing 202 | set wildmode=list:longest,full " Command completion, list matches, then longest common part, then all. 203 | set whichwrap=b,s,h,l,<,>,[,] " Backspace and cursor keys wrap too 204 | set scrolljump=5 " Lines to scroll when cursor leaves screen 205 | set scrolloff=3 " Minimum lines to keep above and below cursor 206 | set foldenable " Auto fold code 207 | set list 208 | set listchars=tab:›\ ,trail:•,extends:#,nbsp:. " Highlight problematic whitespace 209 | 210 | " } 211 | 212 | " Formatting { 213 | 214 | set nowrap " Do not wrap long lines 215 | set autoindent " Indent at the same level of the previous line 216 | set shiftwidth=4 " Use indents of 4 spaces 217 | set expandtab " Tabs are spaces, not tabs 218 | set tabstop=4 " An indentation every four columns 219 | set softtabstop=4 " Let backspace delete indent 220 | set nojoinspaces " Prevents inserting two spaces after punctuation on a join (J) 221 | set splitright " Puts new vsplit windows to the right of the current 222 | set splitbelow " Puts new split windows to the bottom of the current 223 | "set matchpairs+=<:> " Match, to be used with % 224 | set pastetoggle= " pastetoggle (sane indentation on pastes) 225 | "set comments=sl:/*,mb:*,elx:*/ " auto format comment blocks 226 | " Remove trailing whitespaces and ^M chars 227 | " To disable the stripping of whitespace, add the following to your 228 | " .vimrc.before.local file: 229 | " let g:spf13_keep_trailing_whitespace = 1 230 | autocmd FileType c,cpp,java,go,php,javascript,puppet,python,rust,twig,xml,yml,perl autocmd BufWritePre if !exists('g:spf13_keep_trailing_whitespace') | call StripTrailingWhitespace() | endif 231 | "autocmd FileType go autocmd BufWritePre Fmt 232 | autocmd BufNewFile,BufRead *.html.twig set filetype=html.twig 233 | autocmd FileType haskell,puppet,ruby,yml setlocal expandtab shiftwidth=2 softtabstop=2 234 | " preceding line best in a plugin but here for now. 235 | 236 | autocmd BufNewFile,BufRead *.coffee set filetype=coffee 237 | 238 | " Workaround vim-commentary for Haskell 239 | autocmd FileType haskell setlocal commentstring=--\ %s 240 | " Workaround broken colour highlighting in Haskell 241 | autocmd FileType haskell,rust setlocal nospell 242 | 243 | " } 244 | 245 | " Key (re)Mappings { 246 | 247 | " The default leader is '\', but many people prefer ',' as it's in a standard 248 | " location. To override this behavior and set it back to '\' (or any other 249 | " character) add the following to your .vimrc.before.local file: 250 | " let g:spf13_leader='\' 251 | if !exists('g:spf13_leader') 252 | let mapleader = ',' 253 | else 254 | let mapleader=g:spf13_leader 255 | endif 256 | if !exists('g:spf13_localleader') 257 | let maplocalleader = '_' 258 | else 259 | let maplocalleader=g:spf13_localleader 260 | endif 261 | 262 | " Easier moving in tabs and windows 263 | " The lines conflict with the default digraph mapping of 264 | " If you prefer that functionality, add the following to your 265 | " .vimrc.before.local file: 266 | " let g:spf13_no_easyWindows = 1 267 | if !exists('g:spf13_no_easyWindows') 268 | map j_ 269 | map k_ 270 | map l_ 271 | map h_ 272 | endif 273 | 274 | " Wrapped lines goes down/up to next row, rather than next line in file. 275 | noremap j gj 276 | noremap k gk 277 | 278 | " End/Start of line motion keys act relative to row/wrap width in the 279 | " presence of `:set wrap`, and relative to line for `:set nowrap`. 280 | " Default vim behaviour is to act relative to text line in both cases 281 | " If you prefer the default behaviour, add the following to your 282 | " .vimrc.before.local file: 283 | " let g:spf13_no_wrapRelMotion = 1 284 | if !exists('g:spf13_no_wrapRelMotion') 285 | " Same for 0, home, end, etc 286 | function! WrapRelativeMotion(key, ...) 287 | let vis_sel="" 288 | if a:0 289 | let vis_sel="gv" 290 | endif 291 | if &wrap 292 | execute "normal!" vis_sel . "g" . a:key 293 | else 294 | execute "normal!" vis_sel . a:key 295 | endif 296 | endfunction 297 | 298 | " Map g* keys in Normal, Operator-pending, and Visual+select 299 | noremap $ :call WrapRelativeMotion("$") 300 | noremap :call WrapRelativeMotion("$") 301 | noremap 0 :call WrapRelativeMotion("0") 302 | noremap :call WrapRelativeMotion("0") 303 | noremap ^ :call WrapRelativeMotion("^") 304 | " Overwrite the operator pending $/ mappings from above 305 | " to force inclusive motion with :execute normal! 306 | onoremap $ v:call WrapRelativeMotion("$") 307 | onoremap v:call WrapRelativeMotion("$") 308 | " Overwrite the Visual+select mode mappings from above 309 | " to ensure the correct vis_sel flag is passed to function 310 | vnoremap $ :call WrapRelativeMotion("$", 1) 311 | vnoremap :call WrapRelativeMotion("$", 1) 312 | vnoremap 0 :call WrapRelativeMotion("0", 1) 313 | vnoremap :call WrapRelativeMotion("0", 1) 314 | vnoremap ^ :call WrapRelativeMotion("^", 1) 315 | endif 316 | 317 | " The following two lines conflict with moving to top and 318 | " bottom of the screen 319 | " If you prefer that functionality, add the following to your 320 | " .vimrc.before.local file: 321 | " let g:spf13_no_fastTabs = 1 322 | if !exists('g:spf13_no_fastTabs') 323 | map gT 324 | map gt 325 | endif 326 | 327 | " Stupid shift key fixes 328 | if !exists('g:spf13_no_keyfixes') 329 | if has("user_commands") 330 | command! -bang -nargs=* -complete=file E e 331 | command! -bang -nargs=* -complete=file W w 332 | command! -bang -nargs=* -complete=file Wq wq 333 | command! -bang -nargs=* -complete=file WQ wq 334 | command! -bang Wa wa 335 | command! -bang WA wa 336 | command! -bang Q q 337 | command! -bang QA qa 338 | command! -bang Qa qa 339 | endif 340 | 341 | cmap Tabe tabe 342 | endif 343 | 344 | " Yank from the cursor to the end of the line, to be consistent with C and D. 345 | nnoremap Y y$ 346 | 347 | " Code folding options 348 | nmap f0 :set foldlevel=0 349 | nmap f1 :set foldlevel=1 350 | nmap f2 :set foldlevel=2 351 | nmap f3 :set foldlevel=3 352 | nmap f4 :set foldlevel=4 353 | nmap f5 :set foldlevel=5 354 | nmap f6 :set foldlevel=6 355 | nmap f7 :set foldlevel=7 356 | nmap f8 :set foldlevel=8 357 | nmap f9 :set foldlevel=9 358 | 359 | " Most prefer to toggle search highlighting rather than clear the current 360 | " search results. To clear search highlighting rather than toggle it on 361 | " and off, add the following to your .vimrc.before.local file: 362 | " let g:spf13_clear_search_highlight = 1 363 | if exists('g:spf13_clear_search_highlight') 364 | nmap / :nohlsearch 365 | else 366 | nmap / :set invhlsearch 367 | endif 368 | 369 | 370 | " Find merge conflict markers 371 | map fc /\v^[<\|=>]{7}( .*\|$) 372 | 373 | " Shortcuts 374 | " Change Working Directory to that of the current file 375 | cmap cwd lcd %:p:h 376 | cmap cd. lcd %:p:h 377 | 378 | " Visual shifting (does not exit Visual mode) 379 | vnoremap < >gv 381 | 382 | " Allow using the repeat operator with a visual selection (!) 383 | " http://stackoverflow.com/a/8064607/127816 384 | vnoremap . :normal . 385 | 386 | " For when you forget to sudo.. Really Write the file. 387 | cmap w!! w !sudo tee % >/dev/null 388 | 389 | " Some helpers to edit mode 390 | " http://vimcasts.org/e/14 391 | cnoremap %% =expand('%:h').'/' 392 | map ew :e %% 393 | map es :sp %% 394 | map ev :vsp %% 395 | map et :tabe %% 396 | 397 | " Adjust viewports to the same size 398 | map = = 399 | 400 | " Map ff to display all lines with keyword under cursor 401 | " and ask which one to jump to 402 | nmap ff [I:let nr = input("Which one: ")exe "normal " . nr ."[\t" 403 | 404 | " Easier horizontal scrolling 405 | map zl zL 406 | map zh zH 407 | 408 | " Easier formatting 409 | nnoremap q gwip 410 | 411 | " FIXME: Revert this f70be548 412 | " fullscreen mode for GVIM and Terminal, need 'wmctrl' in you PATH 413 | map :call system("wmctrl -ir " . v:windowid . " -b toggle,fullscreen") 414 | 415 | " } 416 | 417 | " Plugins { 418 | 419 | " TextObj Sentence { 420 | if count(g:spf13_bundle_groups, 'writing') 421 | augroup textobj_sentence 422 | autocmd! 423 | autocmd FileType markdown call textobj#sentence#init() 424 | autocmd FileType textile call textobj#sentence#init() 425 | autocmd FileType text call textobj#sentence#init() 426 | augroup END 427 | endif 428 | " } 429 | 430 | " TextObj Quote { 431 | if count(g:spf13_bundle_groups, 'writing') 432 | augroup textobj_quote 433 | autocmd! 434 | autocmd FileType markdown call textobj#quote#init() 435 | autocmd FileType textile call textobj#quote#init() 436 | autocmd FileType text call textobj#quote#init({'educate': 0}) 437 | augroup END 438 | endif 439 | " } 440 | 441 | " PIV { 442 | if isdirectory(expand("~/.vim/bundle/PIV")) 443 | let g:DisableAutoPHPFolding = 0 444 | let g:PIVAutoClose = 0 445 | endif 446 | " } 447 | 448 | " Misc { 449 | if isdirectory(expand("~/.vim/bundle/nerdtree")) 450 | let g:NERDShutUp=1 451 | endif 452 | if isdirectory(expand("~/.vim/bundle/matchit.zip")) 453 | let b:match_ignorecase = 1 454 | endif 455 | " } 456 | 457 | " OmniComplete { 458 | " To disable omni complete, add the following to your .vimrc.before.local file: 459 | " let g:spf13_no_omni_complete = 1 460 | if !exists('g:spf13_no_omni_complete') 461 | if has("autocmd") && exists("+omnifunc") 462 | autocmd Filetype * 463 | \if &omnifunc == "" | 464 | \setlocal omnifunc=syntaxcomplete#Complete | 465 | \endif 466 | endif 467 | 468 | hi Pmenu guifg=#000000 guibg=#F8F8F8 ctermfg=black ctermbg=Lightgray 469 | hi PmenuSbar guifg=#8A95A7 guibg=#F8F8F8 gui=NONE ctermfg=darkcyan ctermbg=lightgray cterm=NONE 470 | hi PmenuThumb guifg=#F8F8F8 guibg=#8A95A7 gui=NONE ctermfg=lightgray ctermbg=darkcyan cterm=NONE 471 | 472 | " Some convenient mappings 473 | inoremap pumvisible() ? "\" : "\" 474 | if exists('g:spf13_map_cr_omni_complete') 475 | inoremap pumvisible() ? "\" : "\" 476 | endif 477 | inoremap pumvisible() ? "\" : "\" 478 | inoremap pumvisible() ? "\" : "\" 479 | inoremap pumvisible() ? "\\\" : "\" 480 | inoremap pumvisible() ? "\\\" : "\" 481 | 482 | " Automatically open and close the popup menu / preview window 483 | au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif 484 | set completeopt=menu,preview,longest 485 | endif 486 | " } 487 | 488 | " Ctags { 489 | set tags=./tags;/,~/.vimtags 490 | 491 | " Make tags placed in .git/tags file available in all levels of a repository 492 | let gitroot = substitute(system('git rev-parse --show-toplevel'), '[\n\r]', '', 'g') 493 | if gitroot != '' 494 | let &tags = &tags . ',' . gitroot . '/.git/tags' 495 | endif 496 | " } 497 | 498 | " AutoCloseTag { 499 | " Make it so AutoCloseTag works for xml and xhtml files as well 500 | au FileType xhtml,xml ru ftplugin/html/autoclosetag.vim 501 | nmap ac ToggleAutoCloseMappings 502 | " } 503 | 504 | " SnipMate { 505 | " Setting the author var 506 | " If forking, please overwrite in your .vimrc.local file 507 | let g:snips_author = 'Steve Francia ' 508 | " } 509 | 510 | " NerdTree { 511 | if isdirectory(expand("~/.vim/bundle/nerdtree")) 512 | map NERDTreeTabsToggle 513 | map e :NERDTreeFind 514 | nmap nt :NERDTreeFind 515 | 516 | let NERDTreeShowBookmarks=1 517 | let NERDTreeIgnore=['\.py[cd]$', '\~$', '\.swo$', '\.swp$', '^\.git$', '^\.hg$', '^\.svn$', '\.bzr$'] 518 | let NERDTreeChDirMode=0 519 | let NERDTreeQuitOnOpen=1 520 | let NERDTreeMouseMode=2 521 | let NERDTreeShowHidden=1 522 | let NERDTreeKeepTreeInNewTab=1 523 | let g:nerdtree_tabs_open_on_gui_startup=0 524 | endif 525 | " } 526 | 527 | " Tabularize { 528 | if isdirectory(expand("~/.vim/bundle/tabular")) 529 | nmap a& :Tabularize /& 530 | vmap a& :Tabularize /& 531 | nmap a= :Tabularize /= 532 | vmap a= :Tabularize /= 533 | nmap a=> :Tabularize /=> 534 | vmap a=> :Tabularize /=> 535 | nmap a: :Tabularize /: 536 | vmap a: :Tabularize /: 537 | nmap a:: :Tabularize /:\zs 538 | vmap a:: :Tabularize /:\zs 539 | nmap a, :Tabularize /, 540 | vmap a, :Tabularize /, 541 | nmap a,, :Tabularize /,\zs 542 | vmap a,, :Tabularize /,\zs 543 | nmap a :Tabularize / 544 | vmap a :Tabularize / 545 | endif 546 | " } 547 | 548 | " Session List { 549 | set sessionoptions=blank,buffers,curdir,folds,tabpages,winsize 550 | if isdirectory(expand("~/.vim/bundle/sessionman.vim/")) 551 | nmap sl :SessionList 552 | nmap ss :SessionSave 553 | nmap sc :SessionClose 554 | endif 555 | " } 556 | 557 | " JSON { 558 | nmap jt :%!python -m json.tool:set filetype=json 559 | let g:vim_json_syntax_conceal = 0 560 | " } 561 | 562 | " PyMode { 563 | " Disable if python support not present 564 | if !has('python') 565 | let g:pymode = 0 566 | endif 567 | 568 | if isdirectory(expand("~/.vim/bundle/python-mode")) 569 | let g:pymode_lint_checkers = ['pyflakes'] 570 | let g:pymode_trim_whitespaces = 0 571 | let g:pymode_options = 0 572 | let g:pymode_rope = 0 573 | endif 574 | " } 575 | 576 | " ctrlp { 577 | if isdirectory(expand("~/.vim/bundle/ctrlp.vim/")) 578 | let g:ctrlp_working_path_mode = 'ra' 579 | nnoremap :CtrlP 580 | nnoremap :CtrlPMRU 581 | let g:ctrlp_custom_ignore = { 582 | \ 'dir': '\.git$\|\.hg$\|\.svn$', 583 | \ 'file': '\.exe$\|\.so$\|\.dll$\|\.pyc$' } 584 | 585 | " On Windows use "dir" as fallback command. 586 | if WINDOWS() 587 | let s:ctrlp_fallback = 'dir %s /-n /b /s /a-d' 588 | elseif executable('ag') 589 | let s:ctrlp_fallback = 'ag %s --nocolor -l -g ""' 590 | elseif executable('ack-grep') 591 | let s:ctrlp_fallback = 'ack-grep %s --nocolor -f' 592 | elseif executable('ack') 593 | let s:ctrlp_fallback = 'ack %s --nocolor -f' 594 | else 595 | let s:ctrlp_fallback = 'find %s -type f' 596 | endif 597 | let g:ctrlp_user_command = { 598 | \ 'types': { 599 | \ 1: ['.git', 'cd %s && git ls-files . --cached --exclude-standard --others'], 600 | \ 2: ['.hg', 'hg --cwd %s locate -I .'], 601 | \ }, 602 | \ 'fallback': s:ctrlp_fallback 603 | \ } 604 | 605 | if isdirectory(expand("~/.vim/bundle/ctrlp-funky/")) 606 | " CtrlP extensions 607 | let g:ctrlp_extensions = ['funky'] 608 | 609 | "funky 610 | nnoremap fu :CtrlPFunky 611 | endif 612 | endif 613 | "} 614 | 615 | " TagBar { 616 | if isdirectory(expand("~/.vim/bundle/tagbar/")) 617 | nnoremap tt :TagbarToggle 618 | 619 | " If using go please install the gotags program using the following 620 | " go install github.com/jstemmer/gotags 621 | " And make sure gotags is in your path 622 | let g:tagbar_type_go = { 623 | \ 'ctagstype' : 'go', 624 | \ 'kinds' : [ 'p:package', 'i:imports:1', 'c:constants', 'v:variables', 625 | \ 't:types', 'n:interfaces', 'w:fields', 'e:embedded', 'm:methods', 626 | \ 'r:constructor', 'f:functions' ], 627 | \ 'sro' : '.', 628 | \ 'kind2scope' : { 't' : 'ctype', 'n' : 'ntype' }, 629 | \ 'scope2kind' : { 'ctype' : 't', 'ntype' : 'n' }, 630 | \ 'ctagsbin' : 'gotags', 631 | \ 'ctagsargs' : '-sort -silent' 632 | \ } 633 | endif 634 | "} 635 | 636 | 637 | " Fugitive { 638 | if isdirectory(expand("~/.vim/bundle/vim-fugitive/")) 639 | nnoremap gs :Gstatus 640 | nnoremap gd :Gdiff 641 | nnoremap gc :Gcommit 642 | nnoremap gb :Gblame 643 | nnoremap gl :Glog 644 | nnoremap gp :Git push 645 | nnoremap gr :Gread 646 | nnoremap gw :Gwrite 647 | nnoremap ge :Gedit 648 | " Mnemonic _i_nteractive 649 | nnoremap gi :Git add -p % 650 | nnoremap gg :SignifyToggle 651 | endif 652 | "} 653 | 654 | " YouCompleteMe { 655 | if count(g:spf13_bundle_groups, 'youcompleteme') 656 | let g:acp_enableAtStartup = 0 657 | 658 | " enable completion from tags 659 | let g:ycm_collect_identifiers_from_tags_files = 1 660 | 661 | " remap Ultisnips for compatibility for YCM 662 | let g:UltiSnipsExpandTrigger = '' 663 | let g:UltiSnipsJumpForwardTrigger = '' 664 | let g:UltiSnipsJumpBackwardTrigger = '' 665 | 666 | " Enable omni completion. 667 | autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS 668 | autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags 669 | autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS 670 | autocmd FileType python setlocal omnifunc=pythoncomplete#Complete 671 | autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags 672 | autocmd FileType ruby setlocal omnifunc=rubycomplete#Complete 673 | autocmd FileType haskell setlocal omnifunc=necoghc#omnifunc 674 | 675 | " Haskell post write lint and check with ghcmod 676 | " $ `cabal install ghcmod` if missing and ensure 677 | " ~/.cabal/bin is in your $PATH. 678 | if !executable("ghcmod") 679 | autocmd BufWritePost *.hs GhcModCheckAndLintAsync 680 | endif 681 | 682 | " For snippet_complete marker. 683 | if !exists("g:spf13_no_conceal") 684 | if has('conceal') 685 | set conceallevel=2 concealcursor=i 686 | endif 687 | endif 688 | 689 | " Disable the neosnippet preview candidate window 690 | " When enabled, there can be too much visual noise 691 | " especially when splits are used. 692 | set completeopt-=preview 693 | endif 694 | " } 695 | 696 | " neocomplete { 697 | if count(g:spf13_bundle_groups, 'neocomplete') 698 | let g:acp_enableAtStartup = 0 699 | let g:neocomplete#enable_at_startup = 1 700 | let g:neocomplete#enable_smart_case = 1 701 | let g:neocomplete#enable_auto_delimiter = 1 702 | let g:neocomplete#max_list = 15 703 | let g:neocomplete#force_overwrite_completefunc = 1 704 | 705 | 706 | " Define dictionary. 707 | let g:neocomplete#sources#dictionary#dictionaries = { 708 | \ 'default' : '', 709 | \ 'vimshell' : $HOME.'/.vimshell_hist', 710 | \ 'scheme' : $HOME.'/.gosh_completions' 711 | \ } 712 | 713 | " Define keyword. 714 | if !exists('g:neocomplete#keyword_patterns') 715 | let g:neocomplete#keyword_patterns = {} 716 | endif 717 | let g:neocomplete#keyword_patterns['default'] = '\h\w*' 718 | 719 | " Plugin key-mappings { 720 | " These two lines conflict with the default digraph mapping of 721 | if !exists('g:spf13_no_neosnippet_expand') 722 | imap (neosnippet_expand_or_jump) 723 | smap (neosnippet_expand_or_jump) 724 | endif 725 | if exists('g:spf13_noninvasive_completion') 726 | inoremap 727 | " takes you out of insert mode 728 | inoremap pumvisible() ? "\\" : "\" 729 | " accepts first, then sends the 730 | inoremap pumvisible() ? "\\" : "\" 731 | " and cycle like and 732 | inoremap pumvisible() ? "\" : "\" 733 | inoremap pumvisible() ? "\" : "\" 734 | " Jump up and down the list 735 | inoremap pumvisible() ? "\\\" : "\" 736 | inoremap pumvisible() ? "\\\" : "\" 737 | else 738 | " Complete Snippet 739 | " Jump to next snippet point 740 | imap neosnippet#expandable() ? 741 | \ "\(neosnippet_expand_or_jump)" : (pumvisible() ? 742 | \ "\" : "\(neosnippet_expand_or_jump)") 743 | smap (neosnippet_jump_or_expand) 744 | 745 | inoremap neocomplete#undo_completion() 746 | inoremap neocomplete#complete_common_string() 747 | "inoremap neocomplete#complete_common_string() 748 | 749 | " : close popup 750 | " : close popup and save indent. 751 | inoremap pumvisible() ? neocomplete#smart_close_popup()"\" : "\" 752 | 753 | function! CleverCr() 754 | if pumvisible() 755 | if neosnippet#expandable() 756 | let exp = "\(neosnippet_expand)" 757 | return exp . neocomplete#smart_close_popup() 758 | else 759 | return neocomplete#smart_close_popup() 760 | endif 761 | else 762 | return "\" 763 | endif 764 | endfunction 765 | 766 | " close popup and save indent or expand snippet 767 | imap CleverCr() 768 | " , : close popup and delete backword char. 769 | inoremap neocomplete#smart_close_popup()."\" 770 | inoremap neocomplete#smart_close_popup() 771 | endif 772 | " : completion. 773 | inoremap pumvisible() ? "\" : "\" 774 | inoremap pumvisible() ? "\" : "\" 775 | 776 | " Courtesy of Matteo Cavalleri 777 | 778 | function! CleverTab() 779 | if pumvisible() 780 | return "\" 781 | endif 782 | let substr = strpart(getline('.'), 0, col('.') - 1) 783 | let substr = matchstr(substr, '[^ \t]*$') 784 | if strlen(substr) == 0 785 | " nothing to match on empty string 786 | return "\" 787 | else 788 | " existing text matching 789 | if neosnippet#expandable_or_jumpable() 790 | return "\(neosnippet_expand_or_jump)" 791 | else 792 | return neocomplete#start_manual_complete() 793 | endif 794 | endif 795 | endfunction 796 | 797 | imap CleverTab() 798 | " } 799 | 800 | " Enable heavy omni completion. 801 | if !exists('g:neocomplete#sources#omni#input_patterns') 802 | let g:neocomplete#sources#omni#input_patterns = {} 803 | endif 804 | let g:neocomplete#sources#omni#input_patterns.php = '[^. \t]->\h\w*\|\h\w*::' 805 | let g:neocomplete#sources#omni#input_patterns.perl = '\h\w*->\h\w*\|\h\w*::' 806 | let g:neocomplete#sources#omni#input_patterns.c = '[^.[:digit:] *\t]\%(\.\|->\)' 807 | let g:neocomplete#sources#omni#input_patterns.cpp = '[^.[:digit:] *\t]\%(\.\|->\)\|\h\w*::' 808 | let g:neocomplete#sources#omni#input_patterns.ruby = '[^. *\t]\.\h\w*\|\h\w*::' 809 | " } 810 | " neocomplcache { 811 | elseif count(g:spf13_bundle_groups, 'neocomplcache') 812 | let g:acp_enableAtStartup = 0 813 | let g:neocomplcache_enable_at_startup = 1 814 | let g:neocomplcache_enable_camel_case_completion = 1 815 | let g:neocomplcache_enable_smart_case = 1 816 | let g:neocomplcache_enable_underbar_completion = 1 817 | let g:neocomplcache_enable_auto_delimiter = 1 818 | let g:neocomplcache_max_list = 15 819 | let g:neocomplcache_force_overwrite_completefunc = 1 820 | 821 | " Define dictionary. 822 | let g:neocomplcache_dictionary_filetype_lists = { 823 | \ 'default' : '', 824 | \ 'vimshell' : $HOME.'/.vimshell_hist', 825 | \ 'scheme' : $HOME.'/.gosh_completions' 826 | \ } 827 | 828 | " Define keyword. 829 | if !exists('g:neocomplcache_keyword_patterns') 830 | let g:neocomplcache_keyword_patterns = {} 831 | endif 832 | let g:neocomplcache_keyword_patterns._ = '\h\w*' 833 | 834 | " Plugin key-mappings { 835 | " These two lines conflict with the default digraph mapping of 836 | imap (neosnippet_expand_or_jump) 837 | smap (neosnippet_expand_or_jump) 838 | if exists('g:spf13_noninvasive_completion') 839 | inoremap 840 | " takes you out of insert mode 841 | inoremap pumvisible() ? "\\" : "\" 842 | " accepts first, then sends the 843 | inoremap pumvisible() ? "\\" : "\" 844 | " and cycle like and 845 | inoremap pumvisible() ? "\" : "\" 846 | inoremap pumvisible() ? "\" : "\" 847 | " Jump up and down the list 848 | inoremap pumvisible() ? "\\\" : "\" 849 | inoremap pumvisible() ? "\\\" : "\" 850 | else 851 | imap neosnippet#expandable() ? 852 | \ "\(neosnippet_expand_or_jump)" : (pumvisible() ? 853 | \ "\" : "\(neosnippet_expand_or_jump)") 854 | smap (neosnippet_jump_or_expand) 855 | 856 | inoremap neocomplcache#undo_completion() 857 | inoremap neocomplcache#complete_common_string() 858 | "inoremap neocomplcache#complete_common_string() 859 | 860 | function! CleverCr() 861 | if pumvisible() 862 | if neosnippet#expandable() 863 | let exp = "\(neosnippet_expand)" 864 | return exp . neocomplcache#close_popup() 865 | else 866 | return neocomplcache#close_popup() 867 | endif 868 | else 869 | return "\" 870 | endif 871 | endfunction 872 | 873 | " close popup and save indent or expand snippet 874 | imap CleverCr() 875 | 876 | " : close popup 877 | " : close popup and save indent. 878 | inoremap pumvisible() ? neocomplcache#close_popup()"\" : "\" 879 | "inoremap pumvisible() ? neocomplcache#close_popup() : "\" 880 | 881 | " , : close popup and delete backword char. 882 | inoremap neocomplcache#smart_close_popup()."\" 883 | inoremap neocomplcache#close_popup() 884 | endif 885 | " : completion. 886 | inoremap pumvisible() ? "\" : "\" 887 | inoremap pumvisible() ? "\" : "\" 888 | " } 889 | 890 | " Enable omni completion. 891 | autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS 892 | autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags 893 | autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS 894 | autocmd FileType python setlocal omnifunc=pythoncomplete#Complete 895 | autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags 896 | autocmd FileType ruby setlocal omnifunc=rubycomplete#Complete 897 | autocmd FileType haskell setlocal omnifunc=necoghc#omnifunc 898 | 899 | " Enable heavy omni completion. 900 | if !exists('g:neocomplcache_omni_patterns') 901 | let g:neocomplcache_omni_patterns = {} 902 | endif 903 | let g:neocomplcache_omni_patterns.php = '[^. \t]->\h\w*\|\h\w*::' 904 | let g:neocomplcache_omni_patterns.perl = '\h\w*->\h\w*\|\h\w*::' 905 | let g:neocomplcache_omni_patterns.c = '[^.[:digit:] *\t]\%(\.\|->\)' 906 | let g:neocomplcache_omni_patterns.cpp = '[^.[:digit:] *\t]\%(\.\|->\)\|\h\w*::' 907 | let g:neocomplcache_omni_patterns.ruby = '[^. *\t]\.\h\w*\|\h\w*::' 908 | let g:neocomplcache_omni_patterns.go = '\h\w*\.\?' 909 | " } 910 | " Normal Vim omni-completion { 911 | " To disable omni complete, add the following to your .vimrc.before.local file: 912 | " let g:spf13_no_omni_complete = 1 913 | elseif !exists('g:spf13_no_omni_complete') 914 | " Enable omni-completion. 915 | autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS 916 | autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags 917 | autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS 918 | autocmd FileType python setlocal omnifunc=pythoncomplete#Complete 919 | autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags 920 | autocmd FileType ruby setlocal omnifunc=rubycomplete#Complete 921 | autocmd FileType haskell setlocal omnifunc=necoghc#omnifunc 922 | 923 | endif 924 | " } 925 | 926 | " Snippets { 927 | if count(g:spf13_bundle_groups, 'neocomplcache') || 928 | \ count(g:spf13_bundle_groups, 'neocomplete') 929 | 930 | " Use honza's snippets. 931 | let g:neosnippet#snippets_directory='~/.vim/bundle/vim-snippets/snippets' 932 | 933 | " Enable neosnippet snipmate compatibility mode 934 | let g:neosnippet#enable_snipmate_compatibility = 1 935 | 936 | " For snippet_complete marker. 937 | if !exists("g:spf13_no_conceal") 938 | if has('conceal') 939 | set conceallevel=2 concealcursor=i 940 | endif 941 | endif 942 | 943 | " Enable neosnippets when using go 944 | let g:go_snippet_engine = "neosnippet" 945 | 946 | " Disable the neosnippet preview candidate window 947 | " When enabled, there can be too much visual noise 948 | " especially when splits are used. 949 | set completeopt-=preview 950 | endif 951 | " } 952 | 953 | " FIXME: Isn't this for Syntastic to handle? 954 | " Haskell post write lint and check with ghcmod 955 | " $ `cabal install ghcmod` if missing and ensure 956 | " ~/.cabal/bin is in your $PATH. 957 | if !executable("ghcmod") 958 | autocmd BufWritePost *.hs GhcModCheckAndLintAsync 959 | endif 960 | 961 | " UndoTree { 962 | if isdirectory(expand("~/.vim/bundle/undotree/")) 963 | nnoremap u :UndotreeToggle 964 | " If undotree is opened, it is likely one wants to interact with it. 965 | let g:undotree_SetFocusWhenToggle=1 966 | endif 967 | " } 968 | 969 | " indent_guides { 970 | if isdirectory(expand("~/.vim/bundle/vim-indent-guides/")) 971 | let g:indent_guides_start_level = 2 972 | let g:indent_guides_guide_size = 1 973 | let g:indent_guides_enable_on_vim_startup = 1 974 | endif 975 | " } 976 | 977 | " Wildfire { 978 | let g:wildfire_objects = { 979 | \ "*" : ["i'", 'i"', "i)", "i]", "i}", "ip"], 980 | \ "html,xml" : ["at"], 981 | \ } 982 | " } 983 | 984 | " vim-airline { 985 | " Set configuration options for the statusline plugin vim-airline. 986 | " Use the powerline theme and optionally enable powerline symbols. 987 | " To use the symbols , , , , , , and .in the statusline 988 | " segments add the following to your .vimrc.before.local file: 989 | " let g:airline_powerline_fonts=1 990 | " If the previous symbols do not render for you then install a 991 | " powerline enabled font. 992 | 993 | " See `:echo g:airline_theme_map` for some more choices 994 | " Default in terminal vim is 'dark' 995 | if isdirectory(expand("~/.vim/bundle/vim-airline/")) 996 | if !exists('g:airline_theme') 997 | let g:airline_theme = 'solarized' 998 | endif 999 | if !exists('g:airline_powerline_fonts') 1000 | " Use the default set of separators with a few customizations 1001 | let g:airline_left_sep='›' " Slightly fancier than '>' 1002 | let g:airline_right_sep='‹' " Slightly fancier than '<' 1003 | endif 1004 | endif 1005 | " } 1006 | 1007 | " } 1008 | 1009 | " GUI Settings { 1010 | 1011 | " GVIM- (here instead of .gvimrc) 1012 | if has('gui_running') 1013 | set guioptions-=T " Remove the toolbar 1014 | set lines=40 " 40 lines of text instead of 24 1015 | if !exists("g:spf13_no_big_font") 1016 | if LINUX() && has("gui_running") 1017 | set guifont=Andale\ Mono\ Regular\ 12,Menlo\ Regular\ 11,Consolas\ Regular\ 12,Courier\ New\ Regular\ 14 1018 | elseif OSX() && has("gui_running") 1019 | set guifont=Andale\ Mono\ Regular:h12,Menlo\ Regular:h11,Consolas\ Regular:h12,Courier\ New\ Regular:h14 1020 | elseif WINDOWS() && has("gui_running") 1021 | set guifont=Andale_Mono:h10,Menlo:h10,Consolas:h10,Courier_New:h10 1022 | endif 1023 | endif 1024 | else 1025 | if &term == 'xterm' || &term == 'screen' 1026 | set t_Co=256 " Enable 256 colors to stop the CSApprox warning and make xterm vim shine 1027 | endif 1028 | "set term=builtin_ansi " Make arrow and other keys work 1029 | endif 1030 | 1031 | " } 1032 | 1033 | " Functions { 1034 | 1035 | " Initialize directories { 1036 | function! InitializeDirectories() 1037 | let parent = $HOME 1038 | let prefix = 'vim' 1039 | let dir_list = { 1040 | \ 'backup': 'backupdir', 1041 | \ 'views': 'viewdir', 1042 | \ 'swap': 'directory' } 1043 | 1044 | if has('persistent_undo') 1045 | let dir_list['undo'] = 'undodir' 1046 | endif 1047 | 1048 | " To specify a different directory in which to place the vimbackup, 1049 | " vimviews, vimundo, and vimswap files/directories, add the following to 1050 | " your .vimrc.before.local file: 1051 | " let g:spf13_consolidated_directory = 1052 | " eg: let g:spf13_consolidated_directory = $HOME . '/.vim/' 1053 | if exists('g:spf13_consolidated_directory') 1054 | let common_dir = g:spf13_consolidated_directory . prefix 1055 | else 1056 | let common_dir = parent . '/.' . prefix 1057 | endif 1058 | 1059 | for [dirname, settingname] in items(dir_list) 1060 | let directory = common_dir . dirname . '/' 1061 | if exists("*mkdir") 1062 | if !isdirectory(directory) 1063 | call mkdir(directory) 1064 | endif 1065 | endif 1066 | if !isdirectory(directory) 1067 | echo "Warning: Unable to create backup directory: " . directory 1068 | echo "Try: mkdir -p " . directory 1069 | else 1070 | let directory = substitute(directory, " ", "\\\\ ", "g") 1071 | exec "set " . settingname . "=" . directory 1072 | endif 1073 | endfor 1074 | endfunction 1075 | call InitializeDirectories() 1076 | " } 1077 | 1078 | " Initialize NERDTree as needed { 1079 | function! NERDTreeInitAsNeeded() 1080 | redir => bufoutput 1081 | buffers! 1082 | redir END 1083 | let idx = stridx(bufoutput, "NERD_tree") 1084 | if idx > -1 1085 | NERDTreeMirror 1086 | NERDTreeFind 1087 | wincmd l 1088 | endif 1089 | endfunction 1090 | " } 1091 | 1092 | " Strip whitespace { 1093 | function! StripTrailingWhitespace() 1094 | " Preparation: save last search, and cursor position. 1095 | let _s=@/ 1096 | let l = line(".") 1097 | let c = col(".") 1098 | " do the business: 1099 | %s/\s\+$//e 1100 | " clean up: restore previous search history, and cursor position 1101 | let @/=_s 1102 | call cursor(l, c) 1103 | endfunction 1104 | " } 1105 | 1106 | " Shell command { 1107 | function! s:RunShellCommand(cmdline) 1108 | botright new 1109 | 1110 | setlocal buftype=nofile 1111 | setlocal bufhidden=delete 1112 | setlocal nobuflisted 1113 | setlocal noswapfile 1114 | setlocal nowrap 1115 | setlocal filetype=shell 1116 | setlocal syntax=shell 1117 | 1118 | call setline(1, a:cmdline) 1119 | call setline(2, substitute(a:cmdline, '.', '=', 'g')) 1120 | execute 'silent $read !' . escape(a:cmdline, '%#') 1121 | setlocal nomodifiable 1122 | 1 1123 | endfunction 1124 | 1125 | command! -complete=file -nargs=+ Shell call s:RunShellCommand() 1126 | " e.g. Grep current file for : Shell grep -Hn % 1127 | " } 1128 | 1129 | " } 1130 | 1131 | " Use fork vimrc if available { 1132 | if filereadable(expand("~/.vimrc.fork")) 1133 | source ~/.vimrc.fork 1134 | endif 1135 | " } 1136 | 1137 | " Use local vimrc if available { 1138 | if filereadable(expand("~/.vimrc.local")) 1139 | source ~/.vimrc.local 1140 | endif 1141 | " } 1142 | 1143 | " Use local gvimrc if available and gui is running { 1144 | if has('gui_running') 1145 | if filereadable(expand("~/.gvimrc.local")) 1146 | source ~/.gvimrc.local 1147 | endif 1148 | endif 1149 | " } 1150 | -------------------------------------------------------------------------------- /.zshrc: -------------------------------------------------------------------------------- 1 | # Path to your oh-my-zsh installation. 2 | export ZSH=$HOME/.oh-my-zsh 3 | 4 | # Set name of the theme to load. 5 | # Look in ~/.oh-my-zsh/themes/ 6 | # Optionally, if you set this to "random", it'll load a random theme each 7 | # time that oh-my-zsh is loaded. 8 | ZSH_THEME="unakravets" 9 | 10 | # Uncomment the following line to use case-sensitive completion. 11 | # CASE_SENSITIVE="true" 12 | 13 | # Uncomment the following line to disable bi-weekly auto-update checks. 14 | # DISABLE_AUTO_UPDATE="true" 15 | 16 | # Uncomment the following line to change how often to auto-update (in days). 17 | # export UPDATE_ZSH_DAYS=13 18 | 19 | # Uncomment the following line to disable colors in ls. 20 | # DISABLE_LS_COLORS="true" 21 | 22 | # Uncomment the following line to disable auto-setting terminal title. 23 | # DISABLE_AUTO_TITLE="true" 24 | 25 | # Uncomment the following line to enable command auto-correction. 26 | # ENABLE_CORRECTION="true” 27 | 28 | # Uncomment the following line to display red dots whilst waiting for completion. 29 | # COMPLETION_WAITING_DOTS="true" 30 | 31 | # Uncomment the following line if you want to disable marking untracked files 32 | # under VCS as dirty. This makes repository status check for large repositories 33 | # much, much faster. 34 | # DISABLE_UNTRACKED_FILES_DIRTY="true" 35 | 36 | # Uncomment the following line if you want to change the command execution time 37 | # stamp shown in the history command output. 38 | # The optional three formats: "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd" 39 | # HIST_STAMPS="mm/dd/yyyy" 40 | 41 | # Would you like to use another custom folder than $ZSH/custom? 42 | # ZSH_CUSTOM=/path/to/new-custom-folder 43 | 44 | # Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*) 45 | # Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/ 46 | # Example format: plugins=(rails git textmate ruby lighthouse) 47 | # Add wisely, as too many plugins slow down shell startup. 48 | plugins=(git) 49 | 50 | source $ZSH/oh-my-zsh.sh 51 | 52 | # User configuration 53 | 54 | export PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin" 55 | # export MANPATH="/usr/local/man:$MANPATH" 56 | 57 | # You may need to manually set your language environment 58 | # export LANG=en_US.UTF-8 59 | 60 | # Preferred editor for local and remote sessions 61 | # if [[ -n $SSH_CONNECTION ]]; then 62 | # export EDITOR='vim' 63 | # else 64 | # export EDITOR='mvim' 65 | # fi 66 | 67 | # Compilation flags 68 | # export ARCHFLAGS="-arch x86_64" 69 | 70 | # ssh 71 | # export SSH_KEY_PATH="~/.ssh/dsa_id" 72 | 73 | # Set personal aliases, overriding those provided by oh-my-zsh libs, 74 | # plugins, and themes. Aliases can be placed here, though oh-my-zsh 75 | # users are encouraged to define aliases within the ZSH_CUSTOM folder. 76 | # For a full list of active aliases, run `alias`. 77 | # 78 | # Example aliases 79 | # alias zshconfig="mate ~/.zshrc" 80 | # alias ohmyzsh="mate ~/.oh-my-zsh" 81 | 82 | export PATH=/Applications/Sublime\ Text\ 2.app/Contents/SharedSupport/bin/:$PATH 83 | 84 | ### MY ALIASES 85 | source "/Users/unakravets/.aliases.sh" 86 | 87 | ### Added by the Heroku Toolbelt 88 | export PATH="/usr/local/heroku/bin:$PATH" 89 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Una Kravets 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # dotfiles 2 | 3 | Dotfiles and Configurations 4 | 5 | ## Index: 6 | 7 | - [Sublime](/SublimeText) 8 | - [Sublime Plugin List](/SublimeText/sublime-plugins.md) 9 | - [Preferences.sublime-settings](/SublimeText/Preferences.sublime-settings) 10 | - [Material-Theme-Darker.sublime-theme](/SublimeText/Material-Theme-Darker.sublime-theme) (with alterations) 11 | - [Typeface: Input Mono](http://input.fontbureau.com/download/) 12 | - Terminal Setup (zsh) 13 | - [.zshrc](/.zshrc) (/links to [.aliases.sh](/.aliases.sh)) 14 | - Git(hub) 15 | - [.gitconfig](/.gitconfig) 16 | - [.gitignore](/.gitignore) 17 | - [.editorconfig](/.editorconfig) 18 | - Vim 19 | - [.vimrc](/.vimrc) 20 | 21 | ## Sublime Theme: 22 | 23 | ![Its beautiful!](sublime.png) -------------------------------------------------------------------------------- /SublimeText/Material-Theme-Darker.sublime-theme: -------------------------------------------------------------------------------- 1 | // I edited this theme a bit to make it more legible :) <3 Una 2 | 3 | [ 4 | 5 | /* @EMPTY WINDOW 6 | * Style for empty (no tabs) window 7 | ========================================================================= */ 8 | 9 | { 10 | "class": "sheet_container_control", 11 | "layer0.tint": [33, 33, 33], 12 | "layer0.opacity": 1.0 13 | }, 14 | 15 | 16 | /* @GRID LAYOUT 17 | * Grid style 18 | ========================================================================= */ 19 | 20 | { 21 | "class": "grid_layout_control", 22 | "border_size": 2, 23 | "border_color": [39, 53, 60] 24 | }, 25 | 26 | 27 | /* @DIALOG POPUP 28 | * Dialog popup style and progressbar 29 | ========================================================================= */ 30 | 31 | { 32 | "class": "progress_gauge_control", 33 | "layer0.tint": [128, 203, 196], 34 | "layer0.opacity": 1.0, 35 | "content_margin": [0, 6] 36 | }, 37 | 38 | { 39 | "class": "dialog", 40 | "layer0.tint": [33, 33, 33], 41 | "layer0.opacit": 1.0 42 | }, 43 | 44 | { 45 | "class": "progress_bar_control", 46 | "layer0.tint": [33, 33, 33], 47 | "layer0.opacity": 1.0, 48 | }, 49 | 50 | 51 | /* @CODE FOLDING 52 | * Folding arrow setting and behavioring 53 | ========================================================================= */ 54 | 55 | { 56 | "class": "fold_button_control", 57 | "layer0.texture": "Material Theme/assets/commons/fold_right.png", 58 | "layer0.opacity": 1.0, 59 | "layer0.inner_margin": 0, 60 | "layer1.texture": "Material Theme/assets/commons/fold_right--hover.png", 61 | "layer1.opacity": 0.0, 62 | "layer1.inner_margin": 0, 63 | "content_margin": [9, 7, 8, 6] 64 | }, 65 | 66 | { 67 | "class": "fold_button_control", 68 | "attributes": ["hover"], 69 | "layer0.opacity": 0.0, 70 | "layer1.opacity": 1.0 71 | }, 72 | 73 | { 74 | "class": "fold_button_control", 75 | "attributes": ["expanded"], 76 | "layer0.texture": "Material Theme/assets/darker/fold_down.png", 77 | "layer1.texture": "Material Theme/assets/commons/fold_down--hover.png" 78 | }, 79 | 80 | 81 | /* @AUTOCOMPLETE 82 | * Autocomplete popup setting and behavioring 83 | ========================================================================= */ 84 | 85 | 86 | { 87 | "class": "popup_control", 88 | "layer0.texture": [255, 255, 255, 255], 89 | "layer0.opacity": 1.0, 90 | "content_margin": [0, 0] 91 | }, 92 | 93 | { 94 | "class": "auto_complete", 95 | "row_padding": [12, 6], 96 | "layer0.tint": [33, 33, 33], 97 | "layer0.opacity": 1.0 98 | }, 99 | 100 | { 101 | "class": "auto_complete_label", 102 | "fg": [176, 190, 197, 255], 103 | "match_fg": [128, 203, 196, 255], 104 | "selected_fg": [255, 255, 255, 255], 105 | "selected_match_fg": [128, 203, 196, 255] 106 | }, 107 | 108 | { 109 | "class": "table_row", 110 | "layer0.tint": [97, 97, 97], 111 | "layer0.opacity": 0.0, 112 | }, 113 | 114 | { 115 | "class": "table_row", 116 | "attributes": ["selected"], 117 | "layer0.opacity": 10 118 | }, 119 | 120 | 121 | /* @TOOLTIP 122 | * Tooltip setting and behavioring 123 | ========================================================================= */ 124 | 125 | { 126 | "class": "tool_tip_control", 127 | "layer0.tint": [33,33,33], 128 | "layer0.inner_margin": [0, 0], 129 | "layer0.opacity": 1.0, 130 | "content_margin": [8, 8] 131 | }, 132 | 133 | { 134 | "class": "tool_tip_label_control", 135 | "color": [255, 255, 255, 255] 136 | }, 137 | 138 | 139 | /* @OVERLAY PANELS 140 | * Overlay panels setting and behavioring 141 | ========================================================================= */ 142 | 143 | // Command Panel 144 | { 145 | "class": "overlay_control", 146 | "layer0.texture": "Material Theme/assets/darker/overlay-bg.png", 147 | "layer0.inner_margin": [16, 4, 16, 33], 148 | "layer0.opacity": 1.0, 149 | "layer1.texture": "Material Theme/assets/commons/quick-panel-background.png", 150 | "layer1.inner_margin": [16, 0, 16, 25], 151 | "layer1.opacity": 1.0, 152 | "content_margin": [13, 13, 13, 33] 153 | }, 154 | 155 | // Command Panel list item style (cmd + shift + p) 156 | 157 | { 158 | "class": "mini_quick_panel_row", 159 | "layer0.tint": [33, 33, 33, 0], 160 | "layer0.inner_margin": [2, 2, 2, 2], 161 | "layer0.opacity": 1.0 162 | }, 163 | 164 | // Command Panel selected list item style (cmd + p) 165 | 166 | { 167 | "class": "mini_quick_panel_row", 168 | "attributes": ["selected"], 169 | "layer0.tint": [66, 66, 66] 170 | }, 171 | 172 | // Quick panel project setting (project manager) (cmd + ctrl + p) 173 | 174 | { 175 | "class": "quick_panel", 176 | "row_padding": [32, 12], 177 | "layer0.tint": [33, 33, 33], 178 | "layer0.opacity": 1.0 179 | }, 180 | 181 | // Quick Panel row default style (project manager) 182 | 183 | { 184 | "class": "quick_panel_row", 185 | "layer0.tint": [33, 33, 33, 0], 186 | "layer0.opacity": 1.0 187 | }, 188 | 189 | // Row panel style inside comman panel (cmd + shift + p) 190 | 191 | { 192 | "class": "quick_panel_row", 193 | "parents": [{"class": "overlay_control"}], 194 | "layer0.tint": [33, 33, 33, 0], 195 | "layer0.opacity": 1.0 196 | }, 197 | 198 | // Quick panel (project) style inside overlay_control (cmd + shift + p) 199 | 200 | { 201 | "class": "quick_panel", 202 | "parents": [{"class": "overlay_control"}], 203 | "row_padding": [32, 12], 204 | "layer0.tint": [33, 33, 33, 0], 205 | "layer0.opacity": 1.0 206 | }, 207 | 208 | // Quick Panel selected list item style 209 | 210 | { 211 | "class": "quick_panel_row", 212 | "attributes": ["selected"], 213 | "layer0.tint": [66, 66, 66], 214 | "layer1.opacity": 0.0 215 | }, 216 | 217 | // Panel labels 218 | 219 | { 220 | "class": "quick_panel_label", 221 | "fg": [176, 190, 197, 255], 222 | "match_fg": [128, 203, 196, 255], 223 | "selected_fg": [255, 255, 255, 255], 224 | "selected_match_fg": [128, 203, 196, 255] 225 | }, 226 | 227 | // Panel labels 228 | 229 | { 230 | "class": "quick_panel_label", 231 | "parents": [{"class": "overlay_control"}], 232 | "fg": [176, 190, 197, 255], 233 | "match_fg": [128, 203, 196, 255], 234 | "selected_fg": [255, 255, 255, 255], 235 | "selected_match_fg": [128, 203, 196, 255] 236 | }, 237 | 238 | // Panels sublabels 239 | 240 | { 241 | "class": "quick_panel_path_label", 242 | "fg": [97, 97, 97, 255], 243 | "match_fg": [128, 203, 196, 255], 244 | "selected_fg": [255, 255, 255, 255], 245 | "selected_match_fg": [128, 203, 196, 255] 246 | }, 247 | 248 | // Panels data / score 249 | 250 | { 251 | "class": "quick_panel_score_label", 252 | "fg": [128, 203, 196, 255], 253 | "selected_fg": [255, 255, 255, 255] 254 | }, 255 | 256 | 257 | /* @TABS 258 | * Tabs settings and behavioring 259 | ========================================================================= */ 260 | 261 | { 262 | "class": "tabset_control", 263 | 264 | "layer0.opacity": 1.0, 265 | "layer0.tint": [33, 33, 33], 266 | "tint_index": 1, 267 | "layer0.inner_margin": [2, 6], 268 | "layer0.opacity": 1.0, 269 | "content_margin": [12, -8, 8, 0], 270 | "tab_overlap": 0, 271 | "tab_width": 180, 272 | "tab_min_width": 64, 273 | "tab_height": 54, 274 | "mouse_wheel_switch": false 275 | }, 276 | { 277 | "class": "tabset_control", 278 | "settings": ["mouse_wheel_switches_tabs", "!enable_tab_scrolling"], 279 | "mouse_wheel_switch": true 280 | }, 281 | // Tabs 282 | { 283 | "class": "tab_control", 284 | 285 | "layer0.tint": [33, 33, 33], 286 | "layer0.inner_margin": [24, 0], 287 | "layer0.opacity": 1.0, 288 | "tint_index": 0, 289 | 290 | "layer1.texture": "Material Theme/assets/darker/tab_current.png", 291 | "layer1.inner_margin": [0, 0], 292 | "layer1.opacity": 0.0, 293 | 294 | "layer2.tint": [255, 255, 255, 10], 295 | "layer2.inner_margin": [0, 0], 296 | "layer2.opacity": { "target": 0.0, "speed": 3.0, "interpolation": "smoothstep" }, 297 | 298 | "content_margin": [18, 8, 11, 4], 299 | "max_margin_trim": 0, 300 | "hit_test_level": 0.4 301 | }, 302 | 303 | // Selected current tab 304 | 305 | { 306 | "class": "tab_control", "attributes": ["selected"], 307 | "layer1.opacity": 1.0, 308 | "layer2.opacity": 0.0 309 | }, 310 | 311 | // Hovered current tab 312 | 313 | { 314 | "class": "tab_control", "attributes": ["hover"], 315 | "layer1.opacity": 0.0, 316 | "layer2.opacity": { "target": 0.4, "speed": 5.0, "interpolation": "smoothstep" } 317 | }, 318 | 319 | // Selected current tab 320 | 321 | { 322 | "class": "tab_control", "attributes": ["selected","hover"], 323 | "layer1.opacity": 1.0, 324 | "layer2.opacity": { "target": 0.4, "speed": 5.0, "interpolation": "smoothstep" } 325 | }, 326 | 327 | // Tab Labels 328 | 329 | { 330 | "class": "tab_label", 331 | "fg": [97, 97, 97, 255], 332 | "shadow_color": [255, 255, 255, 0], 333 | "shadow_offset": [0, 0], 334 | "font.size": 12, 335 | "font.italic": false, 336 | "font.bold": false 337 | }, 338 | 339 | // Tab selected label color 340 | 341 | { 342 | "class": "tab_label", 343 | "parents": [{"class": "tab_control", "attributes": ["selected"]}], 344 | "fg": [255, 255, 255, 255], 345 | "shadow_color": [255, 255, 255, 0], 346 | "shadow_offset": [0, 0] 347 | }, 348 | 349 | { 350 | "class": "tab_label", 351 | "attributes": ["transient"], 352 | "font.italic": true 353 | }, 354 | 355 | // Tab Close Buttons 356 | 357 | { 358 | "class": "tab_close_button", 359 | "content_margin": [0, 0], 360 | 361 | // Close Icon 362 | "layer0.texture": "Material Theme/assets/darker/close_icon.png", 363 | "layer0.opacity": 1, 364 | "layer0.inner_margin": 0, 365 | 366 | // Close Icon Hover 367 | "layer1.texture": "Material Theme/assets/commons/close_icon--hover.png", 368 | "layer1.opacity": { "target": 0.0, "speed": 5.0, "interpolation": "smoothstep" }, 369 | 370 | // Dirty Icon 371 | "layer2.texture": "Material Theme/assets/darker/dirty_icon.png", 372 | "layer2.inner_margin": 0, 373 | 374 | // Dirty Icon Hover 375 | "layer3.texture": "Material Theme/assets/commons/dirty_icon--hover.png", 376 | "layer3.opacity": { "target": 0.0, "speed": 5.0, "interpolation": "smoothstep" } 377 | }, 378 | // Default 379 | { 380 | "class": "tab_close_button", 381 | "settings": ["show_tab_close_buttons"], 382 | "content_margin": [8,8], 383 | }, 384 | // Selected Tab 385 | { 386 | "class": "tab_close_button", 387 | "settings": ["show_tab_close_buttons"], 388 | "parents": [{"class": "tab_control", "attributes": ["selected"]}], 389 | "layer0.opacity": 0, // Close Icon 390 | "layer1.opacity": 1, // Close Icon Hover 391 | }, 392 | // Default hover 393 | { 394 | "class": "tab_close_button", 395 | "settings": ["show_tab_close_buttons"], 396 | "attributes": ["hover"], 397 | "layer0.opacity": 0, // Close Icon 398 | "layer1.opacity": 1, // Close Icon Hover 399 | }, 400 | // Dirty tab 401 | { 402 | "class": "tab_close_button", 403 | "parents": [{"class": "tab_control", "attributes": ["dirty"]}], 404 | "layer0.opacity": 0, // Close Icon 405 | "layer1.opacity": 0, // Close Icon Hover 406 | "layer2.opacity": 0, // Dirty Icon 407 | "layer3.opacity": 1, // Dirty Icon Hover 408 | "content_margin": [8,8], 409 | }, 410 | // Dirty tab on hover 411 | { 412 | "class": "tab_close_button", 413 | "parents": [{"class": "tab_control", "attributes": ["dirty"]}], 414 | "attributes": ["hover"], 415 | "layer0.opacity": 0, // Close Icon 416 | "layer1.opacity": 1, // Close Icon Hover 417 | "layer2.opacity": 0, // Dirty Icon 418 | "layer3.opacity": 0 // Dirty Icon Hover 419 | }, 420 | // Selected dirty tab 421 | { 422 | "class": "tab_close_button", 423 | "parents": [{"class": "tab_control", "attributes": ["selected", "dirty"]}], 424 | "layer0.opacity": 0, // Close Icon 425 | "layer1.opacity": 0, // Close Icon Hover 426 | "layer2.opacity": 0, // Dirty Icon 427 | "layer3.opacity": 1 // Dirty Icon Hover 428 | }, 429 | // Selected dirty tab on hover 430 | { 431 | "class": "tab_close_button", 432 | "parents": [{"class": "tab_control", "attributes": ["selected", "dirty"]}], 433 | "attributes": ["hover"], 434 | "layer0.opacity": 0, // Close Icon 435 | "layer1.opacity": 1, // Close Icon Hover 436 | "layer2.opacity": 0, // Dirty Icon 437 | "layer3.opacity": 0 // Dirty Icon Hover 438 | }, 439 | // tab set scroll left | scroll right 440 | { 441 | "class": "scroll_tabs_left_button", 442 | "content_margin": [14, 7], 443 | "layer0.texture": "Material Theme/assets/darker/arrow_left.png", 444 | "layer0.opacity": 1.0, 445 | "layer0.inner_margin": 0, 446 | "layer1.texture": "Material Theme/assets/commons/arrow_left--hover.png", 447 | "layer1.opacity": 0.0, 448 | "layer1.inner_margin": 0, 449 | }, 450 | 451 | { 452 | "class": "scroll_tabs_left_button", 453 | "attributes": ["hover"], 454 | "layer1.opacity": 1.0 455 | }, 456 | 457 | { 458 | "class": "scroll_tabs_right_button", 459 | "content_margin": [14, 7], 460 | "layer0.texture": "Material Theme/assets/darker/arrow_right.png", 461 | "layer0.opacity": 1.0, 462 | "layer0.inner_margin": 0, 463 | "layer1.texture": "Material Theme/assets/commons/arrow_right--hover.png", 464 | "layer1.opacity": 0.0, 465 | "layer1.inner_margin": 0, 466 | }, 467 | 468 | { 469 | "class": "scroll_tabs_right_button", 470 | "attributes": ["hover"], 471 | "layer1.opacity": 1.0 472 | }, 473 | 474 | { 475 | "class": "show_tabs_dropdown_button", 476 | "content_margin": [12, 12], 477 | "layer0.texture": "Material Theme/assets/darker/overflow_menu.png", 478 | "layer0.opacity": 1.0, 479 | "layer0.inner_margin": 0, 480 | "layer1.texture": "Material Theme/assets/commons/overflow_menu--hover.png", 481 | "layer1.opacity": 0.0, 482 | "layer1.inner_margin": 0, 483 | }, 484 | 485 | { 486 | "class": "show_tabs_dropdown_button", 487 | "attributes": ["hover"], 488 | "layer1.opacity": 1.0 489 | }, 490 | 491 | 492 | /* @SIDEBAR 493 | * Sidebar panel settings and behavioring 494 | ========================================================================= */ 495 | 496 | 497 | { 498 | "class": "sidebar_container", 499 | "layer0.tint": [33, 33, 33], 500 | "layer0.opacity": 1.0, 501 | "layer0.draw_center": false, 502 | "layer0.inner_margin": [0, 24, 12, 24], 503 | "content_margin": [0, 12, 0, 0] 504 | }, 505 | { 506 | "class": "sidebar_tree", 507 | "row_padding": [24, 5], 508 | "indent": 16, 509 | "indent_offset": 0, 510 | "indent_top_level": false, 511 | "layer0.tint": [33, 33, 33], 512 | "layer0.opacity": 1.0 513 | }, 514 | 515 | { 516 | "class": "sidebar_heading", 517 | "color": [207, 216, 220], 518 | "font.bold": false, 519 | "font.size": 12, 520 | "shadow_color": [250, 250, 250, 0], 521 | "shadow_offset": [0, 0] 522 | }, 523 | 524 | { 525 | "class": "sidebar_heading", 526 | "parents": 527 | [ 528 | { "class": "tree_row", "attributes": ["selected"] } 529 | ], 530 | "shadow_color": [160, 174, 192, 0], 531 | }, 532 | 533 | { 534 | "class": "sidebar_label", 535 | "color": [120, 120, 120], 536 | "font.bold": false, 537 | "font.italic": false, 538 | "font.size": 14, 539 | "shadow_color": [0, 0, 0, 0], 540 | "shadow_offset": [0, 1] 541 | }, 542 | 543 | { 544 | "class": "sidebar_label", 545 | "parents": [{"class": "tree_row", "attributes": ["hover"]}], 546 | "color": [175, 189, 196], 547 | "shadow_color": [0, 0, 0, 0], 548 | "shadow_offset": [0, 1] 549 | }, 550 | 551 | { 552 | "class": "sidebar_label", 553 | "parents": [{"class": "tree_row", "attributes": ["selected"]}], 554 | "font.bold": false, 555 | "color": [255, 255, 255] 556 | }, 557 | 558 | { 559 | "class": "sidebar_label", 560 | "parents": [{"class": "tree_row", "attributes": ["expandable"]}], 561 | "color": [175, 189, 196] 562 | }, 563 | 564 | { 565 | "class": "sidebar_label", 566 | "parents": [{"class": "tree_row", "attributes": ["expandable"]}], 567 | "settings": ["bold_folder_labels"], 568 | "font.bold": true, 569 | }, 570 | 571 | { 572 | "class": "sidebar_label", 573 | "parents": [{"class": "tree_row", "attributes": ["expanded"]}], 574 | "color": [128, 203, 196] 575 | }, 576 | 577 | { 578 | "class": "sidebar_label", 579 | "parents": [{"class": "tree_row", "attributes": ["expanded"]}], 580 | "settings": ["bold_folder_labels"], 581 | "font.bold": true 582 | }, 583 | 584 | { 585 | "class": "sidebar_label", 586 | "attributes": ["transient"], 587 | "font.italic": false 588 | }, 589 | 590 | // File icons and folder 591 | 592 | { 593 | "class": "icon_file_type", 594 | // layer0.texture is filled in by code with the relevant icon name 595 | "layer0.opacity": 0.6, 596 | "content_margin": [9, 9] 597 | }, 598 | { 599 | "class": "icon_file_type", 600 | "parents": [{"class": "tree_row", "attributes": ["selected"]}], 601 | "layer0.opacity": 1, 602 | "content_margin": [9, 9] 603 | }, 604 | 605 | // Secondary folder icon (original) used as main folder icon 606 | 607 | { 608 | "class": "icon_folder", 609 | "content_margin": [13, 8], 610 | "layer0.tint": [38, 50, 56], 611 | "layer0.opacity": 0, 612 | "layer1.texture": "Material Theme/assets/darker/folder.png", 613 | "layer1.opacity": 1, 614 | "layer2.texture": "Material Theme/assets/commons/folder--hover.png", 615 | "layer2.opacity": 0.0, 616 | "layer3.texture": "Material Theme/assets/commons/folder_opened--hover.png", 617 | "layer3.opacity": 0.0, 618 | }, 619 | 620 | { 621 | "class": "icon_folder", 622 | "parents": 623 | [ 624 | { "class": "tree_row", "attributes": ["expanded"] } 625 | ], 626 | "layer1.opacity": 0.0, 627 | "layer2.opacity": 0.0, 628 | "layer3.opacity": 1.0, 629 | }, 630 | 631 | { 632 | "class": "icon_folder", 633 | "parents": 634 | [ 635 | { "class": "tree_row", "attributes": ["hover"] } 636 | ], 637 | "layer1.opacity": 0.0, 638 | "layer2.opacity": 1.0, 639 | "layer3.opacity": 0.0, 640 | }, 641 | 642 | { 643 | "class": "icon_folder", 644 | "parents": 645 | [ 646 | { "class": "tree_row", "attributes": ["expanded", "hover"] } 647 | ], 648 | "layer3.texture": 649 | { 650 | "keyframes": 651 | [ 652 | "Material Theme/assets/commons/folder_opened--hover-0.png", 653 | "Material Theme/assets/commons/folder_opened--hover-1.png", 654 | "Material Theme/assets/commons/folder_opened--hover-2.png", 655 | "Material Theme/assets/commons/folder_opened--hover-3.png", 656 | "Material Theme/assets/commons/folder_opened--hover-4.png", 657 | "Material Theme/assets/commons/folder_opened--hover-5.png", 658 | "Material Theme/assets/commons/folder_opened--hover-5.png", 659 | "Material Theme/assets/commons/folder_opened--hover-5.png", 660 | "Material Theme/assets/commons/folder_opened--hover-6.png", 661 | "Material Theme/assets/commons/folder_opened--hover-6.png", 662 | "Material Theme/assets/commons/folder_opened--hover-6.png", 663 | "Material Theme/assets/commons/folder_opened--hover-6.png", 664 | "Material Theme/assets/commons/folder_opened--hover-7.png", 665 | ], 666 | "loop": false, 667 | "frame_time": 0.020, 668 | }, 669 | "layer1.opacity": 0.0, 670 | "layer2.opacity": 0.0, 671 | "layer3.opacity": 1.0, 672 | }, 673 | 674 | // Folder loading 675 | 676 | { 677 | "class": "icon_folder_loading", 678 | "layer1.texture": 679 | { 680 | "keyframes": 681 | [ 682 | "Material Theme/assets/commons/spinner7.png", 683 | "Material Theme/assets/commons/spinner6.png", 684 | "Material Theme/assets/commons/spinner5.png", 685 | "Material Theme/assets/commons/spinner4.png", 686 | "Material Theme/assets/commons/spinner3.png", 687 | "Material Theme/assets/commons/spinner2.png", 688 | "Material Theme/assets/commons/spinner1.png", 689 | "Material Theme/assets/commons/spinner.png", 690 | ], 691 | "loop": true, 692 | "frame_time": 0.075, 693 | }, 694 | 695 | "layer0.opacity": 0.0, 696 | "content_margin": [8, 8] 697 | }, 698 | 699 | // Symlink folder icon 700 | 701 | { 702 | "class": "icon_folder_dup", 703 | "layer0.texture": "Material Theme/assets/darker/folder_dup.png", 704 | "layer0.opacity": 1.0, 705 | "content_margin": [13, 8] 706 | }, 707 | 708 | { 709 | "class": "icon_folder_dup", 710 | "parents": 711 | [{ "class": "tree_row", "attributes": ["hover"] }], 712 | "layer0.texture": "Material Theme/assets/commons/folder_dup--hover.png" 713 | }, 714 | 715 | { 716 | "class": "icon_folder_dup", 717 | "parents": [{"class": "tree_row", "attributes": ["expanded"] }], 718 | "layer0.texture": "Material Theme/assets/commons/folder_dup--hover.png" 719 | }, 720 | 721 | // Hidden arrow icon before folder 722 | 723 | { 724 | "class": "disclosure_button_control", 725 | "layer0.texture": "Material Theme/assets/commons/folder.png", 726 | "layer0.opacity": 1.0, 727 | "layer0.inner_margin": 0, 728 | "layer1.texture": "Material Theme/assets/commons/folder--hover.png", 729 | "layer1.opacity": 0.0, 730 | "layer1.inner_margin": 0, 731 | "content_margin": [0, 0, 0, 0] 732 | }, 733 | 734 | { 735 | "class": "disclosure_button_control", 736 | "parents": 737 | [ 738 | { "class": "tree_row", "attributes": ["hover"] } 739 | ], 740 | "layer0.opacity": 0.0, 741 | "layer1.opacity": 1.0 742 | }, 743 | 744 | { 745 | "class": "disclosure_button_control", 746 | "attributes": ["expanded"], 747 | "layer0.texture": "Material Theme/assets/commons/folder_opened--hover.png", 748 | }, 749 | 750 | { 751 | "class": "tree_row", 752 | "layer0.tint": [33, 33, 33], 753 | "layer0.opacity": 0.0, 754 | "layer0.inner_margin": [1, 1] 755 | }, 756 | 757 | { 758 | "class": "tree_row", 759 | "attributes": ["selected"], 760 | "layer0.opacity": 1 761 | }, 762 | // Opened files 763 | { 764 | "class": "close_button", 765 | "content_margin": [8, 8], 766 | 767 | // Default Close icon 768 | "layer0.texture": "Material Theme/assets/darker/close_icon.png", 769 | "layer0.opacity": 1, 770 | "layer0.inner_margin": [0,0], 771 | 772 | // Hover close icon 773 | "layer1.texture": "Material Theme/assets/commons/close_icon--hover.png", 774 | "layer1.opacity": 0, 775 | "layer1.inner_margin": [0,0], 776 | }, 777 | 778 | { 779 | "class": "close_button", 780 | "attributes": ["dirty"], 781 | "layer0.texture": "Material Theme/assets/commons/dirty_icon--hover.png" 782 | }, 783 | 784 | { 785 | "class": "close_button", 786 | "attributes": ["hover"], 787 | "layer0.opacity": 0, 788 | "layer1.opacity": 1.0 789 | }, 790 | 791 | 792 | /* @ SCROLLBARS 793 | * Scrollbars settings and behavioring 794 | ========================================================================= */ 795 | 796 | // Normal Vertical scrollbar track 797 | 798 | { 799 | "class": "scroll_bar_control", 800 | "layer0.texture": "Material Theme/assets/darker/normal_bar_vertical.png", 801 | "layer0.opacity": 1.0, 802 | "layer0.inner_margin": [0, 6], 803 | "blur": false 804 | }, 805 | 806 | // Normal Vertical scrollbar track inside overlay panel 807 | 808 | { 809 | "class": "scroll_bar_control", 810 | "parents": [{"class": "overlay_control"}], 811 | "layer0.tint": [38, 50, 56, 0], 812 | "layer0.opacity": 1.0, 813 | "layer0.inner_margin": [0, 6], 814 | "blur": false 815 | }, 816 | 817 | // Normal horizontal scrollbar track 818 | 819 | { 820 | "class": "scroll_bar_control", 821 | "attributes": ["horizontal"], 822 | "layer0.texture": "Material Theme/assets/darker/normal_bar_horizontal.png", 823 | "layer0.opacity": 1.0, 824 | "layer0.inner_margin": [6, 0], 825 | "blur": false 826 | }, 827 | 828 | // Normal horizontal scrollbar track inside overlay panel 829 | 830 | { 831 | "class": "scroll_bar_control", 832 | "attributes": ["horizontal"], 833 | "parents": [{"class": "overlay_control"}], 834 | "layer0.tint": [38, 50, 56, 0], 835 | "layer0.opacity": 0.0, 836 | "layer0.inner_margin": [0, 2], 837 | "blur": false 838 | }, 839 | 840 | // Scrollbars corner 841 | 842 | { 843 | "class": "scroll_corner_control", 844 | "layer0.texture": "Material Theme/assets/darker/normal_bar_corner.png", 845 | "layer0.opacity": 1.0, 846 | "layer0.inner_margin": [1, 1] 847 | }, 848 | 849 | // Vertical puck controller 850 | 851 | { 852 | "class": "puck_control", 853 | "layer0.tint": [38, 50, 255, 255], 854 | "layer0.opacity": 1.0, 855 | "layer0.inner_margin": [10, 10], 856 | "layer1.texture": "Material Theme/assets/darker/thumb_vertical.png", 857 | "layer1.opacity": 1.0, 858 | "layer1.inner_margin": [8, 8], 859 | "content_margin": [6, 16], 860 | "blur": false 861 | }, 862 | 863 | // Horizontal puck controller 864 | 865 | { 866 | "class": "puck_control", 867 | "attributes": ["horizontal"], 868 | "layer0.texture": "Material Theme/assets/darker/thumb_horizontal.png", 869 | "layer0.opacity": 1.0, 870 | "layer0.inner_margin": [10, 0], 871 | "content_margin": [16, 6], 872 | "blur": false 873 | }, 874 | 875 | { 876 | "class": "scroll_area_control", 877 | "settings": ["overlay_scroll_bars"], 878 | "overlay": true 879 | }, 880 | 881 | { 882 | "class": "scroll_area_control", 883 | "settings": ["!overlay_scroll_bars"], 884 | "overlay": false // set to false for the original behavior 885 | }, 886 | 887 | 888 | { 889 | "class": "scroll_area_control", 890 | "parents": [{"class": "overlay_control"}], 891 | "settings": ["overlay_scroll_bars"], 892 | "overlay": true // set to false for the original behavior 893 | }, 894 | 895 | { 896 | "class": "scroll_area_control", 897 | "parents": [{"class": "sidebar_container"}], 898 | "settings": ["!overlay_scroll_bars"], 899 | "overlay": false // set to false for the original behavior 900 | }, 901 | 902 | { 903 | "class": "scroll_bar_control", 904 | "settings": ["overlay_scroll_bars"], 905 | "layer0.texture": "Material Theme/assets/darker/normal_bar_vertical.png", 906 | "layer0.inner_margin": [0, 5], 907 | "blur": true 908 | }, 909 | 910 | { 911 | "class": "scroll_bar_control", 912 | "settings": ["overlay_scroll_bars"], 913 | "attributes": ["horizontal"], 914 | "layer0.texture": "Material Theme/assets/darker/overlay_bar_horizontal.png", 915 | "layer0.inner_margin": [5, 0], 916 | "layer0.opacity": 0.0, 917 | "layer1.texture": "Material Theme/assets/darker/overlay_bar_horizontal.png", 918 | "layer1.inner_margin": [5, 0], 919 | "layer1.opacity": 0.0, 920 | "blur": true 921 | }, 922 | 923 | { 924 | "class": "puck_control", 925 | "layer0.tint": [38, 50, 56], 926 | "layer0.opacity": 0.0, 927 | "layer0.inner_margin": [1, 8, 1, 8], 928 | "layer1.texture": "Material Theme/assets/darker/thumb_vertical.png", 929 | "layer1.inner_margin": [1, 8, 1, 8], 930 | "content_margin": [6, 16], 931 | "blur": true 932 | }, 933 | 934 | { 935 | "class": "puck_control", 936 | "attributes": ["horizontal"], 937 | "layer0.tint": [38, 50, 56], 938 | "layer0.opacity": 0.0, 939 | "layer0.inner_margin": [8, 1, 8, 1], 940 | "layer1.texture": "Material Theme/assets/darker/thumb_horizontal.png", 941 | "layer1.inner_margin": [8, 1, 8, 1], 942 | "content_margin": [16, 6], 943 | "blur": true 944 | }, 945 | 946 | 947 | /* @MINIMAP 948 | * Minimap settings and behavioring 949 | ========================================================================= */ 950 | 951 | 952 | { 953 | "class": "minimap_control", 954 | "settings": ["always_show_minimap_viewport"], 955 | "viewport_color": [255, 255, 255, 50], 956 | "viewport_opacity": 0.4, 957 | }, 958 | 959 | { 960 | "class": "minimap_control", 961 | "settings": ["!always_show_minimap_viewport"], 962 | "viewport_color": [128, 203, 196, 50], 963 | "viewport_opacity": { "target": 0.0, "speed": 4.0, "interpolation": "smoothstep" }, 964 | }, 965 | { 966 | "class": "minimap_control", 967 | "attributes": ["hover"], 968 | "settings": ["!always_show_minimap_viewport"], 969 | "viewport_opacity": { "target": 0.4, "speed": 20.0, "interpolation": "smoothstep" }, 970 | }, 971 | 972 | 973 | /* @STATUS BAR 974 | * Status bar settings and behavioring 975 | ========================================================================= */ 976 | 977 | // All labels 978 | 979 | { 980 | "class": "label_control", 981 | "color": [176, 190, 197], 982 | "shadow_color": [24, 24, 24, 0], 983 | "shadow_offset": [0, 0], 984 | "font.bold": true 985 | }, 986 | 987 | // Status bar labels 988 | 989 | { 990 | "class": "label_control", 991 | "parents": [{"class": "status_bar"}], 992 | "color": [66, 66, 66], 993 | "font.bold": false 994 | }, 995 | 996 | // Text field labels 997 | 998 | { 999 | "class": "status_bar", 1000 | 1001 | // Layer 0 base 1002 | "layer0.tint": [33, 33, 33], 1003 | "layer0.opacity": 1.0, 1004 | "layer0.inner_margin": [2, 2], 1005 | 1006 | // Visible tint layer 1007 | "layer1.tint": [33, 33, 33], 1008 | "layer1.opacity": 1.0, 1009 | "layer1.inner_margin": [2, 2], 1010 | 1011 | "content_margin": [0, 0] 1012 | }, 1013 | { 1014 | "class": "status_container", 1015 | "content_margin": [24, 12, 24, 12], 1016 | }, 1017 | { 1018 | "class": "status_button", 1019 | "layer0.tint": [33, 33, 33], 1020 | "layer0.opacity": 1.0, 1021 | "layer0.draw_center": false, 1022 | "layer0.inner_margin": [1, 0, 0, 0], 1023 | "content_margin": [10, 2, 10, 3], 1024 | "min_size": [75, 0] 1025 | }, 1026 | { 1027 | "class": "status_button", 1028 | "layer0.tint": [33, 33, 33], 1029 | "layer0.opacity": 1.0, 1030 | "layer0.draw_center": false, 1031 | "layer0.inner_margin": [1, 0, 0, 0], 1032 | "content_margin": [10, 2, 10, 3], 1033 | "min_size": [75, 0], 1034 | }, 1035 | 1036 | 1037 | /* @WIDGET PANEL 1038 | * Widget, input, buttons settings and behavioring 1039 | ========================================================================= */ 1040 | 1041 | 1042 | // Status bar panel 1043 | { 1044 | "class": "panel_control", 1045 | "layer0.tint": [33, 33, 33], 1046 | "layer0.inner_margin": [2, 2, 2, 2], 1047 | "layer0.opacity": 1.0, 1048 | "layer1.tint": [33, 33, 33], 1049 | "layer1.inner_margin": [2, 2, 2, 2], 1050 | "layer1.opacity": 1.0, 1051 | "content_margin": [6, 14, 6, 8], 1052 | }, 1053 | 1054 | // Status bar panel close icon 1055 | 1056 | { 1057 | "class": "panel_close_button", 1058 | "layer0.texture": "Material Theme/assets/darker/close_icon.png", 1059 | "layer0.opacity": 0.6, 1060 | "layer1.texture": "Material Theme/assets/commons/close_icon--hover.png", 1061 | "layer1.opacity": 0.0, 1062 | "content_margin": [0, 0] // 8,8 to show 1063 | }, 1064 | 1065 | { 1066 | "class": "panel_close_button", 1067 | "attributes": ["hover"], 1068 | "layer0.opacity": 0.0, 1069 | "layer1.opacity": 1.0, 1070 | }, 1071 | 1072 | // Texline input 1073 | 1074 | { 1075 | "class": "text_line_control", 1076 | "layer0.texture": "Material Theme/assets/darker/input_field_border.png", 1077 | "layer0.opacity": 1.0, 1078 | "layer0.inner_margin": [20, 5, 20, 5], 1079 | "tint_index": 1, 1080 | "content_margin": [24, 8, 13, 8] 1081 | }, 1082 | 1083 | 1084 | // Textline input inside overlay panels 1085 | 1086 | { 1087 | "class": "text_line_control", 1088 | "parents": [{"class": "overlay_control"}], 1089 | "layer0.texture": "Material Theme/assets/darker/input_field_border--short.png", 1090 | "layer0.opacity": 1.0, 1091 | "layer0.inner_margin": [32, 2, 32, 2], 1092 | "layer0.draw_center": true, 1093 | 1094 | "content_margin": [32, 8, 32, 8] 1095 | }, 1096 | 1097 | // Textline input oveflow menu 1098 | 1099 | { 1100 | "class": "dropdown_button_control", 1101 | "content_margin": [12, 12], 1102 | "layer0.texture": "Material Theme/assets/darker/overflow_menu.png", 1103 | "layer0.opacity": 1.0, 1104 | "layer0.inner_margin": [0, 0], 1105 | "layer1.texture": "Material Theme/assets/commons/overflow_menu--hover.png", 1106 | "layer1.opacity": 0.0, 1107 | "layer1.inner_margin": [0, 0], 1108 | }, 1109 | { 1110 | "class": "dropdown_button_control", 1111 | "attributes": ["hover"], 1112 | "layer1.opacity": 1.0 1113 | }, 1114 | 1115 | 1116 | /* @BUTTONS 1117 | * Buttons panels settings and behavioring 1118 | ========================================================================= */ 1119 | 1120 | 1121 | // Button labels 1122 | 1123 | { 1124 | "class": "label_control", 1125 | "parents": [{"class": "button_control"}], 1126 | "color": [176, 190, 196], 1127 | "font.bold": true 1128 | }, 1129 | 1130 | { 1131 | "class": "button_control", 1132 | "content_margin": [6, 12, 6, 12], 1133 | "min_size": [75, 0], 1134 | "layer0.tint": [33, 33, 33], 1135 | "layer0.opacity": 0.0, 1136 | "layer0.inner_margin": [6, 6], 1137 | "layer1.texture": "Material Theme/assets/commons/full_button_indented.png", 1138 | "layer1.opacity": 0.0, 1139 | "layer1.inner_margin": [6, 6], 1140 | "layer2.texture": "Material Theme/assets/darker/blue_highlight.png", 1141 | "layer2.opacity": { "target": 0.0, "speed": 2.0, "interpolation": "smoothstep" }, 1142 | "layer2.inner_margin": [6, 6] 1143 | }, 1144 | { 1145 | "class": "button_control", 1146 | "attributes": ["pressed"], 1147 | "layer0.opacity": 0, 1148 | "layer2.opacity": 1.0 1149 | }, 1150 | { 1151 | "class": "button_control", 1152 | "attributes": ["pressed", "hover"], 1153 | "layer2.opacity": 0.0 1154 | }, 1155 | { 1156 | "class": "button_control", 1157 | "attributes": ["hover"], 1158 | "layer2.opacity": 1.0 1159 | }, 1160 | 1161 | // Small Icon Buttons 1162 | { 1163 | "class": "icon_button_control", 1164 | "layer0.tint": [33, 33, 33], 1165 | "layer0.inner_margin": [6, 6], 1166 | "layer0.opacity": 0.0, 1167 | "layer2.tint": [255, 255, 255], 1168 | "layer2.opacity": { "target": 0.0, "speed": 10.0, "interpolation": "smoothstep" }, 1169 | "content_margin": [10, 6] 1170 | }, 1171 | 1172 | 1173 | /* Buttons icons settings 1174 | ===================================================================== */ 1175 | 1176 | // Regex Icon 1177 | { 1178 | "class": "icon_regex", 1179 | "layer0.texture": "Material Theme/assets/commons/find_regex--hover.png", 1180 | "layer0.opacity": { "target": 0.2, "speed": 6.0, "interpolation": "smoothstep" }, 1181 | "content_margin": [12, 12] 1182 | }, 1183 | 1184 | { 1185 | "class": "icon_regex", 1186 | "parents": [{"class": "icon_button_control", "attributes": ["selected"]}], 1187 | "layer0.opacity": { "target": 1.0, "speed": 6.0, "interpolation": "smoothstep" } 1188 | }, 1189 | 1190 | // Preserve case sensitive 1191 | 1192 | { 1193 | "class": "icon_case", 1194 | "layer0.texture": "Material Theme/assets/commons/find_case--hover.png", 1195 | "layer0.opacity": { "target": 0.2, "speed": 6.0, "interpolation": "smoothstep" }, 1196 | "content_margin": [12, 12] 1197 | }, 1198 | 1199 | { 1200 | "class": "icon_case", 1201 | "parents": [{"class": "icon_button_control", "attributes": ["selected"]}], 1202 | "layer0.opacity": { "target": 1.0, "speed": 6.0, "interpolation": "smoothstep" } 1203 | }, 1204 | 1205 | // Wholeword 1206 | 1207 | { 1208 | "class": "icon_whole_word", 1209 | "layer0.texture": "Material Theme/assets/commons/find_word--hover.png", 1210 | "layer0.opacity": { "target": 0.2, "speed": 6.0, "interpolation": "smoothstep" }, 1211 | "content_margin": [12, 12] 1212 | }, 1213 | 1214 | 1215 | { 1216 | "class": "icon_whole_word", 1217 | "parents": [{"class": "icon_button_control", "attributes": ["selected"]}], 1218 | "layer0.opacity": { "target": 1.0, "speed": 6.0, "interpolation": "smoothstep" } 1219 | }, 1220 | 1221 | // Wrap 1222 | 1223 | { 1224 | "class": "icon_wrap", 1225 | "layer0.texture": "Material Theme/assets/commons/find_wrap--hover.png", 1226 | "layer0.opacity": { "target": 0.2, "speed": 6.0, "interpolation": "smoothstep" }, 1227 | "content_margin": [12, 12] 1228 | }, 1229 | 1230 | { 1231 | "class": "icon_wrap", 1232 | "parents": [{"class": "icon_button_control", "attributes": ["selected"]}], 1233 | "layer0.opacity": { "target": 1.0, "speed": 6.0, "interpolation": "smoothstep" } 1234 | }, 1235 | 1236 | // In selection 1237 | 1238 | { 1239 | "class": "icon_in_selection", 1240 | "layer0.texture": "Material Theme/assets/commons/find_inselection--hover.png", 1241 | "layer0.opacity": { "target": 0.2, "speed": 6.0, "interpolation": "smoothstep" }, 1242 | "content_margin": [12,12] 1243 | }, 1244 | 1245 | 1246 | { 1247 | "class": "icon_in_selection", 1248 | "parents": [{"class": "icon_button_control", "attributes": ["selected"]}], 1249 | "layer0.opacity": { "target": 1.0, "speed": 6.0, "interpolation": "smoothstep" } 1250 | }, 1251 | 1252 | // Highlight Result 1253 | 1254 | { 1255 | "class": "icon_highlight", 1256 | "layer0.texture": "Material Theme/assets/commons/find_highlight--hover.png", 1257 | "layer0.opacity": { "target": 0.2, "speed": 6.0, "interpolation": "smoothstep" }, 1258 | "content_margin": [12, 12] 1259 | }, 1260 | 1261 | { 1262 | "class": "icon_highlight", 1263 | "parents": [{"class": "icon_button_control", "attributes": ["selected"]}], 1264 | "layer0.opacity": { "target": 1.0, "speed": 6.0, "interpolation": "smoothstep" } 1265 | }, 1266 | 1267 | // Preserve Case 1268 | 1269 | { 1270 | "class": "icon_preserve_case", 1271 | "layer0.texture": "Material Theme/assets/commons/replace_preserve_case--hover.png", 1272 | "layer0.opacity": { "target": 0.2, "speed": 6.0, "interpolation": "smoothstep" }, 1273 | "content_margin": [12, 12] 1274 | }, 1275 | 1276 | { 1277 | "class": "icon_preserve_case", 1278 | "parents": [{"class": "icon_button_control", "attributes": ["selected"]}], 1279 | "layer0.opacity": { "target": 1.0, "speed": 6.0, "interpolation": "smoothstep" } 1280 | }, 1281 | 1282 | // Show context 1283 | 1284 | { 1285 | "class": "icon_context", 1286 | "layer0.texture": "Material Theme/assets/commons/find_context--hover.png", 1287 | "layer0.opacity": { "target": 0.2, "speed": 6.0, "interpolation": "smoothstep" }, 1288 | "content_margin": [12, 12] 1289 | }, 1290 | 1291 | 1292 | { 1293 | "class": "icon_context", 1294 | "parents": [{"class": "icon_button_control", "attributes": ["selected"]}], 1295 | "layer0.opacity": { "target": 1.0, "speed": 6.0, "interpolation": "smoothstep" } 1296 | }, 1297 | 1298 | // Use buffer 1299 | 1300 | { 1301 | "class": "icon_use_buffer", 1302 | "layer0.texture": "Material Theme/assets/commons/use_buffer--hover.png", 1303 | "layer0.opacity": { "target": 0.2, "speed": 6.0, "interpolation": "smoothstep" }, 1304 | "content_margin": [12, 12] 1305 | }, 1306 | 1307 | { 1308 | "class": "icon_use_buffer", 1309 | "parents": [{"class": "icon_button_control", "attributes": ["selected"]}], 1310 | "layer0.opacity": { "target": 1.0, "speed": 6.0, "interpolation": "smoothstep" } 1311 | }, 1312 | 1313 | // Reverse direction 1314 | 1315 | { 1316 | "class": "icon_reverse", 1317 | "layer0.texture": "Material Theme/assets/commons/find_reverse--hover.png", 1318 | "layer0.opacity": { "target": 0.2, "speed": 6.0, "interpolation": "smoothstep" }, 1319 | "content_margin": [12, 12] 1320 | }, 1321 | 1322 | { 1323 | "class": "icon_reverse", 1324 | "parents": [{"class": "icon_button_control", "attributes": ["selected"]}], 1325 | "layer0.opacity": { "target": 1.0, "speed": 6.0, "interpolation": "smoothstep" } 1326 | }, 1327 | 1328 | 1329 | /* @ THEME OPTIONS 1330 | * Options override 1331 | ========================================================================= */ 1332 | 1333 | // Tabs size () 1334 | 1335 | { 1336 | "class": "tabset_control", 1337 | "settings": ["material_theme_small_tab"], 1338 | "tab_height": 36, 1339 | "content_margin": [12, -4, 8, 0] 1340 | }, 1341 | 1342 | { 1343 | "class": "tab_control", 1344 | "settings": ["material_theme_small_tab"], 1345 | "content_margin": [12, 8, 6, 4], 1346 | }, 1347 | 1348 | // Filetype icons in sidebar 1349 | 1350 | { 1351 | "class": "icon_file_type", 1352 | "settings": ["material_theme_disable_fileicons"], 1353 | "layer0.opacity": 0, 1354 | "content_margin": [0, 0] 1355 | }, 1356 | 1357 | // Folder animation 1358 | 1359 | { 1360 | "class": "icon_folder", 1361 | "settings": ["material_theme_disable_folder_animation"], 1362 | "parents": [{ "class": "tree_row", "attributes": ["expanded", "hover"] }], 1363 | "layer1.opacity": 0.0, 1364 | "layer2.opacity": 0.0, 1365 | "layer3.texture": "Material Theme/assets/commons/folder--hover.png", 1366 | }, 1367 | 1368 | // Small status bar 1369 | 1370 | { 1371 | "class": "status_container", 1372 | "settings": ["material_theme_small_statusbar"], 1373 | "content_margin": [12, 6, 12, 6], 1374 | }, 1375 | 1376 | ] -------------------------------------------------------------------------------- /SublimeText/Preferences.sublime-settings: -------------------------------------------------------------------------------- 1 | { 2 | "added_words": 3 | [ 4 | "enablement" 5 | ], 6 | "bold_folder_labels": true, 7 | "caret_extra_bottom": 2, 8 | "caret_extra_top": 2, 9 | "caret_extra_width": 2, 10 | "color_scheme": "Packages/User/SublimeLinter/Asphalt (SL).tmTheme", 11 | "font_face": "Input Mono", 12 | "font_options": 13 | [ 14 | "gray_antialias" 15 | ], 16 | "font_size": 15, 17 | "highlight_line": true, 18 | "highlight_modified_tabs": true, 19 | "ignored_packages": 20 | [ 21 | "Vintage", 22 | "Markdown" 23 | ], 24 | "indent_guide_options": 25 | [ 26 | "draw_normal", 27 | "draw_active" 28 | ], 29 | "line_padding_bottom": 1, 30 | "line_padding_top": 1, 31 | "match_brackets": true, 32 | "match_brackets_angle": true, 33 | "match_brackets_braces": true, 34 | "match_brackets_content": true, 35 | "match_brackets_square": true, 36 | "tab_size": 2, 37 | "theme": "Material-Theme-Darker.sublime-theme", 38 | "translate_tabs_to_spaces": true, 39 | "trim_trailing_white_space_on_save": true, 40 | "word_wrap": true, 41 | } 42 | -------------------------------------------------------------------------------- /SublimeText/sublime-plugins.md: -------------------------------------------------------------------------------- 1 | My Sublime Text (3) Plugins: 2 | 3 | To quickly install packages, first download and install [Package Control](http://packagecontrol.io) 4 | 5 | - [AutoFileName](https://packagecontrol.io/packages/AutoFileName): Auto-completions for files in the project system 6 | - [Bracket Highlighter](https://packagecontrol.io/packages/BracketHighlighter): Shows where an enclosed block of code starts and ends 7 | - [ColorPicker](https://packagecontrol.io/packages/ColorPicker): Allows you to choose colors within the text editor 8 | - [Emmet](https://packagecontrol.io/packages/Emmet): Quick snippets and code shortcuts for rapid development 9 | - [Emmet CSS Snippets](https://packagecontrol.io/packages/Emmet%20Css%20Snippets): CSS extension for Emmet shortcuts 10 | - [JavaScript Snippets](https://packagecontrol.io/packages/JavaScript%20Snippets): Helps you to write your scripts more quickly with snippets 11 | - [Markdown Preview](https://packagecontrol.io/packages/Markdown%20Preview): For previewing markdown in browser from Sublime 12 | - [Sass Syntax Highlighter](https://packagecontrol.io/packages/Syntax%20Highlighting%20for%20Sass): Sass syntax color highlighting 13 | - [Semi](https://packagecontrol.io/packages/Semi): Automatic semicolon completion (requires [SublimeLinter](https://packagecontrol.io/packages/SublimeLinter)) 14 | - [Sidebar Enhancements](https://packagecontrol.io/packages/SideBarEnhancements): Helps differentiate sidebar content from folders 15 | - [SublimeLinter](https://packagecontrol.io/packages/SublimeLinter): Code linting in the editor (also install syntax-specific package add-ons, i.e. [Sass linting](https://packagecontrol.io/packages/SublimeLinter-contrib-scss-lint) & [JS](https://packagecontrol.io/packages/SublimeLinter-contrib-jslint)) 16 | - [Material Theme](http://equinusocio.github.io/material-theme/): Makes the sidebar nicer 17 | - [Package Resource Viewer](https://packagecontrol.io/packages/PackageResourceViewer): Find package assets for editing 18 | - [Trailing Spaces](https://packagecontrol.io/packages/TrailingSpaces) 19 | - [Seti UI](https://packagecontrol.io/packages/TrailingSpaces) 20 | - [StringEncode](https://github.com/colinta/SublimeStringEncode) -------------------------------------------------------------------------------- /applications.md: -------------------------------------------------------------------------------- 1 | # Applications 2 | 3 | ## Workspace 4 | 5 | - Sublime Text 3 6 | - Spectacle 7 | - Cloudup 8 | - Duet Display 9 | - MAMP 10 | - Lightblue 11 | - Arduino 12 | - Self Control 13 | - Monotype Skyfonts 14 | - Sip 15 | 16 | ## Social 17 | 18 | - Slack 19 | - Skype 20 | 21 | ## Music 22 | 23 | - Spotify 24 | 25 | ## Writing 26 | 27 | - Evernote 28 | - MacDown 29 | 30 | ## File Management 31 | 32 | - Google Drive 33 | - FileZilla 34 | 35 | ## Performance 36 | 37 | - ImageAlpha 38 | - ImageOptim 39 | 40 | ## Creative 41 | 42 | - Adobe Creative Cloud 43 | - IPEVO Presenter 44 | - LiceCap 45 | - Sketch 46 | 47 | ## Browsers 48 | 49 | - Firefox 50 | - Firefox Developer Edition 51 | - Chrome 52 | - Chrome Canary 53 | - Webkit Nightly -------------------------------------------------------------------------------- /sublime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/una/dotfiles/ec566c008303140d4d4ced480245b48bd615e337/sublime.png --------------------------------------------------------------------------------