Massive configuration overhaul

Currently paying the price of months of non-diligent git usage.

Here's what has changed.

- Theming support in Gvcci and wpgtk
- Dropping support for i3
- Supporting EXWM
- Many Elisp modules
- Collapsed redundant directories in ./configs
This commit is contained in:
William Carroll 2019-10-09 12:13:56 +01:00
parent a7c72adb2e
commit 6b456c1b7a
551 changed files with 88587 additions and 1392 deletions

View file

@ -1,24 +0,0 @@
# shadow
shadow = true;
shadow-radius = 7;
shadow-offset-x = -7;
shadow-offset-y = -7;
# opacity
menu-opacity = 0.8;
inactive-opacity = 0.8;
# transitions
fading = true;
fade-in-step = 0.07;
fade-out-step = 0.07;
# lock screen
# NOTE: Need this rule here because I set XSECURELOCK_NO_COMPOSITE=1 in
# ~/.profile. Without this, the lock screen will adopt the opacity settings
# above, which is a security risk if you lock your screen while it has sensitive
# content on it.
#
# NOTE: For some reason, `100:class_g` doesn't work, so settling for
# `99:class_g` instead.
opacity-rule = [ "99:class_g = 'xsecurelock'" ];

View file

@ -1,279 +0,0 @@
# Keymapping philosophy:
# When I feel it's appropriate, I try to borrow existing KBDs from OSX or
# Windows. For example, I use Ctrl+Alt+Del to start the screen lock, since this
# is a really well-known KBD. One notable difference is that when I'm borrowing
# OSX KBDs, I prefer using Alt instead of Super since the keyboard that I'm
# using has the Alt key in the same location as the Super key on my mac
# keyboard. I could rebind this, and I just may. But for now, that's worth
# pointing out.
# The reason behind borrowing from Windows and OSX is that some of these
# keybindings are hardwired into my muscle memory. I also tend to work between
# Linux and OSX quite often. Since OSX is much more difficult to remap KBDs
# than it is in Linux, I prefer to support the OSX KBDs to reduce the number of
# KBDs my feeble memory needs to store.
set $mod Mod1
set $super Mod4
# Font for window titles. Will also be used by the bar unless a different font
# is used in the bar {} block below.
font pango:monospace 8
# Use Mouse+$mod to drag floating windows to their wanted position
floating_modifier $mod
# i3-gaps (depends on i3-gaps installation)
gaps inner 20
gaps outer 0
smart_gaps on
bindsym $mod+Ctrl+plus gaps outer current plus 5
bindsym $mod+Ctrl+minus gaps outer current minus 5
bindsym $mod+Shift+plus gaps inner current plus 5
bindsym $mod+Shift+minus gaps inner current minus 5
# KBD Principles:
# $mod+Ctrl+<app_char> = starting an application
# where <app_char> is a reserved character for a commonly used application.
#
# <app_char> definitions:
# terminal = t, Return
# emacs = e
# chrome = c
# spotify = s
# intellij = i
#
# Vertical
bindsym $mod+Ctrl+t exec st
bindsym $mod+Ctrl+Return exec st
bindsym $mod+Ctrl+e exec emacsclient --create-frame ~/programming
bindsym $mod+Ctrl+c exec google-chrome
bindsym $mod+Ctrl+s exec spotify
bindsym $mod+Ctrl+i exec zsh -i -c intellij
# support dmenu-based bookmarks
bindsym $mod+Ctrl+b exec dmenu <$DOTFILES/bookmarks.txt | xargs $BROWSER
bindsym $mod+Return exec st
# pass integration
bindsym $mod+Ctrl+backslash exec ~/.config/i3/passmenu # mirroring the 1password KBD
# integrate with Emacs's org-mode
bindsym $mod+o exec zsh -i -c org_capture
for_window [class="GoogleEmacs" instance="org-protocol-capture"] floating enable
# ensure Spotify windows float
for_window [class="Spotify"] floating enable
# ensure `lf` instances float
for_window [title="lf"] floating enable
# ensure wallpaper
exec --no-startup-id feh --bg-scale ~/.local/share/wallpaper/cartoon-outdoors.jpg
# ensure system service that run through XDG start
exec dex -ae i3
# dmenu configuration
bindsym $mod+space exec --no-startup-id dmenu_run
bindsym $mod+t exec --no-startup-id ~/.config/i3/dmenu_timer.sh ~/.local/share/sounds/gong.mp3
# file manager
bindsym $mod+n exec st -e lf ~/Dropbox
# clipboard manager
# NOTE: Ctrl-c is already covered since `clipmenu` listens for X clipboard
# events using `clipnotify`.
# NOTE: `clipmenud` is started in `.xsessionrc.shared`
# NOTE: This is a bit of a hack intended to support pasting in both the terminal
# and in GUI applications. `st` expects `ctrl+Shift+v` while GUIs expect
# `ctrl+v`. In the instances where GUIs don't support `ctrl+Shift+v` already, it
# acts like `ctrl+v`, so it should "just work".
bindsym Ctrl+$mod+v exec clipmenu && xdotool key --clearmodifiers ctrl+Shift+v
# Screenshot
# TODO: find a better KBD for this
bindsym $mod+s exec zsh -i -c snipit # note that this eclipses Tmux's M-s KBD for switching b/w session
bindsym Ctrl+Print exec scrot ~/Pictures/screenshots/%b-%d-%Y_%T.png # Windows style
# TODO: debug
# bindsym $mod+Print exec scrot --focused ~/Pictures/screenshots/%b-%d-%Y_%T.png # Windows style
# online documentation
bindsym $mod+Shift+slash exec google-chrome https://i3wm.org/docs/userguide.html
# no title bars
for_window [class="^.*"] border pixel 2
# disable mouse hover focus
focus_follows_mouse no
# kill focused window
bindsym $mod+q kill
# GTK Themes
exec --no-startup-id gnome-settings-daemon
# wireless selection mechanism
exec --no-startup-id nm-applet
# set the split direction
bindsym $mod+v split vertical
# cannot bind $mod+h because of movement commands
bindsym $mod+Shift+v split horizontal
# lock the screen (Window's famous Ctrl-Alt-Delete)
bindsym $mod+Ctrl+Delete exec xsecurelock
bindsym $mod+Shift+q exec xsecurelock
# sound applet
exec --no-startup-id gnome-sound-applet
# change focus
bindsym $mod+h focus left
bindsym $mod+j focus down
bindsym $mod+k focus up
bindsym $mod+l focus right
# move focused window
bindsym $mod+Shift+h move left 100
bindsym $mod+Shift+j move down 100
bindsym $mod+Shift+k move up 100
bindsym $mod+Shift+l move right 100
# enable duplicating the current window vertically or horizontally
# bindsym $mod+- split v exec terminator
# bindsym $mod+\ split h exec terminator
# enter fullscreen mode for the focused container
bindsym $mod+z fullscreen toggle
# change container layout (stacked, tabbed, toggle split)
bindsym $super+e layout toggle split
bindsym $super+s layout stacking
bindsym $super+t layout tabbed
# toggle tiling / floating
bindsym $mod+Shift+f floating toggle
# toggle stickiness
bindsym $mod+Shift+s sticky toggle
# change focus between tiling / floating windows
bindsym $mod+f focus mode_toggle
# focus the parent container
bindsym $mod+a focus parent
bindsym $mod+Shift+a focus child
# Define names for default workspaces for which we configure key bindings later on.
# We use variables to avoid repeating the names in multiple places.
set $ws1 "1"
set $ws2 "2"
set $ws3 "3"
set $ws4 "4"
set $ws5 "5"
set $ws6 "6"
set $ws7 "7"
set $ws8 "8"
set $ws9 "9"
set $ws10 "10"
# jump to workspace
bindsym $mod+1 workspace $ws1
bindsym $mod+2 workspace $ws2
bindsym $mod+3 workspace $ws3
bindsym $mod+4 workspace $ws4
bindsym $mod+5 workspace $ws5
bindsym $mod+6 workspace $ws6
bindsym $mod+7 workspace $ws7
bindsym $mod+8 workspace $ws8
bindsym $mod+9 workspace $ws9
bindsym $mod+0 workspace $ws10
# move and follow focused container to workspace
bindsym $mod+Shift+1 move container to workspace $ws1; workspace $ws1
bindsym $mod+Shift+2 move container to workspace $ws2; workspace $ws2
bindsym $mod+Shift+3 move container to workspace $ws3; workspace $ws3
bindsym $mod+Shift+4 move container to workspace $ws4; workspace $ws4
bindsym $mod+Shift+5 move container to workspace $ws5; workspace $ws5
bindsym $mod+Shift+6 move container to workspace $ws6; workspace $ws6
bindsym $mod+Shift+7 move container to workspace $ws7; workspace $ws7
bindsym $mod+Shift+8 move container to workspace $ws8; workspace $ws8
bindsym $mod+Shift+9 move container to workspace $ws9; workspace $ws9
bindsym $mod+Shift+0 move container to workspace $ws10; workspace $ws10
# move focused container to workspace
bindsym $mod+Ctrl+1 move container to workspace $ws1
bindsym $mod+Ctrl+2 move container to workspace $ws2
bindsym $mod+Ctrl+3 move container to workspace $ws3
bindsym $mod+Ctrl+4 move container to workspace $ws4
bindsym $mod+Ctrl+5 move container to workspace $ws5
bindsym $mod+Ctrl+6 move container to workspace $ws6
bindsym $mod+Ctrl+7 move container to workspace $ws7
bindsym $mod+Ctrl+8 move container to workspace $ws8
bindsym $mod+Ctrl+9 move container to workspace $ws9
bindsym $mod+Ctrl+0 move container to workspace $ws10
# reload, restart i3
bindsym $super+r exec cat ~/.config/i3/config.shared ~/.config/i3/config.device >~/.config/i3/config; reload
bindsym $super+Shift+r exec cat ~/.config/i3/config.shared ~/.config/i3/config.device >~/.config/i3/config; restart
# resize window (you can also use the mouse for that)
mode "resize" {
bindsym h resize shrink width 10 px or 10 ppt
bindsym j resize shrink height 10 px or 10 ppt
bindsym k resize grow height 10 px or 10 ppt
bindsym l resize grow width 10 px or 10 ppt
bindsym Return mode "default"
bindsym Caps_Lock mode "default"
bindsym $mod+Shift+r mode "default"
}
bindsym $mod+Shift+r mode "resize"
# passthrough mode to support Emacs, Tmux, Vim KBDs for window and pane management
mode "passthrough" {
bindsym $mod+Escape mode "default"
}
bindsym $mod+Escape mode "passthrough"
# Atom One Dark colors
set $black #1e2127
set $red #e06c75
set $green #98c379
set $yellow #d19a66
set $blue #61afef
set $magenta #c678dd
set $cyan #56b6c2
set $white #abb2bf
set $bright_black #5c6370
set $bright_red #e06c75
set $bright_green #98c379
set $bright_yellow #d19a66
set $bright_white #ffffff
set $bright_blue #61afef
set $bright_magenta #c678dd
set $bright_cyan #56b6c2
set $selection #3a3f4b
# class # border # bg # text #indicator #child_border
client.focused $red $red $red $magenta $bright_cyan
client.focused_inactive $red $red $red $magenta $black
client.unfocused $red $red $red $magenta $black
bar {
status_command i3status
position top
# disable system tray icons
tray_output none
colors {
background $black
statusline $white
separator $yellow
focused_workspace $black $black $bright_cyan
active_workspace $red $bright_blue $blue
inactive_workspace $black $black $bright_black
urgent_workspace $magenta $black $magenta
}
}

View file

@ -1,113 +0,0 @@
#!/usr/bin/env bash
# Select common timer intervals with dmenu and play an alarm sound when
# finished. Useful if you bind a KBD in a window manager such as i3. Pass the
# path to the alarm mp3 as the only argument.
#
# Usage: ./dmenu_timer.sh path/to/alarm.mp3
times=$(cat <<EOF
1 minute
2 minutes
3 minutes
4 minutes
5 minutes
10 minutes
15 minutes
20 minutes
30 minutes
45 minutes
1 hour
2 hours
EOF
)
selection=$(echo "$times" | dmenu)
case $selection in
'1 minute')
notify-send 'Timer' 'Set for 1 minute' && \
sleep 1m && \
notify-send 'Timer' 'Finished.' && \
mpg123 $1 && \
exit 0
;;
'2 minutes')
notify-send 'Timer' 'Set for 2 minute' && \
sleep 2m && \
notify-send 'Timer' 'Finished.' && \
mpg123 $1 && \
exit 0
;;
'3 minutes')
notify-send 'Timer' 'Set for 3 minutes' && \
sleep 3m && \
notify-send 'Timer' 'Finished.' && \
mpg123 $1 && \
exit 0
;;
'4 minutes')
notify-send 'Timer' 'Set for 4 minutes' && \
sleep 4m && \
notify-send 'Timer' 'Finished.' && \
mpg123 $1 && \
exit 0
;;
'5 minutes')
notify-send 'Timer' 'Set for 5 minutes' && \
sleep 5m && \
notify-send 'Timer' 'Finished.' && \
mpg123 $1 && \
exit 0
;;
'10 minutes')
notify-send 'Timer' 'Set for 10 minutes' && \
sleep 10m && \
notify-send 'Timer' 'Finished.' && \
mpg123 $1 && \
exit 0
;;
'15 minutes')
notify-send 'Timer' 'Set for 15 minutes' && \
sleep 15m && \
notify-send 'Timer' 'Finished.' && \
mpg123 $1 && \
exit 0
;;
'20 minutes')
notify-send 'Timer' 'Set for 20 minutes' && \
sleep 20m && \
notify-send 'Timer' 'Finished.' && \
mpg123 $1 && \
exit 0
;;
'30 minutes')
notify-send 'Timer' 'Set for 30 minutes' && \
sleep 30m && \
notify-send 'Timer' 'Finished.' && \
mpg123 $1 && \
exit 0
;;
'45 minutes')
notify-send 'Timer' 'Set for 45 minutes' && \
sleep 45m && \
notify-send 'Timer' 'Finished.' && \
mpg123 $1 && \
exit 0
;;
'1 hour')
notify-send 'Timer' 'Set for 1 hour' && \
sleep 1h && \
notify-send 'Timer' 'Finished.' && \
mpg123 $1 && \
exit 0
;;
'2 hours')
notify-send 'Timer' 'Set for 2 hours' && \
sleep 2h && \
notify-send 'Timer' 'Finished.' && \
mpg123 $1 && \
exit 0
;;
*)
notify-send 'Timer' 'No supported time selected. Exiting...' && exit 1
esac

View file

@ -1,25 +0,0 @@
#!/usr/bin/env bash
shopt -s nullglob globstar
typeit=0
if [[ $1 == "--type" ]]; then
typeit=1
shift
fi
prefix=${PASSWORD_STORE_DIR-~/.password-store}
password_files=( "$prefix"/**/*.gpg )
password_files=( "${password_files[@]#"$prefix"/}" )
password_files=( "${password_files[@]%.gpg}" )
password=$(printf '%s\n' "${password_files[@]}" | dmenu "$@")
[[ -n $password ]] || exit
if [[ $typeit -eq 0 ]]; then
pass show -c "$password" 2>/dev/null
else
pass show "$password" | { IFS= read -r pass; printf %s "$pass"; } |
xdotool type --clearmodifiers --file -
fi

View file

@ -1,76 +0,0 @@
// vim:ts=4:sw=4:et
{
// splitv split container with 2 children
"border": "normal",
"floating": "auto_off",
"layout": "splitv",
"percent": 0.5,
"type": "con",
"nodes": [
{
"border": "pixel",
"current_border_width": 3,
"floating": "auto_off",
"geometry": {
"height": 925,
"width": 1072,
"x": 0,
"y": 0
},
"name": "emacs@wpcarro.lon.corp.google.com",
"percent": 0.5,
"swallows": [
{
"class": "^GoogleEmacs$",
"instance": "^emacs$",
"title": "^google-emacs$"
}
],
"type": "con"
},
{
"border": "pixel",
"current_border_width": 3,
"floating": "auto_off",
"geometry": {
"height": 484,
"width": 724,
"x": 0,
"y": 0
},
"name": "i3-save-tree",
"percent": 0.5,
"swallows": [
{
"class": "^st\\-256color$",
"instance": "^st\\-256color$",
"title": "^st-term$"
}
],
"type": "con"
}
]
}
{
"border": "pixel",
"current_border_width": 3,
"floating": "auto_off",
"geometry": {
"height": 2125,
"width": 1914,
"x": 1923,
"y": 32
},
"name": "i3: Layout saving in i3 - Google Chrome",
"percent": 0.5,
"swallows": [
{
"class": "^Google\\-chrome$",
"instance": "^google\\-chrome$",
"title": "Chrome",
"window_role": "^browser$"
}
],
"type": "con"
}

View file

@ -1,175 +0,0 @@
# It might be possible to attempt to share KBDs between `lf` and `dired`.
# Currently shared KBDs with `dired`:
# - D: delete file
# - R: rename file
# - +: create directory
# - c: create file
#
# The following command prefixes are used by lf (taken from the docs):
#
# : read (default) builtin/custom command
# $ shell shell command
# % shell-pipe shell command running with the ui
# ! shell-wait shell command waiting for key press
# & shell-async shell command running asynchronously
# / search search file in current directory
# ? search-back search file in the reverse order
#
# `x` will be used as a generic prefix KBD for most of my user-defined KBDs. Do
# not map anything to just `x`. Instead prefer `x<char>`. Mneumonically, "x" is
# intended to resemble "eXecute".
#
# If `x<char>` does one thing; `x<uppercase-char>` should do the opposite when
# possible. This is convenient for things that pass the round-trip test like
# encrypt/decrypt, archive/unarchive.
# TODO: move most of these commands to function.zsh and call those functions
# herein. Especially the `archive` and `extract` functions.
#
# TODO: consider integrations with `xdg-open` and configuring filetypes to
# behave in expected "dwim" ways.
#
# TODO: learn more about the terms "archive", "compress", "decompress",
# "expand", "extract", etc. See if a larger abstraction can be created on top
# without sacrificing too much nuance. This might be the case of "serialize",
# "deserialize", "pickle", "unpickle", "marshal", "unmarshal", "encode",
# "decode" -- in which case, a broader abstraction would be nice to decrease the
# surface area of the vocabulary.
#
# TODO: find a way to visualize all of the bound or unbound KBDs.
#
# TODO: support polymorphic way encrypt/decrypt a file or directory.
#
# TODO: support "toggle" for encryption/decryption that detects which function
# to run based on the extension.
#
# TODO: support "toggle" for archive/unarchive that detects which function to
# run based on the extension.
# Basic configuration
set hidden on
# Arguably the most import function herein
cmd help $lf -doc | less
# delete a file, dir
map D delete
cmd rename %{{
# Renames files, dirs.
set -f
if [ -e "$1" ]; then
printf 'file exists'
else
mv "$f" "$1"
fi
}}
map R push :rename<space>
cmd mkdir %{{
mkdir -p "$1"
}}
map + push :mkdir<space>
cmd touch %{{
# Create a file
touch "$1"
}}
map c push :touch<space>
cmd encrypt_file %{{
# Encrypts the file and deletes the cleartext version.
# Run `decrypt_file` to return the file to its cleartext version.
printf "recipient: "
read recipient
gpg --encrypt --recipient "$recipient" "$f" && rm "$f"
}}
map xe :encrypt_file
cmd decrypt_file %{{
# Decrypts a file that was encrypted with `encrypt_file`.
# Assumes encrypted files have the .gpg extension and decrypted files omit the
# .gpg extension.
# Deletes the original .gpg file when finished.
# check if file exists without .gpg extension
if [ -e "${f%.gpg}" ]; then
printf "${f%.gpg} exists. Consider deleting or renaming it. Aborting..."
else
gpg --decrypt "$f" >"${f%.gpg}" 2>/dev/null && rm "$f"
fi
}}
map xE :decrypt_file
cmd archive %{{
# Generic function for archiving directories.
# TODO: support selections of multiple files.
set -f
printf "Which type of archive would you like to create? (tar,tar.gz,zip) "
read answer
case $answer in
tar.gz) tar -czf "$f.tar.gz" "$(basename $f)"; rm -rf "$f";;
tar) tar -cf "$f.tar" "$(basename $f)"; rm -rf "$f";;
zip) zip -r "$f.zip" "$(basename $f)"; rm -rf "$f";;
*) printf "\"$1\" is not a support archive. Aborting..."
esac
}}
map xa :archive
cmd unarchive %{{
# Generic function for extracting archived directories.
# Assumes directories were archived with the `archive`.
set -f
case $f in
*.tar.gz) tar -xzvf $f; rm "$f";;
*.tar) tar -xvf $f; rm "$f";;
*.zip) unzip "$f"; rm "$f";;
# TODO: grab extension from $f and display it in `printf` call.
*) printf "Unsupported archive type. Aborting..."
esac
}}
map xA: unarchive
cmd tar %{{
# tars a directory
set -f
printf "gzip? (y,n) "
read answer
case $answer in
y) tar -czf "$f.tar.gz" "$(basename $f)"; rm -rf "$f";;
n) tar -cf "$f.tar" "$(basename $f)"; rm -rf "$f";;
*) printf "\"$answer\" is not a supported answer. Aborting...";;
esac
}}
map xt :tar
cmd untar %{{
# untars a directory tar'd with `tar`.
set -f
case $f in
*.tar.gz) tar -xzvf $f; rm "$f";;
*.tar) tar -xvf $f; rm "$f";;
esac
}}
map xT :untar
cmd zip %{{
# zip a directory
set -f
zip -r "$f.zip" "$(basename $f)"
rm -rf "$f"
}}
map xz :zip
cmd unzip %{{
# unzip a directory
set -f
unzip "$f"
rm "$f"
}}
map xZ :unzip
# outputs the size of a particular file, dir
# TODO: consider mapping this to a KBD
cmd size %du -hs "$f"
map xs :size

View file

@ -1,5 +0,0 @@
':/usr/local/google/home/wpcarro
D:~/Dropbox
c:~/Dropbox/dotfiles/configs
d:~/Dropbox/dotfiles
s:~/Pictures/screenshots

View file

@ -1,667 +0,0 @@
" -- BEGIN: Vundle config --
set nocompatible " be iMproved, required
filetype off " required
" set the runtime path to include Vundle and initialize
" share Vundle between vim and neovim
set rtp+=~/.vim/bundle/Vundle.vim
set rtp+=~/.config/nvim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'
" The following are examples of different formats supported.
" Keep Plugin commands between vundle#begin/end.
" Displays git information in airline.
Plugin 'tpope/vim-fugitive'
" easier file navigation
Plugin 'tpope/vim-vinegar'
" Displays git-tracked C*UD ops within gutter.
Plugin 'airblade/vim-gitgutter'
" Fuzzy-finder
Plugin 'kien/ctrlp.vim'
" Grep file contents
Plugin 'mileszs/ack.vim'
" JS support
Plugin 'pangloss/vim-javascript'
" JSX support
Plugin 'mxw/vim-jsx'
" Syntax Highlighting Support
Plugin 'lambdatoast/elm.vim'
" Elixir Plugins
Plugin 'elixir-lang/vim-elixir'
Plugin 'slashmili/alchemist.vim'
Plugin 'powerman/vim-plugin-AnsiEsc'
" TypeScript Plugins
Plugin 'rschmukler/typescript-vim'
" Themes
Plugin 'sickill/vim-monokai'
Plugin 'altercation/vim-colors-solarized'
Plugin 'mhartington/oceanic-next'
" Executes shell commands and pipes output into new Vim buffer.
Plugin 'sjl/clam.vim'
" Multiple cursors for simultaneous edits.
" NOTE: use <C-n> to run miltiple cursors not <C-d>
Plugin 'terryma/vim-multiple-cursors'
" Visualize buffers
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
" Visually align assignments
Plugin 'godlygeek/tabular'
" Visually Highlight and comment code.
Plugin 'tpope/vim-commentary'
" Macros for quotes, parens, etc.
Plugin 'tpope/vim-surround'
" Allows Plugins to be repeated with `.` character
Plugin 'tpope/vim-repeat'
" Pairs of mappings
Plugin 'tpope/vim-unimpaired'
" LISPs support
Plugin 'guns/vim-sexp'
Plugin 'tpope/vim-sexp-mappings-for-regular-people'
let g:sexp_enable_insert_mode_mappings = 0
let g:sexp_filetypes = ''
" Seamlessly navigate Vim and Tmux with similar bindings.
Plugin 'christoomey/vim-tmux-navigator'
" Async `:make` for code linting etc.
Plugin 'neomake/neomake'
" Color pack
Plugin 'flazz/vim-colorschemes'
" Better buffer mgt than CtrlP
Plugin 'yegappan/mru'
Plugin 'zanglg/nova.vim'
" Emulates Emacs's Helm Swoop search
Plugin 'pelodelfuego/vim-swoop'
" Fish Shell support
Plugin 'dag/vim-fish'
" Gotham colorscheme
Plugin 'whatyouhide/vim-gotham'
" Transparent encryption + decryption
Plugin 'jamessan/vim-gnupg'
" Javascript auto-formatting
Plugin 'prettier/vim-prettier', {
\ 'do': 'yarn install',
\ 'for': ['javascript', 'typescript', 'css', 'less', 'scss', 'json', 'graphql', 'markdown'] }
" Support Org mode
Plugin 'jceb/vim-orgmode'
" ReaosnML
Plugin 'reasonml-editor/vim-reason-plus'
" Autocompletion
Plugin 'junegunn/fzf'
" Better JSON highlighting
Plugin 'elzr/vim-json'
" Text objects made easy
Plugin 'kana/vim-textobj-user'
" Elixir text objects
Plugin 'andyl/vim-textobj-elixir'
" Making HTML editing faster
Plugin 'mattn/emmet-vim'
" Snippets for all languages
Plugin 'honza/vim-snippets'
" Automatic bracket insertion
Plugin 'jiangmiao/auto-pairs'
" Linting & error warnings
Plugin 'vim-syntastic/syntastic'
" Atom colorscheme
Plugin 'rakr/vim-one'
" Nix syntax highlighting
Plugin 'LnL7/vim-nix'
call vundle#end() " required
filetype plugin indent on " required
" Put your non-Plugin stuff after this line
" -- END: Vundle config --
" Changes <leader> to <space> character.
let mapleader = " "
" Highlight column width
set textwidth=80
set colorcolumn=+0
" autoreload a file when it changes on disk
set autoread
" default to case-insensitive searching
set ignorecase
" JSX configuration
let g:jsx_ext_required = 0
autocmd FileType reason nnoremap <buffer> gd :call LanguageClient_textDocument_definition()<CR>
autocmd FileType reason nnoremap <buffer> gf :call LanguageClient_textDocument_formatting()<CR>
autocmd FileType reason nnoremap <buffer> gh :call LanguageClient_textDocument_hover()<CR>
autocmd FileType reason nnoremap <buffer> gr :call LanguageClient_textDocument_rename()<CR>
" Replace <CR> with G for faster navigation
nnoremap <CR> G
" Syntastic configuration
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*
let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0
let g:syntastic_javascript_checkers = ['eslint']
let g:syntastic_javascript_eslint_generic = 1
" this is a hack to prevent a false negative
" https://github.com/vim-syntastic/syntastic/issues/1692
let g:syntastic_javascript_eslint_exec = '/bin/ls'
let g:syntastic_javascript_eslint_exe = 'npx eslint'
let g:syntastic_javascript_eslint_args = '-f compact'
" javascript autocompletion
autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS
autocmd FileType javascript nnoremap <buffer> gf :Prettier<CR>
" Maximize the current window
" Similar to Tmux mapping alt-z in my tmux.conf
nnoremap t% :tab sp<CR>
" Allow C-g to act like C-c the way it does in Emacs
cnoremap <C-g> <C-c>
" Prettier configuration
let g:prettier#exec_cmd_async = 1
" force Prettier to run on files even without the @format pragma
let g:prettier#autoformat = 0
" Basic settings
" Thin cursor on INSERT mode
if has('nvim')
let $NVIM_TUI_ENABLE_CURSOR_SHAPE = 1
endif
set number
set nowrap
set tabstop=2
set expandtab
set shiftwidth=2
set background=dark
syntax enable
colorscheme one
set background=dark
" Vim in terminal cannot have a different font from the one set within your
" terminal. However, this setting will set the font for the GUI version.
if has('gui_running')
set guifont=Operator\ Mono:h12
endif
if has('termguicolors')
set termguicolors
endif
if &term =~# '^screen'
let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum"
let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum"
endif
set history=1000
set undolevels=1000
set t_Co=255
" Support italics
highlight Comment cterm=italic
" quickly edit popular configuration files
nnoremap <leader>ev :vsplit $MYVIMRC<CR>
nnoremap <leader>ee :vsplit ~/.emacs.d/init.el<CR>
nnoremap <leader>ez :vsplit ~/.zshrc<CR>
nnoremap <leader>ea :vsplit ~/aliases.zsh<CR>
nnoremap <leader>ef :vsplit ~/functions.zsh<CR>
nnoremap <leader>el :vsplit ~/variables.zsh<CR>
nnoremap <leader>ex :vsplit ~/.Xresources<CR>
nnoremap <leader>ei :vsplit ~/.config/i3/config.shared<CR>
" quickly source your vimrc
nnoremap <leader>sv :source $MYVIMRC<CR>
" quickly edit your snippets
nnoremap <leader>es :vsplit<CR>:edit ~/.vim/bundle/vim-snippets/snippets/reason.snippets<CR>
" Auto resize window splits
autocmd VimResized * wincmd =
" Neomake Settings
autocmd! BufWritePost * Neomake
" Elixir linting
let g:neomake_elixir_credo_maker = {
\ 'exe': 'mix',
\ 'args': ['credo', 'list', '%:p', '--format=oneline'],
\ 'errorformat':
\ '%W[F] %. %f:%l:%c %m,' .
\ '%W[F] %. %f:%l %m,' .
\ '%W[R] %. %f:%l:%c %m,' .
\ '%W[R] %. %f:%l %m,' .
\ '%I[C] %. %f:%l:%c %m,' .
\ '%I[C] %. %f:%l %m,' .
\ '%-Z%.%#'
\ }
let g:neomake_elixir_enabled_makers = ['mix', 'credo']
augroup my_error_signs
au!
autocmd ColorScheme * hi NeomakeErrorSign ctermfg=203 guifg=#ff5f5f
autocmd ColorScheme * hi NeomakeWarningSign ctermfg=209 guifg=#ffaf00
autocmd ColorScheme * hi NeomakeInfoSign ctermfg=183 guifg=#dfafff
autocmd ColorScheme * hi NeomakeMessageSign ctermfg=27 guifg=#0087ff
augroup END
let g:neomake_error_sign = {
\ 'text': '>>',
\ 'texthl': 'NeoMakeErrorSign',
\ }
let g:neomake_warning_sign = {
\ 'text': '>>',
\ 'texthl': 'NeoMakeWarningSign',
\ }
let g:neomake_info_sign = {
\ 'text': '>>',
\ 'texthl': 'NeoMakeInfoSign',
\ }
let g:neomake_message_sign = {
\ 'text': '>>',
\ 'texthl': 'NeoMakeMessageSign',
\ }
function! <SID>LocationPrevious()
try
lprev
catch /^Vim\%((\a\+)\)\=:E553/
llast
endtry
endfunction
function! <SID>LocationNext()
try
lnext
catch /^Vim\%((\a\+)\)\=:E553/
lfirst
endtry
endfunction
nnoremap <Leader>[ :call <SID>LocationPrevious()<CR>
nnoremap <Leader>] :call <SID>LocationNext()<CR>
" Alchemist settings
let g:alchemist#elixir_erlang_src = '/usr/local/share/src'
" Airline Settings
" Enables the list of buffers.
let g:airline#extensions#tabline#enabled = 0
" Buffer numbers alongside files
let g:airline#extensions#tabline#buffer_nr_show = 0
" Shows the filename only.
let g:airline#extensions#tabline#fnamemod = ':t'
" Allow glyphs in airline
let g:airline_powerline_fonts = 1
" Change Airline theme
let g:airline_theme = 'hybrid'
" Vim-Swoop Settings
" Edits colorscheme
let g:swoopHighlight = ["hi! link SwoopBufferLineHi Warning", "hi! link SwoopPatternHi Error"]
" Jump to buffers.
nmap <F1> :1b<CR>
nmap <F2> :2b<CR>
nmap <F3> :3b<CR>
nmap <F4> :4b<CR>
nmap <F5> :5b<CR>
nmap <F6> :6b<CR>
nmap <F7> :7b<CR>
nmap <F8> :8b<CR>
nmap <F9> :9b<CR>
" It's the twenty-first century...no swaps.
set noswapfile
" Allow visual tab completion in command mode
set wildmenu
" Show Vim commands as they're being input.
set showcmd
" Code folding
" set foldmethod=indent
" set foldnestmax=10
" set nofoldenable
" set foldlevel=4
" emulate ci" and ci' behavior
nnoremap ci( f(%ci(
nnoremap ci[ f[%ci[
" extend functionality of <C-e> & <C-y> scrolling
nnoremap <C-e> <C-e>j
vnoremap <C-e> <C-e>j
nnoremap <C-y> <C-y>k
vnoremap <C-y> <C-y>k
" Opens all folds within the buffer
" nnoremap ZZ zR
" Closes all folds within the buffer
" nnoremap zz zM
" Opens all folds beneath the cursor
" NOTE: j is the character to go down
" nnoremap zJ zO
" Opens single fold beneath the cursor
" NOTE: j is the character to go down
" nnoremap zj zo
" Opens single fold beneath the cursor
" NOTE: k is the character to go down
" nnoremap zK zC
" Opens single fold beneath the cursor
" NOTE: k is the character to go down
" nnoremap zk zc
" Save shortcut
nnoremap <C-s> :w<CR>
" Switch to MRU'd buffer
nnoremap <leader><leader> <C-^>
" Alternative MRU to CtrlP MRU
nnoremap <leader>b :MRU<CR>
" Supports mouse interaction.
set mouse=a
" Highlights matches during a search.
set hlsearch
" Clear highlight
noremap <silent> <leader>h :nohlsearch<bar>:echo<CR>
" backspace settings
set backspace=2
set backspace=indent,eol,start
" Javascript specific variables
let g:javascript_plugin_jsdoc = 1
" GlobalListchars
set list
set listchars=tab:··,trail,nbsp
" Keeps everything concealed at all times. Even when cursor is on the word.
set conceallevel=1
set concealcursor=nvic
" map jk to <Esc>
inoremap jk <Esc>
" Hybrid mode for Vim
inoremap <C-a> <Esc>I
inoremap <C-e> <Esc>A
inoremap <M-b> <S-Left>
inoremap <M-f> <S-Right>
inoremap <C-b> <Left>
inoremap <C-f> <Right>
inoremap <C-p> <Up>
inoremap <C-n> <Down>
" Manage Vertical and Horizontal splits
nnoremap sl <Esc>:vs<CR><C-w>l
nnoremap sh <Esc>:vs<CR>
nnoremap sj <Esc>:sp<CR><C-w>j
nnoremap sk <Esc>:sp<CR>
" Delete (i.e. "close") the currently opened buffer
" TODO: unless it's a split window, which should be :q
nnoremap <leader>q :bdelete<CR>
" Set CtrlP runtime path
set runtimepath^=~/.vim/bundle/ctrlp.vim
" Pane movement
let g:tmux_navigator_no_mappings = 1
nnoremap <silent> <M-h> :TmuxNavigateLeft<CR>
nnoremap <silent> <M-j> :TmuxNavigateDown<CR>
nnoremap <silent> <M-k> :TmuxNavigateUp<CR>
nnoremap <silent> <M-l> :TmuxNavigateRight<CR>
nnoremap <silent> <M-q> :q<CR>
" make Y do what is intuitive given:
" D: deletes until EOL
" C: changes until EOL
" Y: (should) yank until EOL
nnoremap Y y$
" scrolling and maintaing mouse position
" nnoremap <C-j> j<C-e>
" nnoremap <C-k> k<C-y>
" remap redo key that is eclipsed by `rotate` currently
nnoremap U :redo<CR>
" Define highlighting groups
" NOTE: The ANSII aliases for colors will change when iTerm2 settings are
" changed.
highlight InterestingWord1 ctermbg=Magenta ctermfg=Black
highlight InterestingWord2 ctermbg=Blue ctermfg=Black
" h1 highlighting
nnoremap <silent> <leader>1 :execute '2match InterestingWord1 /\<<c-r><c-w>\>/'<CR>
nnoremap <silent> <leader>x1 :execute '2match none'<CR>
vnoremap <silent> <leader>1 :execute '2match InterestingWord1 /\<<c-r><c-w>\>/'<CR>
" h2 highlighting
nnoremap <silent> <leader>2 :execute '3match InterestingWord2 /\<<c-r><c-w>\>/'<CR>
nnoremap <silent> <leader>x2 :execute '3match none'<CR>
"clear all highlighted groups
nnoremap <silent> <leader>xx :execute '2match none'<CR> :execute '3match none'<CR> hh
" pasteboard copy & paste
set clipboard+=unnamedplus
" Manage 80 char line limits
highlight OverLength1 ctermbg=Magenta ctermfg=Black
highlight OverLength2 ctermbg=LightMagenta ctermfg=Black
highlight OverLength3 ctermbg=White ctermfg=Black
" match OverLength3 /\%81v.\+/
match OverLength2 /\%91v.\+/
" match OverLength3 /\%101v.\+/
nnoremap <leader>w :w<CR>
" Resize split to 10,20,...,100 chars
" Uncomment the next lines for support at those sizes.
" These bindings interfere with the highlight groups, however.
" Increases the width of a vertical split.
" nnoremap <leader>1 :vertical resize 10<CR>
" nnoremap <leader>2 :vertical resize 20<CR>
nnoremap <leader>3 :vertical resize 30<CR>
nnoremap <leader>4 :vertical resize 40<CR>
nnoremap <leader>5 :vertical resize 50<CR>
nnoremap <leader>6 :vertical resize 60<CR>
nnoremap <leader>7 :vertical resize 70<CR>
nnoremap <leader>8 :vertical resize 80<CR>
nnoremap <leader>9 :vertical resize 90<CR>
nnoremap <leader>0 :vertical resize 100<CR>
" Increases the height of a horizontal split.
nnoremap <leader>v1 :resize 5<CR>
nnoremap <leader>v2 :resize 10<CR>
nnoremap <leader>v3 :resize 15<CR>
nnoremap <leader>v4 :resize 20<CR>
nnoremap <leader>v5 :resize 25<CR>
nnoremap <leader>v6 :resize 30<CR>
nnoremap <leader>v7 :resize 35<CR>
nnoremap <leader>v8 :resize 40<CR>
nnoremap <leader>v9 :resize 45<CR>
nnoremap <leader>v0 :resize 50<CR>
" BOL and EOL
nnoremap H ^
vnoremap H ^
nnoremap L $
vnoremap L $
" Search for visually selected text
vnoremap // y/<C-r>"<CR>N
" trim trailing whitespace on save
autocmd BufWritePre *.{js,py,tpl,less,html,ex,exs,txt} :%s/\s\+$//e
" Use .gitignore file to populate Ctrl-P
let g:ctrlp_user_command = ['.git', 'cd %s && git ls-files . -co --exclude-standard', 'find %s -type f']
" Ignores dirs and files
let g:ctrlp_custom_ignore = {
\ 'dir': 'node_modules',
\ 'file': '\v\.(exe|dll|png|jpg|jpeg)$'
\}
" WIP: Run elixir tests on that line
" TODO: only register binding in *.exs? file extensions
nnoremap <leader>t :call ExTestToggle()<CR>
" Jumps from an Elixir module file to an Elixir test file.
fun! ExTestToggle()
if expand('%:e') == "ex"
let test_file_name = expand('%:t:r') . "_test.exs"
let test_file_dir = substitute(expand('%:p:h'), "/lib/", "/test/", "")
let full_test_path = join([test_file_dir, test_file_name], "/")
e `=full_test_path`
elseif match(expand('%:t'), "_test.exs") != -1
let test_file_name = expand('%:t:r')
let offset_amt = strlen(test_file_name) - strlen("_test")
let module_file_name = strpart(test_file_name, 0, offset_amt) . ".ex"
let module_file_dir = substitute(expand('%:p:h'), "/test/", "/lib/", "")
let full_module_path = join([module_file_dir, module_file_name], "/")
e `=full_module_path`
endif
endfun
" Creates intermediate directories and file to match current buffer's filepath
fun! CreateNonExistingDirsAndFile()
! echo "Creating directory..." && mkdir -p %:p:h && echo "Created directory." && echo "Creating file..." && touch %:t:p && echo "Created file."
" Write the buffer to the recently created file.
w
endfun

View file

@ -1 +0,0 @@
rofi.theme: /usr/share/rofi/themes//lb.rasi

View file

@ -1,20 +0,0 @@
[global_config]
[keybindings]
[layouts]
[[default]]
[[[child1]]]
parent = window0
type = Terminal
[[[window0]]]
parent = ""
type = Window
[plugins]
[profiles]
[[default]]
background_type = transparent
cursor_color = "#aaaaaa"
cursor_shape = ibeam
font = Source Code Pro 12
scrollbar_position = hidden
show_titlebar = False
use_system_font = False