~andrewzah/dotfiles

046d3a55ecbba8a2447026c5dc122489e04edfed — Andrew Zah 6 years ago f59ef9b
Add i3,mpd,termite,weechat,nvim/after
A .config/.mpd/mpd.conf => .config/.mpd/mpd.conf +407 -0
@@ 0,0 1,407 @@
# An example configuration file for MPD.
# Read the user manual for documentation: http://www.musicpd.org/doc/user/

bind_to_address "~/.config/mpd/socket"

# Files and directories #######################################################
#
# This setting controls the top directory which MPD will search to discover the
# available audio files and add them to the daemon's online database. This 
# setting defaults to the XDG directory, otherwise the music directory will be
# be disabled and audio files will only be accepted over ipc socket (using
# file:// protocol) or streaming files over an accepted protocol.
#
music_directory		"/mnt/falcon/Music"
#
# This setting sets the MPD internal playlist directory. The purpose of this
# directory is storage for playlists created by MPD. The server will use 
# playlist files not created by the server but only if they are in the MPD
# format. This setting defaults to playlist saving being disabled.
#
playlist_directory		"~/.config/mpd/playlists"
#
# This setting sets the location of the MPD database. This file is used to
# load the database at server start up and store the database while the 
# server is not up. This setting defaults to disabled which will allow
# MPD to accept files over ipc socket (using file:// protocol) or streaming
# files over an accepted protocol.
#
db_file			"~/.config/mpd/database"
# 
# These settings are the locations for the daemon log files for the daemon.
# These logs are great for troubleshooting, depending on your log_level
# settings.
#
# The special value "syslog" makes MPD use the local syslog daemon. This
# setting defaults to logging to syslog, otherwise logging is disabled.
#
log_file			"~/.config/mpd/log"
#
# This setting sets the location of the file which stores the process ID
# for use of mpd --kill and some init scripts. This setting is disabled by
# default and the pid file will not be stored.
#
pid_file			"~/.config/mpd/pid"
#
# This setting sets the location of the file which contains information about
# most variables to get MPD back into the same general shape it was in before
# it was brought down. This setting is disabled by default and the server 
# state will be reset on server start up.
#
state_file			"~/.config/mpd/state"
#
# The location of the sticker database.  This is a database which
# manages dynamic information attached to songs.
#
sticker_file			"~/.config/mpd/sticker.sql"
#
###############################################################################

audio_output {
  type  "pulse"
  name  "DAC"
}

audio_output {
  type  "fifo"
  name  "my_fifo"
  path  "/tmp/mpd.fifo"
  format "44100:16:2"
}


# General music daemon options ################################################
#
# This setting specifies the user that MPD will run as. MPD should never run as
# root and you may use this setting to make MPD change its user ID after
# initialization. This setting is disabled by default and MPD is run as the
# current user.
#
user				"andrei"
#
# This setting specifies the group that MPD will run as. If not specified
# primary group of user specified with "user" setting will be used (if set).
# This is useful if MPD needs to be a member of group such as "audio" to
# have permission to use sound card.
#
#group				"nogroup"
#
# This setting sets the address for the daemon to listen on. Careful attention
# should be paid if this is assigned to anything other then the default, any.
# This setting can deny access to control of the daemon. Not effective if
# systemd socket activiation is in use.
#
# For network
#bind_to_address		"any"
#
# And for Unix Socket
#bind_to_address		"~/.mpd/socket"
#
# This setting is the TCP port that is desired for the daemon to get assigned
# to.
#
#port				"6600"
#
# This setting controls the type of information which is logged. Available 
# setting arguments are "default", "secure" or "verbose". The "verbose" setting
# argument is recommended for troubleshooting, though can quickly stretch
# available resources on limited hardware storage.
#
log_level			"default"
#
# If you have a problem with your MP3s ending abruptly it is recommended that 
# you set this argument to "no" to attempt to fix the problem. If this solves
# the problem, it is highly recommended to fix the MP3 files with vbrfix
# (available from <http://www.willwap.co.uk/Programs/vbrfix.php>), at which
# point gapless MP3 playback can be enabled.
#
#gapless_mp3_playback			"yes"
#
# Setting "restore_paused" to "yes" puts MPD into pause mode instead
# of starting playback after startup.
#
#restore_paused "no"
#
# This setting enables MPD to create playlists in a format usable by other
# music players.
#
#save_absolute_paths_in_playlists	"no"
#
# This setting defines a list of tag types that will be extracted during the
# audio file discovery process. The complete list of possible values can be
# found in the user manual.
#metadata_to_use	"artist,album,title,track,name,genre,date,composer,performer,disc"
#
# This setting enables automatic update of MPD's database when files in 
# music_directory are changed.
#
#auto_update	"yes"
#
# Limit the depth of the directories being watched, 0 means only watch
# the music directory itself.  There is no limit by default.
#
#auto_update_depth "3"
#
###############################################################################


# Symbolic link behavior ######################################################
#
# If this setting is set to "yes", MPD will discover audio files by following 
# symbolic links outside of the configured music_directory.
#
#follow_outside_symlinks	"yes"
#
# If this setting is set to "yes", MPD will discover audio files by following
# symbolic links inside of the configured music_directory.
#
#follow_inside_symlinks		"yes"
#
###############################################################################


# Zeroconf / Avahi Service Discovery ##########################################
#
# If this setting is set to "yes", service information will be published with
# Zeroconf / Avahi.
#
#zeroconf_enabled		"yes"
#
# The argument to this setting will be the Zeroconf / Avahi unique name for
# this MPD server on the network.
#
#zeroconf_name			"Music Player"
#
###############################################################################


# Permissions #################################################################
#
# If this setting is set, MPD will require password authorization. The password
# setting can be specified multiple times for different password profiles.
#
#password                        "password@read,add,control,admin"
#
# This setting specifies the permissions a user has who has not yet logged in. 
#
#default_permissions             "read,add,control,admin"
#
###############################################################################


# Database #######################################################################
#

#database {
#       plugin "proxy"
#       host "other.mpd.host"
#       port "6600"
#}

# Input #######################################################################
#

input {
        plugin "curl"
#       proxy "proxy.isp.com:8080"
#       proxy_user "user"
#       proxy_password "password"
}

#
###############################################################################

# Audio Output ################################################################
#
# MPD supports various audio output types, as well as playing through multiple 
# audio outputs at the same time, through multiple audio_output settings 
# blocks. Setting this block is optional, though the server will only attempt
# autodetection for one sound card.
#
# An example of an ALSA output:
#
#audio_output {
#	type		"alsa"
#	name		"My ALSA Device"
##	device		"hw:0,0"	# optional
##	mixer_type      "hardware"	# optional
##	mixer_device	"default"	# optional
##	mixer_control	"PCM"		# optional
##	mixer_index	"0"		# optional
#}
#
# An example of an OSS output:
#
#audio_output {
#	type		"oss"
#	name		"My OSS Device"
##	device		"/dev/dsp"	# optional
##	mixer_type      "hardware"	# optional
##	mixer_device	"/dev/mixer"	# optional
##	mixer_control	"PCM"		# optional
#}
#
# An example of a shout output (for streaming to Icecast):
#
#audio_output {
#	type		"shout"
#	encoder		"vorbis"		# optional
#	name		"My Shout Stream"
#	host		"localhost"
#	port		"8000"
#	mount		"/mpd.ogg"
#	password	"hackme"
#	quality		"5.0"
#	bitrate		"128"
#	format		"44100:16:1"
##	protocol	"icecast2"		# optional
##	user		"source"		# optional
##	description	"My Stream Description"	# optional
##	url		"http://example.com"	# optional
##	genre		"jazz"			# optional
##	public		"no"			# optional
##	timeout		"2"			# optional
##	mixer_type      "software"		# optional
#}
#
# An example of a recorder output:
#
#audio_output {
#	type		"recorder"
#	name		"My recorder"
#	encoder		"vorbis"		# optional, vorbis or lame
#	path		"/var/lib/mpd/recorder/mpd.ogg"
##	quality		"5.0"			# do not define if bitrate is defined
#	bitrate		"128"			# do not define if quality is defined
#	format		"44100:16:1"
#}
#
# An example of a httpd output (built-in HTTP streaming server):
#
#audio_output {
#	type		"httpd"
#	name		"My HTTP Stream"
#	encoder		"vorbis"		# optional, vorbis or lame
#	port		"8000"
#	bind_to_address	"0.0.0.0"		# optional, IPv4 or IPv6
##	quality		"5.0"			# do not define if bitrate is defined
#	bitrate		"128"			# do not define if quality is defined
#	format		"44100:16:1"
#	max_clients	"0"			# optional 0=no limit
#}
#
# An example of a pulseaudio output (streaming to a remote pulseaudio server)
#
#audio_output {
#	type		"pulse"
#	name		"My Pulse Output"
##	server		"remote_server"		# optional
##	sink		"remote_server_sink"	# optional
#}
#
# An example of a winmm output (Windows multimedia API).
#
#audio_output {
#	type		"winmm"
#	name		"My WinMM output"
##	device		"Digital Audio (S/PDIF) (High Definition Audio Device)" # optional
#		or
##	device		"0"		# optional
##	mixer_type	"hardware"	# optional
#}
#
# An example of an openal output.
#
#audio_output {
#	type		"openal"
#	name		"My OpenAL output"
##	device		"Digital Audio (S/PDIF) (High Definition Audio Device)" # optional
#}
#
# An example of an sndio output.
#
#audio_output {
#	type		"sndio"
#	name		"sndio output"
#	mixer_type	"software"
#}
#
# An example of an OS X output:
#
#audio_output {
#	type		"osx"
#	name		"My OS X Device"
##	device		"Built-in Output"	# optional
##	channel_map      "-1,-1,0,1"	# optional
#}
#
## Example "pipe" output:
#
#audio_output {
#	type		"pipe"
#	name		"my pipe"
#	command		"aplay -f cd 2>/dev/null"
## Or if you're want to use AudioCompress
#	command		"AudioCompress -m | aplay -f cd 2>/dev/null"
## Or to send raw PCM stream through PCM:
#	command		"nc example.org 8765"
#	format		"44100:16:2"
#}
#
## An example of a null output (for no audio output):
#
#audio_output {
#	type		"null"
#	name		"My Null Output"
#	mixer_type      "none"			# optional
#}
#
###############################################################################


# Normalization automatic volume adjustments ##################################
#
# This setting specifies the type of ReplayGain to use. This setting can have
# the argument "off", "album", "track" or "auto". "auto" is a special mode that
# chooses between "track" and "album" depending on the current state of
# random playback. If random playback is enabled then "track" mode is used.
# See <http://www.replaygain.org> for more details about ReplayGain.
# This setting is off by default.
#
#replaygain			"album"
#
# This setting sets the pre-amp used for files that have ReplayGain tags. By
# default this setting is disabled.
#
#replaygain_preamp		"0"
#
# This setting sets the pre-amp used for files that do NOT have ReplayGain tags.
# By default this setting is disabled.
#
#replaygain_missing_preamp	"0"
#
# This setting enables or disables ReplayGain limiting.
# MPD calculates actual amplification based on the ReplayGain tags
# and replaygain_preamp / replaygain_missing_preamp setting.
# If replaygain_limit is enabled MPD will never amplify audio signal
# above its original level. If replaygain_limit is disabled such amplification
# might occur. By default this setting is enabled.
#
#replaygain_limit		"yes"
#
# This setting enables on-the-fly normalization volume adjustment. This will
# result in the volume of all playing audio to be adjusted so the output has 
# equal "loudness". This setting is disabled by default.
#
#volume_normalization		"no"
#
###############################################################################

# Character Encoding ##########################################################
#
# If file or directory names do not display correctly for your locale then you 
# may need to modify this setting.
#
#filesystem_charset		"UTF-8"
#
###############################################################################

A .config/.termite/config => .config/.termite/config +87 -0
@@ 0,0 1,87 @@
[options]
#allow_bold = true
#audible_bell = false
#clickable_url = true
#dynamic_title = true
font = Inconsolata 11
#font = Fira Code 10
#fullscreen = true
#geometry = 640x480
#icon_name = terminal
#mouse_autohide = false
#scroll_on_output = false
#scroll_on_keystroke = true
# Length of the scrollback buffer, 0 disabled the scrollback buffer
# and setting it to a negative value means "infinite scrollback"
scrollback_lines = 10000
#search_wrap = true
#urgent_on_bell = true
#hyperlinks = false

# $BROWSER is used by default if set, with xdg-open as a fallback
#browser = xdg-open

# "system", "on" or "off"
#cursor_blink = system

# "block", "underline" or "ibeam"
#cursor_shape = block

# Hide links that are no longer valid in url select overlay mode
#filter_unmatched_urls = true

# Emit escape sequences for extra modified keys
#modify_other_keys = false

# set size hints for the window
#size_hints = false

# "off", "left" or "right"
#scrollbar = off

[colors]
# If both of these are unset, cursor falls back to the foreground color,
# and cursor_foreground falls back to the background color.
#cursor = #dcdccc
#cursor_foreground = #dcdccc

#foreground = #dcdccc
#foreground_bold = #ffffff
#background = #3f3f3f

# 20% background transparency (requires a compositor)
#background = rgba(63, 63, 63, 0.8)

# If unset, will reverse foreground and background
highlight = #2f2f2f

# Colors from color0 to color254 can be set
color0 = #3f3f3f
color1 = #705050
color2 = #60b48a
color3 = #dfaf8f
color4 = #506070
color5 = #dc8cc3
color6 = #8cd0d3
color7 = #dcdccc
color8 = #709080
color9 = #dca3a3
color10 = #c3bf9f
color11 = #f0dfaf
color12 = #94bff3
color13 = #ec93d3
color14 = #93e0e3
color15 = #ffffff

[hints]
#font = Monospace 12
#foreground = #dcdccc
#background = #3f3f3f
#active_foreground = #e68080
#active_background = #3f3f3f
#padding = 2
#border = #3f3f3f
#border_width = 0.5
#roundness = 2.0

# vim: ft=dosini cms=#%s

A .i3/blocks/mpd.sh => .i3/blocks/mpd.sh +14 -0
@@ 0,0 1,14 @@
#!/bin/bash 
NCMP=$(mpc -h ~/.config/mpd/socket | grep "^\[playing\]" | awk '{print $1}')
NUM_NCMP=$(mpc -h ~/.config/mpd/socket | head -1 | wc -c )
S_NCMP=$(mpc -h ~/.config/mpd/socket | head -1 | head -c 100)

if [ "$NCMP" = "[playing]" ]; then 
    if [ "$NUM_NCMP" -lt 100 ]; then 
        echo -e ": $(mpc -h ~/.config/mpd/socket current)"
    else
        echo -e ": $S_NCMP..."
    fi
else
    echo -e ": Pause "
fi

A .i3/blocks/volume-pulseaudio => .i3/blocks/volume-pulseaudio +181 -0
@@ 0,0 1,181 @@
#!/bin/bash
# Displays the default device, volume, and mute status for i3blocks

AUDIO_HIGH_SYMBOL='  '

AUDIO_MED_THRESH=50
AUDIO_MED_SYMBOL='  '

AUDIO_LOW_THRESH=0
AUDIO_LOW_SYMBOL='  '

AUDIO_MUTED_SYMBOL='  '

AUDIO_INTERVAL=5

DEFAULT_COLOR="#ffffff"
MUTED_COLOR="#a0a0a0"

LONG_FORMAT=0
SHORT_FORMAT=2
USE_PERCENT=1
USE_ALSA_NAME=0
USE_DESCRIPTION=0

SUBSCRIBE=0

while getopts F:Sf:padH:M:L:X:T:t:C:c:i:m:s:h opt; do
    case "$opt" in
        S) SUBSCRIBE=1 ;;
        F) LONG_FORMAT="$OPTARG" ;;
        f) SHORT_FORMAT="$OPTARG" ;;
        p) USE_PERCENT=0 ;;
        a) USE_ALSA_NAME=1 ;;
        d) USE_DESCRIPTION=1 ;;
        H) AUDIO_HIGH_SYMBOL="$OPTARG" ;;
        M) AUDIO_MED_SYMBOL="$OPTARG" ;;
        L) AUDIO_LOW_SYMBOL="$OPTARG" ;;
        X) AUDIO_MUTED_SYMBOL="$OPTARG" ;;
        T) AUDIO_MED_THRESH="$OPTARG" ;;
        t) AUDIO_LOW_THRESH="$OPTARG" ;;
        C) DEFAULT_COLOR="$OPTARG" ;;
        c) MUTED_COLOR="$OPTARG" ;;
        i) AUDIO_INTERVAL="$OPTARG" ;;
        m) MIXER="$OPTARG" ;;
        s) SCONTROL="$OPTARG" ;;
        h) printf \
"Usage: volume-pulseaudio [-S] [-F format] [-f format] [-p] [-a|-d] [-H symb] [-M symb]
        [-L symb] [-X symb] [-T thresh] [-t thresh] [-C color] [-c color] [-i inter] 
        [-m mixer] [-s scontrol] [-h]
Options:
-F, -f\tOutput format (-F long format, -f short format) to use, amongst:
\t0\t symb vol [index:name]\t (default long)
\t1\t symb vol [name]
\t2\t symb vol [index]\t (default short)
\t3\t symb vol
-S\tSubscribe to volume events (requires persistent block, always uses long format)
-p\tOmit the percent sign (%%) in volume
-a\tUse ALSA name if possible
-d\tUse device description instead of name if possible
-H\tSymbol to use when audio level is high. Default: '$AUDIO_HIGH_SYMBOL'
-M\tSymbol to use when audio level is medium. Default: '$AUDIO_MED_SYMBOL'
-L\tSymbol to use when audio level is low. Default: '$AUDIO_LOW_SYMBOL'
-X\tSymbol to use when audio is muted. Default: '$AUDIO_MUTED_SYMBOL'
-T\tThreshold for medium audio level. Default: $AUDIO_MED_THRESH
-t\tThreshold for low audio level. Default: $AUDIO_LOW_THRESH
-C\tColor for non-muted audio. Default: $DEFAULT_COLOR
-c\tColor for muted audio. Default: $MUTED_COLOR
-i\tInterval size of volume increase/decrease. Default: $AUDIO_INTERVAL
-m\tUse the given mixer.
-s\tUse the given scontrol.
-h\tShow this help text
" && exit 0;;
    esac
done

if [[ -z "$MIXER" ]] ; then
    MIXER="default"
    if amixer -D pulse info >/dev/null 2>&1 ; then
        MIXER="pulse"
    fi
fi

if [[ -z "$SCONTROL" ]] ; then
    SCONTROL=$(amixer -D "$MIXER" scontrols | sed -n "s/Simple mixer control '\([^']*\)',0/\1/p" | head -n1)
fi

CAPABILITY=$(amixer -D $MIXER get $SCONTROL | sed -n "s/  Capabilities:.*cvolume.*/Capture/p")


function move_sinks_to_new_default {
    DEFAULT_SINK=$1
    pacmd list-sink-inputs | grep index: | grep -o '[0-9]\+' | while read SINK
    do
        pacmd move-sink-input $SINK $DEFAULT_SINK
    done
}

function set_default_playback_device_next {
    inc=${1:-1}
    num_devices=$(pacmd list-sinks | grep -c index:)
    sink_arr=($(pacmd list-sinks | grep index: | grep -o '[0-9]\+'))
    default_sink_index=$(( $(pacmd list-sinks | grep index: | grep -no '*' | grep -o '^[0-9]\+') - 1 ))
    default_sink_index=$(( ($default_sink_index + $num_devices + $inc) % $num_devices ))
    default_sink=${sink_arr[$default_sink_index]}
    pacmd set-default-sink $default_sink
    move_sinks_to_new_default $default_sink
}

case "$BLOCK_BUTTON" in
    1) set_default_playback_device_next ;;
    2) amixer -q -D $MIXER sset $SCONTROL $CAPABILITY toggle ;;
    3) set_default_playback_device_next -1 ;;
    4) amixer -q -D $MIXER sset $SCONTROL $CAPABILITY $AUDIO_INTERVAL%+ ;;
    5) amixer -q -D $MIXER sset $SCONTROL $CAPABILITY $AUDIO_INTERVAL%- ;;
esac

function print_format {
    PERCENT="%"
    [[ $USE_PERCENT == 0 ]] && PERCENT=""
    case "$1" in
        1) echo "$SYMBOL$VOL$PERCENT [$NAME]" ;;
        2) echo "$SYMBOL$VOL$PERCENT [$INDEX]";;
        3) echo "$SYMBOL$VOL$PERCENT" ;;
        *) echo "$SYMBOL$VOL$PERCENT [$INDEX:$NAME]" ;;
    esac
}

function print_block {
    for name in INDEX NAME VOL MUTED; do
        read $name
    done < <(pacmd list-sinks | grep "index:\|name:\|volume: front\|muted:" | grep -A3 '*')
    INDEX=$(echo "$INDEX" | grep -o '[0-9]\+')
    VOL=$(echo "$VOL" | grep -o "[0-9]*%" | head -1 )
    VOL="${VOL%?}"

    NAME=$(echo "$NAME" | sed \
's/.*<.*\.\(.*\)>.*/\1/; t;'\
's/.*<\(.*\)>.*/\1/; t;'\
's/.*/unknown/')

    if [[ $USE_ALSA_NAME == 1 ]] ; then
        ALSA_NAME=$(pacmd list-sinks |\
awk '/^\s*\*/{f=1}/^\s*index:/{f=0}f' |\
grep "alsa.name\|alsa.mixer_name" |\
head -n1 |\
sed 's/.*= "\(.*\)".*/\1/')
        NAME=${ALSA_NAME:-$NAME}
    elif [[ $USE_DESCRIPTION == 1 ]] ; then
        DESCRIPTION=$(pacmd list-sinks |\
awk '/^\s*\*/{f=1}/^\s*index:/{f=0}f' |\
grep "device.description" |\
head -n1 |\
sed 's/.*= "\(.*\)".*/\1/')
        NAME=${DESCRIPTION:-$NAME}
    fi

    if [[ $MUTED =~ "no" ]] ; then
        SYMBOL=$AUDIO_HIGH_SYMBOL
        [[ $VOL -le $AUDIO_MED_THRESH ]] && SYMBOL=$AUDIO_MED_SYMBOL
        [[ $VOL -le $AUDIO_LOW_THRESH ]] && SYMBOL=$AUDIO_LOW_SYMBOL
        COLOR=$DEFAULT_COLOR
    else
        SYMBOL=$AUDIO_MUTED_SYMBOL
        COLOR=$MUTED_COLOR
    fi

    if [[ $SUBSCRIBE == 1 ]] ; then
        print_format "$LONG_FORMAT"
    else
        print_format "$LONG_FORMAT"
        print_format "$SHORT_FORMAT"
        echo "$COLOR"
    fi
}

print_block
if [[ $SUBSCRIBE == 1 ]] ; then
    while read -r EVENT; do
        print_block
    done < <(pactl subscribe | stdbuf -oL grep change)
fi

A .i3/config => .i3/config +86 -0
@@ 0,0 1,86 @@
## font
font pango:DejaVu Sans Mono 10

## i3 ModKeys
set $mod Mod4
set $cmod Mod1

gaps inner 10
set $work1 "Neptune"
set $work2 "Saturn"
set $work3 "Titan"
set $work4 "Venus"
set $work5 "Jupiter"
set $work6 "Mars"

# default workspaces to each monitor
workspace $work1 output DVI-I-1
workspace $work2 output HDMI-0

# startup applications
exec_always feh --bg-scale ~/Pictures/Wallpapers/flower-right.jpg ~/Pictures/Wallpapers/flower-left.jpg

## i3 Opts
hide_edge_borders both
new_window pixel 2

# Floating mode
#floating_modifer $mod

# Focus keys
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right

# Move keys
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right

# Move workspaces
bindsym $mod+1 workspace $work1
bindsym $mod+2 workspace $work2
bindsym $mod+3 workspace $work3
bindsym $mod+4 workspace $work4
bindsym $mod+5 workspace $work5
bindsym $mod+6 workspace $work6

# move focused container to workspace
bindsym $mod+Shift+1 move container to workspace $work1
bindsym $mod+Shift+2 move container to workspace $work2
bindsym $mod+Shift+3 move container to workspace $work3
bindsym $mod+Shift+4 move container to workspace $work4
bindsym $mod+Shift+5 move container to workspace $work5
bindsym $mod+Shift+6 move container to workspace $work6

# assign programs to workspaces
assign [class="Discord"] $work2
assign [class="Thunderbird"] $work3

# splits
bindsym $mod+h split h
bindsym $mod+v split v
bindsym $mod+f fullscreen toggle


## i3 Session keys
bindsym $mod+Shift+c reload
bindsym $mod+Shift+r restart
bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3?' -b 'Yes, exit i3' 'i3-msg exit'"

# General
bindsym $mod+Return exec termite
bindsym $mod+d exec dmenu_run
bindsym $mod+Shift+w kill

bar {
  output DVI-I-1
  tray_output DVI-I-1
  position top
  status_command i3blocks
  modifier $mod
  workspace_buttons yes
  font pango: Source Code Pro 10
}

A .weechat/irc.conf => .weechat/irc.conf +231 -0
@@ 0,0 1,231 @@
#
# weechat -- irc.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#

[look]
buffer_open_before_autojoin = on
buffer_open_before_join = off
buffer_switch_autojoin = on
buffer_switch_join = on
color_nicks_in_names = off
color_nicks_in_nicklist = on
color_nicks_in_server_messages = on
color_pv_nick_like_channel = on
ctcp_time_format = "%a, %d %b %Y %T %z"
display_away = local
display_ctcp_blocked = on
display_ctcp_reply = on
display_ctcp_unknown = on
display_host_join = off
display_host_join_local = on
display_host_quit = off
display_join_message = "329,332,333,366"
display_old_topic = on
display_pv_away_once = on
display_pv_back = on
highlight_channel = "$nick"
highlight_pv = "$nick"
highlight_server = "$nick"
highlight_tags_restrict = "irc_privmsg,irc_notice"
item_channel_modes_hide_args = "k"
item_display_server = buffer_plugin
item_nick_modes = on
item_nick_prefix = on
join_auto_add_chantype = off
msgbuffer_fallback = current
new_channel_position = none
new_pv_position = none
nick_completion_smart = speakers
nick_mode = prefix
nick_mode_empty = off
nicks_hide_password = "nickserv"
notice_as_pv = auto
notice_welcome_redirect = on
notice_welcome_tags = ""
notify_tags_ison = "notify_message"
notify_tags_whois = "notify_message"
part_closes_buffer = off
pv_buffer = independent
pv_tags = "notify_private"
raw_messages = 256
server_buffer = independent
smart_filter = on
smart_filter_delay = 5
smart_filter_join = on
smart_filter_join_unmask = 30
smart_filter_mode = "+"
smart_filter_nick = on
smart_filter_quit = on
temporary_servers = off
topic_strip_colors = off

[color]
input_nick = lightcyan
item_channel_modes = default
item_lag_counting = default
item_lag_finished = yellow
item_nick_modes = default
message_join = green
message_quit = red
mirc_remap = "1,-1:darkgray"
nick_prefixes = "y:lightred;q:lightred;a:lightcyan;o:lightgreen;h:lightmagenta;v:yellow;*:lightblue"
notice = green
reason_quit = default
topic_current = default
topic_new = white
topic_old = default

[network]
autoreconnect_delay_growing = 2
autoreconnect_delay_max = 600
ban_mask_default = "*!$ident@$host"
channel_encode = off
colors_receive = on
colors_send = on
lag_check = 60
lag_max = 1800
lag_min_show = 500
lag_reconnect = 300
lag_refresh_interval = 1
notify_check_ison = 1
notify_check_whois = 5
sasl_fail_unavailable = on
send_unknown_commands = off
whois_double_nick = off

[msgbuffer]

[ctcp]

[ignore]

[server_default]
addresses = ""
anti_flood_prio_high = 2
anti_flood_prio_low = 2
autoconnect = off
autojoin = ""
autoreconnect = on
autoreconnect_delay = 10
autorejoin = off
autorejoin_delay = 30
away_check = 0
away_check_max_nicks = 25
capabilities = ""
command = ""
command_delay = 0
connection_timeout = 60
ipv6 = on
local_hostname = ""
msg_kick = ""
msg_part = "WeeChat ${info:version}"
msg_quit = "WeeChat ${info:version}"
nicks = "andrewzah"
nicks_alternate = on
notify = ""
password = ""
proxy = ""
realname = ""
sasl_fail = continue
sasl_key = ""
sasl_mechanism = plain
sasl_password = ""
sasl_timeout = 15
sasl_username = ""
ssl = off
ssl_cert = ""
ssl_dhkey_size = 2048
ssl_fingerprint = ""
ssl_priorities = "NORMAL:-VERS-SSL3.0"
ssl_verify = on
usermode = ""
username = "andrei"

[server]
znc_snoonet.addresses = "znc.andrewzah.com/6697"
znc_snoonet.proxy
znc_snoonet.ipv6
znc_snoonet.ssl = on
znc_snoonet.ssl_cert
znc_snoonet.ssl_priorities
znc_snoonet.ssl_dhkey_size
znc_snoonet.ssl_fingerprint
znc_snoonet.ssl_verify
znc_snoonet.password = "${sec.data.znc_password}"
znc_snoonet.capabilities
znc_snoonet.sasl_mechanism
znc_snoonet.sasl_username
znc_snoonet.sasl_password
znc_snoonet.sasl_key
znc_snoonet.sasl_timeout
znc_snoonet.sasl_fail
znc_snoonet.autoconnect = on
znc_snoonet.autoreconnect
znc_snoonet.autoreconnect_delay
znc_snoonet.nicks = "andrewzah, andrewzah1, andrewzah2, andrewzah3"
znc_snoonet.nicks_alternate
znc_snoonet.username = "andrei/snoonet"
znc_snoonet.realname
znc_snoonet.local_hostname
znc_snoonet.usermode
znc_snoonet.command
znc_snoonet.command_delay
znc_snoonet.autojoin
znc_snoonet.autorejoin
znc_snoonet.autorejoin_delay
znc_snoonet.connection_timeout
znc_snoonet.anti_flood_prio_high
znc_snoonet.anti_flood_prio_low
znc_snoonet.away_check
znc_snoonet.away_check_max_nicks
znc_snoonet.msg_kick
znc_snoonet.msg_part
znc_snoonet.msg_quit
znc_snoonet.notify
znc_freenode.addresses = "znc.andrewzah.com/6697"
znc_freenode.proxy
znc_freenode.ipv6
znc_freenode.ssl = on
znc_freenode.ssl_cert
znc_freenode.ssl_priorities
znc_freenode.ssl_dhkey_size
znc_freenode.ssl_fingerprint
znc_freenode.ssl_verify
znc_freenode.password = "${sec.data.znc_password}"
znc_freenode.capabilities
znc_freenode.sasl_mechanism
znc_freenode.sasl_username
znc_freenode.sasl_password
znc_freenode.sasl_key
znc_freenode.sasl_timeout
znc_freenode.sasl_fail
znc_freenode.autoconnect = on
znc_freenode.autoreconnect
znc_freenode.autoreconnect_delay
znc_freenode.nicks = "andreizah"
znc_freenode.nicks_alternate
znc_freenode.username = "andrei/freenode"
znc_freenode.realname
znc_freenode.local_hostname
znc_freenode.usermode
znc_freenode.command
znc_freenode.command_delay
znc_freenode.autojoin
znc_freenode.autorejoin
znc_freenode.autorejoin_delay
znc_freenode.connection_timeout
znc_freenode.anti_flood_prio_high
znc_freenode.anti_flood_prio_low
znc_freenode.away_check
znc_freenode.away_check_max_nicks
znc_freenode.msg_kick
znc_freenode.msg_part
znc_freenode.msg_quit
znc_freenode.notify

A nvim/after/syntax/clojure.vim => nvim/after/syntax/clojure.vim +0 -0
A nvim/after/syntax/elm.vim => nvim/after/syntax/elm.vim +50 -0
@@ 0,0 1,50 @@
"=============================================================================
" What Is This: Add some conceal operator for your elm files
" File:         elm.vim (conceal enhancement)
" Author:       arcseldon
" Last Change:  2018-01-30
" Version:      1.0.1
" Require:
"   set nocompatible
"     somewhere on your .vimrc
"
"   Vim 7.3 or Vim compiled with conceal patch.
"   Use --with-features=big or huge in order to compile it in.
"
" Usage:
"   Drop this file in your
"       ~/.vim/after/syntax folder (Linux/MacOSX/BSD...)
"       ~/vimfiles/after/syntax folder (Windows)
"
"   For this script to work, you have to set the encoding
"   to utf-8 :set enc=utf-8
"
" Additional:
"     * if you want to avoid the loading, add the following
"       line in your .vimrc :
"        let g:no_elixir_conceal = 1
"  Changelog:
"   - 1.0.1  Update pipe operator symbol and add few extra operator overrides
"   - 1.0.0  Initial release - just override pipe operator
"
if exists('g:no_elm_conceal') || !has('conceal') || &enc != 'utf-8'
  finish
endif
"
" if !has('conceal')
"     finish
" endif

syntax match exNiceOperator "|>" conceal cchar=▷
" syntax match exNiceOperator "<-" conceal cchar=←
syntax match exNiceOperator "->" conceal cchar=→
" syntax match exNiceOperator "==" conceal cchar=≡
" syntax match exNiceOperator "!=" conceal cchar=≢
syntax match exNiceOperator "<=" conceal cchar=≤
syntax match exNiceOperator ">=" conceal cchar=≥

hi link exNiceOperator Operator
hi! link Conceal Operator
setlocal conceallevel=2



A nvim/after/syntax/ruby.vim => nvim/after/syntax/ruby.vim +21 -0
@@ 0,0 1,21 @@
if !has('conceal')
  finish
endif

syntax clear rubyOperator

syntax keyword rubyOperator is

syntax match rubyNiceOperator "<=" conceal cchar=≤
syntax match rubyNiceOperator ">=" conceal cchar=≥

syntax match rubyNiceOperator "=>" conceal cchar=⇾

syntax match rubyNiceOperator "!=" conceal cchar=≠
syntax keyword rubyNiceOperator lambda conceal cchar=λ

hi link rubyNiceOperator Operator
hi link rubyNiceStatement Statement
hi! link Conceal Operator

set conceallevel=2