commit c78cb78ff0f198509e6c863437d05333769c73ee Author: fbt Date: Wed May 3 16:10:13 2017 +0300 init Signed-off-by: fbt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2d31e3d --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +homedir/.vim/.netrwhist +homedir/.vim/syntax +homedir/.bashrc.d/99-local +homedir/.config/zsh.d/local +homedir/.ncmpcpp/error.log diff --git a/homedir/.Xresources b/homedir/.Xresources new file mode 100644 index 0000000..96ddba9 --- /dev/null +++ b/homedir/.Xresources @@ -0,0 +1,23 @@ +! Xft settings --------------------------------------------------------------- + +Xft.dpi: 95 +!Xft.antialias: true +!Xft.rgba: rgb +!Xft.hinting: true +!Xft.hintstyle: hintslight + +! rofi + +rofi.key-run: Mod4+r +rofi.lines: 3 +rofi.bw: 2 +rofi.separator-style: solid +rofi.hide-scrollbar: true +rofi.glob: true +rofi.width: 33 +rofi.bc: #467EC2 +rofi.fg: #f9f9f9 +rofi.bg: #29303A +rofi.hlbg: #467EC2 +rofi.font: Terminus 12 +rofi.opacity: 85 diff --git a/homedir/.bashrc b/homedir/.bashrc new file mode 100644 index 0000000..581ddbf --- /dev/null +++ b/homedir/.bashrc @@ -0,0 +1,44 @@ +# vim: ft=sh +# Do nothing if not interactive +[[ "$PS1" ]] || return + +# Modules +mpath=( $HOME/.config/bash.d ) + +function msg { printf '%s\n' "$*"; } +function err { printf '%s\n' "$*" >&2; } + +function use { + while (( $# )); do + case $1 in + (-n) flag_nofail=1;; + (--) shift; break;; + (*) break;; + esac + shift + done + + declare mname=$1 + + for p in "${mpath[@]}"; do + if [[ -f "$mpath/$mname" ]]; then + if source "$mpath/$mname"; then + msg "Loaded: $mname" + else + err "Something went wrong while loading $mname" + (( flag_nofail )) || return 1 + fi + else + err "Module $mname not found" + (( flag_nofail )) || return 1 + fi + done + + return 0 +} + +use common +use colours +use config +use -n local +use prompt diff --git a/homedir/.config/bash.d/colours b/homedir/.config/bash.d/colours new file mode 100644 index 0000000..699a502 --- /dev/null +++ b/homedir/.config/bash.d/colours @@ -0,0 +1,30 @@ +# Colours + +# Console colours +# Black 0;30 Dark Gray 1;30 +# Blue 0;34 Light Blue 1;34 +# Green 0;32 Light Green 1;32 +# Cyan 0;36 Light Cyan 1;36 +# Red 0;31 Light Red 1;31 +# Purple 0;35 Light Purple 1;35 +# Brown 0;33 Yellow 1;33 +# Light Gray 0;37 White 1;37 + +c_black="\[\033[0;30m\]" +c_blue="\[\033[0;34m\]" +c_green="\[\033[0;32m\]" +c_cyan="\[\033[0;36m\]" +c_red="\[\033[0;31m\]" +c_purple="\[\033[0;35m\]" +c_brown="\[\033[0;33m\]" +c_lightgray="\[\033[0;37m\]" +c_darkgray="\[\033[1;30m\]" +c_lightblue="\[\033[1;34m\]" +c_lightgreen="\[\033[1;32m\]" +c_lightcyan="\[\033[1;36m\]" +c_lightred="\[\033[1;31m\]" +c_lightpurple="\[\033[1;35m\]" +c_yellow="\[\033[1;33m\]" +c_white="\[\033[1;37m\]" + +c_reset="\[\e[00m\]" diff --git a/homedir/.config/bash.d/common b/homedir/.config/bash.d/common new file mode 100644 index 0000000..42c61da --- /dev/null +++ b/homedir/.config/bash.d/common @@ -0,0 +1,41 @@ +#!/bin/bash + +echo() { printf '%s\n' "$*"; } +msg() { printf '%s\n' "$*"; } +err() { printf '%s\n' "$*" >&2; } + +set_title() { printf '\033]0;%s\007' "$1"; } + +trap_error() { err "The command has returned a non-zero exit code ($?)."; } + +x() { exec xinit -- -nolisten tcp vt9; } + +is_coreutils() { + declare out + out=$( df --version 2>/dev/null ) + + (( $? )) && { + err 'df --version exited with an error. This is not GNU coreutils' + return 3 + } + + [[ "$out" =~ 'GNU coreutils' ]] || { + err 'Version output does not contain "GNU coreutils". This is not GNU coreutils.' + return 1 + } +} + +fuck() { sudo $(history -p \!\!); } + +err() { printf '%s\n' "$*"; } + +is_function() { + [[ $(type -t "$1") == 'function' ]] +} + +if is_coreutils; then + ls() { $(type -P ls) -l -hb --group-directories-first --color=auto "$@"; } + mv() { $(type -P mv) -v "$@"; } + cp() { $(type -P cp) -v "$@"; } + rm() { $(type -P rm) -v "$@"; } +fi diff --git a/homedir/.config/bash.d/config b/homedir/.config/bash.d/config new file mode 100644 index 0000000..b70ac3d --- /dev/null +++ b/homedir/.config/bash.d/config @@ -0,0 +1,28 @@ +# BASH options +bash_opts=( + 'checkwinsize' 'histappend' 'autocd' + 'checkhash' +) +shopt -s "${bash_opts[@]}" +shopt -u sourcepath + +PROMPT_COMMAND='set_prompt' + +HISTCONTROL="$HISTCONTROL${HISTCONTROL+,}ignoredups" +HISTCONTROL='ignoreboth' + +# Environment +export LC_ALL='en_US.UTF-8' +export EDITOR='editor' +export WINEARCH='win32' + +# GPG +GPG_TTY=$(tty) +export GPG_TTY + +#export TERM='xterm-256color' +export COLORTERM='xterm-256color' + +# Specific to this setup +alias dotfiles_pull='git -C ~/git/dotfiles pull' +alias dotfiles_push='git -C ~/git/dotfiles commit -a; git -C ~/git/dotfiles push' diff --git a/homedir/.config/bash.d/local b/homedir/.config/bash.d/local new file mode 100644 index 0000000..15baaa3 --- /dev/null +++ b/homedir/.config/bash.d/local @@ -0,0 +1,3 @@ +# SSH +SSH_AUTH_SOCK="/tmp/${USER}-ssh-auth.sock" +export SSH_AUTH_SOCK diff --git a/homedir/.config/bash.d/prompt b/homedir/.config/bash.d/prompt new file mode 100644 index 0000000..70c9a08 --- /dev/null +++ b/homedir/.config/bash.d/prompt @@ -0,0 +1,75 @@ +#!/bin/bash + +set_prompt() { + last_exitcode="$?" + + declare checkmark fancy_x timestamp git_prompt_msg git_status_short git_status_colour git_unstaged git_untracked + + PS1="${c_reset}" + + # Set a fancy symbol to indicate the last exitcode + if (( last_exitcode )); then + last_exitcode_indicator="${c_red}!${c_reset}" + else + last_exitcode_indicator="${c_green}.${c_reset}" + fi + + # Set the username colour + if (( UID )); then + user_colour="${c_green}" + user_indicator='$' + else + user_colour="${c_red}" + user_indicator='#' + fi + + user_indicator='>' + + # Set the git prompt message + git rev-parse --git-dir &>/dev/null && { + git_current_branch="$(git rev-parse --abbrev-ref HEAD)" + + while read; do + case "$REPLY" in + (' M'*|A*|D*) git_unstaged=1;; + (\?\?*) git_untracked=1;; + esac + done < <( git status --short ) + + (( git_unstaged )) && { + git_status_short+='c' + git_status_colour="${c_red}" + } + + (( git_untracked )) && { + git_status_short+='f' + git_status_colour="${c_red}" + } + + git_status_short=${git_status_short:-ok} + git_status_colour=${git_status_colour:-"${c_green}"} + + git_prompt_msg="(${c_cyan}$git_current_branch${c_reset}[${git_status_colour}${git_status_short}${c_reset}]) " + } + + set_title "${USER}@${HOSTNAME}" + + if [[ "$PWD" == "$HOME" ]]; then + prompt_pwd='~' + elif [[ "$PWD" =~ ^"$HOME" ]]; then + prompt_pwd="~/${PWD##*${HOME}/}" + else + prompt_pwd="$PWD" + fi + + prompt=( + "${c_reset}" + "[${last_exitcode_indicator}]" + "${user_colour}${USER}${c_reset}@${c_lightblue}${HOSTNAME}" + "$prompt_pwd" + "${git_prompt_msg}${user_colour}${user_indicator}" + "$c_reset" + ) + + PS1="${prompt[@]}" +} diff --git a/homedir/.config/bspwm/bin/bspfloat b/homedir/.config/bspwm/bin/bspfloat new file mode 100755 index 0000000..169f9f6 --- /dev/null +++ b/homedir/.config/bspwm/bin/bspfloat @@ -0,0 +1,9 @@ +#!/usr/bin/bash + +while read -r _ _ did wid _; do + for d in "$@"; do + if [[ $d == "$did" ]]; then + bspc node "$wid" -t floating + fi + done +done < <( bspc subscribe node_manage ) diff --git a/homedir/.config/bspwm/bin/bspset b/homedir/.config/bspwm/bin/bspset new file mode 100755 index 0000000..139efad --- /dev/null +++ b/homedir/.config/bspwm/bin/bspset @@ -0,0 +1,45 @@ +#!/usr/bin/bash + +usage() { + printf 'No help available' +} + +main() { + while (( $# )); do + case "$1" in + (-h) usage;; + (-d) desktop=$2; shift;; + + (--) shift; break;; + (*) break;; + esac + shift + done + + setting=$1 + shift + + desktop=${desktop:-"focused"} + + case "$setting" in + (padding) + if [[ "$1" =~ ^(north|west|south|east)$ ]]; then + direction=$1 + fi + + if [[ "$direction" ]]; then + bspc config -d "$desktop" "${direction}_padding" "$1" + else + for d in top bottom right left; do + bspc config -d "$desktop" "${d}_padding" "$1" + done + fi + ;; + + (gaps) + bspc config -d "$desktop" window_gap "$1" + ;; + esac +} + +main "$@" diff --git a/homedir/.config/bspwm/bin/bspstate b/homedir/.config/bspwm/bin/bspstate new file mode 100755 index 0000000..25fc25e --- /dev/null +++ b/homedir/.config/bspwm/bin/bspstate @@ -0,0 +1,43 @@ +#!/usr/bin/bash + +ensure_dir() { + declare d + + for d in "$@"; do + if ! [[ -d "$d" ]]; then + if ! mkdir -p "$d"; then + return $? + fi + fi + done + + return 0 +} + +# Set XDG_RUNTIME_DIR +if ! [[ "$XDG_RUNTIME_DIR" ]]; then + XDG_RUNTIME_DIR="/run/user/$UID" +fi + +# Define some workdirs +bspwm_rundir="$XDG_RUNTIME_DIR/bspwm" +bspwm_statedir="$bspwm_rundir/state" + +# Ensure the workdirs exist +ensure_dir "$bspwm_rundir" "$bspwm_statedir" || exit $? + +case "$1" in + (save) + # Save state + bspc query -T > "$bspwm_statedir/tree" + bspc query -H > "$bspwm_statedir/hist" + bspc query -S > "$bspwm_statedir/stack" + ;; + + (restore) + # Restore state, if any + [[ -f "$bspwm_statedir/tree" ]] && bspc restore -T "$bspwm_statedir/tree" + [[ -f "$bspwm_statedir/hist" ]] && bspc restore -H "$bspwm_statedir/hist" + [[ -f "$bspwm_statedir/stack" ]] && bspc restore -S "$bspwm_statedir/stack" + ;; +esac diff --git a/homedir/.config/bspwm/bspwmrc b/homedir/.config/bspwm/bspwmrc new file mode 100755 index 0000000..bd47dbb --- /dev/null +++ b/homedir/.config/bspwm/bspwmrc @@ -0,0 +1,67 @@ +#!/usr/bin/env bash + +nullexec() { + "$@" &>/dev/null +} + +PATH+=":$HOME/.config/alternatives" +PATH+=":$HOME/.config/bspwm/bin" + +# Cursor for the root window +xsetroot -cursor_name left_ptr + +# Global config +bspc config focused_sticky_border_color "#030061" +bspc config focused_border_color "#467EC2" +bspc config normal_border_color "#1f1f1f" +bspc config urgent_border_color "#f9f9f9" +bspc config window_gap "9" +bspc config border_width '2' +bspc config split_ratio '0.52' +bspc config borderless_monocle 'false' +bspc config gapless_monocle 'false' +bspc config focus_by_distance 'true' +bspc config ignore_ewmh_focus 'true' +bspc config initial_polarity 'second_child' +bspc config auto_cancel 'true' +bspc config click_to_focus 'true' + +# Workspaces and monitors +bspc monitor -d 1 2 3 4 5 6 7 8 9 h + +# Float some bastards +bspfloat 1 & + +# Individual padding +for d in 1 3; do + bspset -d "$d" padding 48 +done + +# Clear the rules before adding any +while read -r rule _; do bspc rule -r "$rule"; done < <(bspc rule -l) + +# Now add the rules +bspc rule -a Steam state=floating desktop=^8 +bspc rule -a Firefox:Navigator state=tiled desktop=^2 +bspc rule -a \*:Hearthstone.exe desktop=^5 +bspc rule -a \* state=floating + + +# start some services +services=( sxhkd dunst ) +for s in "${services[@]}"; do + if ! service "$s" status; then + service "$s" start + fi +done + +# Always restart the panel +service moltenbar restart + +nullexec browser & +nullexec terminal & +nullexec telegram & +nullexec dropbox & + +terminal -e 'ssh-add-all' & +terminal -e 'sudo wrkvpn' & diff --git a/homedir/.config/bspwm/sxhkdrc b/homedir/.config/bspwm/sxhkdrc new file mode 100644 index 0000000..fa9ac22 --- /dev/null +++ b/homedir/.config/bspwm/sxhkdrc @@ -0,0 +1,72 @@ +# +# bspwm hotkeys +# + +super + {_,shift + } w + bspc node {-c,-k} + +super + q + bspc node -t '~fullscreen' + +super + {j,k} + bspc node -f {next,prev}.local + +control + {h,j,k,l} + bspc node {@east -r -32,@south -r +32,@south -r -32,@east -r +32} + +super + {_,shift + } space + bspc node -t '~'{tiled,floating} + +super + Return + bspc node -s biggest + +super + {1-9,h} + bspc desktop -f {1-9,h} + +super + shift + {1-9,h} + bspc node -d {1-9,h} + +super + m + bspc monitor -f next + +super + shift + m + bspc node -m next + +super + t + bspc desktop -l next + +super + shift + t + bspc node -t '~pseudo_tiled' + +super + x + terminal + +super + {r,u,p} + dmenu-extras -l 9 {run,bmark,pass} + +super + z + ssm lockd lock + +Print + snap -f + +super + {Left,Up,Right,Down} + bspc node --presel-dir '~'{west,north,east,south} + +super + {_,shift + } c + win-hd-center {1280x720,854x480} + +super + {a,s,n,p} + mpc {play,stop,next,prev} + +super + bracketright + bspc node '@/' -R 90 + +super + f + bspc rule -a \* -o state=floating + +super + XF86AudioLowerVolume + amixer -c 0 set PCM 2dB- + +super + XF86AudioRaiseVolume + amixer -c 0 set PCM 2dB+ diff --git a/homedir/.config/common/colours b/homedir/.config/common/colours new file mode 100644 index 0000000..5502a64 --- /dev/null +++ b/homedir/.config/common/colours @@ -0,0 +1,8 @@ +# vim: ft=sh + +colour_fg='#f9f9f9' +colour_fg_active=$colour_fg +colour_bg='#1f1f1f' +colour_bg_active='#467EC2' + +colour_urgent='#f9f9f9' diff --git a/homedir/.config/common/fonts b/homedir/.config/common/fonts new file mode 100644 index 0000000..92b292a --- /dev/null +++ b/homedir/.config/common/fonts @@ -0,0 +1 @@ +common_x_fontspec='-*-terminesspowerline-medium-*-normal-*-14-*-*-*-*-*-iso10646-*' diff --git a/homedir/.config/dunst/dunstrc b/homedir/.config/dunst/dunstrc new file mode 100644 index 0000000..5f0192b --- /dev/null +++ b/homedir/.config/dunst/dunstrc @@ -0,0 +1,246 @@ +[global] + font = xos4 Terminus 12 + + # Allow a small subset of html markup: + # bold + # italic + # strikethrough + # underline + # + # For a complete reference see + # . + # If markup is not allowed, those tags will be stripped out of the + # message. + allow_markup = yes + + # The format of the message. Possible variables are: + # %a appname + # %s summary + # %b body + # %i iconname (including its path) + # %I iconname (without its path) + # %p progress value if set ([ 0%] to [100%]) or nothing + # Markup is allowed + format = "%s\n%b" + + # Sort messages by urgency. + sort = yes + + # Show how many messages are currently hidden (because of geometry). + indicate_hidden = yes + + # Alignment of message text. + # Possible values are "left", "center" and "right". + alignment = left + + # The frequency with wich text that is longer than the notification + # window allows bounces back and forth. + # This option conflicts with "word_wrap". + # Set to 0 to disable. + bounce_freq = 0 + + # Show age of message if message is older than show_age_threshold + # seconds. + # Set to -1 to disable. + show_age_threshold = 60 + + # Split notifications into multiple lines if they don't fit into + # geometry. + word_wrap = yes + + # Ignore newlines '\n' in notifications. + ignore_newline = no + + + # The geometry of the window: + # [{width}]x{height}[+/-{x}+/-{y}] + # The geometry of the message window. + # The height is measured in number of notifications everything else + # in pixels. If the width is omitted but the height is given + # ("-geometry x2"), the message window expands over the whole screen + # (dmenu-like). If width is 0, the window expands to the longest + # message displayed. A positive x is measured from the left, a + # negative from the right side of the screen. Y is measured from + # the top and down respectevly. + # The width can be negative. In this case the actual width is the + # screen width minus the width defined in within the geometry option. + geometry = "500x32-710+32" + + # Shrink window if it's smaller than the width. Will be ignored if + # width is 0. + shrink = no + + # The transparency of the window. Range: [0; 100]. + # This option will only work if a compositing windowmanager is + # present (e.g. xcompmgr, compiz, etc.). + transparency = 25 + + # Don't remove messages, if the user is idle (no mouse or keyboard input) + # for longer than idle_threshold seconds. + # Set to 0 to disable. + idle_threshold = 120 + + # Which monitor should the notifications be displayed on. + monitor = 0 + + # Display notification on focused monitor. Possible modes are: + # mouse: follow mouse pointer + # keyboard: follow window with keyboard focus + # none: don't follow anything + # + # "keyboard" needs a windowmanager that exports the + # _NET_ACTIVE_WINDOW property. + # This should be the case for almost all modern windowmanagers. + # + # If this option is set to mouse or keyboard, the monitor option + # will be ignored. + follow = mouse + + # Should a notification popped up from history be sticky or timeout + # as if it would normally do. + sticky_history = yes + + # Maximum amount of notifications kept in history + history_length = 20 + + # Display indicators for URLs (U) and actions (A). + show_indicators = yes + + # The height of a single line. If the height is smaller than the + # font height, it will get raised to the font height. + # This adds empty space above and under the text. + line_height = 0 + + # Draw a line of "separatpr_height" pixel height between two + # notifications. + # Set to 0 to disable. + separator_height = 2 + + # Padding between text and separator. + padding = 8 + + # Horizontal padding. + horizontal_padding = 8 + + # Define a color for the separator. + # possible values are: + # * auto: dunst tries to find a color fitting to the background; + # * foreground: use the same color as the foreground; + # * frame: use the same color as the frame; + # * anything else will be interpreted as a X color. + separator_color = frame + + # Print a notification on startup. + # This is mainly for error detection, since dbus (re-)starts dunst + # automatically after a crash. + startup_notification = true + + # dmenu path. + dmenu = /usr/bin/dmenu -p dunst: + #dmenu = /usr/bin/rofi -dmenu + + # Browser for opening urls in context menu. + browser = /usr/bin/firefox -new-tab + + # Align icons left/right/off + icon_position = off + + # Paths to default icons. + icon_folders = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/ + +[frame] + width = 2 + color = "#467EC2" + +[shortcuts] + + # Shortcuts are specified as [modifier+][modifier+]...key + # Available modifiers are "ctrl", "mod1" (the alt-key), "mod2", + # "mod3" and "mod4" (windows-key). + # Xev might be helpful to find names for keys. + + # Close notification. + close = ctrl+space + + # Close all notifications. + close_all = ctrl+shift+space + + # Redisplay last message(s). + # On the US keyboard layout "grave" is normally above TAB and left + # of "1". + history = mod4+d + + # Context menu. + context = mod4+shift+d + +[urgency_low] + # IMPORTANT: colors have to be defined in quotation marks. + # Otherwise the "#" and following would be interpreted as a comment. + background = "#1f1f1f" + foreground = "#f9f9f9" + timeout = 10 + +[urgency_normal] + background = "#1f1f1f" + foreground = "#f9f9f9" + timeout = 10 + +[urgency_critical] + background = "#78090C" + foreground = "#f9f9f9" + timeout = 0 + + +# Every section that isn't one of the above is interpreted as a rules to +# override settings for certain messages. +# Messages can be matched by "appname", "summary", "body", "icon", "category", +# "msg_urgency" and you can override the "timeout", "urgency", "foreground", +# "background", "new_icon" and "format". +# Shell-like globbing will get expanded. +# +# SCRIPTING +# You can specify a script that gets run when the rule matches by +# setting the "script" option. +# The script will be called as follows: +# script appname summary body icon urgency +# where urgency can be "LOW", "NORMAL" or "CRITICAL". +# +# NOTE: if you don't want a notification to be displayed, set the format +# to "". +# NOTE: It might be helpful to run dunst -print in a terminal in order +# to find fitting options for rules. + +#[espeak] +# summary = "*" +# script = dunst_espeak.sh + +#[script-test] +# summary = "*script*" +# script = dunst_test.sh + +#[ignore] +# # This notification will not be displayed +# summary = "foobar" +# format = "" + +#[signed_on] +# appname = Pidgin +# summary = "*signed on*" +# urgency = low +# +#[signed_off] +# appname = Pidgin +# summary = *signed off* +# urgency = low +# +#[says] +# appname = Pidgin +# summary = *says* +# urgency = critical +# +#[twitter] +# appname = Pidgin +# summary = *twitter.com* +# urgency = normal +# +# vim: ft=cfg diff --git a/homedir/.config/frozenbar/bin/simple_launcher_run b/homedir/.config/frozenbar/bin/simple_launcher_run new file mode 100755 index 0000000..3771b66 --- /dev/null +++ b/homedir/.config/frozenbar/bin/simple_launcher_run @@ -0,0 +1,12 @@ +#!/usr/bin/zsh + +frozenbar_cfgdir="$XDG_CONFIG_HOME/frozenbar" + +declare e cmd position=1 +declare -a cmds + +while IFS=':' read -r name _ cmd args; do + cmds+=( "$cmd" ${(s: :)args} ) +done < "$frozenbar_cfgdir/rc.d/simple_launcher.rc" + +$cmds[$1] diff --git a/homedir/.config/frozenbar/mod b/homedir/.config/frozenbar/mod new file mode 120000 index 0000000..dfe3790 --- /dev/null +++ b/homedir/.config/frozenbar/mod @@ -0,0 +1 @@ +/home/fbt/git/frozenbar/mod \ No newline at end of file diff --git a/homedir/.config/frozenbar/rc b/homedir/.config/frozenbar/rc new file mode 100644 index 0000000..789b928 --- /dev/null +++ b/homedir/.config/frozenbar/rc @@ -0,0 +1,139 @@ +# vim: ft=zsh + +# Which modules to load +mods=( + bspwm_desktop_pager + bspwm_taskbar + network_status + date + load +) + +# Define the *look* of your panel here +function panel_draw { + panel_data=( + "$out[bspwm_desktop_pager]" + "$out[bspwm_taskbar]" + "%{r}" + "%{F$panel_bg_focused}%{F-}%{B$panel_bg_focused}" + "" + "LA: $out[load]" + "" + "Network: $out[network_status]" + " " + "$out[date]" + "" + "%{B-}" + ) + + printf '%s\n' "$panel_data" +} + +function panel_pre_start { + # Set bspwm top padding + bspc config top_padding "$(( panel_h + bspwm_window_gap ))" +} + +function panel_post_start { + # Set the layer on which lemonbar resides + xdo above -t $( xdo id -n root ) $( xdo id -a $panel_window_name ) +} + +function panel_cleanup_misc { + # Reset bspwm top padding + bspc config top_padding 0 +} + +# General config +# ============== + +# fifo location +#panel_fifo="$XDG_RUNTIME_DIR/frozenbar.fifo" + +# Window name +panel_window_name='frozenbar' + +## Colours +# I source a common config so that all my scripts share the same colours +source ~/.config/common/colours +panel_fg_normal=$colour_fg +panel_fg_focused=$colour_fg_active +panel_bg_normal=$colour_bg +panel_bg_focused=$colour_bg_active + +## Fonts +panel_fontspec='-*-terminesspowerline-medium-*-normal-*-14-*-*-*-*-*-iso10646-*' + +## Get root window data to automatically set up the panel's dimensions and position +get_rootwin_data + +## We use bspwm, and we need to know its settings +source ~/.config/common/bspwm + +## Set the panel dimensions and position +panel_h='14' +panel_w=$(( root_win_w - ( bspwm_window_gap * 2 ) )) +panel_geometry="${panel_w}x${panel_h}+${bspwm_window_gap}+${bspwm_window_gap}" + +## How many clickable areas are available to use: +panel_clickable_areas='128' + +# Module configs +# ============== + +# bspwm_desktop_pager +# ------------------- +declare -A bspwm_desktop_pager +bspwm_desktop_pager[colour_focused]=$panel_bg_focused +bspwm_desktop_pager[show_empty_tags]=0 + +declare -a bspwm_desktop_pager_blacklist +bspwm_desktop_pager_blacklist=( 'h' ) + +# bspwm_taskbar +# ------------- +declare -A bspwm_taskbar +declare -a bspwm_taskbar_blacklist +bspwm_taskbar[focused_only]=0 +bspwm_taskbar[counter]=1 +bspwm_taskbar[fg_normal]='#bebebe' +bspwm_taskbar[fg_focused]=$panel_fg_normal +bspwm_taskbar[start]="%{F$panel_bg_normal}%{B$panel_bg_focused}%{F-} " +bspwm_taskbar[end]="%{F$panel_bg_focused} %{B-}%{F-}" +bspwm_taskbar[max_size]=132 +bspwm_taskbar_blacklist=( 'h' ) + +# bspwm_date +# ---------- +declare -A date +date[format]='%A, %Y.%m.%d %H:%M:%S' + +# simple_launcher +# --------------- +declare -A simple_launcher +simple_launcher[start]="%{F$panel_bg_normal}%{B$panel_bg_focused}%{F-}" +simple_launcher[end]="%{F$panel_bg_focused} %{B-}%{F-}" + +# network_status +# -------------- +mod_network_status_check_rate=10 +mod_network_status_ok='%{F#00FF00}ok%{F-}' +mod_network_status_warn='%{F#FFFF00}WARN%{F-}' +mod_network_status_fail='%{F#FF0000}FAIL%{F-}' + +network_status_hosts=( + de-ber-as20647.anchors.atlas.ripe.net + nl-ams-as1101.anchors.atlas.ripe.net + uk-boh-as196745.anchors.atlas.ripe.net +) + +out[network_status]='%{F#FFFF00}checking...%{F-}' + +# mod_load +# -------- +mod_load_crit=4 +mod_load_warn=3 + +mod_load_warn_colour='#FFFF00' +mod_load_crit_colour='#FF0000' +mod_load_ok_colour='#00FF00' diff --git a/homedir/.config/frozenbar/rc.d/simple_launcher.rc b/homedir/.config/frozenbar/rc.d/simple_launcher.rc new file mode 100644 index 0000000..e0a7a1d --- /dev/null +++ b/homedir/.config/frozenbar/rc.d/simple_launcher.rc @@ -0,0 +1,2 @@ +browser::browser +terminal::terminal diff --git a/homedir/.config/moltenbar/mod b/homedir/.config/moltenbar/mod new file mode 120000 index 0000000..b6492fa --- /dev/null +++ b/homedir/.config/moltenbar/mod @@ -0,0 +1 @@ +/home/fbt/git/moltenbar/mod \ No newline at end of file diff --git a/homedir/.config/moltenbar/rc.yaml b/homedir/.config/moltenbar/rc.yaml new file mode 100644 index 0000000..68650db --- /dev/null +++ b/homedir/.config/moltenbar/rc.yaml @@ -0,0 +1,58 @@ +# vim: ft=yaml sw=2 et + +#geometry: '1262x14+9+9' +height: 14 +gap: 9 +fontspec: '-*-terminesspowerline-medium-*-normal-*-14-*-*-*-*-*-iso10646-*' +window_name: 'moltenbar' +active_areas: '128' +modules: + - bspwm_pager + - date + - bspwm_taskbar + - load_average + - network + - newmail +format: "<%= @panel_data['bspwm_pager'] %><%= @panel_data['bspwm_taskbar'] %>%{r}%{F<%= @config['colours']['bg_focused'] %>} %{F-}%{B<%= @config['colours']['bg_focused'] %>} New mail: <%= @panel_data['newmail'] %> LA: <%= @panel_data['load_average'] %> Network: <%= @panel_data['network'] %> <%= @panel_data['date'] %> %{B-}" +colours: + fg: '#f9f9f9' + fg_focused: '#f9f9f9' + bg: '#001f1f1f' + bg_focused: '#467EC2' + +# Module settings +mod: + bspwm_pager: + colour_focused: '#f9f9f9' + show_empty_desktops: false +# monitors: +# - "WMHDMI1" + blacklist: + -h + bspwm_taskbar: + begin: "%{F<%= @config['colours']['bg'] %>}%{B<%= @config['colours']['bg_focused'] %>}%{F-} " + end: "%{F<%= @config['colours']['bg_focused'] %>} %{B-} " + date: + format: '%A, %Y.%m.%d %H:%M:%S' + load_average: + warn_value: 3 + crit_value: 4 + ok_colour: "#00FF00" + warn_colour: "#FFFF00" + crit_colour: "#FF0000" + network: + hosts: + - de-ber-as20647.anchors.atlas.ripe.net + - nl-ams-as1101.anchors.atlas.ripe.net + - uk-boh-as196745.anchors.atlas.ripe.net + ok_colour: "#00FF00" + warn_colour: "#FFFF00" + crit_colour: "#FF0000" + newmail: + ok_message: "*" + ok_colour: "#00FF00" + crit_message: "***" + crit_colour: "#FF0000" + maildirs: + - /home/fbt/sync/maildir/.ops + - /home/fbt/sync/maildir/.inbox diff --git a/homedir/.config/sxhkd/sxhkdrc b/homedir/.config/sxhkd/sxhkdrc new file mode 120000 index 0000000..a6f5417 --- /dev/null +++ b/homedir/.config/sxhkd/sxhkdrc @@ -0,0 +1 @@ +../bspwm/sxhkdrc \ No newline at end of file diff --git a/homedir/.config/sxhkd/sxhkdrc-zwm b/homedir/.config/sxhkd/sxhkdrc-zwm new file mode 100644 index 0000000..a4e0aa9 --- /dev/null +++ b/homedir/.config/sxhkd/sxhkdrc-zwm @@ -0,0 +1,29 @@ +super + x + terminal + +super + j + zwm-focus + +super + w + killw $(pfw) + +super + Return + zwm-tile + +super + r + dmenu_run -fn '-*-terminus-medium-r-*-*-16-*-*-*-*-*-*-*' -nb '#222222' -nf '#bbbbbb' -sb '#005577' + +super + m + zwm-monocle + +super + t + zwm-tile + +super + l + lock + +super + {1-9} + zwm-tags switch {1-9} + +super + shift + {1-9} + zwm-tags mv {1-9} diff --git a/homedir/.config/termite/config b/homedir/.config/termite/config new file mode 100644 index 0000000..55e59d6 --- /dev/null +++ b/homedir/.config/termite/config @@ -0,0 +1,41 @@ +[options] +font = xos4 terminus 10 +#allow_bold = false +cursor_blink = off +cursor_shape = ibeam +browser = browser +mouse_autohide = true +audible_bell = true + +[hints] +font = terminus 10 +roundness = 0.0 + +[colors] +foreground = #839496 +foreground_bold = #eee8d5 +foreground_dim = #888888 +background = #141414 +#background = rgba(18, 21, 26, 0.9) +cursor = #93a1a1 + +# if unset, will reverse foreground and background +#highlight = #839496 + +# colors from color0 to color254 can be set +color0 = #073642 +color1 = #dc322f +color2 = #859900 +color3 = #b58900 +color4 = #268bd2 +color5 = #d33682 +color6 = #2aa198 +color7 = #eee8d5 +color8 = #002b36 +color9 = #cb4b16 +color10 = #586e75 +color11 = #657b83 +color12 = #839496 +color13 = #6c71c4 +color14 = #93a1a1 +color15 = #fdf6e3 diff --git a/homedir/.config/termite/gotham b/homedir/.config/termite/gotham new file mode 100644 index 0000000..ca07067 --- /dev/null +++ b/homedir/.config/termite/gotham @@ -0,0 +1,22 @@ +# Gotham color scheme +[colors] +foreground = #98d1ce +foreground_bold = #98d1ce +cursor = #98d1ce +background = #0a0f14 +color0 = #0a0f14 +color8 = #10151b +color1 = #c33027 +color9 = #d26939 +color2 = #26a98b +color10 = #081f2d +color3 = #edb54b +color11 = #245361 +color4 = #195465 +color12 = #093748 +color5 = #4e5165 +color13 = #888ba5 +color6 = #33859d +color14 = #599caa +color7 = #98d1ce +color15 = #d3ebe9 diff --git a/homedir/.config/termite/solarized b/homedir/.config/termite/solarized new file mode 100644 index 0000000..014ab0f --- /dev/null +++ b/homedir/.config/termite/solarized @@ -0,0 +1,27 @@ +[colors] +foreground = #839496 +foreground_bold = #eee8d5 +foreground_dim = #888888 +background = #00141A +cursor = #93a1a1 + +# if unset, will reverse foreground and background +#highlight = #839496 + +# colors from color0 to color254 can be set +color0 = #073642 +color1 = #dc322f +color2 = #859900 +color3 = #b58900 +color4 = #268bd2 +color5 = #d33682 +color6 = #2aa198 +color7 = #eee8d5 +color8 = #002b36 +color9 = #cb4b16 +color10 = #586e75 +color11 = #657b83 +color12 = #839496 +color13 = #6c71c4 +color14 = #93a1a1 +color15 = #fdf6e3 diff --git a/homedir/.config/watchman/init.d/compton b/homedir/.config/watchman/init.d/compton new file mode 100755 index 0000000..cf2dc5f --- /dev/null +++ b/homedir/.config/watchman/init.d/compton @@ -0,0 +1,4 @@ +#!/usr/bin/env watchman + +service_command='/bin/compton' +service_args=( --vsync opengl -f -D 3 -e 1.0 ) diff --git a/homedir/.config/watchman/init.d/dunst b/homedir/.config/watchman/init.d/dunst new file mode 100755 index 0000000..a5e8102 --- /dev/null +++ b/homedir/.config/watchman/init.d/dunst @@ -0,0 +1,4 @@ +#!/usr/bin/env watchman + +#service_respawn='true' +service_command='/usr/bin/dunst' diff --git a/homedir/.config/watchman/init.d/jackd b/homedir/.config/watchman/init.d/jackd new file mode 100755 index 0000000..269ea9b --- /dev/null +++ b/homedir/.config/watchman/init.d/jackd @@ -0,0 +1,4 @@ +#!/bin/env watchman + +service_command='/usr/bin/jackd' +service_args=( -d alsa ) diff --git a/homedir/.config/watchman/init.d/lockd b/homedir/.config/watchman/init.d/lockd new file mode 100755 index 0000000..9b20659 --- /dev/null +++ b/homedir/.config/watchman/init.d/lockd @@ -0,0 +1,5 @@ +#!/usr/bin/env watchman + +service_respawn='true' +service_command="$HOME/bin/lockd" +service_args=( -- i3lock-extra -s -o ~/pics/lock.png -g -p ) diff --git a/homedir/.config/watchman/init.d/moltenbar b/homedir/.config/watchman/init.d/moltenbar new file mode 100755 index 0000000..af1d72b --- /dev/null +++ b/homedir/.config/watchman/init.d/moltenbar @@ -0,0 +1,21 @@ +#!/usr/bin/env watchman + +#service_respawn='true' +service_command='/home/fbt/bin/moltenbar' + +service_depends_ready=( compton ) + +post_start() { + # Die if the thing didn't start + timer 5 nullexec xdo id -a moltenbar || return 1 + + # Set the layer on which lemonbar resides + xdo above -t $( xdo id -n root ) $( xdo id -a moltenbar ) + + # Set the top badding for bspwm + bspc config top_padding $(( 14 + 9 )) &>/tmp/debug.log +} + +pre_stop() { + bspc config top_padding 0 +} diff --git a/homedir/.config/watchman/init.d/mpc-notify b/homedir/.config/watchman/init.d/mpc-notify new file mode 100755 index 0000000..be7951d --- /dev/null +++ b/homedir/.config/watchman/init.d/mpc-notify @@ -0,0 +1,4 @@ +#!/usr/bin/env watchman + +#service_respawn='true' +service_command="$HOME/bin/mpc-notify" diff --git a/homedir/.config/watchman/init.d/mpd b/homedir/.config/watchman/init.d/mpd new file mode 100755 index 0000000..0f5605e --- /dev/null +++ b/homedir/.config/watchman/init.d/mpd @@ -0,0 +1,8 @@ +#!/usr/bin/env ssm + +service_tmpfiles=( "/run/user/$UID/mpd:dir" ) +service_respawn=1 +service_command='/usr/bin/mpd' +service_args=( --no-daemon -v ) + +post_start() { ready; } diff --git a/homedir/.config/watchman/init.d/privoxy b/homedir/.config/watchman/init.d/privoxy new file mode 100755 index 0000000..f7d4c48 --- /dev/null +++ b/homedir/.config/watchman/init.d/privoxy @@ -0,0 +1,21 @@ +#!/usr/bin/env watchman + +privoxy_configfile="$HOME/.config/privoxy/config" + +service_respawn='true' +service_command='/usr/bin/privoxy' +service_args=( --no-daemon "$privoxy_configfile" ) + +privoxy::configtest() { + "$service_command" --config-test "${service_args[@]}" +} + +restart() { + privoxy::configtest || { + watchman.err "Config test failed, not restarting!" + return 1 + } + + stop + start +} diff --git a/homedir/.config/watchman/init.d/pulseaudio b/homedir/.config/watchman/init.d/pulseaudio new file mode 100755 index 0000000..5d6f041 --- /dev/null +++ b/homedir/.config/watchman/init.d/pulseaudio @@ -0,0 +1,14 @@ +#!/bin/env watchman + +service_depends=( jackd ) + +service_command='/usr/bin/pulseaudio' +service_args=( + --realtime=false + --exit-idle-time=-1 + -L module-jack-sink + -L module-jack-source + -L module-native-protocol-tcp +) + +stop () { "$service_command" -k; } diff --git a/homedir/.config/watchman/init.d/scron b/homedir/.config/watchman/init.d/scron new file mode 100755 index 0000000..f9b8bd6 --- /dev/null +++ b/homedir/.config/watchman/init.d/scron @@ -0,0 +1,5 @@ +#!/usr/bin/env watchman + +service_respawn='true' +service_command='/usr/bin/crond' +service_args=( -n -f ~/.config/crontab ) diff --git a/homedir/.config/watchman/init.d/socks b/homedir/.config/watchman/init.d/socks new file mode 100755 index 0000000..cd8e227 --- /dev/null +++ b/homedir/.config/watchman/init.d/socks @@ -0,0 +1,5 @@ +#!/usr/bin/watchman + +service_respaen=true +service_command='/usr/bin/ssh' +service_args=( -i ~/.ssh/proxy/id_ecdsa -ND 8080 proxy@malganis.priv ) diff --git a/homedir/.config/watchman/init.d/ssh-agent b/homedir/.config/watchman/init.d/ssh-agent new file mode 100755 index 0000000..6a2851b --- /dev/null +++ b/homedir/.config/watchman/init.d/ssh-agent @@ -0,0 +1,4 @@ +#!/usr/bin/env watchman + +service_command='/usr/bin/ssh-agent' +service_args=( -d -a "/tmp/${USER}-ssh-auth.sock" ) diff --git a/homedir/.config/watchman/init.d/sxhkd b/homedir/.config/watchman/init.d/sxhkd new file mode 100755 index 0000000..ae71e76 --- /dev/null +++ b/homedir/.config/watchman/init.d/sxhkd @@ -0,0 +1,5 @@ +#!/usr/bin/env watchman + +#service_respawn='true' +service_command='/usr/bin/sxhkd' +service_reload_signal='USR1' diff --git a/homedir/.config/watchman/init.d/syncthing b/homedir/.config/watchman/init.d/syncthing new file mode 100755 index 0000000..2e28477 --- /dev/null +++ b/homedir/.config/watchman/init.d/syncthing @@ -0,0 +1,4 @@ +#!/bin/env watchman + +#service_respawn='true' +service_command='/usr/bin/syncthing' diff --git a/homedir/.config/watchman/init.d/transmission-daemon b/homedir/.config/watchman/init.d/transmission-daemon new file mode 100755 index 0000000..c82abd2 --- /dev/null +++ b/homedir/.config/watchman/init.d/transmission-daemon @@ -0,0 +1,4 @@ +#!/bin/env watchman + +service_command='/usr/bin/transmission-daemon' +service_args=( -f ) diff --git a/homedir/.config/watchman/init.d/ufwd b/homedir/.config/watchman/init.d/ufwd new file mode 100755 index 0000000..b060438 --- /dev/null +++ b/homedir/.config/watchman/init.d/ufwd @@ -0,0 +1,5 @@ +#!/usr/bin/env watchman + +#service_respawn='true' +service_command='/usr/bin/ufwd' +service_args=( -n -c -- -p ) diff --git a/homedir/.config/zsh.d/modules/config b/homedir/.config/zsh.d/modules/config new file mode 100644 index 0000000..3fcb459 --- /dev/null +++ b/homedir/.config/zsh.d/modules/config @@ -0,0 +1,54 @@ +# Basic zsh configuration +# vim: ft=zsh + +# Custom completion +fpath=( /etc/zsh/completion $fpath ) + +# Completion +setopt noautomenu nomenucomplete + +# Interactive comments +setopt interactive_comments + +# Disable autocd +unsetopt autocd + +# Command completion +autoload -U compinit +compinit + +# Complete dotfiles +_comp_options+=( globdots ) + +# History +setopt HIST_IGNORE_DUPS + +HISTFILE=~/.zsh_history +SAVEHIST=9001 +HISTSIZE=9001 +HISTCONTROL=erasedups +HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S" + +# Fix retarded things +NULLCMD=true +READNULLCMD=true + +# Locale +export LC_ALL='en_US.UTF-8' + +# dotfiles config +dotfiles_dir="$HOME/git/dotfiles" + +# PATH +set_misc_path "$HOME/ruby/bin" "$HOME/games/bin" "$HOME/.config/alternatives" "$HOME/.local/bin" "$HOME/bin" "$HOME/.gem/ruby/2.3.0/bin/" + +# GPG +GPG_TTY=$(tty) +export GPG_TTY + +# EDITOR +EDITOR=vim +export EDITOR + +# jspass completion +compdef _pass jspass diff --git a/homedir/.config/zsh.d/modules/core b/homedir/.config/zsh.d/modules/core new file mode 100644 index 0000000..2b6bd91 --- /dev/null +++ b/homedir/.config/zsh.d/modules/core @@ -0,0 +1,24 @@ +# Functions common to other modules +# vim: ft=zsh + +# Run the supplied command and null all the output +function nullexec { + "$@" &>/dev/null +} + +# Compile all includes +function newconf { + for i in ~/.zshrc ~/.config/zsh.d/*; do + if ! [[ $i =~ .+\.zwc ]]; then + msg "Compiling $i..." + zcompile $i + fi + done +} + +# set PATH from misc_path +function set_misc_path { + for p in $@; do + PATH="$p:$PATH" + done +} diff --git a/homedir/.config/zsh.d/modules/dotfiles b/homedir/.config/zsh.d/modules/dotfiles new file mode 100644 index 0000000..dbd719c --- /dev/null +++ b/homedir/.config/zsh.d/modules/dotfiles @@ -0,0 +1,14 @@ +# Functions for manipulating my dotfiles repo +# vim: ft=zsh + +function dotfiles() { + declare act=$1 + + case $act in + pull|diff) git -C $dotfiles_dir $1;; + push) + git -C $dotfiles_dir commit -a + git -C $dotfiles_dir push + ;; + esac +} diff --git a/homedir/.config/zsh.d/modules/helpers b/homedir/.config/zsh.d/modules/helpers new file mode 100644 index 0000000..69f1f49 --- /dev/null +++ b/homedir/.config/zsh.d/modules/helpers @@ -0,0 +1,8 @@ +# Helper functions + +xcopy() { xclip -selection clipboard } +xpaste() { xclip -selection clipboard -o } + +xclip() { + /usr/bin/xclip -selection clipboard "$@" +} diff --git a/homedir/.config/zsh.d/modules/keys b/homedir/.config/zsh.d/modules/keys new file mode 100644 index 0000000..f6619aa --- /dev/null +++ b/homedir/.config/zsh.d/modules/keys @@ -0,0 +1,28 @@ +# Keys +# vim: ft=zsh + +bindkey -e + +declare -A key +key[Home]=$terminfo[khome] +key[End]=$terminfo[kend] +key[Delete]=$terminfo[kdch1] + +declare -A bindings +bindings=( + Home 'beginning-of-line' + End 'end-of-line' + Delete 'delete-char' + ^R 'history-incremental-search-backward' +) + +for b in ${(k)bindings}; do + if [[ $key[$b] ]]; then + bindkey $key[$b] $bindings[$b] + fi +done + +function zle-line-init () { echoti smkx; } +function zle-line-finish () { echoti rmkx; } +zle -N zle-line-init +zle -N zle-line-finish diff --git a/homedir/.config/zsh.d/modules/local b/homedir/.config/zsh.d/modules/local new file mode 100644 index 0000000..786bda2 --- /dev/null +++ b/homedir/.config/zsh.d/modules/local @@ -0,0 +1,8 @@ +# Local zsh config, not to be synced. +# vim: ft=zsh + +# SSH +SSH_AUTH_SOCK="/tmp/${USER}-ssh-auth.sock" +export SSH_AUTH_SOCK + +function x { exec xinit -- -nolisten tcp vt9; } diff --git a/homedir/.config/zsh.d/modules/prompt b/homedir/.config/zsh.d/modules/prompt new file mode 100644 index 0000000..18a6ac0 --- /dev/null +++ b/homedir/.config/zsh.d/modules/prompt @@ -0,0 +1,128 @@ +# Prompt +# vim: ft=zsh +autoload -U colors && colors + +nullexec() { "$@" &>/dev/null; } + +precmd.title() { + printf '%b' "\e]2;$1\a" +} + +precmd.svn() { + if [[ -f .novcsprompt ]]; then + return 0 + fi + + if nullexec svn info; then + while IFS= read -r line; do + case $line in + (M*|A*|D*) svn_unstaged=1;; + (\!*) svn_missing=1;; + (\?*) svn_untracked=1;; + esac + done < <( svn st ) + + (( svn_unstaged )) && { + svn_st+='c' + svn_st_col='red' + } + + (( svn_missing )) && { + svn_st+='m' + svn_st_col='red' + } + + (( svn_untracked )) && { + svn_st+='f' + svn_st_col='red' + } + + svn_st_col=${svn_st_col:-"green"} + svn_st=${svn_st:-"ok"} + + printf '%s' "(%F{cyan}svn%f:%F{$svn_st_col}$svn_st%f) " + fi +} + +precmd.git() { + declare git_unstaged git_untracked git_status_short git_status_colour git_prompt_msg + + if [[ -f .novcsprompt ]]; then + return 0 + fi + + if git rev-parse --git-dir &>/dev/null; then + git_current_branch=$(git rev-parse --abbrev-ref HEAD) + + while IFS= read -r line; do + case $line in + ' M'*|A*|D*) git_unstaged=1;; + \?\?*) git_untracked=1;; + esac + done < <( git status --short ) + + (( git_unstaged )) && { + git_status_short+='c' + git_status_colour='red' + } + + (( git_untracked )) && { + git_status_short+='f' + git_status_colour='red' + } + + git_status_short=${git_status_short:-"ok"} + git_status_colour=${git_status_colour:-"green"} + + git_prompt_msg="(%F{cyan}$git_current_branch%f[%F{$git_status_colour}${git_status_short}%f]) " + + printf '%s' $git_prompt_msg + fi +} + +rprompt() { + { precmd.svn; precmd.git } > "$XDG_RUNTIME_DIR/zsh_rprompt_$$.tmp" + kill -s USR1 $$ +} + +TRAPUSR1() { + prompt_async_data=$(<"$XDG_RUNTIME_DIR/zsh_rprompt_$$.tmp") + draw_prompt + zle && zle reset-prompt +} + +draw_prompt() { + prompt_custom=( + "%F{$cmd_colour}$cmd_msg%f" + "%F{$user_colour}$USER%f@$HOST" + "${PWD//$HOME/~}" + "$prompt_async_data%F{$user_colour}>%f" + ) + + PROMPT=" $prompt_custom " +} + +precmd() { + declare last_exit_code=$? + declare -g cmd_colour cmd_msg + + if (( last_exit_code )); then + cmd_colour='red' + cmd_msg='!' + else + cmd_colour='green' + cmd_msg='.' + fi + + if (( UID )); then + user_colour='green' + else + user_colour='red' + fi + + precmd.title "$USER@$HOST ${PWD//$HOME/~}" + + draw_prompt + + rprompt &! +} diff --git a/homedir/.config/zsh.d/modules/shell b/homedir/.config/zsh.d/modules/shell new file mode 100644 index 0000000..2357449 --- /dev/null +++ b/homedir/.config/zsh.d/modules/shell @@ -0,0 +1,7 @@ +# Functions meant to be used interactively. +# vim: ft=zsh + +# Source the .zshrc again +function reload { + exec zsh -i +} diff --git a/homedir/.config/zsh.d/modules/xdg b/homedir/.config/zsh.d/modules/xdg new file mode 100644 index 0000000..e9e88c7 --- /dev/null +++ b/homedir/.config/zsh.d/modules/xdg @@ -0,0 +1,6 @@ +# http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html +export XDG_DATA_HOME=$HOME/.local/share +export XDG_CACHE_HOME=$HOME/.cache +export XDG_RUNTIME_DIR=/run/user/$UID +export XDG_CONFIG_HOME=$HOME/.config + diff --git a/homedir/.config/zsh.d/zshrc b/homedir/.config/zsh.d/zshrc new file mode 100644 index 0000000..8378b2b --- /dev/null +++ b/homedir/.config/zsh.d/zshrc @@ -0,0 +1,59 @@ +# vim: ft=zsh +# Modules + +function msg { + if ! (( flag_quiet )); then + printf '%s\n' "$*" + fi +} + +function err { msg "$*" >&2; } + +function modpath { + case $1 in + (=) ZSHRC_MODPATH=( "$@" );; + (*) ZSHRC_MODPATH+=( "$@" );; + esac + + export ZSHRC_MODPATH +} + +function use { + declare flag_nofail flag_quiet mname m_nofirst + + while (( $# )); do + case $1 in + (-n) flag_nofail=1;; + (-q) flag_quiet=1;; + (--) shift; break;; + (*) break;; + esac + shift + done + + printf '[zshrc] Loading modules: ' + for mname in $@; do + if ! (( m_nofirst )); then + printf '%s' $mname + else + printf ', %s' $mname + fi + + for p in $ZSHRC_MODPATH; do + if [[ -f $p/$mname ]]; then + if ! source $p/$mname; then + printf '(fail)' + fi + else + printf '(not found)' + fi + done + + m_nofirst=1 + done + + printf '\n' +} + +# Default ZSHRC_MODPATH +modpath "$HOME/.config/zsh.d/modules" diff --git a/homedir/.config/zxinit/common b/homedir/.config/zxinit/common new file mode 100644 index 0000000..2be6611 --- /dev/null +++ b/homedir/.config/zxinit/common @@ -0,0 +1,70 @@ +#!/bin/bash + +# Resources +resources=( '/etc/X11/xinit/.Xresources' "$HOME/.Xresources" ) +modmaps=( '/etc/X11/xinit/.Xmodmap' "$HOME/.Xmodmap" ) + +# Set DPI +xrandr --dpi 95 + +for r in "${resources[@]}"; do + if [[ -f "$r" ]]; then + xrdb -merge "$r" + fi +done + +for m in modmaps; do + if [[ -f "$m" ]]; then + xmodmap "$m" + fi +done + +# Common services +common_services+=( pulseaudio lockd ) +for i in "${common_services[@]}"; do + service "$i" start +done + +# Fonts +xset +fp /usr/share/fonts/local + +# Screensaver settings +xset -dpms +xset s 300 +xset s noblank +xset s noexpose + +# Solid black root window +# chameleon is available at https://github.com/fbt/misc +chameleon -C '#151515' + +# Set a wallpaper if it exists +if [[ -f "$HOME/wallpaper.png" ]]; then + chameleon "$HOME/wallpaper.png" +fi + +# Input settings +setxkbmap "min(us),min(ru)" -option "lv3:rwin_switch,grp:caps_toggle,grp_led:caps,compose:ralt,terminate:ctrl_alt_bksp" +xmodmap -e 'remove lock = Caps_Lock' \ + -e 'keycode 135 = KP_Insert' \ + -e 'keycode 49 = Escape asciitilde' + +# Start a dbus session +if ! [[ "$DBUS_SESSION_BUS_ADDRESS" ]]; then + export $(dbus-launch) +fi + +# Some nvidia tweaks +export VDPAU_NVIDIA_NO_OVERLAY=1 +#export __GL_THREADED_OPTIMIZATIONS=1 +nvidia-settings -l +nvidia-settings -a InitialPixmapPlacement=2 + +# Custom functions +services() { + for i in "${session_services[@]}"; do + service "$i" "$1" + done +} + +return 0 diff --git a/homedir/.config/zxinit/sessions/bspwm b/homedir/.config/zxinit/sessions/bspwm new file mode 100644 index 0000000..c6fbf23 --- /dev/null +++ b/homedir/.config/zxinit/sessions/bspwm @@ -0,0 +1,6 @@ +# A simple dwm session +PATH+=":$HOME/.config/bspwm/bin" + +start_session() { + exec bspwm +} diff --git a/homedir/.config/zxinit/sessions/default b/homedir/.config/zxinit/sessions/default new file mode 120000 index 0000000..c63ac95 --- /dev/null +++ b/homedir/.config/zxinit/sessions/default @@ -0,0 +1 @@ +bspwm \ No newline at end of file diff --git a/homedir/.config/zxinit/sessions/dwm b/homedir/.config/zxinit/sessions/dwm new file mode 100644 index 0000000..6bbc483 --- /dev/null +++ b/homedir/.config/zxinit/sessions/dwm @@ -0,0 +1,13 @@ +# A simple dwm session +session.cleanup() { service dwm-status stop; } + +trap session.cleanup EXIT + +start_session() { + wmname LG3D + service dwm-status start + + while true; do + dwm + done +} diff --git a/homedir/.config/zxinit/sessions/session-wrapper b/homedir/.config/zxinit/sessions/session-wrapper new file mode 100644 index 0000000..b0870e0 --- /dev/null +++ b/homedir/.config/zxinit/sessions/session-wrapper @@ -0,0 +1,5 @@ +# Start nothing, the DM will start it for us + +start_session() { + : +} diff --git a/homedir/.config/zxinit/sessions/zwm b/homedir/.config/zxinit/sessions/zwm new file mode 100644 index 0000000..57e1a90 --- /dev/null +++ b/homedir/.config/zxinit/sessions/zwm @@ -0,0 +1,16 @@ +# A simple dwm session +session.cleanup() { + service zwm-daemon stop + service sxhkd stop +} + +trap session.cleanup EXIT + +start_session() { + rm -r "/tmp/$USER/zwm" + + service zwm-daemon start + service sxhkd start + + sleep infinity +} diff --git a/homedir/.gitconfig b/homedir/.gitconfig new file mode 100644 index 0000000..e4b44b5 --- /dev/null +++ b/homedir/.gitconfig @@ -0,0 +1,9 @@ +[user] + name = fbt + email = fbt@fleshless.org +[push] + default = simple +[alias] + ci = commit -a + co = checkout + st = status --short diff --git a/homedir/.inputrc b/homedir/.inputrc new file mode 100644 index 0000000..da23583 --- /dev/null +++ b/homedir/.inputrc @@ -0,0 +1,3 @@ +$include /etc/inputrc + +set completion-ignore-case On diff --git a/homedir/.ncmpcpp/config b/homedir/.ncmpcpp/config new file mode 100644 index 0000000..7a97c58 --- /dev/null +++ b/homedir/.ncmpcpp/config @@ -0,0 +1,71 @@ +### Colours +## - 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 +### + +visualizer_in_stereo = yes +#visualizer_sample_multiplier = 1 +#visualizer_sync_interval = 30 + +## Available values: spectrum, wave. +visualizer_type = spectrum +visualizer_look = ●▊ + +#song_columns_list_format = (20)[]{a} (50)[]{tr} (6f)[]{NE} +#song_columns_list_format = (7f)[]{NEr} (20)[]{a} (80)[white]{tr} (6f)[]{l} + +# Playlist look +playlist_display_mode = "classic" +song_list_format = " {%a}|{%A} - %t " + +now_playing_prefix = "$8" +now_playing_suffix = "$9" + +selected_item_prefix = "$4" +selected_item_suffix = "$9" + +#playlist_separate_albums = no + +#progressbar_look = "▃▃ " +progressbar_look = "▄▄ " +progressbar_boldness = yes + +header_visibility = no +statusbar_visibility = no +titles_visibility = no + +## Screens available for use: help, playlist, browser, search_engine, +## media_library, playlist_editor, tag_editor, outputs, visualizer, clock. +startup_screen = playlist + +mouse_support = no +external_editor = vim +use_console_editor = yes + +##### 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 = default +color1 = white +color2 = green +main_window_highlight_color = white +progressbar_color = black +progressbar_elapsed_color = default +statusbar_color = default +alternative_ui_separator_color = black +active_column_color = red +visualizer_color = blue +window_border_color = green +active_window_border = red diff --git a/homedir/.vim/autoload/acp.vim b/homedir/.vim/autoload/acp.vim new file mode 100644 index 0000000..faa53e8 --- /dev/null +++ b/homedir/.vim/autoload/acp.vim @@ -0,0 +1,422 @@ +"============================================================================= +" Copyright (c) 2007-2009 Takeshi NISHIDA +" +"============================================================================= +" LOAD GUARD {{{1 + +if !l9#guardScriptLoading(expand(':p'), 0, 0, []) + finish +endif + +" }}}1 +"============================================================================= +" GLOBAL FUNCTIONS: {{{1 + +" +function acp#enable() + call acp#disable() + + augroup AcpGlobalAutoCommand + autocmd! + autocmd InsertEnter * unlet! s:posLast s:lastUncompletable + autocmd InsertLeave * call s:finishPopup(1) + augroup END + + if g:acp_mappingDriven + call s:mapForMappingDriven() + else + autocmd AcpGlobalAutoCommand CursorMovedI * call s:feedPopup() + endif + + nnoremap i i=feedPopup() + nnoremap a a=feedPopup() + nnoremap R R=feedPopup() +endfunction + +" +function acp#disable() + call s:unmapForMappingDriven() + augroup AcpGlobalAutoCommand + autocmd! + augroup END + nnoremap i | nunmap i + nnoremap a | nunmap a + nnoremap R | nunmap R +endfunction + +" +function acp#lock() + let s:lockCount += 1 +endfunction + +" +function acp#unlock() + let s:lockCount -= 1 + if s:lockCount < 0 + let s:lockCount = 0 + throw "AutoComplPop: not locked" + endif +endfunction + +" +function acp#meetsForSnipmate(context) + if g:acp_behaviorSnipmateLength < 0 + return 0 + endif + let matches = matchlist(a:context, '\(^\|\s\|\<\)\(\u\{' . + \ g:acp_behaviorSnipmateLength . ',}\)$') + return !empty(matches) && !empty(s:getMatchingSnipItems(matches[2])) +endfunction + +" +function acp#meetsForKeyword(context) + if g:acp_behaviorKeywordLength < 0 + return 0 + endif + let matches = matchlist(a:context, '\(\k\{' . g:acp_behaviorKeywordLength . ',}\)$') + if empty(matches) + return 0 + endif + for ignore in g:acp_behaviorKeywordIgnores + if stridx(ignore, matches[1]) == 0 + return 0 + endif + endfor + return 1 +endfunction + +" +function acp#meetsForFile(context) + if g:acp_behaviorFileLength < 0 + return 0 + endif + if has('win32') || has('win64') + let separator = '[/\\]' + else + let separator = '\/' + endif + if a:context !~ '\f' . separator . '\f\{' . g:acp_behaviorFileLength . ',}$' + return 0 + endif + return a:context !~ '[*/\\][/\\]\f*$\|[^[:print:]]\f*$' +endfunction + +" +function acp#meetsForRubyOmni(context) + if !has('ruby') + return 0 + endif + if g:acp_behaviorRubyOmniMethodLength >= 0 && + \ a:context =~ '[^. \t]\(\.\|::\)\k\{' . + \ g:acp_behaviorRubyOmniMethodLength . ',}$' + return 1 + endif + if g:acp_behaviorRubyOmniSymbolLength >= 0 && + \ a:context =~ '\(^\|[^:]\):\k\{' . + \ g:acp_behaviorRubyOmniSymbolLength . ',}$' + return 1 + endif + return 0 +endfunction + +" +function acp#meetsForPythonOmni(context) + return has('python') && g:acp_behaviorPythonOmniLength >= 0 && + \ a:context =~ '\k\.\k\{' . g:acp_behaviorPythonOmniLength . ',}$' +endfunction + +" +function acp#meetsForPerlOmni(context) + return g:acp_behaviorPerlOmniLength >= 0 && + \ a:context =~ '\w->\k\{' . g:acp_behaviorPerlOmniLength . ',}$' +endfunction + +" +function acp#meetsForXmlOmni(context) + return g:acp_behaviorXmlOmniLength >= 0 && + \ a:context =~ '\(<\|<\/\|<[^>]\+ \|<[^>]\+=\"\)\k\{' . + \ g:acp_behaviorXmlOmniLength . ',}$' +endfunction + +" +function acp#meetsForHtmlOmni(context) + return g:acp_behaviorHtmlOmniLength >= 0 && + \ a:context =~ '\(<\|<\/\|<[^>]\+ \|<[^>]\+=\"\)\k\{' . + \ g:acp_behaviorHtmlOmniLength . ',}$' +endfunction + +" +function acp#meetsForCssOmni(context) + if g:acp_behaviorCssOmniPropertyLength >= 0 && + \ a:context =~ '\(^\s\|[;{]\)\s*\k\{' . + \ g:acp_behaviorCssOmniPropertyLength . ',}$' + return 1 + endif + if g:acp_behaviorCssOmniValueLength >= 0 && + \ a:context =~ '[:@!]\s*\k\{' . + \ g:acp_behaviorCssOmniValueLength . ',}$' + return 1 + endif + return 0 +endfunction + +" +function acp#completeSnipmate(findstart, base) + if a:findstart + let s:posSnipmateCompletion = len(matchstr(s:getCurrentText(), '.*\U')) + return s:posSnipmateCompletion + endif + let lenBase = len(a:base) + let items = filter(GetSnipsInCurrentScope(), + \ 'strpart(v:key, 0, lenBase) ==? a:base') + return map(sort(items(items)), 's:makeSnipmateItem(v:val[0], v:val[1])') +endfunction + +" +function acp#onPopupCloseSnipmate() + let word = s:getCurrentText()[s:posSnipmateCompletion :] + for trigger in keys(GetSnipsInCurrentScope()) + if word ==# trigger + call feedkeys("\=TriggerSnippet()\", "n") + return 0 + endif + endfor + return 1 +endfunction + +" +function acp#onPopupPost() + " to clear = expression on command-line + echo '' + if pumvisible() + inoremap acp#onBs() + inoremap acp#onBs() + " a command to restore to original text and select the first match + return (s:behavsCurrent[s:iBehavs].command =~# "\" ? "\\" + \ : "\\") + endif + let s:iBehavs += 1 + if len(s:behavsCurrent) > s:iBehavs + call s:setCompletefunc() + return printf("\%s\=acp#onPopupPost()\", + \ s:behavsCurrent[s:iBehavs].command) + else + let s:lastUncompletable = { + \ 'word': s:getCurrentWord(), + \ 'commands': map(copy(s:behavsCurrent), 'v:val.command')[1:], + \ } + call s:finishPopup(0) + return "\" + endif +endfunction + +" +function acp#onBs() + " using "matchstr" and not "strpart" in order to handle multi-byte + " characters + if call(s:behavsCurrent[s:iBehavs].meets, + \ [matchstr(s:getCurrentText(), '.*\ze.')]) + return "\" + endif + return "\\" +endfunction + +" }}}1 +"============================================================================= +" LOCAL FUNCTIONS: {{{1 + +" +function s:mapForMappingDriven() + call s:unmapForMappingDriven() + let s:keysMappingDriven = [ + \ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', + \ 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', + \ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', + \ 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + \ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + \ '-', '_', '~', '^', '.', ',', ':', '!', '#', '=', '%', '$', '@', '<', '>', '/', '\', + \ '', '', '', ] + for key in s:keysMappingDriven + execute printf('inoremap %s %s=feedPopup()', + \ key, key) + endfor +endfunction + +" +function s:unmapForMappingDriven() + if !exists('s:keysMappingDriven') + return + endif + for key in s:keysMappingDriven + execute 'iunmap ' . key + endfor + let s:keysMappingDriven = [] +endfunction + +" +function s:getCurrentWord() + return matchstr(s:getCurrentText(), '\k*$') +endfunction + +" +function s:getCurrentText() + return strpart(getline('.'), 0, col('.') - 1) +endfunction + +" +function s:getPostText() + return strpart(getline('.'), col('.') - 1) +endfunction + +" +function s:isModifiedSinceLastCall() + if exists('s:posLast') + let posPrev = s:posLast + let nLinesPrev = s:nLinesLast + let textPrev = s:textLast + endif + let s:posLast = getpos('.') + let s:nLinesLast = line('$') + let s:textLast = getline('.') + if !exists('posPrev') + return 1 + elseif posPrev[1] != s:posLast[1] || nLinesPrev != s:nLinesLast + return (posPrev[1] - s:posLast[1] == nLinesPrev - s:nLinesLast) + elseif textPrev ==# s:textLast + return 0 + elseif posPrev[2] > s:posLast[2] + return 1 + elseif has('gui_running') && has('multi_byte') + " NOTE: auto-popup causes a strange behavior when IME/XIM is working + return posPrev[2] + 1 == s:posLast[2] + endif + return posPrev[2] != s:posLast[2] +endfunction + +" +function s:makeCurrentBehaviorSet() + let modified = s:isModifiedSinceLastCall() + if exists('s:behavsCurrent[s:iBehavs].repeat') && s:behavsCurrent[s:iBehavs].repeat + let behavs = [ s:behavsCurrent[s:iBehavs] ] + elseif exists('s:behavsCurrent[s:iBehavs]') + return [] + elseif modified + let behavs = copy(exists('g:acp_behavior[&filetype]') + \ ? g:acp_behavior[&filetype] + \ : g:acp_behavior['*']) + else + return [] + endif + let text = s:getCurrentText() + call filter(behavs, 'call(v:val.meets, [text])') + let s:iBehavs = 0 + if exists('s:lastUncompletable') && + \ stridx(s:getCurrentWord(), s:lastUncompletable.word) == 0 && + \ map(copy(behavs), 'v:val.command') ==# s:lastUncompletable.commands + let behavs = [] + else + unlet! s:lastUncompletable + endif + return behavs +endfunction + +" +function s:feedPopup() + " NOTE: CursorMovedI is not triggered while the popup menu is visible. And + " it will be triggered when popup menu is disappeared. + if s:lockCount > 0 || pumvisible() || &paste + return '' + endif + if exists('s:behavsCurrent[s:iBehavs].onPopupClose') + if !call(s:behavsCurrent[s:iBehavs].onPopupClose, []) + call s:finishPopup(1) + return '' + endif + endif + let s:behavsCurrent = s:makeCurrentBehaviorSet() + if empty(s:behavsCurrent) + call s:finishPopup(1) + return '' + endif + " In case of dividing words by symbols (e.g. "for(int", "ab==cd") while a + " popup menu is visible, another popup is not available unless input + " or try popup once. So first completion is duplicated. + call insert(s:behavsCurrent, s:behavsCurrent[s:iBehavs]) + call l9#tempvariables#set(s:TEMP_VARIABLES_GROUP0, + \ '&spell', 0) + call l9#tempvariables#set(s:TEMP_VARIABLES_GROUP0, + \ '&completeopt', 'menuone' . (g:acp_completeoptPreview ? ',preview' : '')) + call l9#tempvariables#set(s:TEMP_VARIABLES_GROUP0, + \ '&complete', g:acp_completeOption) + call l9#tempvariables#set(s:TEMP_VARIABLES_GROUP0, + \ '&ignorecase', g:acp_ignorecaseOption) + " NOTE: With CursorMovedI driven, Set 'lazyredraw' to avoid flickering. + " With Mapping driven, set 'nolazyredraw' to make a popup menu visible. + call l9#tempvariables#set(s:TEMP_VARIABLES_GROUP0, + \ '&lazyredraw', !g:acp_mappingDriven) + " NOTE: 'textwidth' must be restored after . + call l9#tempvariables#set(s:TEMP_VARIABLES_GROUP1, + \ '&textwidth', 0) + call s:setCompletefunc() + call feedkeys(s:behavsCurrent[s:iBehavs].command . "\=acp#onPopupPost()\", 'n') + return '' " this function is called by = +endfunction + +" +function s:finishPopup(fGroup1) + inoremap | iunmap + inoremap | iunmap + let s:behavsCurrent = [] + call l9#tempvariables#end(s:TEMP_VARIABLES_GROUP0) + if a:fGroup1 + call l9#tempvariables#end(s:TEMP_VARIABLES_GROUP1) + endif +endfunction + +" +function s:setCompletefunc() + if exists('s:behavsCurrent[s:iBehavs].completefunc') + call l9#tempvariables#set(s:TEMP_VARIABLES_GROUP0, + \ '&completefunc', s:behavsCurrent[s:iBehavs].completefunc) + endif +endfunction + +" +function s:makeSnipmateItem(key, snip) + if type(a:snip) == type([]) + let descriptions = map(copy(a:snip), 'v:val[0]') + let snipFormatted = '[MULTI] ' . join(descriptions, ', ') + else + let snipFormatted = substitute(a:snip, '\(\n\|\s\)\+', ' ', 'g') + endif + return { + \ 'word': a:key, + \ 'menu': strpart(snipFormatted, 0, 80), + \ } +endfunction + +" +function s:getMatchingSnipItems(base) + let key = a:base . "\n" + if !exists('s:snipItems[key]') + let s:snipItems[key] = items(GetSnipsInCurrentScope()) + call filter(s:snipItems[key], 'strpart(v:val[0], 0, len(a:base)) ==? a:base') + call map(s:snipItems[key], 's:makeSnipmateItem(v:val[0], v:val[1])') + endif + return s:snipItems[key] +endfunction + +" }}}1 +"============================================================================= +" INITIALIZATION {{{1 + +let s:TEMP_VARIABLES_GROUP0 = "AutoComplPop0" +let s:TEMP_VARIABLES_GROUP1 = "AutoComplPop1" +let s:lockCount = 0 +let s:behavsCurrent = [] +let s:iBehavs = 0 +let s:snipItems = {} + +" }}}1 +"============================================================================= +" vim: set fdm=marker: diff --git a/homedir/.vim/colors/apprentice.vim b/homedir/.vim/colors/apprentice.vim new file mode 100644 index 0000000..eb9bb57 --- /dev/null +++ b/homedir/.vim/colors/apprentice.vim @@ -0,0 +1,244 @@ +" 'apprentice.vim' -- Vim color scheme. +" Maintainer: Romain Lafourcade (romainlafourcade@gmail.com) +" Essentially a streamlining and conversion to xterm colors of +" 'sorcerer' by Jeet Sukumaran (jeetsukumaran@gmailcom) + +" MADE-UP NAME HEX RGB XTERM ANSI +" ======================================================================== +" almost black #1c1c1c rgb(28, 28, 28) 234 0 +" darker grey #262626 rgb(38, 38, 38) 235 background color +" dark grey #303030 rgb(48, 48, 48) 236 8 +" grey #444444 rgb(68, 68, 68) 238 8 +" medium grey #585858 rgb(88, 88, 88) 240 8 +" light grey #6c6c6c rgb(108, 108, 108) 242 7 +" lighter grey #bcbcbc rgb(188, 188, 188) 250 foreground color +" white #ffffff rgb(255, 255, 255) 231 15 +" purple #5f5f87 rgb(95, 95, 135) 60 5 +" light purple #8787af rgb(135, 135, 175) 103 13 +" green #5f875f rgb(95, 135, 95) 65 2 +" light green #87af87 rgb(135, 175, 135) 108 10 +" aqua #5f8787 rgb(95, 135, 135) 66 6 +" light aqua #5fafaf rgb(95, 175, 175) 73 14 +" blue #5f87af rgb(95, 135, 175) 67 4 +" light blue #8fafd7 rgb(143, 175, 215) 110 12 +" red #af5f5f rgb(175, 95, 95) 131 1 +" orange #ff8700 rgb(255, 135, 0) 208 9 +" ocre #87875f rgb(135, 135, 95) 101 3 +" yellow #ffffaf rgb(255, 255, 175) 229 11 + +hi clear + +if exists('syntax_on') + syntax reset +endif + +set background=dark + +let colors_name = 'apprentice' + +if &t_Co >= 256 || has('gui_running') + hi Normal ctermbg=235 ctermfg=250 guibg=#262626 guifg=#bcbcbc cterm=NONE gui=NONE + + set background=dark + + hi Comment ctermbg=NONE ctermfg=240 guibg=NONE guifg=#585858 cterm=NONE gui=NONE + hi Constant ctermbg=NONE ctermfg=208 guibg=NONE guifg=#ff8700 cterm=NONE gui=NONE + hi Error ctermbg=NONE ctermfg=131 guibg=NONE guifg=#af5f5f cterm=reverse gui=reverse + hi Identifier ctermbg=NONE ctermfg=67 guibg=NONE guifg=#5f87af cterm=NONE gui=NONE + hi Ignore ctermbg=NONE ctermfg=NONE guibg=NONE guifg=NONE cterm=NONE gui=NONE + hi PreProc ctermbg=NONE ctermfg=66 guibg=NONE guifg=#5f8787 cterm=NONE gui=NONE + hi Special ctermbg=NONE ctermfg=65 guibg=NONE guifg=#5f875f cterm=NONE gui=NONE + hi Statement ctermbg=NONE ctermfg=110 guibg=NONE guifg=#8fafd7 cterm=NONE gui=NONE + hi String ctermbg=NONE ctermfg=108 guibg=NONE guifg=#87af87 cterm=NONE gui=NONE + hi Todo ctermbg=NONE ctermfg=NONE guibg=NONE guifg=NONE cterm=reverse gui=reverse + hi Type ctermbg=NONE ctermfg=103 guibg=NONE guifg=#8787af cterm=NONE gui=NONE + hi Underlined ctermbg=NONE ctermfg=66 guibg=NONE guifg=#5f8787 cterm=underline gui=underline + + hi LineNr ctermbg=234 ctermfg=242 guibg=#1c1c1c guifg=#6c6c6c cterm=NONE gui=NONE + hi NonText ctermbg=NONE ctermfg=240 guibg=NONE guifg=#585858 cterm=NONE gui=NONE + + hi Pmenu ctermbg=238 ctermfg=250 guibg=#444444 guifg=#bcbcbc cterm=NONE gui=NONE + hi PmenuSbar ctermbg=240 ctermfg=NONE guibg=#585858 guifg=NONE cterm=NONE gui=NONE + hi PmenuSel ctermbg=66 ctermfg=235 guibg=#5f8787 guifg=#262626 cterm=NONE gui=NONE + hi PmenuThumb ctermbg=66 ctermfg=66 guibg=#5f8787 guifg=#5f8787 cterm=NONE gui=NONE + + hi ErrorMsg ctermbg=131 ctermfg=235 guibg=#af5f5f guifg=#262626 cterm=NONE gui=NONE + hi ModeMsg ctermbg=108 ctermfg=235 guibg=#87af87 guifg=#262626 cterm=NONE gui=NONE + hi MoreMsg ctermbg=NONE ctermfg=66 guibg=NONE guifg=#5f8787 cterm=NONE gui=NONE + hi Question ctermbg=NONE ctermfg=108 guibg=NONE guifg=#87af87 cterm=NONE gui=NONE + hi WarningMsg ctermbg=NONE ctermfg=131 guibg=NONE guifg=#af5f5f cterm=NONE gui=NONE + + hi TabLine ctermbg=238 ctermfg=101 guibg=#444444 guifg=#87875f cterm=NONE gui=NONE + hi TabLineFill ctermbg=238 ctermfg=238 guibg=#444444 guifg=#444444 cterm=NONE gui=NONE + hi TabLineSel ctermbg=101 ctermfg=235 guibg=#87875f guifg=#262626 cterm=NONE gui=NONE + + hi Cursor ctermbg=242 ctermfg=NONE guibg=#6c6c6c guifg=NONE cterm=NONE gui=NONE + hi CursorColumn ctermbg=236 ctermfg=NONE guibg=#303030 guifg=NONE cterm=NONE gui=NONE + hi CursorLine ctermbg=236 ctermfg=NONE guibg=#303030 guifg=NONE cterm=NONE gui=NONE + hi CursorLineNr ctermbg=236 ctermfg=73 guibg=#303030 guifg=#5fafaf cterm=NONE gui=NONE + + hi helpLeadBlank ctermbg=NONE ctermfg=NONE guibg=NONE guifg=NONE cterm=NONE gui=NONE + hi helpNormal ctermbg=NONE ctermfg=NONE guibg=NONE guifg=NONE cterm=NONE gui=NONE + + hi StatusLine ctermbg=101 ctermfg=235 guibg=#87875f guifg=#262626 cterm=NONE gui=NONE + hi StatusLineNC ctermbg=238 ctermfg=101 guibg=#444444 guifg=#87875f cterm=NONE gui=italic + + hi Visual ctermbg=110 ctermfg=235 guibg=#8fafd7 guifg=#262626 cterm=NONE gui=NONE + hi VisualNOS ctermbg=NONE ctermfg=NONE guibg=NONE guifg=NONE cterm=underline gui=underline + + hi FoldColumn ctermbg=234 ctermfg=242 guibg=#1c1c1c guifg=#6c6c6c cterm=NONE gui=NONE + hi Folded ctermbg=234 ctermfg=242 guibg=#1c1c1c guifg=#6c6c6c cterm=NONE gui=NONE + + hi VertSplit ctermbg=238 ctermfg=238 guibg=#444444 guifg=#444444 cterm=NONE gui=NONE + hi WildMenu ctermbg=110 ctermfg=235 guibg=#8fafd7 guifg=#262626 cterm=NONE gui=NONE + + hi Function ctermbg=NONE ctermfg=229 guibg=NONE guifg=#ffffaf cterm=NONE gui=NONE + hi SpecialKey ctermbg=NONE ctermfg=240 guibg=NONE guifg=#585858 cterm=NONE gui=NONE + hi Title ctermbg=NONE ctermfg=231 guibg=NONE guifg=#ffffff cterm=NONE gui=NONE + + hi DiffAdd ctermbg=108 ctermfg=235 guibg=#87af87 guifg=#262626 cterm=NONE gui=NONE + hi DiffChange ctermbg=60 ctermfg=235 guibg=#5f5f87 guifg=#262626 cterm=NONE gui=NONE + hi DiffDelete ctermbg=131 ctermfg=235 guibg=#af5f5f guifg=#262626 cterm=NONE gui=NONE + hi DiffText ctermbg=103 ctermfg=235 guibg=#8787af guifg=#262626 cterm=NONE gui=NONE + + hi IncSearch ctermbg=131 ctermfg=235 guibg=#af5f5f guifg=#262626 cterm=NONE gui=NONE + hi Search ctermbg=229 ctermfg=235 guibg=#ffffaf guifg=#262626 cterm=NONE gui=NONE + + hi Directory ctermbg=NONE ctermfg=73 guibg=NONE guifg=#5fafaf cterm=NONE gui=NONE + hi MatchParen ctermbg=234 ctermfg=229 guibg=#1c1c1c guifg=#ffffaf cterm=NONE gui=NONE + + hi SpellBad ctermbg=NONE ctermfg=131 guibg=NONE guifg=NONE cterm=undercurl gui=undercurl guisp=#af5f5f + hi SpellCap ctermbg=NONE ctermfg=73 guibg=NONE guifg=NONE cterm=undercurl gui=undercurl guisp=#5fafaf + hi SpellLocal ctermbg=NONE ctermfg=65 guibg=NONE guifg=NONE cterm=undercurl gui=undercurl guisp=#5f875f + hi SpellRare ctermbg=NONE ctermfg=208 guibg=NONE guifg=NONE cterm=undercurl gui=undercurl guisp=#ff8700 + + hi ColorColumn ctermbg=131 ctermfg=NONE guibg=#af5f5f guifg=NONE cterm=NONE gui=NONE + hi signColumn ctermbg=234 ctermfg=242 guibg=#1c1c1c guifg=#6c6c6c cterm=NONE gui=NONE +elseif &t_Co == 8 || $TERM !~# '^linux' || &t_Co == 16 + set t_Co=16 + + hi Normal ctermbg=NONE ctermfg=15 cterm=NONE + + set background=dark + + hi Comment ctermbg=NONE ctermfg=8 cterm=NONE + hi Constant ctermbg=NONE ctermfg=9 cterm=NONE + hi Function ctermbg=NONE ctermfg=11 cterm=NONE + hi Identifier ctermbg=NONE ctermfg=4 cterm=NONE + hi PreProc ctermbg=NONE ctermfg=6 cterm=NONE + hi Special ctermbg=NONE ctermfg=2 cterm=NONE + hi Statement ctermbg=NONE ctermfg=12 cterm=NONE + hi String ctermbg=NONE ctermfg=10 cterm=NONE + hi Todo ctermbg=NONE ctermfg=NONE cterm=reverse + hi Type ctermbg=NONE ctermfg=13 cterm=NONE + + hi Error ctermbg=NONE ctermfg=1 cterm=reverse + hi Ignore ctermbg=NONE ctermfg=NONE cterm=NONE + hi Underlined ctermbg=NONE ctermfg=6 cterm=underline + + hi LineNr ctermbg=0 ctermfg=7 cterm=NONE + hi NonText ctermbg=NONE ctermfg=8 cterm=NONE + + hi Pmenu ctermbg=8 ctermfg=15 cterm=NONE + hi PmenuSbar ctermbg=7 ctermfg=NONE cterm=NONE + hi PmenuSel ctermbg=6 ctermfg=0 cterm=NONE + hi PmenuThumb ctermbg=6 ctermfg=NONE cterm=NONE + + hi ErrorMsg ctermbg=1 ctermfg=0 cterm=NONE + hi ModeMsg ctermbg=2 ctermfg=0 cterm=NONE + hi MoreMsg ctermbg=NONE ctermfg=6 cterm=NONE + hi Question ctermbg=NONE ctermfg=10 cterm=NONE + hi WarningMsg ctermbg=NONE ctermfg=1 cterm=NONE + + hi TabLine ctermbg=8 ctermfg=3 cterm=NONE + hi TabLineFill ctermbg=8 ctermfg=0 cterm=NONE + hi TabLineSel ctermbg=3 ctermfg=0 cterm=NONE + + hi Cursor ctermbg=NONE ctermfg=NONE cterm=NONE + hi CursorColumn ctermbg=8 ctermfg=NONE cterm=NONE + hi CursorLine ctermbg=NONE ctermfg=NONE cterm=underline + hi CursorLineNr ctermbg=0 ctermfg=14 cterm=NONE + + hi helpLeadBlank ctermbg=NONE ctermfg=NONE cterm=NONE + hi helpNormal ctermbg=NONE ctermfg=NONE cterm=NONE + + hi StatusLine ctermbg=3 ctermfg=0 cterm=NONE + hi StatusLineNC ctermbg=8 ctermfg=0 cterm=NONE + + hi Visual ctermbg=12 ctermfg=0 cterm=NONE + hi VisualNOS ctermbg=NONE ctermfg=NONE cterm=underline + + hi FoldColumn ctermbg=0 ctermfg=8 cterm=NONE + hi Folded ctermbg=0 ctermfg=8 cterm=NONE + + hi VertSplit ctermbg=8 ctermfg=8 cterm=NONE + hi WildMenu ctermbg=12 ctermfg=0 cterm=NONE + + hi SpecialKey ctermbg=NONE ctermfg=8 cterm=NONE + hi Title ctermbg=NONE ctermfg=15 cterm=NONE + + hi DiffAdd ctermbg=2 ctermfg=0 cterm=NONE + hi DiffChange ctermbg=6 ctermfg=0 cterm=NONE + hi DiffDelete ctermbg=1 ctermfg=0 cterm=NONE + hi DiffText ctermbg=11 ctermfg=0 cterm=NONE + + hi IncSearch ctermbg=1 ctermfg=0 cterm=NONE + hi Search ctermbg=11 ctermfg=0 cterm=NONE + + hi Directory ctermbg=NONE ctermfg=14 cterm=NONE + hi MatchParen ctermbg=0 ctermfg=11 cterm=NONE + + hi SpellBad ctermbg=NONE ctermfg=1 cterm=undercurl + hi SpellCap ctermbg=NONE ctermfg=3 cterm=undercurl + hi SpellLocal ctermbg=NONE ctermfg=2 cterm=undercurl + hi SpellRare ctermbg=NONE ctermfg=5 cterm=undercurl + + hi ColorColumn ctermbg=1 ctermfg=NONE cterm=NONE + hi SignColumn ctermbg=0 ctermfg=8 cterm=NONE +endif + +hi link Boolean Constant +hi link Character Constant +hi link Conceal Normal +hi link Conditional Statement +hi link Debug Special +hi link Define PreProc +hi link Delimiter Special +hi link Exception Statement +hi link Float Number +hi link HelpCommand Statement +hi link HelpExample Statement +hi link Include PreProc +hi link Keyword Statement +hi link Label Statement +hi link Macro PreProc +hi link Number Constant +hi link Operator Statement +hi link PreCondit PreProc +hi link Repeat Statement +hi link SpecialChar Special +hi link SpecialComment Special +hi link StorageClass Type +hi link Structure Type +hi link Tag Special +hi link Typedef Type + +hi link htmlEndTag htmlTagName +hi link htmlLink Function +hi link htmlSpecialTagName htmlTagName +hi link htmlTag htmlTagName +hi link xmlTag Statement +hi link xmlTagName Statement +hi link xmlEndTag Statement + +hi link markdownItalic Preproc + +hi link diffBDiffer WarningMsg +hi link diffCommon WarningMsg +hi link diffDiffer WarningMsg +hi link diffIdentical WarningMsg +hi link diffIsA WarningMsg +hi link diffNoEOL WarningMsg +hi link diffOnly WarningMsg +hi link diffRemoved WarningMsg +hi link diffAdded String diff --git a/homedir/.vim/doc/acp.txt b/homedir/.vim/doc/acp.txt new file mode 100644 index 0000000..a9c40e8 --- /dev/null +++ b/homedir/.vim/doc/acp.txt @@ -0,0 +1,519 @@ +*acp.txt* Automatically opens popup menu for completions. + + Copyright (c) 2007-2009 Takeshi NISHIDA + +AutoComplPop *autocomplpop* *acp* + +INTRODUCTION |acp-introduction| +INSTALLATION |acp-installation| +USAGE |acp-usage| +COMMANDS |acp-commands| +OPTIONS |acp-options| +SPECIAL THANKS |acp-thanks| +CHANGELOG |acp-changelog| +ABOUT |acp-about| + + +============================================================================== +INTRODUCTION *acp-introduction* + +With this plugin, your vim comes to automatically opens popup menu for +completions when you enter characters or move the cursor in Insert mode. It +won't prevent you continuing entering characters. + + +============================================================================== +INSTALLATION *acp-installation* + +Put all files into your runtime directory. If you have the zip file, extract +it to your runtime directory. + +You should place the files as follows: +> + /plugin/acp.vim + /doc/acp.txt + ... +< +If you are disgusted to make your runtime directory confused with a lot of +plugins, put each of the plugins into a directory individually and just add +the directory path to 'runtimepath'. It's easy to uninstall plugins. + +Then update your help tags files to enable help for this plugin. See +|add-local-help| for details. + +Requirements: ~ + +- L9 library (vimscript #3252) + + +============================================================================== +USAGE *acp-usage* + +Once this plugin is installed, auto-popup is enabled at startup by default. + +Which completion method is used depends on the text before the cursor. The +default behavior is as follows: + + kind filetype text before the cursor ~ + Keyword * two keyword characters + Filename * a filename character + a path separator + + 0 or more filename character + Omni ruby ".", "::" or non-word character + ":" + (|+ruby| required.) + Omni python "." (|+python| required.) + Omni xml "<", "" characters + " ") + Omni html/xhtml "<", "" characters + " ") + Omni css (":", ";", "{", "^", "@", or "!") + + 0 or 1 space + +Also, you can make user-defined completion and snipMate's trigger completion +(|acp-snipMate|) auto-popup if the options are set. + +These behavior are customizable. + + *acp-snipMate* +snipMate's Trigger Completion ~ + +snipMate's trigger completion enables you to complete a snippet trigger +provided by snipMate plugin +(http://www.vim.org/scripts/script.php?script_id=2540) and expand it. + + +To enable auto-popup for this completion, add following function to +plugin/snipMate.vim: +> + fun! GetSnipsInCurrentScope() + let snips = {} + for scope in [bufnr('%')] + split(&ft, '\.') + ['_'] + call extend(snips, get(s:snippets, scope, {}), 'keep') + call extend(snips, get(s:multi_snips, scope, {}), 'keep') + endfor + return snips + endf +< +And set |g:acp_behaviorSnipmateLength| option to 1. + +There is the restriction on this auto-popup, that the word before cursor must +consist only of uppercase characters. + + *acp-perl-omni* +Perl Omni-Completion ~ + +AutoComplPop supports perl-completion.vim +(http://www.vim.org/scripts/script.php?script_id=2852). + +To enable auto-popup for this completion, set |g:acp_behaviorPerlOmniLength| +option to 0 or more. + + +============================================================================== +COMMANDS *acp-commands* + + *:AcpEnable* +:AcpEnable + enables auto-popup. + + *:AcpDisable* +:AcpDisable + disables auto-popup. + + *:AcpLock* +:AcpLock + suspends auto-popup temporarily. + + For the purpose of avoiding interruption to another script, it is + recommended to insert this command and |:AcpUnlock| than |:AcpDisable| + and |:AcpEnable| . + + *:AcpUnlock* +:AcpUnlock + resumes auto-popup suspended by |:AcpLock| . + + +============================================================================== +OPTIONS *acp-options* + + *g:acp_enableAtStartup* > + let g:acp_enableAtStartup = 1 +< + If non-zero, auto-popup is enabled at startup. + + *g:acp_mappingDriven* > + let g:acp_mappingDriven = 0 +< + If non-zero, auto-popup is triggered by key mappings instead of + |CursorMovedI| event. This is useful to avoid auto-popup by moving + cursor in Insert mode. + + *g:acp_ignorecaseOption* > + let g:acp_ignorecaseOption = 1 +< + Value set to 'ignorecase' temporarily when auto-popup. + + *g:acp_completeOption* > + let g:acp_completeOption = '.,w,b,k' +< + Value set to 'complete' temporarily when auto-popup. + + *g:acp_completeoptPreview* > + let g:acp_completeoptPreview = 0 +< + If non-zero, "preview" is added to 'completeopt' when auto-popup. + + *g:acp_behaviorUserDefinedFunction* > + let g:acp_behaviorUserDefinedFunction = '' +< + |g:acp_behavior-completefunc| for user-defined completion. If empty, + this completion will be never attempted. + + *g:acp_behaviorUserDefinedMeets* > + let g:acp_behaviorUserDefinedMeets = '' +< + |g:acp_behavior-meets| for user-defined completion. If empty, this + completion will be never attempted. + + *g:acp_behaviorSnipmateLength* > + let g:acp_behaviorSnipmateLength = -1 +< + Pattern before the cursor, which are needed to attempt + snipMate-trigger completion. + + *g:acp_behaviorKeywordCommand* > + let g:acp_behaviorKeywordCommand = "\" +< + Command for keyword completion. This option is usually set "\" or + "\". + + *g:acp_behaviorKeywordLength* > + let g:acp_behaviorKeywordLength = 2 +< + Length of keyword characters before the cursor, which are needed to + attempt keyword completion. If negative value, this completion will be + never attempted. + + *g:acp_behaviorKeywordIgnores* > + let g:acp_behaviorKeywordIgnores = [] +< + List of string. If a word before the cursor matches to the front part + of one of them, keyword completion won't be attempted. + + E.g., when there are too many keywords beginning with "get" for the + completion and auto-popup by entering "g", "ge", or "get" causes + response degradation, set ["get"] to this option and avoid it. + + *g:acp_behaviorFileLength* > + let g:acp_behaviorFileLength = 0 +< + Length of filename characters before the cursor, which are needed to + attempt filename completion. If negative value, this completion will + be never attempted. + + *g:acp_behaviorRubyOmniMethodLength* > + let g:acp_behaviorRubyOmniMethodLength = 0 +< + Length of keyword characters before the cursor, which are needed to + attempt ruby omni-completion for methods. If negative value, this + completion will be never attempted. + + *g:acp_behaviorRubyOmniSymbolLength* > + let g:acp_behaviorRubyOmniSymbolLength = 1 +< + Length of keyword characters before the cursor, which are needed to + attempt ruby omni-completion for symbols. If negative value, this + completion will be never attempted. + + *g:acp_behaviorPythonOmniLength* > + let g:acp_behaviorPythonOmniLength = 0 +< + Length of keyword characters before the cursor, which are needed to + attempt python omni-completion. If negative value, this completion + will be never attempted. + + *g:acp_behaviorPerlOmniLength* > + let g:acp_behaviorPerlOmniLength = -1 +< + Length of keyword characters before the cursor, which are needed to + attempt perl omni-completion. If negative value, this completion will + be never attempted. + + See also: |acp-perl-omni| + + *g:acp_behaviorXmlOmniLength* > + let g:acp_behaviorXmlOmniLength = 0 +< + Length of keyword characters before the cursor, which are needed to + attempt XML omni-completion. If negative value, this completion will + be never attempted. + + *g:acp_behaviorHtmlOmniLength* > + let g:acp_behaviorHtmlOmniLength = 0 +< + Length of keyword characters before the cursor, which are needed to + attempt HTML omni-completion. If negative value, this completion will + be never attempted. + + *g:acp_behaviorCssOmniPropertyLength* > + let g:acp_behaviorCssOmniPropertyLength = 1 +< + Length of keyword characters before the cursor, which are needed to + attempt CSS omni-completion for properties. If negative value, this + completion will be never attempted. + + *g:acp_behaviorCssOmniValueLength* > + let g:acp_behaviorCssOmniValueLength = 0 +< + Length of keyword characters before the cursor, which are needed to + attempt CSS omni-completion for values. If negative value, this + completion will be never attempted. + + *g:acp_behavior* > + let g:acp_behavior = {} +< + This option is for advanced users. This setting overrides other + behavior options. This is a |Dictionary|. Each key corresponds to a + filetype. '*' is default. Each value is a list. These are attempted in + sequence until completion item is found. Each element is a + |Dictionary| which has following items: + + "command": *g:acp_behavior-command* + Command to be fed to open popup menu for completions. + + "completefunc": *g:acp_behavior-completefunc* + 'completefunc' will be set to this user-provided function during the + completion. Only makes sense when "command" is "". + + "meets": *g:acp_behavior-meets* + Name of the function which dicides whether or not to attempt this + completion. It will be attempted if this function returns non-zero. + This function takes a text before the cursor. + + "onPopupClose": *g:acp_behavior-onPopupClose* + Name of the function which is called when popup menu for this + completion is closed. Following completions will be suppressed if + this function returns zero. + + "repeat": *g:acp_behavior-repeat* + If non-zero, the last completion is automatically repeated. + + +============================================================================== +SPECIAL THANKS *acp-thanks* + +- Daniel Schierbeck +- Ingo Karkat + + +============================================================================== +CHANGELOG *acp-changelog* + +3.0: [TODO] + - From this version, L9 library (vimscript #3252) is required. + +2.14.1 + - Changed the way of auto-popup for avoiding an issue about filename + completion. + - Fixed a bug that popup menu was opened twice when auto-popup was done. + +2.14 + - Added the support for perl-completion.vim. + +2.13 + - Changed to sort snipMate's triggers. + - Fixed a bug that a wasted character was inserted after snipMate's trigger + completion. + +2.12.1 + - Changed to avoid a strange behavior with Microsoft IME. + +2.12 + - Added g:acp_behaviorKeywordIgnores option. + - Added g:acp_behaviorUserDefinedMeets option and removed + g:acp_behaviorUserDefinedPattern. + - Changed to do auto-popup only when a buffer is modified. + - Changed the structure of g:acp_behavior option. + - Changed to reflect a change of behavior options (named g:acp_behavior*) + any time it is done. + - Fixed a bug that completions after omni completions or snipMate's trigger + completion were never attempted when no candidate for the former + completions was found. + +2.11.1 + - Fixed a bug that a snipMate's trigger could not be expanded when it was + completed. + +2.11 + - Implemented experimental feature which is snipMate's trigger completion. + +2.10 + - Improved the response by changing not to attempt any completion when + keyword characters are entered after a word which has been found that it + has no completion candidate at the last attempt of completions. + - Improved the response by changing to close popup menu when was + pressed and the text before the cursor would not match with the pattern of + current behavior. + +2.9 + - Changed default behavior to support XML omni completion. + - Changed default value of g:acp_behaviorKeywordCommand option. + The option with "\" cause a problem which inserts a match without + when 'dictionary' has been set and keyword completion is done. + - Changed to show error message when incompatible with a installed vim. + +2.8.1 + - Fixed a bug which inserted a selected match to the next line when + auto-wrapping (enabled with 'formatoptions') was performed. + +2.8 + - Added g:acp_behaviorUserDefinedFunction option and + g:acp_behaviorUserDefinedPattern option for users who want to make custom + completion auto-popup. + - Fixed a bug that setting 'spell' on a new buffer made typing go crazy. + +2.7 + - Changed naming conventions for filenames, functions, commands, and options + and thus renamed them. + - Added g:acp_behaviorKeywordCommand option. If you prefer the previous + behavior for keyword completion, set this option "\". + - Changed default value of g:acp_ignorecaseOption option. + + The following were done by Ingo Karkat: + + - ENH: Added support for setting a user-provided 'completefunc' during the + completion, configurable via g:acp_behavior. + - BUG: When the configured completion is or , the command to + restore the original text (in on_popup_post()) must be reverted, too. + - BUG: When using a custom completion function () that also uses + an s:...() function name, the s:GetSidPrefix() function dynamically + determines the wrong SID. Now calling s:DetermineSidPrefix() once during + sourcing and caching the value in s:SID. + - BUG: Should not use custom defined completion mappings. Now + consistently using unmapped completion commands everywhere. (Beforehand, + s:PopupFeeder.feed() used mappings via feedkeys(..., 'm'), but + s:PopupFeeder.on_popup_post() did not due to its invocation via + :map-expr.) + +2.6: + - Improved the behavior of omni completion for HTML/XHTML. + +2.5: + - Added some options to customize behavior easily: + g:AutoComplPop_BehaviorKeywordLength + g:AutoComplPop_BehaviorFileLength + g:AutoComplPop_BehaviorRubyOmniMethodLength + g:AutoComplPop_BehaviorRubyOmniSymbolLength + g:AutoComplPop_BehaviorPythonOmniLength + g:AutoComplPop_BehaviorHtmlOmniLength + g:AutoComplPop_BehaviorCssOmniPropertyLength + g:AutoComplPop_BehaviorCssOmniValueLength + +2.4: + - Added g:AutoComplPop_MappingDriven option. + +2.3.1: + - Changed to set 'lazyredraw' while a popup menu is visible to avoid + flickering. + - Changed a behavior for CSS. + - Added support for GetLatestVimScripts. + +2.3: + - Added a behavior for Python to support omni completion. + - Added a behavior for CSS to support omni completion. + +2.2: + - Changed not to work when 'paste' option is set. + - Fixed AutoComplPopEnable command and AutoComplPopDisable command to + map/unmap "i" and "R". + +2.1: + - Fixed the problem caused by "." command in Normal mode. + - Changed to map "i" and "R" to feed completion command after starting + Insert mode. + - Avoided the problem caused by Windows IME. + +2.0: + - Changed to use CursorMovedI event to feed a completion command instead of + key mapping. Now the auto-popup is triggered by moving the cursor. + - Changed to feed completion command after starting Insert mode. + - Removed g:AutoComplPop_MapList option. + +1.7: + - Added behaviors for HTML/XHTML. Now supports the omni completion for + HTML/XHTML. + - Changed not to show expressions for CTRL-R =. + - Changed not to set 'nolazyredraw' while a popup menu is visible. + +1.6.1: + - Changed not to trigger the filename completion by a text which has + multi-byte characters. + +1.6: + - Redesigned g:AutoComplPop_Behavior option. + - Changed default value of g:AutoComplPop_CompleteOption option. + - Changed default value of g:AutoComplPop_MapList option. + +1.5: + - Implemented continuous-completion for the filename completion. And added + new option to g:AutoComplPop_Behavior. + +1.4: + - Fixed the bug that the auto-popup was not suspended in fuzzyfinder. + - Fixed the bug that an error has occurred with Ruby-omni-completion unless + Ruby interface. + +1.3: + - Supported Ruby-omni-completion by default. + - Supported filename completion by default. + - Added g:AutoComplPop_Behavior option. + - Added g:AutoComplPop_CompleteoptPreview option. + - Removed g:AutoComplPop_MinLength option. + - Removed g:AutoComplPop_MaxLength option. + - Removed g:AutoComplPop_PopupCmd option. + +1.2: + - Fixed bugs related to 'completeopt'. + +1.1: + - Added g:AutoComplPop_IgnoreCaseOption option. + - Added g:AutoComplPop_NotEnableAtStartup option. + - Removed g:AutoComplPop_LoadAndEnable option. +1.0: + - g:AutoComplPop_LoadAndEnable option for a startup activation is added. + - AutoComplPopLock command and AutoComplPopUnlock command are added to + suspend and resume. + - 'completeopt' and 'complete' options are changed temporarily while + completing by this script. + +0.4: + - The first match are selected when the popup menu is Opened. You can insert + the first match with CTRL-Y. + +0.3: + - Fixed the problem that the original text is not restored if 'longest' is + not set in 'completeopt'. Now the plugin works whether or not 'longest' is + set in 'completeopt', and also 'menuone'. + +0.2: + - When completion matches are not found, insert CTRL-E to stop completion. + - Clear the echo area. + - Fixed the problem in case of dividing words by symbols, popup menu is + not opened. + +0.1: + - First release. + + +============================================================================== +ABOUT *acp-about* *acp-contact* *acp-author* + +Author: Takeshi NISHIDA +Licence: MIT Licence +URL: http://www.vim.org/scripts/script.php?script_id=1879 + http://bitbucket.org/ns9tks/vim-autocomplpop/ + +Bugs/Issues/Suggestions/Improvements ~ + +Please submit to http://bitbucket.org/ns9tks/vim-autocomplpop/issues/ . + +============================================================================== + vim:tw=78:ts=8:ft=help:norl: + diff --git a/homedir/.vim/init.vim b/homedir/.vim/init.vim new file mode 120000 index 0000000..6e1c06b --- /dev/null +++ b/homedir/.vim/init.vim @@ -0,0 +1 @@ +/home/fbt/.vimrc \ No newline at end of file diff --git a/homedir/.vim/plugin/AutoClose.vim b/homedir/.vim/plugin/AutoClose.vim new file mode 100644 index 0000000..d91ba8b --- /dev/null +++ b/homedir/.vim/plugin/AutoClose.vim @@ -0,0 +1,542 @@ +scriptencoding utf-8 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" AutoClose.vim - Automatically close pair of characters: ( with ), [ with ], { with }, etc. +" Version: 2.0 +" Author: Thiago Alves +" Maintainer: Thiago Alves +" URL: http://thiagoalves.com.br +" Licence: This script is released under the Vim License. +" Last modified: 02/02/2011 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +" check if script is already loaded +if !exists("g:debug_AutoClose") && exists("g:loaded_AutoClose") + finish "stop loading the script" +endif +let g:loaded_AutoClose = 1 + +let s:global_cpo = &cpo " store compatible-mode in local variable +set cpo&vim " go into nocompatible-mode + +if !exists('g:AutoClosePreserveDotReg') + let g:AutoClosePreserveDotReg = 1 +endif + +if g:AutoClosePreserveDotReg + " Because dot register preservation code remaps escape we have to remap + " some terminal specific escape sequences first + if &term =~ 'xterm' || &term =~ 'rxvt' || &term =~ 'screen' || &term =~ 'linux' || &term =~ 'gnome' + imap OA + imap OB + imap OC + imap OD + imap OH + imap OF + imap [5~ + imap [6~ + endif +endif + +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Functions +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +function! s:GetCharAhead(len) + if col('$') == col('.') + return "\0" + endif + return strpart(getline('.'), col('.')-2 + a:len, 1) +endfunction + +function! s:GetCharBehind(len) + if col('.') == 1 + return "\0" + endif + return strpart(getline('.'), col('.') - (1 + a:len), 1) +endfunction + +function! s:GetNextChar() + return s:GetCharAhead(1) +endfunction + +function! s:GetPrevChar() + return s:GetCharBehind(1) +endfunction + +" used to implement automatic deletion of closing character when opening +" counterpart is deleted and by space expansion +function! s:IsEmptyPair() + let l:prev = s:GetPrevChar() + let l:next = s:GetNextChar() + return (l:next != "\0") && (get(b:AutoClosePairs, l:prev, "\0") == l:next) +endfunction + +function! s:GetCurrentSyntaxRegion() + return synIDattr(synIDtrans(synID(line('.'), col('.'), 1)), 'name') +endfunction + +function! s:GetCurrentSyntaxRegionIf(char) + let l:origin_line = getline('.') + let l:changed_line = strpart(l:origin_line, 0, col('.')-1) . a:char . strpart(l:origin_line, col('.')-1) + call setline('.', l:changed_line) + let l:region = synIDattr(synIDtrans(synID(line('.'), col('.'), 1)), 'name') + call setline('.', l:origin_line) + return l:region +endfunction + +function! s:IsForbidden(char) + let l:result = index(b:AutoCloseProtectedRegions, s:GetCurrentSyntaxRegion()) >= 0 + if l:result + return l:result + endif + let l:region = s:GetCurrentSyntaxRegionIf(a:char) + let l:result = index(b:AutoCloseProtectedRegions, l:region) >= 0 + return l:result || l:region == 'Comment' +endfunction + +function! s:AllowQuote(char, isBS) + let l:result = 1 + if b:AutoCloseSmartQuote + let l:initPos = 1 + (a:isBS ? 1 : 0) + let l:charBehind = s:GetCharBehind(l:initPos) + let l:prev = l:charBehind + let l:backSlashCount = 0 + while l:charBehind == '\' + let l:backSlashCount = l:backSlashCount + 1 + let l:charBehind = s:GetCharBehind(l:initPos + l:backSlashCount) + endwhile + + if l:backSlashCount % 2 + let l:result = 0 + else + if a:char == "'" && l:prev =~ '[a-zA-Z0-9]' + let l:result = 0 + endif + endif + endif + return l:result +endfunction + +function! s:CountQuotes(char) + let l:currPos = col('.')-1 + let l:line = strpart(getline('.'), 0, l:currPos) + let l:result = 0 + + if l:currPos >= 0 + for [q,closer] in items(b:AutoClosePairs) + " only consider twin pairs + if q != closer | continue | endif + + if b:AutoCloseSmartQuote != 0 + let l:regex = q . '[ˆ\\' . q . ']*(\\.[ˆ\\' . q . ']*)*' . q + else + let l:regex = q . '[ˆ' . q . ']*' . q + endif + + let l:closedQuoteIdx = match(l:line, l:regex) + while l:closedQuoteIdx >= 0 + let l:matchedStr = matchstr(l:line, l:regex, l:closedQuoteIdx) + let l:line = strpart(l:line, 0, l:closedQuoteIdx) . strpart(l:line, l:closedQuoteIdx + strlen(l:matchedStr)) + let l:closedQuoteIdx = match(l:line, l:regex) + endwhile + endfor + + for c in split(l:line, '\zs') + if c == a:char + let l:result = l:result + 1 + endif + endfor + endif + return l:result +endfunction + +" The auto-close buffer is used in a fix of the redo functionality. +" As we insert characters after cursor, we remember them and at the moment +" that vim would normally collect the last entered string into dot register +" (:help ".) - i.e. when esc or a motion key is typed in insert mode - we +" erase the inserted symbols and pretend that we have just now typed them. +" This way vim picks them up into dot register as well and user can repeat the +" typed bit with . command. +function! s:PushBuffer(char) + if !exists("b:AutoCloseBuffer") + let b:AutoCloseBuffer = [] + endif + call insert(b:AutoCloseBuffer, a:char) +endfunction + +function! s:PopBuffer() + if exists("b:AutoCloseBuffer") && len(b:AutoCloseBuffer) > 0 + call remove(b:AutoCloseBuffer, 0) + endif +endfunction + +function! s:EmptyBuffer() + if exists("b:AutoCloseBuffer") + let b:AutoCloseBuffer = [] + endif +endfunction + +function! s:FlushBuffer() + let l:result = '' + if exists("b:AutoCloseBuffer") + let l:len = len(b:AutoCloseBuffer) + if l:len > 0 + let l:result = join(b:AutoCloseBuffer, '') . repeat("\", l:len) + let b:AutoCloseBuffer = [] + call s:EraseNCharsAtCursor(l:len) + endif + endif + return l:result +endfunction + +function! s:InsertStringAtCursor(str) + let l:line = getline('.') + let l:column = col('.')-2 + + if l:column < 0 + call setline('.', a:str . l:line) + else + call setline('.', l:line[:l:column] . a:str . l:line[l:column+1:]) + endif +endfunction + +function! s:EraseNCharsAtCursor(len) + let l:line = getline('.') + let l:column = col('.')-2 + + if l:column < 0 + call setline('.', l:line[a:len + 1:]) + else + call setline('.', l:line[:l:column] . l:line[l:column + a:len + 1:]) + endif +endfunction + +" returns the opener, after having inserted its closer if necessary +function! s:InsertPair(opener) + if ! b:AutoCloseOn || ! has_key(b:AutoClosePairs, a:opener) || s:IsForbidden(a:opener) + return a:opener + endif + + let l:save_ve = &ve + set ve=all + + let l:next = s:GetNextChar() + " only add closing pair before space or any of the closepair chars + let close_before = '\s\|\V\[,.;' . escape(join(keys(b:AutoClosePairs) + values(b:AutoClosePairs), ''), ']').']' + if (l:next == "\0" || l:next =~ close_before) && s:AllowQuote(a:opener, 0) + call s:InsertStringAtCursor(b:AutoClosePairs[a:opener]) + call s:PushBuffer(b:AutoClosePairs[a:opener]) + endif + + exec "set ve=" . l:save_ve + return a:opener +endfunction + +" returns the closer, after having eaten identical one if necessary +function! s:ClosePair(closer) + let l:save_ve = &ve + set ve=all + + if b:AutoCloseOn && s:GetNextChar() == a:closer + call s:EraseNCharsAtCursor(1) + call s:PopBuffer() + endif + + exec "set ve=" . l:save_ve + return a:closer +endfunction + +" in case closer is identical with its opener - heuristically decide which one +" is being typed and act accordingly +function! s:OpenOrCloseTwinPair(char) + if s:CountQuotes(a:char) % 2 == 0 + " act as opening char + return s:InsertPair(a:char) + else + " act as closing char + return s:ClosePair(a:char) + endif +endfunction + +" maintain auto-close buffer when delete key is pressed +function! s:Delete() + let l:save_ve = &ve + set ve=all + + if exists("b:AutoCloseBuffer") && len(b:AutoCloseBuffer) > 0 && b:AutoCloseBuffer[0] == s:GetNextChar() + call s:PopBuffer() + endif + + exec "set ve=" . l:save_ve + return "\" +endfunction + +" when backspace is pressed: +" - erase an empty pair if backspacing from inside one +" - maintain auto-close buffer +function! s:Backspace() + let l:save_ve = &ve + let l:prev = s:GetPrevChar() + let l:next = s:GetNextChar() + set ve=all + + if b:AutoCloseOn && s:IsEmptyPair() && (l:prev != l:next || s:AllowQuote(l:prev, 1)) + call s:EraseNCharsAtCursor(1) + call s:PopBuffer() + endif + + exec "set ve=" . l:save_ve + return "\" +endfunction + +function! s:Space() + if b:AutoCloseOn && s:IsEmptyPair() + call s:PushBuffer("\") + return "\\\" + else + return "\" + endif +endfunction + +function! s:Enter() + if has_key(b:AutoClosePumvisible, 'ENTER') && pumvisible() + let b:snippet_chosen = 1 + return b:AutoClosePumvisible['ENTER'] + elseif b:AutoCloseOn && s:IsEmptyPair() && stridx( b:AutoCloseExpandEnterOn, s:GetPrevChar() ) >= 0 + return "\\O" + endif + return "\" +endfunction + +function! s:ToggleAutoClose() + let b:AutoCloseOn = !b:AutoCloseOn + if b:AutoCloseOn + echo "AutoClose ON" + else + echo "AutoClose OFF" + endif +endfunction + +" Parse a whitespace separated line of pairs +" single characters are assumed to be twin pairs (closer identical to +" opener) +function! AutoClose#ParsePairs(string) + if type(a:string) == type({}) + return a:string + elseif type(a:string) != type("") + echoerr "AutoClose#ParsePairs(): Argument not a dictionary or a string" + return {} + endif + + let l:dict = {} + for pair in split(a:string) + " strlen is length in bytes, we want in (wide) characters + let l:pairLen = strlen(substitute(pair,'.','x','g')) + if l:pairLen == 1 + " assume a twin pair + let l:dict[pair] = pair + elseif l:pairLen == 2 + let l:dict[pair[0]] = pair[1] + else + echoerr "AutoClose: Bad pair string - a pair longer then two character" + echoerr " `- String: " . a:sring + echoerr " `- Pair: " . pair . " Pair len: " . l:pairLen + endif + endfor + return l:dict +endfunction + +" this function is made visible for the sake of users +function! AutoClose#DefaultPairs() + return AutoClose#ParsePairs(g:AutoClosePairs) +endfunction + +function! s:ModifyPairsList(list, pairsToAdd, openersToRemove) + return filter( + \ extend(a:list, AutoClose#ParsePairs(a:pairsToAdd), "force"), + \ "stridx(a:openersToRemove,v:key)<0") +endfunction + +function! AutoClose#DefaultPairsModified(pairsToAdd,openersToRemove) + return s:ModifyPairsList(AutoClose#DefaultPairs(), a:pairsToAdd, a:openersToRemove) +endfunction + +" Define variables (in the buffer namespace). +function! s:DefineVariables() + " All the following variables can be set per buffer or global. + " The buffer namespace is used internally + let defaults = { + \ 'AutoClosePairs': AutoClose#DefaultPairs(), + \ 'AutoCloseProtectedRegions': ["Comment", "String", "Character"], + \ 'AutoCloseSmartQuote': 1, + \ 'AutoCloseOn': 1, + \ 'AutoCloseSelectionWrapPrefix': 'a', + \ 'AutoClosePumvisible': {"ENTER": "\", "ESC": "\"}, + \ 'AutoCloseExpandEnterOn': "", + \ 'AutoCloseExpandSpace': 1, + \ } + + " Let the user define if he/she wants the plugin to do special actions when the + " popup menu is visible and a movement key is pressed. + " Movement keys used in the menu get mapped to themselves + " (Up/Down/PageUp/PageDown). + for key in s:movementKeys + if key == 'ENTER' || key == 'ESC' + continue + endif + let defaults['AutoClosePumvisible'][key] = '' + endfor + for key in s:pumMovementKeys + if key == 'ENTER' || key == 'ESC' + continue + endif + let defaults['AutoClosePumvisible'][key] = '<'.key.'>' + endfor + + if exists ('b:AutoClosePairs') && type('b:AutoClosePairs') == type("") + let tmp = AutoClose#ParsePairs(b:AutoClosePairs) + unlet b:AutoClosePairs + let b:AutoClosePairs = tmp + endif + + " Now handle/assign values + for key in keys(defaults) + if key == 'AutoClosePumvisible' + let tempVisible = defaults['AutoClosePumvisible'] + if exists('g:AutoClosePumvisible') && type(eval('g:AutoClosePumvisible')) == type(defaults['AutoClosePumvisible']) + for childKey in keys(g:AutoClosePumvisible) + let tempVisible[toupper(childKey)] = g:AutoClosePumvisible[childKey] + endfor + endif + if exists('b:AutoClosePumvisible') && type(eval('b:AutoClosePumvisible')) == type(defaults['AutoClosePumvisible']) + for childKey in keys(b:AutoClosePumvisible) + let tempVisible[toupper(childKey)] = b:AutoClosePumvisible[childKey] + endfor + endif + let b:AutoClosePumvisible = tempVisible + else + if exists('b:'.key) && type(eval('b:'.key)) == type(defaults[key]) + continue + elseif exists('g:'.key) && type(eval('g:'.key)) == type(defaults[key]) + exec 'let b:' . key . ' = g:' . key + else + exec 'let b:' . key . ' = ' . string(defaults[key]) + endif + endif + endfor +endfunction + +function! s:CreatePairsMaps() + " create appropriate maps to defined open/close characters + for key in keys(b:AutoClosePairs) + let opener = s:keyName(key) + let closer = s:keyName(b:AutoClosePairs[key]) + let quoted_opener = s:quoteAndEscape(opener) + let quoted_closer = s:quoteAndEscape(closer) + + exec "xnoremap ". b:AutoCloseSelectionWrapPrefix + \ . opener . " `>a" . closer . "`" + exec "xnoremap ". b:AutoCloseSelectionWrapPrefix + \ . closer . " `>a" . closer . "`" + if key == b:AutoClosePairs[key] + exec "inoremap " . opener + \ . " =OpenOrCloseTwinPair(" . quoted_opener . ")" + else + exec "inoremap " . opener + \ . " =InsertPair(" . quoted_opener . ")" + exec "inoremap " . closer + \ . " =ClosePair(" . quoted_closer . ")" + endif + endfor +endfunction + +function! s:CreateExtraMaps() + " Extra mapping + inoremap =Backspace() + inoremap =Delete() + if b:AutoCloseExpandSpace + inoremap =Space() + endif + if len(b:AutoCloseExpandEnterOn) > 0 + inoremap =Enter() + endif + + if g:AutoClosePreserveDotReg + " Fix the re-do feature by flushing the char buffer on key movements (including Escape): + for key in s:movementKeys + let l:pvisiblemap = b:AutoClosePumvisible[key] + let key = "<".key.">" + let l:currentmap = maparg(key,"i") + if (l:currentmap=="")|let l:currentmap=key|endif + if len(l:pvisiblemap) + exec "inoremap " . key . " pumvisible() ? '" . l:pvisiblemap . "' : '=FlushBuffer()" . l:currentmap . "'" + else + exec "inoremap " . key . " =FlushBuffer()" . l:currentmap + endif + endfor + + " Flush the char buffer on mouse click: + inoremap =FlushBuffer() + inoremap =FlushBuffer() + endif +endfunction + +function! s:CreateMaps() + silent doautocmd FileType + call s:DefineVariables() + call s:CreatePairsMaps() + call s:CreateExtraMaps() + + let b:loaded_AutoClose = 1 +endfunction + +function! s:IsLoadedOnBuffer() + return (exists("b:loaded_AutoClose") && b:loaded_AutoClose) +endfunction + +" map some characters to their key names +function! s:keyName(char) + let s:keyNames = {'|': '', ' ': ''} + return get(s:keyNames,a:char,a:char) +endfunction + +" escape some characters for use in strings +function! s:quoteAndEscape(char) + let s:escapedChars = {'"': '\"'} + return '"' . get(s:escapedChars,a:char,a:char) . '"' +endfunction + + +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Configuration +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +let s:AutoClosePairs_FactoryDefaults = AutoClose#ParsePairs("() {} [] ` \" '") +if !exists("g:AutoClosePairs_add") | let g:AutoClosePairs_add = "" | endif +if !exists("g:AutoClosePairs_del") | let g:AutoClosePairs_del = "" | endif +if !exists("g:AutoClosePairs") + let g:AutoClosePairs = s:ModifyPairsList( + \ s:AutoClosePairs_FactoryDefaults, + \ g:AutoClosePairs_add, + \ g:AutoClosePairs_del ) +endif + +let s:movementKeys = split('ESC UP DOWN LEFT RIGHT HOME END PAGEUP PAGEDOWN') +" list of keys that get mapped to themselves for pumvisible() +let s:pumMovementKeys = split('UP DOWN PAGEUP PAGEDOWN') + + +if has("gui_macvim") + call extend(s:movementKeys, split("D-LEFT D-RIGHT D-UP D-DOWN M-LEFT M-RIGHT M-UP M-DOWN")) +endif + +augroup (autoclose) +autocmd! +autocmd BufNewFile,BufRead,BufEnter * if !IsLoadedOnBuffer() | call CreateMaps() | endif +autocmd InsertEnter * call EmptyBuffer() +autocmd BufEnter * if mode() == 'i' | call EmptyBuffer() | endif +augroup END + +" Define convenient commands +command! AutoCloseOn :let b:AutoCloseOn = 1 +command! AutoCloseOff :let b:AutoCloseOn = 0 +command! AutoCloseToggle :call s:ToggleAutoClose() +" vim:sw=4:sts=4: diff --git a/homedir/.vimperatorrc b/homedir/.vimperatorrc new file mode 100644 index 0000000..fb7bbb4 --- /dev/null +++ b/homedir/.vimperatorrc @@ -0,0 +1,5 @@ +"3.8.2 (created: 2014/02/13 23:52:43) + +source! /home/fbt/.vimperatorrc.local + +" vim: set ft=vimperator: \ No newline at end of file diff --git a/homedir/.vimperatorrc.local b/homedir/.vimperatorrc.local new file mode 100644 index 0000000..26617b9 --- /dev/null +++ b/homedir/.vimperatorrc.local @@ -0,0 +1,11 @@ +:set gui=nonavigation +:set autocomplete=false +:map O :tabopen +:map P :set apptab +:map D :tabclose! + +highlight CmdLine background: #29303A; color: #f9f9f9; transition: all 0.25s; +highlight CompItem[selected] background: #3A4452; color: #f9f9f9; +highlight Filter font-style: italic; color: red; +highlight Normal background: #29303A; color: #f9f9f9; transition: all 0.25s; +highlight InfoMsg background: #29303A; color: magenta; diff --git a/homedir/.vimrc b/homedir/.vimrc new file mode 100644 index 0000000..2d22751 --- /dev/null +++ b/homedir/.vimrc @@ -0,0 +1,46 @@ +" Personal vim config +scriptencoding utf-8 +set encoding=utf-8 + +set backspace=2 + +set modeline + +set nocompatible +set cindent +set tabstop=3 +set shiftwidth=3 +set noexpandtab + +set scrolloff=6 +set cursorline + +set listchars=tab:».,trail:. + +set mouse= + +set number +set relativenumber + +syntax enable +set background=dark + +"colorscheme apprentice + +if has("autocmd") + au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") + \| exe "normal! g'\"" | endif +endif " + +" Custom mappings +nmap rr "_dd +nmap l :setlocal list! + +" visual mode mappings +vmap r "_d +vmap R "_dP + +"set foldmethod=indent + +" set fmr={,} +"set foldnestmax=1 diff --git a/homedir/.zshrc b/homedir/.zshrc new file mode 100644 index 0000000..a3be78d --- /dev/null +++ b/homedir/.zshrc @@ -0,0 +1,15 @@ +# vim: ft=zsh + +source "$HOME/.config/zsh.d/zshrc" + +# Load modules +use \ + core \ + xdg \ + config \ + keys \ + dotfiles \ + prompt \ + helpers \ + local \ + shell diff --git a/mozilla/chrome/userChrome.css b/mozilla/chrome/userChrome.css new file mode 100644 index 0000000..e87978d --- /dev/null +++ b/mozilla/chrome/userChrome.css @@ -0,0 +1,45 @@ +.tabbrowser-tab { + font: 14px xos4 terminus, Monospace !important; + color: #bebebe !important; + border: none !important; + background: #29303A !important; + min-height: 0 !important; +} + +.tabbrowser-tab[selected] { + color: #f9f9f9 !important; + background: #3A4452 !important; +} + +.tab-icon-image:not([pinned]) { display: none !important; } + +#TabsToolbar { + background: #29303A !important; +} + +/* these styles are required to cover narrow scrollbars. */ +.tabbrowser-tabs[treestyletab-mode="vertical"] + .scrollbox-innerbox { + background: #29303A !important; +} + +.tabbrowser-tabs[treestyletab-tabbar-position="left"][treestyletab-invert-scrollbar="true"] + .scrollbox-innerbox { + background: #29303A !important; +} + +statusbar, +menubar, +toolbox, +toolbar { + border-style: none !important; +} + +toolbar { + border-width: 0px !important; + border-bottom: 1px solid #29303A !important; +} + +/* toolbar { + border-bottom: 1px solid red !important; +} */