diff options
-rw-r--r-- | .XCompose | 93 | ||||
-rw-r--r-- | .effuseignore | 2 | ||||
-rw-r--r-- | .gitconfig | 22 | ||||
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | .gitignore.global | 3 | ||||
-rw-r--r-- | .gitmodules | 6 | ||||
-rw-r--r-- | .irbrc | 4 | ||||
-rw-r--r-- | .mpd/mpd.conf | 414 | ||||
-rw-r--r-- | .ncmpcpp/bindings | 533 | ||||
-rw-r--r-- | .ncmpcpp/config | 497 | ||||
-rw-r--r-- | .riplrc | 1 | ||||
-rw-r--r-- | .zsh/aliases.zsh | 58 | ||||
-rw-r--r-- | .zsh/gitprompt.zsh | 80 | ||||
-rw-r--r-- | .zsh/title.zsh | 30 | ||||
m--------- | .zsh/z | 0 | ||||
m--------- | .zsh/zsh-syntax-highlighting | 0 | ||||
-rw-r--r-- | .zshrc | 67 | ||||
-rw-r--r-- | README.md | 6 |
18 files changed, 1815 insertions, 2 deletions
diff --git a/.XCompose b/.XCompose new file mode 100644 index 00000000..7d6e19b4 --- /dev/null +++ b/.XCompose @@ -0,0 +1,93 @@ +include "%L" # Include system defaults for locale + +<Multi_key> <O> <O> : "∞" +<Multi_key> <period> <quotedbl> : "∴" +<Multi_key> <quotedbl> <period> : "∵" + +# (Select) Greek letters +<Multi_key> <a> <a> : "α" +<Multi_key> <b> <b> : "β" +<Multi_key> <v> <bar> : "γ" +<Multi_key> <underscore> <bar> : "Γ" +<Multi_key> <d> <d> : "δ" +<Multi_key> <D> <D> : "Δ" +<Multi_key> <o> <minus> : "θ" +<Multi_key> <O> <minus> : "Θ" +<Multi_key> <slash> <l> : "λ" +<Multi_key> <slash> <L> : "Λ" +<Multi_key> <p> <i> : "π" +<Multi_key> <P> <I> : "Π" +<Multi_key> <bar> <o> : "ρ" +<Multi_key> <equal> <less> : "Σ" +<Multi_key> <o> <bar> : "φ" +<Multi_key> <O> <bar> : "Φ" +<Multi_key> <u> <bar> : "ψ" +<Multi_key> <U> <bar> : "Ψ" +<Multi_key> <w> <w> : "ω" +<Multi_key> <o> <h> <m> : "Ω" + +# Playing cards (from https://github.com/kragen/xcompose) + +<Multi_key> <bracketleft> <A> <S> <bracketright> : "🂡" U1F0A1 # PLAYING CARD ACE OF SPADES +<Multi_key> <bracketleft> <2> <S> <bracketright> : "🂢" U1F0A2 # PLAYING CARD TWO OF SPADES +<Multi_key> <bracketleft> <3> <S> <bracketright> : "🂣" U1F0A3 # PLAYING CARD THREE OF SPADES +<Multi_key> <bracketleft> <4> <S> <bracketright> : "🂤" U1F0A4 # PLAYING CARD FOUR OF SPADES +<Multi_key> <bracketleft> <5> <S> <bracketright> : "🂥" U1F0A5 # PLAYING CARD FIVE OF SPADES +<Multi_key> <bracketleft> <6> <S> <bracketright> : "🂦" U1F0A6 # PLAYING CARD SIX OF SPADES +<Multi_key> <bracketleft> <7> <S> <bracketright> : "🂧" U1F0A7 # PLAYING CARD SEVEN OF SPADES +<Multi_key> <bracketleft> <8> <S> <bracketright> : "🂨" U1F0A8 # PLAYING CARD EIGHT OF SPADES +<Multi_key> <bracketleft> <9> <S> <bracketright> : "🂩" U1F0A9 # PLAYING CARD NINE OF SPADES +<Multi_key> <bracketleft> <T> <S> <bracketright> : "🂪" U1F0AA # PLAYING CARD TEN OF SPADES +<Multi_key> <bracketleft> <J> <S> <bracketright> : "🂫" U1F0AB # PLAYING CARD JACK OF SPADES +<Multi_key> <bracketleft> <N> <S> <bracketright> : "🂬" U1F0AC # PLAYING CARD KNIGHT OF SPADES +<Multi_key> <bracketleft> <Q> <S> <bracketright> : "🂭" U1F0AD # PLAYING CARD QUEEN OF SPADES +<Multi_key> <bracketleft> <K> <S> <bracketright> : "🂮" U1F0AE # PLAYING CARD KING OF SPADES + +<Multi_key> <bracketleft> <A> <H> <bracketright> : "🂱" U1F0B1 # PLAYING CARD ACE OF HEARTS +<Multi_key> <bracketleft> <2> <H> <bracketright> : "🂲" U1F0B2 # PLAYING CARD TWO OF HEARTS +<Multi_key> <bracketleft> <3> <H> <bracketright> : "🂳" U1F0B3 # PLAYING CARD THREE OF HEARTS +<Multi_key> <bracketleft> <4> <H> <bracketright> : "🂴" U1F0B4 # PLAYING CARD FOUR OF HEARTS +<Multi_key> <bracketleft> <5> <H> <bracketright> : "🂵" U1F0B5 # PLAYING CARD FIVE OF HEARTS +<Multi_key> <bracketleft> <6> <H> <bracketright> : "🂶" U1F0B6 # PLAYING CARD SIX OF HEARTS +<Multi_key> <bracketleft> <7> <H> <bracketright> : "🂷" U1F0B7 # PLAYING CARD SEVEN OF HEARTS +<Multi_key> <bracketleft> <8> <H> <bracketright> : "🂸" U1F0B8 # PLAYING CARD EIGHT OF HEARTS +<Multi_key> <bracketleft> <9> <H> <bracketright> : "🂹" U1F0B9 # PLAYING CARD NINE OF HEARTS +<Multi_key> <bracketleft> <T> <H> <bracketright> : "🂺" U1F0BA # PLAYING CARD TEN OF HEARTS +<Multi_key> <bracketleft> <J> <H> <bracketright> : "🂻" U1F0BB # PLAYING CARD JACK OF HEARTS +<Multi_key> <bracketleft> <N> <H> <bracketright> : "🂼" U1F0BC # PLAYING CARD KNIGHT OF HEARTS +<Multi_key> <bracketleft> <Q> <H> <bracketright> : "🂽" U1F0BD # PLAYING CARD QUEEN OF HEARTS +<Multi_key> <bracketleft> <K> <H> <bracketright> : "🂾" U1F0BE # PLAYING CARD KING OF HEARTS + +<Multi_key> <bracketleft> <A> <D> <bracketright> : "🃁" U1F0C1 # PLAYING CARD ACE OF DIAMONDS +<Multi_key> <bracketleft> <2> <D> <bracketright> : "🃂" U1F0C2 # PLAYING CARD TWO OF DIAMONDS +<Multi_key> <bracketleft> <3> <D> <bracketright> : "🃃" U1F0C3 # PLAYING CARD THREE OF DIAMONDS +<Multi_key> <bracketleft> <4> <D> <bracketright> : "🃄" U1F0C4 # PLAYING CARD FOUR OF DIAMONDS +<Multi_key> <bracketleft> <5> <D> <bracketright> : "🃅" U1F0C5 # PLAYING CARD FIVE OF DIAMONDS +<Multi_key> <bracketleft> <6> <D> <bracketright> : "🃆" U1F0C6 # PLAYING CARD SIX OF DIAMONDS +<Multi_key> <bracketleft> <7> <D> <bracketright> : "🃇" U1F0C7 # PLAYING CARD SEVEN OF DIAMONDS +<Multi_key> <bracketleft> <8> <D> <bracketright> : "🃈" U1F0C8 # PLAYING CARD EIGHT OF DIAMONDS +<Multi_key> <bracketleft> <9> <D> <bracketright> : "🃉" U1F0C9 # PLAYING CARD NINE OF DIAMONDS +<Multi_key> <bracketleft> <T> <D> <bracketright> : "🃊" U1F0CA # PLAYING CARD TEN OF DIAMONDS +<Multi_key> <bracketleft> <J> <D> <bracketright> : "🃋" U1F0CB # PLAYING CARD JACK OF DIAMONDS +<Multi_key> <bracketleft> <N> <D> <bracketright> : "🃌" U1F0CC # PLAYING CARD KNIGHT OF DIAMONDS +<Multi_key> <bracketleft> <Q> <D> <bracketright> : "🃍" U1F0CD # PLAYING CARD QUEEN OF DIAMONDS +<Multi_key> <bracketleft> <K> <D> <bracketright> : "🃎" U1F0CE # PLAYING CARD KING OF DIAMONDS + +<Multi_key> <bracketleft> <A> <C> <bracketright> : "🃑" U1F0D1 # PLAYING CARD ACE OF CLUBS +<Multi_key> <bracketleft> <2> <C> <bracketright> : "🃒" U1F0D2 # PLAYING CARD TWO OF CLUBS +<Multi_key> <bracketleft> <3> <C> <bracketright> : "🃓" U1F0D3 # PLAYING CARD THREE OF CLUBS +<Multi_key> <bracketleft> <4> <C> <bracketright> : "🃔" U1F0D4 # PLAYING CARD FOUR OF CLUBS +<Multi_key> <bracketleft> <5> <C> <bracketright> : "🃕" U1F0D5 # PLAYING CARD FIVE OF CLUBS +<Multi_key> <bracketleft> <6> <C> <bracketright> : "🃖" U1F0D6 # PLAYING CARD SIX OF CLUBS +<Multi_key> <bracketleft> <7> <C> <bracketright> : "🃗" U1F0D7 # PLAYING CARD SEVEN OF CLUBS +<Multi_key> <bracketleft> <8> <C> <bracketright> : "🃘" U1F0D8 # PLAYING CARD EIGHT OF CLUBS +<Multi_key> <bracketleft> <9> <C> <bracketright> : "🃙" U1F0D9 # PLAYING CARD NINE OF CLUBS +<Multi_key> <bracketleft> <T> <C> <bracketright> : "🃚" U1F0DA # PLAYING CARD TEN OF CLUBS +<Multi_key> <bracketleft> <J> <C> <bracketright> : "🃛" U1F0DB # PLAYING CARD JACK OF CLUBS +<Multi_key> <bracketleft> <N> <C> <bracketright> : "🃜" U1F0DC # PLAYING CARD KNIGHT OF CLUBS +<Multi_key> <bracketleft> <Q> <C> <bracketright> : "🃝" U1F0DD # PLAYING CARD QUEEN OF CLUBS +<Multi_key> <bracketleft> <K> <C> <bracketright> : "🃞" U1F0DE # PLAYING CARD KING OF CLUBS + +<Multi_key> <bracketleft> <C> <B> <bracketright> : "🂠" U1F0A0 # PLAYING CARD BACK +<Multi_key> <bracketleft> <B> <J> <bracketright> : "🃏" U1F0CF # PLAYING CARD BLACK JOKER +<Multi_key> <bracketleft> <W> <J> <bracketright> : "🃟" U1F0DF # PLAYING CARD WHITE JOKER diff --git a/.effuseignore b/.effuseignore new file mode 100644 index 00000000..49c35dc4 --- /dev/null +++ b/.effuseignore @@ -0,0 +1,2 @@ +etc +README.md diff --git a/.gitconfig b/.gitconfig new file mode 100644 index 00000000..68646c4f --- /dev/null +++ b/.gitconfig @@ -0,0 +1,22 @@ +[user] + name = Curtis McEnroe + email = programble@gmail.com +[core] + editor = vim + excludesfile = /home/curtis/.gitignore.global + autocrlf = input +[sendemail] + smtpencryption = tls + smtpserver = smtp.gmail.com + smtpuser = programble@gmail.com + smtpserverport = 587 +[merge] + tool = vimdiff +[color] + ui = true +[push] + default = simple +[include] + path = .gitconfig.private +[github] + user = programble diff --git a/.gitignore b/.gitignore index 28bda465..06764a2a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +*.effuse autoload plugin plugged diff --git a/.gitignore.global b/.gitignore.global new file mode 100644 index 00000000..d772925f --- /dev/null +++ b/.gitignore.global @@ -0,0 +1,3 @@ +*~ +*.swp +*.swo diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..564aadf5 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule ".zsh/zsh-syntax-highlighting"] + path = .zsh/zsh-syntax-highlighting + url = https://github.com/zsh-users/zsh-syntax-highlighting.git +[submodule ".zsh/z"] + path = .zsh/z + url = https://github.com/rupa/z.git diff --git a/.irbrc b/.irbrc new file mode 100644 index 00000000..d4c39f88 --- /dev/null +++ b/.irbrc @@ -0,0 +1,4 @@ +$:.unshift 'lib' +$: << '.' + +require 'pp' diff --git a/.mpd/mpd.conf b/.mpd/mpd.conf new file mode 100644 index 00000000..c3cae20f --- /dev/null +++ b/.mpd/mpd.conf @@ -0,0 +1,414 @@ +# An example configuration file for MPD +# See the mpd.conf man page for a more detailed description of each parameter. + + +# 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 "~/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 "~/.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 "~/.mpd/mpd.db" +# +# 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 "~/.mpd/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 "~/.mpd/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 "~/.mpd/mpdstate" +# +# The location of the sticker database. This is a database which +# manages dynamic information attached to songs. +# +#sticker_file "~/.mpd/sticker.sql" +# +############################################################################### + + +# 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 "mpd" +# +# 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. +# +# 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" +# +# 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. Optionally, 'comment' can be added to this +# list. +# +#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 +# can 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" +# +############################################################################### + + +# 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. +# +# See <http://mpd.wikia.com/wiki/Configuration#Audio_Outputs> for examples of +# other audio outputs. +# +# An example of an ALSA output: +# +#audio_output { +# type "alsa" +# name "My ALSA Device" +## device "hw:0,0" # optional +## format "44100:16:2" # 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 +## format "44100:16:2" # 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" +# encoding "ogg" # 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 +## 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 "1376" + 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 "10" # 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 +} +audio_output { + type "fifo" + name "My FIFO" + path "/tmp/mpd.fifo" + format "44100:16:2" +} + +# +## 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 +#} +# +# This setting will change all decoded audio to be converted to the specified +# format before being passed to the audio outputs. By default, this setting is +# disabled. +# +#audio_output_format "44100:16:2" +# +# If MPD has been compiled with libsamplerate support, this setting specifies +# the sample rate converter to use. Possible values can be found in the +# mpd.conf man page or the libsamplerate documentation. By default, this is +# setting is disabled. +# +#samplerate_converter "Fastest Sinc Interpolator" +# +############################################################################### + + +# Normalization automatic volume adjustments ################################## +# +# This setting specifies the type of ReplayGain to use. This setting can have +# the argument "off", "album" or "track". See <http://www.replaygain.org> +# for more details. 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 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" +# +############################################################################### + + +# MPD Internal Buffering ###################################################### +# +# This setting adjusts the size of internal decoded audio buffering. Changing +# this may have undesired effects. Don't change this if you don't know what you +# are doing. +# +#audio_buffer_size "2048" +# +# This setting controls the percentage of the buffer which is filled before +# beginning to play. Increasing this reduces the chance of audio file skipping, +# at the cost of increased time prior to audio playback. +# +#buffer_before_play "10%" +# +############################################################################### + + +# Resource Limitations ######################################################## +# +# These settings are various limitations to prevent MPD from using too many +# resources. Generally, these settings should be minimized to prevent security +# risks, depending on the operating resources. +# +#connection_timeout "60" +#max_connections "10" +#max_playlist_length "16384" +#max_command_list_size "2048" +#max_output_buffer_size "8192" +# +############################################################################### + + +# 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" +# +# This setting controls the encoding that ID3v1 tags should be converted from. +# +#id3v1_encoding "ISO-8859-1" +# +############################################################################### + + +# SIDPlay decoder ############################################################# +# +# songlength_database: +# Location of your songlengths file, as distributed with the HVSC. +# The sidplay plugin checks this for matching MD5 fingerprints. +# See http://www.c64.org/HVSC/DOCUMENTS/Songlengths.faq +# +# default_songlength: +# This is the default playing time in seconds for songs not in the +# songlength database, or in case you're not using a database. +# A value of 0 means play indefinitely. +# +# filter: +# Turns the SID filter emulation on or off. +# +#decoder { +# plugin "sidplay" +# songlength_database "/media/C64Music/DOCUMENTS/Songlengths.txt" +# default_songlength "120" +# filter "true" +#} +# +############################################################################### + diff --git a/.ncmpcpp/bindings b/.ncmpcpp/bindings new file mode 100644 index 00000000..e9bd1560 --- /dev/null +++ b/.ncmpcpp/bindings @@ -0,0 +1,533 @@ +########################################################## +## this is example bindings configuration file, copy it ## +## to ~/.ncmpcpp/bindings and set up your preferences ## +########################################################## +## +##### General rules ##### +## +## 1) Because each action has runtime checks whether it's +## ok to run it, a few actions can be bound to one key. +## Actions will be bound in order given in configuration +## file. When a key is pressed, first action in order +## will test itself whether it's possible to run it. If +## test succeeds, action is executed and other actions +## bound to this key are ignored. If it doesn't, next +## action in order tests itself etc. +## +## 2) It's possible to bind more that one action at once +## to a key. It can be done using the following syntax: +## +## def_key "key" +## action1 +## action2 +## ... +## +## This creates chain of actions. When such chain is +## executed, each action in chain is run until the end of +## chain is reached or one of actions failed to execute +## due to its requirements not being met. Note that +## execution of chain of actions ALWAYS succeeds, no +## matter if one of actions from the chain failed (even +## if it was the first one in order and thus nothing +## was really executed). Because of that, if you decide +## to bind both actions and chains to a single key, make +## sure that chain is defined in the end. Otherwise, all +## actions bound to the key after chain will never be run. +## +## 3) When ncmpcpp starts, bindings configuration file is +## parsed and then ncmpcpp provides "missing pieces" +## of default keybindings. If you want to disable some +## bindings, there is a special action called 'dummy' +## for that purpose. Eg. if you want to disable ability +## to crop playlists, you need to put the following +## into configuration file: +## +## def_key "C" +## dummy +## +## After that ncmpcpp will not bind any default action +## to this key. +## +## 4) To let you write simple macros, the following special +## actions are provided: +## +## - push_character "character" - pushes given special +## character into input queue, so it will be immediately +## picked by ncmpcpp upon next call to readKey function. +## Accepted values: mouse, up, down, page_up, page_down, +## home, end, space, enter, insert, delete, left, right, +## tab, shift_tab, ctrl_a, ctrl_b, ..., ctrl_z, f1, f2, +## ..., f12, backspace, backspace_2. +## +## - push_characters "string" - pushes given string into +## input queue. +## +## - require_runnable "action" - checks whether given action +## is runnable and fails if it isn't. This is especially +## useful when mixed with previous two functions. Consider +## the following macro definition: +## +## def_key "key" +## push_characters "custom_filter" +## apply_filter +## +## If apply_filter can't be currently run, we end up with +## sequence of characters in input queue which will be +## treated just as we typed them. This may lead to unexpected +## results (in this case 'c' will most likely clear current +## playlist, 'u' will trigger database update, 's' will stop +## playback etc.). To prevent such thing from happening, we +## need to change above definition to this one: +## +## def_key "key" +## require_runnable "apply_filter" +## push_characters "custom_filter" +## apply_filter +## +## Here, first we test whether apply_filter can be actually run +## before we stuff characters into input queue, so if condition +## is not met, whole chain is aborted and we're fine. +## +## - require_screen "screen" - checks whether given screen is +## currently active. accepted values: browser, clock, help, +## media_library, outputs, playlist, playlist_editor, +## search_engine, tag_editor, visualizer, last_fm, lyrics, +## selected_items_adder, server_info, song_info, +## sort_playlist_dialog, tiny_tag_editor. +## +## - run_external_command "command" - runs given command using +## system() function. +## +## 5) In addition to binding to a key, you can also bind actions +## or chains of actions to a command. If it comes to commands, +## syntax is very similar to defining keys. Here goes example +## definition of a command: +## +## def_command "quit" [deferred] +## stop +## quit +## +## If you execute the above command (which can be done by +## invoking action execute_command, typing 'quit' and pressing +## enter), ncmpcpp will stop the player and then quit. Note the +## presence of word 'deferred' enclosed in square brackets. It +## tells ncmpcpp to wait for confirmation (ie. pressing enter) +## after you typed quit. Instead of 'deferred', 'immediate' +## could be used. Then ncmpcpp will not wait for confirmation +## (enter) and will execute the command the moment it sees it. +## +## Note: Both 'backspace' and 'backspace_2' are used because some +## terminals interpret backspace using keycode of 'backspace' +## and some the one of 'backspace_2'. You can get away with +## binding once if all your terminal emulators use the same +## value. +## +## Note: There is a difference between: +## +## def_key "key" +## action1 +## +## def_key "key" +## action2 +## +## and +## +## def_key "key" +## action1 +## action2 +## +## First one binds two single actions to the same key whilst +## second one defines a chain of actions. The behavior of +## these two is different and is described in (1) and (2). +## +## Note: Function def_key accepts non-ascii characters. +## +##### List of unbound actions ##### +## +## The following actions are not bound to any key/command: +## +## - set_volume +## - filter_playlist_on_priorities +## +# +#def_key "mouse" +# mouse_event +# +#def_key "up" +# scroll_up +# +#def_key "down" +# scroll_down +# +def_key "j" + scroll_down + +def_key "k" + scroll_up + +#def_key "[" +# scroll_up_album +# +#def_key "]" +# scroll_down_album +# +#def_key "{" +# scroll_up_artist +# +#def_key "}" +# scroll_down_artist +# +#def_key "page_up" +# page_up +# +#def_key "page_down" +# page_down +# +#def_key "home" +# move_home +# +#def_key "end" +# move_end +# +#def_key "space" +# press_space +# +#def_key "enter" +# press_enter +# +#def_key "delete" +# delete_playlist_items +# +#def_key "delete" +# delete_stored_playlist +# +def_key "d" + delete_playlist_items + +def_key "d" + delete_stored_playlist + +#def_key "right" +# next_column +# +#def_key "right" +# slave_screen +# +#def_key "right" +# volume_up +# +#def_key "+" +# volume_up +# +#def_key "left" +# previous_column +# +#def_key "left" +# master_screen +# +#def_key "left" +# volume_down +# +#def_key "-" +# volume_down +# +#def_key ":" +# execute_command +# +#def_key "tab" +# next_screen +# +#def_key "shift_tab" +# previous_screen +# +#def_key "f1" +# show_help +# +def_key "1" + show_playlist + +def_key "2" + show_media_library + +def_key "2" + toggle_media_library_columns_mode + +def_key "3" + show_search_engine + +def_key "3" + reset_search_engine + +def_key "4" + show_browser + +def_key "4" + change_browse_mode + +#def_key "5" +# show_playlist_editor +# +#def_key "6" +# show_tag_editor +# +#def_key "7" +# show_outputs +# +#def_key "8" +# show_visualizer +# +def_key "0" + show_help + +#def_key "=" +# show_clock +# +#def_key "@" +# show_server_info +# +#def_key "s" +# stop +# +#def_key "p" +# pause +# +#def_key ">" +# next +# +#def_key "<" +# previous +# +#def_key "ctrl_h" +# jump_to_parent_directory +# +#def_key "ctrl_h" +# replay_song +# +#def_key "backspace" +# jump_to_parent_directory +# +#def_key "backspace" +# replay_song +# +#def_key "backspace_2" +# jump_to_parent_directory +# +#def_key "backspace_2" +# replay_song +# +#def_key "f" +# seek_forward +# +#def_key "b" +# seek_backward +# +#def_key "r" +# toggle_repeat +# +#def_key "z" +# toggle_random +# +#def_key "y" +# save_tag_changes +# +#def_key "y" +# start_searching +# +#def_key "y" +# toggle_single +# +#def_key "R" +# toggle_consume +# +#def_key "Y" +# toggle_replay_gain_mode +# +#def_key "t" +# toggle_space_mode +# +#def_key "T" +# toggle_add_mode +# +#def_key "|" +# toggle_mouse +# +#def_key "#" +# toggle_bitrate_visibility +# +#def_key "Z" +# shuffle +# +#def_key "x" +# toggle_crossfade +# +#def_key "X" +# set_crossfade +# +#def_key "u" +# update_database +# +#def_key "ctrl_v" +# sort_playlist +# +#def_key "ctrl_r" +# reverse_playlist +# +#def_key "ctrl_f" +# apply_filter +# +#def_key "/" +# find +# +#def_key "/" +# find_item_forward +# +#def_key "?" +# find +# +#def_key "?" +# find_item_backward +# +#def_key "." +# next_found_item +# +#def_key "," +# previous_found_item +# +#def_key "w" +# toggle_find_mode +# +#def_key "e" +# edit_song +# +#def_key "e" +# edit_library_tag +# +#def_key "e" +# edit_library_album +# +#def_key "e" +# edit_directory_name +# +#def_key "e" +# edit_playlist_name +# +#def_key "e" +# edit_lyrics +# +#def_key "i" +# show_song_info +# +#def_key "I" +# show_artist_info +# +#def_key "g" +# jump_to_position_in_song +# +#def_key "l" +# show_lyrics +# +#def_key "v" +# reverse_selection +# +#def_key "V" +# remove_selection +# +#def_key "B" +# select_album +# +#def_key "a" +# add_selected_items +# +#def_key "c" +# clear_playlist +# +#def_key "c" +# clear_main_playlist +# +#def_key "C" +# crop_playlist +# +#def_key "C" +# crop_main_playlist +# +#def_key "m" +# move_sort_order_up +# +#def_key "m" +# move_selected_items_up +# +#def_key "m" +# toggle_media_library_sort_mode +# +#def_key "n" +# move_sort_order_down +# +#def_key "n" +# move_selected_items_down +# +#def_key "M" +# move_selected_items_to +# +#def_key "A" +# add +# +#def_key "S" +# save_playlist +# +#def_key "o" +# jump_to_playing_song +# +#def_key "G" +# jump_to_browser +# +#def_key "G" +# jump_to_playlist_editor +# +#def_key "~" +# jump_to_media_library +# +#def_key "E" +# jump_to_tag_editor +# +#def_key "U" +# toggle_playing_song_centering +# +#def_key "P" +# toggle_display_mode +# +#def_key "\\" +# toggle_interface +# +#def_key "!" +# toggle_separators_between_albums +# +#def_key "L" +# toggle_lyrics_fetcher +# +#def_key "F" +# toggle_fetching_lyrics_in_background +# +#def_key "ctrl_l" +# toggle_screen_lock +# +#def_key "`" +# toggle_browser_sort_mode +# +#def_key "`" +# toggle_library_tag_type +# +#def_key "`" +# refetch_lyrics +# +#def_key "`" +# refetch_artist_info +# +#def_key "`" +# add_random_items +# +#def_key "ctrl_p" +# set_selected_items_priority +# +#def_key "q" +# quit +# diff --git a/.ncmpcpp/config b/.ncmpcpp/config new file mode 100644 index 00000000..367270e8 --- /dev/null +++ b/.ncmpcpp/config @@ -0,0 +1,497 @@ +#################################################### +## this is example configuration file, copy it to ## +## ~/.ncmpcpp/config and set up your preferences ## +#################################################### +# +##### directories ###### +## +## Directory for storing ncmpcpp related files. +## Changing it is useful if you want to store +## everything somewhere else and provide command +## line setting for alternative location to config +## file which defines that while launching ncmpcpp. +## +# +#ncmpcpp_directory = "~/.ncmpcpp" +# +## +## Directory for storing downloaded lyrics. It +## defaults to ~/.lyrics since other MPD clients +## (eg. ncmpc) also use that location. +## +# +#lyrics_directory = "~/.lyrics" +# +##### connection settings ##### +# +## set it in order to make tag editor and renaming files work properly +# +#mpd_host = "localhost" +# +#mpd_port = "6600" +# +mpd_music_dir = "~/Music" +# +#mpd_connection_timeout = "5" +# +#mpd_crossfade_time = "5" +# +##### music visualizer ##### +## +## Note: In order to make music visualizer work you'll +## need to use mpd fifo output, whose format parameter +## has to be set to 44100:16:1 for mono visualization +## or 44100:16:2 for stereo visualization. Example +## configuration (it has to be put into mpd.conf): +## +## audio_output { +## type "fifo" +## name "My FIFO" +## path "/tmp/mpd.fifo" +## format "44100:16:2" +## } +## +# +## +## If you set format to 44100:16:2, make it 'yes'. +## +# +visualizer_in_stereo = "yes" +# +visualizer_fifo_path = "/tmp/mpd.fifo" +# +## +## Note: Below parameter is needed for ncmpcpp +## to determine which output provides data for +## visualizer and thus allow syncing between +## visualization and sound as currently there +## are some problems with it. +## +# +visualizer_output_name = "My FIFO" +# +## +## Note: Below parameter defines how often ncmpcpp +## has to "synchronize" visualizer and audio outputs. +## 30 seconds is optimal value, but if you experience +## synchronization problems, set it to lower value. +## Keep in mind that sane values start with >=10. +## +# +#visualizer_sync_interval = "30" +# +## +## Note: To enable spectrum frequency visualization +## you need to compile ncmpcpp with fftw3 support. +## +# +#visualizer_type = "wave" (spectrum/wave) +# +#visualizer_look = "◆│" +# +##### system encoding ##### +## +## ncmpcpp should detect your charset encoding +## but if it failed to do so, you can specify +## charset encoding you are using here. +## +## Note: You can see whether your ncmpcpp build +## supports charset detection by checking output +## of `ncmpcpp --version`. +## +## Note: Since MPD uses utf8 by default, setting +## this option makes sense only if your encoding +## is different. +## +# +#system_encoding = "" +# +##### delays ##### +# +## delay after playlist highlighting will be disabled (0 = don't disable) +# +#playlist_disable_highlight_delay = "5" +# +## defines how long various messages are supposed to be visible +# +#message_delay_time = "4" +# +##### song format ##### +## +## for song format you can use: +## +## %l - length +## %f - filename +## %D - directory +## %a - artist +## %A - album artist +## %t - title +## %b - album +## %y - date +## %n - track number (01/12 -> 01) +## %N - full track info (01/12 -> 01/12) +## %g - genre +## %c - composer +## %p - performer +## %d - disc +## %C - comment +## %P - priority +## $R - begin right alignment +## +## you can also put them in { } and then it will be displayed +## only if all requested values are available and/or define alternate +## value with { }|{ } eg. {%a - %t}|{%f} +## +## Note: If you want to set limit on maximal length of a tag, just +## put the appropriate number between % and character that defines +## tag type, e.g. to make album take max. 20 terminal cells, use '%20b'. +## +## Note: Format that is similar to "%a - %t" (i.e. without any additional +## braces) is equal to "{%a - %t}", so if one of the tags is missing, +## you'll get nothing. +## +## text can also have different color than the main window has, +## eg. if you want length to be green, write $3%l$9 +## +## available values: +## +## - 0 - default window color (discards all other colors) +## - 1 - black +## - 2 - red +## - 3 - green +## - 4 - yellow +## - 5 - blue +## - 6 - magenta +## - 7 - cyan +## - 8 - white +## - 9 - end of current color +## +## Note: colors can be nested. +## +# +#song_list_format = "{%a - }{%t}|{$8%f$9}$R{$3(%l)$9}" +# +#song_status_format = "{{%a{ \"%b\"{ (%y)}} - }{%t}}|{%f}" +# +#song_library_format = "{%n - }{%t}|{%f}" +# +#tag_editor_album_format = "{(%y) }%b" +# +## +## Note: Below variables are used for sorting songs in browser. +## The sort mode determines how songs are sorted, and can be used +## in combination with a sort format to specify a custom sorting format. +## Possible values for browser_sort_mode are "name", "mtime" and "format". +## +# +#browser_sort_mode = "name" +# +#browser_sort_format = "{%a - }{%t}|{%f} {(%l)}" +# +## +## Note: Below variables are for alternative version of user's interface. +## Their syntax supports all tags and colors listed above plus some extra +## markers used for text attributes. They are followed by character '$'. +## After that you can put: +## +## - b - bold text +## - u - underline text +## - r - reverse colors +## - a - use alternative character set +## +## If you don't want to use an attribute anymore, just put it again, but +## this time insert character '/' between '$' and attribute character, +## e.g. {$b%t$/b}|{$r%f$/r} will display bolded title tag or filename +## with reversed colors. +## +# +#alternative_header_first_line_format = "$b$1$aqqu$/a$9 {%t}|{%f} $1$atqq$/a$9$/b" +# +#alternative_header_second_line_format = "{{$4$b%a$/b$9}{ - $7%b$9}{ ($4%y$9)}}|{%D}" +# +## +## Note: Below variables also supports +## text attributes listed above. +## +# +#now_playing_prefix = "$b" +# +#now_playing_suffix = "$/b" +# +#browser_playlist_prefix = "$2playlist$9 " +# +#selected_item_prefix = "$6" +# +#selected_item_suffix = "$9" +# +#modified_item_prefix = "$3> $9" +# +## colors are not supported for below variable +# +#song_window_title_format = "{%a - }{%t}|{%f}" +# +##### columns settings ##### +## +## syntax of song columns list format is "column column etc." +## +## - syntax for each column is: +## +## (width of column)[column's color]{displayed tag} +## +## Note: Width is by default in %, if you want a column to +## have fixed size, add 'f' after the value, e.g. (10)[white]{a} +## will be the column that take 10% of screen (so the real column's +## width will depend on actual screen size), whereas (10f)[white]{a} +## will take 10 terminal cells, no matter how wide the screen is. +## +## - color is optional (if you want the default one, type []) +## +## Note: You can give a column additional attributes by putting appropriate +## character after displayed tag character. Available attributes are: +## +## - r - column will be right aligned +## - E - if tag is empty, empty tag marker won't be displayed +## +## You can also: +## +## - give a column custom name by putting it after attributes, +## separated with character ':', e.g. {lr:Length} gives you +## right aligned column of lengths named "Length". +## +## - define sequence of tags, that have to be displayed in case +## predecessor is empty in a way similar to the one in classic +## song format, i.e. using '|' character, e.g. {a|c|p:Owner} +## creates column named "Owner" that tries to display artist +## tag and then composer and performer if previous ones are +## not available. +## +# +song_columns_list_format = "(7f)[green]{l} (25)[cyan]{a} (40)[]{t|f:Title} (30)[red]{b}" +# +##### various settings ##### +# +## +## Note: Custom command that will be executed each +## time song changes. Useful for notifications etc. +## +## Attention: It doesn't support song format anymore. +## Use `ncmpcpp --now-playing SONG_FORMAT` instead. +## +#execute_on_song_change = "" +# +playlist_show_remaining_time = "no" +# +playlist_shorten_total_times = "yes" +# +#playlist_separate_albums = "no" +# +playlist_display_mode = "columns" #(classic/columns) +# +browser_display_mode = "columns" #(classic/columns) +# +search_engine_display_mode = "columns" #(classic/columns) +# +playlist_editor_display_mode = "columns" #(classic/columns) +# +#discard_colors_if_item_is_selected = "yes" +# +#incremental_seeking = "yes" +# +#seek_time = "1" +# +#volume_change_step = "1" +# +#autocenter_mode = "no" +# +#centered_cursor = "no" +# +## +## Note: You can specify third character which will +## be used to build 'empty' part of progressbar. +## +#progressbar_look = "=>" +# +#progressbar_boldness = "yes" +# +#default_place_to_search_in = "database" (database/playlist) +# +user_interface = "alternative" #(classic/alternative) +# +media_library_left_column = "A" #(possible values: a,y,g,c,p, legend above) +# +#default_find_mode = "wrapped" (wrapped/normal) +# +#default_space_mode = "add" (add/select) +# +#default_tag_editor_pattern = "%n - %t" +# +#header_visibility = "yes" +# +#statusbar_visibility = "yes" +# +titles_visibility = "no" +# +#header_text_scrolling = "yes" +# +#fancy_scrolling = "yes" +# +#cyclic_scrolling = "no" +# +#lines_scrolled = "2" +# +#follow_now_playing_lyrics = "no" +# +#fetch_lyrics_for_current_song_in_background = "no" +# +#store_lyrics_in_song_dir = "no" +# +#generate_win32_compatible_filenames = "yes" +# +## +## Note: If you set this variable, ncmpcpp will try to +## get info from last.fm in language you set and if it +## fails, it will fall back to english. Otherwise it will +## use english the first time. +## +## Note: Language has to be expressed as an ISO 639 alpha-2 code. +## +#lastfm_preferred_language = "" +# +#ncmpc_like_songs_adding = "no" (enabled - add/remove, disabled - always add) +# +#show_hidden_files_in_local_browser = "no" +# +#display_screens_numbers_on_start = "yes" +# +## +## How shall key_screen_switcher work? +## +## - "previous" - switch between current and last used screen +## - "sequence: 2 -> 9 -> 5" - switch between given sequence of screens. +## +## Screen numbers you can use after 'sequence' keyword are: +## +## - 1 - help +## - 2 - playlist +## - 3 - browser +## - 4 - search engine +## - 5 - media library +## - 6 - playlist editor +## - 7 - tag editor +## - 8 - outputs +## - 9 - visualizer +## - 10 - clock +## +## As you can see, above example will switch between +## playlist, visualizer and media library screens. +## +#screen_switcher_mode = "sequence: 2 -> 3" +# +## +## Default width of locked screen (in %). +## Acceptable values are from 20 to 80. +## +# +#locked_screen_width_part = "50" +# +#ask_for_locked_screen_width_part = "yes" +# +## +## Note: You can define startup screen for ncmpcpp +## by choosing screen number from the list above. +## +#startup_screen = "2" +# +#jump_to_now_playing_song_at_start = "yes" +# +ask_before_clearing_main_playlist = "no" +# +#clock_display_seconds = "no" +# +#display_volume_level = "yes" +# +display_bitrate = "yes" +# +#display_remaining_time = "yes" +# +#regular_expressions = "none" (none/basic/extended) +# +## +## Note: If below is enabled, ncmpcpp will ignore leading +## "The" word while sorting items in browser, tags in +## media library, etc. +## +ignore_leading_the = "yes" +# +#block_search_constraints_change_if_items_found = "yes" +# +#mouse_support = "yes" +# +#mouse_list_scroll_whole_page = "yes" +# +#empty_tag_marker = "<empty>" +# +#tags_separator = " | " +# +#tag_editor_extended_numeration = "no" +# +#media_library_sort_by_mtime = "no" +# +#enable_window_title = "yes" +# +## +## Note: You can choose default search mode for search +## engine. Available modes are: +## +## - 1 - use mpd built-in searching (no regexes, pattern matching) +## - 2 - use ncmpcpp searching (pattern matching with support for regexes, +## but if your mpd is on a remote machine, downloading big database +## to process it can take a while +## - 3 - match only exact values (this mode uses mpd function for searching +## in database and local one for searching in current playlist) +## +# +search_engine_default_search_mode = "2" +# +#external_editor = "" +# +#use_console_editor = "no" (set to yes, if your editor is console app) +# +##### colors definitions ##### +# +#colors_enabled = "yes" +# +#empty_tag_color = "cyan" +# +#header_window_color = "default" +# +#volume_color = "default" +# +#state_line_color = "default" +# +#state_flags_color = "default" +# +#main_window_color = "yellow" +# +#color1 = "white" +# +#color2 = "green" +# +#main_window_highlight_color = "yellow" +# +#progressbar_color = "default" +# +#progressbar_elapsed_color = "default" +# +#statusbar_color = "default" +# +#alternative_ui_separator_color = "black" +# +#active_column_color = "red" +# +#visualizer_color = "yellow" +# +#window_border_color = "green" +# +#active_window_border = "red" +# diff --git a/.riplrc b/.riplrc new file mode 100644 index 00000000..e10acd3c --- /dev/null +++ b/.riplrc @@ -0,0 +1 @@ +%w[multi_line rocket color_error color_result auto_indent short_errors].map {|r| require "ripl/#{r}" } diff --git a/.zsh/aliases.zsh b/.zsh/aliases.zsh new file mode 100644 index 00000000..98bbae18 --- /dev/null +++ b/.zsh/aliases.zsh @@ -0,0 +1,58 @@ +function reload { + source ~/.zshrc + rehash +} + +function mkcd { + mkdir $@ + if [ "$1" = "-p" ]; then + cd $2 + else + cd $1 + fi +} + +function home.programble.me { + ssh -R 8071:localhost:$1 quartz +} + + +alias killlall='killall' +alias irb='ripl' +alias l='ls' +alias ll='ls' + +alias ls='ls --color=auto' +alias grep='grep --color=auto' +alias rm='rm -vI' + +alias gvim='gvim 2> /dev/null' + +alias sprunge='curl -F "sprunge=<-" http://sprunge.us' + +if which hub &> /dev/null; then + compdef hub=git + alias git=hub +fi + +alias g=git +alias ga='git add' +alias gb='git branch' +alias gc='git commit' +alias gcl='git clone' +alias gco='git checkout' +alias gd='git diff' +alias gi='git init' +alias gl='git log' +alias glg="git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative --color" +alias gm='git merge' +alias gmv='git mv' +alias gp='git push' +alias gpom='git pull origin master' +alias gr='git remote' +alias grm='git rm' +alias gs='git status -sb' +alias gsh='git show' +alias gst='git stash' +alias gt='git tag' +alias gu='git pull' diff --git a/.zsh/gitprompt.zsh b/.zsh/gitprompt.zsh new file mode 100644 index 00000000..433481b9 --- /dev/null +++ b/.zsh/gitprompt.zsh @@ -0,0 +1,80 @@ +# Ported from http://sebastiancelis.com/2009/11/16/zsh-prompt-git-users/ + +function _gitprompt_update { + unset _git_branch + unset _git_status + unset _git_dirty + + local st="$(git status 2> /dev/null)" + if [[ -n "$st" ]]; then + local -a arr + arr=(${(f)st}) + + if [[ $arr[1] =~ 'Not currently on any branch.' ]]; then + _git_branch='none' + else + _git_branch="${arr[1][(w)-1]}" + fi + + if [[ $arr[2] =~ 'Your branch is' ]]; then + if [[ $arr[2] =~ 'ahead' ]]; then + _git_status='ahead' + elif [[ $arr[2] =~ 'diverged' ]]; then + _git_status='diverged' + else + _git_status='behind' + fi + fi + + if [[ ! $st =~ 'nothing' ]]; then + _git_dirty=1 + fi + fi +} + +function gitprompt { + if [[ -n "$_git_branch" ]]; then + local s + [[ -z "$1" ]] && s="%{${fg[yellow]}%}" + + if [[ -n "$_git_dirty" ]]; then + s+="⚡" + else + s+=":" + fi + + s+="$_git_branch" + case "$_git_status" in + ahead) + s+="↑" + ;; + diverged) + s+="↕" + ;; + behind) + s+="↓" + ;; + esac + + echo "$s" + fi +} + +function _gitprompt_preexec { + [[ "$1" =~ "^g" ]] && _git_command=1 +} + +function _gitprompt_precmd { + if [[ -n "$_git_command" ]]; then + _gitprompt_update + unset _git_command + fi +} + +typeset -ga preexec_functions +typeset -ga precmd_functions +typeset -ga chpwd_functions + +preexec_functions+='_gitprompt_preexec' +precmd_functions+='_gitprompt_precmd' +chpwd_functions+='_gitprompt_update' diff --git a/.zsh/title.zsh b/.zsh/title.zsh new file mode 100644 index 00000000..0307b57c --- /dev/null +++ b/.zsh/title.zsh @@ -0,0 +1,30 @@ +function _title { + print -Pn "\033]0;$@\a" +} + +function title { + if [[ -n "$1" ]]; then + _title_custom=1 + _title $@ + else + unset _title_custom + _title_precmd + fi +} + +function _title_preexec { + [[ -z "$_title_custom" ]] && _title "$1" +} + +unset _title_host +[[ -n "$SSH_CLIENT" ]] && _title_host='%m:' + +function _title_precmd { + [[ -z "$_title_custom" ]] && _title '$_title_host%1~' +} + +typeset -ga preexec_functions +typeset -ga precmd_functions + +preexec_functions+='_title_preexec' +precmd_functions+='_title_precmd' diff --git a/.zsh/z b/.zsh/z new file mode 160000 +Subproject dfd4308ae84da481f774b3f5e732ee277d9d876 diff --git a/.zsh/zsh-syntax-highlighting b/.zsh/zsh-syntax-highlighting new file mode 160000 +Subproject e5d8a50d362a153a28506be6fae9cf179dbb5fd diff --git a/.zshrc b/.zshrc new file mode 100644 index 00000000..36fa2e01 --- /dev/null +++ b/.zshrc @@ -0,0 +1,67 @@ +HISTFILE=~/.histfile +HISTSIZE=5000 +SAVEHIST=5000 +setopt appendhistory autocd extendedglob nomatch notify autopushd +setopt interactive_comments prompt_subst +unsetopt beep +bindkey -v + +# Completion +zstyle ':completion:*' completer _expand _complete _ignored _correct _approximate _prefix +zstyle ':completion:*' max-errors 2 +zstyle :compinstall filename '/home/curtis/.zshrc' + +autoload -Uz compinit +compinit + +# Colors +autoload colors zsh/terminfo +colors + +[[ -n "$COLORTERM" ]] && export TERM='xterm-256color' + +# Libs + +source ~/.zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh +ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets) +ZSH_HIGHLIGHT_STYLES[builtin]='none' +ZSH_HIGHLIGHT_STYLES[command]='bold' +ZSH_HIGHLIGHT_STYLES[precommand]='fg=yellow,bold' +ZSH_HIGHLIGHT_STYLES[alias]='fg=magenta,bold' +ZSH_HIGHLIGHT_STYLES[function]='fg=magenta,bold' +ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='bold' +ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='bold' +ZSH_HIGHLIGHT_STYLES[globbing]='fg=blue,bold' +ZSH_HIGHLIGHT_STYLES[path]='none' +ZSH_HIGHLIGHT_STYLES[history-expansion]='fg=blue,bold' +ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=cyan,bold' +ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=cyan,bold' +ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=cyan,bold' + +source ~/.zsh/z/z.sh + +if [[ -d /usr/share/chruby ]]; then + source /usr/share/chruby/chruby.sh + source /usr/share/chruby/auto.sh + chruby 'ruby-2.0.0' +fi + +[[ -s ~/.nvm/nvm.sh ]] && source ~/.nvm/nvm.sh + +[[ -f /usr/local/heroku ]] && export PATH="/usr/local/heroku/bin:$PATH" + +source ~/.zsh/gitprompt.zsh +source ~/.zsh/title.zsh + +source ~/.zsh/aliases.zsh + +# Environment + +EDITOR=vim + +# Prompt + +unset _prompt_host +[[ -n "$SSH_CLIENT" ]] && _prompt_host="%{$fg[magenta]%}%m:" +PROMPT=$'%{$terminfo[bold]$fg[green]%}[$_prompt_host%{$fg[blue]%}%30<..<%~$(gitprompt)%{$fg[green]%}]%(!.#.$)%{$terminfo[sgr0]$reset_color%} ' +RPROMPT="%(?..%{$terminfo[bold]$fg[green]%}[%{$fg[red]%}%?%{$fg[green]%}]%{$terminfo[sgr0]%})" diff --git a/README.md b/README.md index 360b2b72..8a177ba2 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ -# VIM Configuration +# Dotfiles -My amazing VIM configuration +My horribly organized configurations + +System-wide configurations are in `etc/`. |