This commit is contained in:
2019-01-12 18:22:02 +01:00
commit ef6928d257
81 changed files with 6009 additions and 0 deletions

24
.exports.example Normal file
View File

@ -0,0 +1,24 @@
export SINGLE_LINE_ZLE=true
export PHPLS_ALLOW_XDEBUG=1
export DISABLE_AUTO_TITLE=true
export WORKON_HOME=$HOME/.virtualenvs
export PAGER=most
export GOSS_PATH=/usr/local/bin/dgoss
export TMUX_TMPDIR=$HOME
export WORKON_HOME=~/.virtualenvs
export LANG=en_US.UTF-8
export ARCHFLAGS="-arch x86_64"
export SSH_KEY_PATH="~/.ssh/rsa_id"
export JIRA_API_TOKEN=
export GOGS_ROOT_URL=
export GOGS_TOKEN=

24
.gitconfig Normal file
View File

@ -0,0 +1,24 @@
[user]
email = aleksander@cynarski.pl
name = Aleksander Cynarski
signingkey = C4340BA42B9C173A
[push]
default = matching
[merge]
conflictstyle = diff3
tool = meld
[alias]
lg1 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all
lg2 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all
lg = !"git lg1"
tree = "forest --pretty=format:\"%C(red)%h %C(magenta)(%ar) %C(blue)%an %C(reset)%s\" --style=15 --reverse"
d = difftool
open = !vim `git-open.sh`
[diff]
tool = vimdiff
[difftool]
prompt = false
[core]
excludesfile = ~/.gitignore
quotepath = false
editor = vim

15
.gitignore vendored Normal file
View File

@ -0,0 +1,15 @@
compile
.phpcomplete_extended/
.php_cs.cache
zeus/
_todos.md
.tmuxp.yaml
vendor/
./docker/docker-compose-elena.yml
.jira-url
.jira-prefix
.jira-name
tags
tags.*
.vscode
.exports

6
.signature Normal file
View File

@ -0,0 +1,6 @@
--
Aleksander "paramah" Cynarski
-------------------------------
PGP/GPG: http://gpg.cynarski.pl
About: http://cynarski.pl

34
.taskrc Normal file
View File

@ -0,0 +1,34 @@
# [Created by task 2.5.1 10/18/2018 20:29:25]
# Taskwarrior program configuration file.
# For more documentation, see http://taskwarrior.org or try 'man task', 'man task-color',
# 'man task-sync' or 'man taskrc'
# Here is an example of entries that use the default, override and blank values
# variable=foo -- By specifying a value, this overrides the default
# variable= -- By specifying no value, this means no default
# #variable=foo -- By commenting out the line, or deleting it, this uses the default
# Use the command 'task show' to see all defaults and overrides
# Files
data.location=~/.task
# Color theme (uncomment one to use)
#include /usr/share/doc/task/rc/light-16.theme
#include /usr/share/doc/task/rc/light-256.theme
#include /usr/share/doc/task/rc/dark-16.theme
include /usr/share/doc/task/rc/dark-256.theme
#include /usr/share/doc/task/rc/dark-red-256.theme
#include /usr/share/doc/task/rc/dark-green-256.theme
#include /usr/share/doc/task/rc/dark-blue-256.theme
#include /usr/share/doc/task/rc/dark-violets-256.theme
#include /usr/share/doc/task/rc/dark-yellow-green.theme
#include /usr/share/doc/task/rc/dark-gray-256.theme
#include /usr/share/doc/task/rc/dark-gray-blue-256.theme
#include /usr/share/doc/task/rc/solarized-dark-256.theme
#include /usr/share/doc/task/rc/solarized-light-256.theme
#include /usr/share/doc/task/rc/no-color.theme
uda.totalactivetime.type=duration
uda.totalactivetime.label=Total active time
uda.totalactivetime.values=

42
.thymerc Normal file
View File

@ -0,0 +1,42 @@
set :timer, 25*60 # 25 minute pomodoros
set :timer_break, 5*60 # 5 minute breaks
set :warning, 5*60 # show warning color in tmux at <5 minutes, 0 to disable
set :warning_color, 'red,bold' # warning color for tmux is red/bold
set :break_color, 'magenta' # break color is blue
set :interval, 1 # refresh timer every 1 second
set :tmux, true # turn on tmux integration
set :tmux_theme, "#[fg=mycolor,bg=mycolor]#[fg=%s]%s#[fg=mycolor,bg=mycolor]"
# adds `-t --today` option, which opens a text file in vim
option :t, :today, 'open today sheet' do
`vim -O ~/.thyme-today.md ~/.thyme-records.md < \`tty\` > \`tty\``
end
# adds `-s --seconds num` option, which allows on the fly timer
option :s, 'seconds num', 'run with custom seconds' do |num|
set :timer, num.to_i
run
end
# execute hook before thyme program starts
before(:all) do
`notify-send 'Uruchomiłem serwer pomidora.'`
`tmux set-option -g status-bg black`
end
# execute hook before each pomodoro
before do
`notify-send 'Pomidor rozpoczęty'`
end
# execute hook after each pomodoro
after do |seconds_left|
`notify-send 'Pomidor skończony' 'Zrób sobie chwilę przerwy, pooddychaj, zapal, napij sie kawy, kogoś wkurz - nie wiem, zajmij się sobią :)'` if seconds_left == 0
`tmux new-window -n _screensaver_ "~/bin/pipes.sh -r 0 -p 50 -t 3 -s 10; tmux set -g status on"` if seconds_left == 0
end
# execute hook after thyme program quits
after(:all) do
`notify-send 'Zrobiłeś pomidory' 'Jesteś z siebie dumny? \nTo dobrze, a teraz walcz dalej.'`
end

96
.tmux.conf Normal file
View File

@ -0,0 +1,96 @@
#tmux conf by Paramah
set -g default-terminal "screen-256color"
unbind C-b
set -g prefix C-a
unbind l
bind C-a last-window
bind C-p previous-window
bind C-n next-window
bind -n f7 previous-window
bind -n f8 next-window
# Resize bindings (vim like)
bind C-k resize-pane -U
bind C-j resize-pane -D
bind C-h resize-pane -L
bind C-l resize-pane -R
# Change window move behavior
bind . command-prompt "swap-window -t '%%'"
bind > command-prompt "move-window -t '%%'"
bind f command-prompt "resize-pane -Z"
bind n command-prompt "resize-pane"
unbind %
bind | split-window -h
unbind '"'
bind - split-window -v
# History
set -g history-limit 10000
# Terminal emulator window title
set -g set-titles on
set -g set-titles-string '#S:#I.#P #W'
# clock
set-window-option -g clock-mode-colour colour18 #green
bind b set-window-option synchronize-panes
set -g mouse on
set -g default-terminal "screen-256color"
# Define my custom menu bar
# status bar colors
set -g status-bg colour0
set -g status-fg white
# alignment settings
set-option -g status-justify centre
# status left options
set -g status-interval 1
# window list options
# setw -g automatic-rename on
set-window-option -g window-status-format "#[fg=colour0,bg=colour234,nobold,noitalics,nounderscore] #[fg=colour208,bg=colour234,nobold,noitalics,nounderscore]#I#F  #[fg=colour233,bg=colour234,nobold,noitalics,nounderscore]#[fg=colour208,bg=colour234,nobold,noitalics,nounderscore]#W #[fg=colour234,bg=colour0,nobold,noitalics,nounderscore] "
set-window-option -g window-status-current-format "#[fg=colour0,bg=colour208,nobold,noitalics,nounderscore] #[fg=colour0,bg=colour208,nobold,noitalics,nounderscore]#I#F  #[fg=colour232,bg=colour208,bold,noitalics,nounderscore]#W #[fg=colour208,bg=colour0,nobold,noitalics,nounderscore]"
set-option -ga terminal-overrides ',*:enacs@:smacs@:rmacs@:acsc@'
# Reload tmux conf
bind r source-file ~/.tmux.conf
#Plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-sidebar'
set -g @plugin 'tmux-plugins/tmux-copycat'
set -g @plugin 'tmux-plugins/tmux-resurrect'
#set -g @plugin 'tmux-plugins/tmux-continuum'
set -g default-terminal "screen-256color"
set-option -g status on
set-option -g status-interval 2
set-option -g status-justify "centre"
set-option -g status-left-length 60
set-option -g status-right-length 90
set-option -g status-left "#(~/.tmux/powerline/powerline.sh left)"
set-option -g status-right "#(~/.tmux/powerline/powerline.sh right)"
## set the default TERM
set -g default-terminal screen
## update the TERM variable of terminal emulator when creating a new session or attaching a existing session
set -g update-environment 'DISPLAY SSH_ASKPASS SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY TERM'
## determine if we should enable 256-colour support
if "[[ ${TERM} =~ 256color || ${TERM} == fbterm ]]" 'set -g default-terminal screen-256color'
run '~/.tmux/plugins/tpm/tpm'

156
.zshrc Normal file
View File

@ -0,0 +1,156 @@
#################################################################################
#
#__ __ _____ _ ____ __ _
#| \/ |_ _|__ /___| |__ / ___|___ _ __ / _(_) __ _
#| |\/| | | | | / // __| '_ \ | | / _ \| '_ \| |_| |/ _` |
#| | | | |_| |/ /_\__ \ | | || |__| (_) | | | | _| | (_| |
#|_| |_|\__, /____|___/_| |_(_)____\___/|_| |_|_| |_|\__, |
# |___/ |___/
# by @paramah
#
#################################################################################
#Load my environment exports
[ -f ~/.exports ] && source ~/.exports
export PATH=$HOME/bin:/usr/local/bin:$PATH
export PATH="${PATH}:${HOME}/.local/bin/"
export PATH="${PATH}:${HOME}/.config/composer/vendor/bin"
# paramah configuration
export PATH="/usr/bin/core_perl:$PATH"
export PATH="/home/paramah/.gem/ruby/2.4.0/bin:$PATH"
export PATH="/home/paramah/.gem/ruby/2.3.0/bin:$PATH"
export PATH="/home/paramah/.gem/ruby/2.5.0/bin:$PATH"
export PATH="/home/paramah/.local/bin:$PATH"
#Home bin (last always!)
export PATH="/home/paramah/bin:$PATH"
# Path to your oh-my-zsh installation.
export ZSH=$HOME/.oh-my-zsh
ZSH_THEME="powerlevel9k/powerlevel9k"
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status background_jobs_joined)
source /usr/bin/virtualenvwrapper.sh
plugins=(
zsh-autosuggestions
virtualenvwrapper
taskwarrior
archlinux
systemd
themes
git
)
source ~/.zplug/init.zsh
zplug 'ytet5uy4/fzf-widgets'
zplug 'zsh-users/zaw'
# Map widgets to key
bindkey '^ge' fzf-select-widget
bindkey '^@.' fzf-edit-dotfiles
bindkey '^@c' fzf-change-directory
bindkey '^@n' fzf-change-named-directory
bindkey '^@f' fzf-edit-files
bindkey '^@k' fzf-kill-processes
bindkey '^gs' fzf-exec-ssh
bindkey '^/' fzf-change-recent-directory
bindkey '^r' fzf-insert-history
bindkey '^xf' fzf-insert-files
bindkey '^xd' fzf-insert-directory
bindkey '^xn' fzf-insert-named-directory
## Git
bindkey '^@g' fzf-select-git-widget
bindkey '^@ga' fzf-git-add-files
bindkey '^@gc' fzf-git-change-repository
# GitHub
bindkey '^@h' fzf-select-github-widget
bindkey '^@hs' fzf-github-show-issue
bindkey '^@hc' fzf-github-close-issue
## Docker
bindkey '^@d' fzf-select-docker-widget
bindkey '^@dc' fzf-docker-remove-containers
bindkey '^@di' fzf-docker-remove-images
bindkey '^@dv' fzf-docker-remove-volumes
zplug load
source $ZSH/oh-my-zsh.sh
# Preferred editor for local and remote sessions
if [[ -n $SSH_CONNECTION ]]; then
export EDITOR='vim'
else
export EDITOR='nvim'
fi
TMPDIR=/home/paramah/.tmp/
eval "$(jira --completion-script-zsh)"
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
TRAPWINCH() {
zle && { zle reset-prompt; zle -R }
}
autoload bashcompinit
bashcompinit
dsh(){
docker exec -it $1 sh -c "stty cols $COLUMNS rows $LINES && sh";
}
dbash(){
docker exec -it $1 bash -c "stty cols $COLUMNS rows $LINES && bash";
}
_goinside(){
COMPREPLY=( $(docker ps --format "{{.Names}}" -f name=$2) );
}
complete -F _goinside dsh;
complete -F _goinside dbash;
export goinside;
###################################
# _ _
# __ _| (_) __ _ ___ ___ ___
# / _` | | |/ _` / __|/ _ \/ __|
# | (_| | | | (_| \__ \ __/\__ \
# (_)__,_|_|_|\__,_|___/\___||___/
#
##########################################################################################
alias l="tmuxp load -d"
alias dc="docker-compose"
alias d="docker"
alias t="tmux"
alias b="buku --suggest"
alias j="jrnl"
alias wh="curl wttr.in/Gliwice"
alias drestart="sudo systemctl restart docker"
alias dstop="sudo systemctl stop docker"
alias dstart="sudo systemctl start docker"
alias ls="exa"
# alias cat="bat"
alias ping='~/bin/prettyping --nolegend'
alias sourcec="docker run --publish 7080:7080 --rm --volume ~/.sourcegraph/config:/etc/sourcegraph --volume ~/.sourcegraph/data:/var/opt/sourcegraph --volume /var/run/docker.sock:/var/run/docker.sock sourcegraph/server:2.11.2"
alias hadolint="docker run --rm -i hadolint/hadolint"

18
README.md Normal file
View File

@ -0,0 +1,18 @@
```
____ ____ ___ _____
| _ \ __ _ _ __ __ _| _ \ / _ \_ _|
| |_) / _` | '__/ _` | | | | | | || |
| __/ (_| | | | (_| | |_| | |_| || |
|_| \__,_|_| \__,_|____/ \___/ |_|
```
## Konfiguracja dla:
- neovim
- tmux
- tmuxp
- zsh
- taskwarrior
- eg

365
bin/bash2048.sh Executable file
View File

@ -0,0 +1,365 @@
#!/usr/bin/env bash
#important variables
declare -ia board # array that keeps track of game status
declare -i pieces # number of pieces present on board
declare -i score=0 # score variable
declare -i flag_skip # flag that prevents doing more than one operation on
# single field in one step
declare -i moves # stores number of possible moves to determine if player lost
# the game
declare ESC=$'\e' # escape byte
declare header="Bash 2048 v1.1 (https://github.com/mydzor/bash2048)"
declare -i start_time=$(date +%s)
#default config
declare -i board_size=4
declare -i target=2048
declare -i reload_flag=0
declare config_dir="$HOME/.bash2048"
#for colorizing numbers
declare -a colors
colors[2]=33 # yellow text
colors[4]=32 # green text
colors[8]=34 # blue text
colors[16]=36 # cyan text
colors[32]=35 # purple text
colors[64]="33m\033[7" # yellow background
colors[128]="32m\033[7" # green background
colors[256]="34m\033[7" # blue background
colors[512]="36m\033[7" # cyan background
colors[1024]="35m\033[7" # purple background
colors[2048]="31m\033[7" # red background (won with default target)
exec 3>/dev/null # no logging by default
trap "end_game 0 1" INT #handle INT signal
#simplified replacement of seq command
function _seq {
local cur=1
local max
local inc=1
case $# in
1) let max=$1;;
2) let cur=$1
let max=$2;;
3) let cur=$1
let inc=$2
let max=$3;;
esac
while test $max -ge $cur; do
printf "$cur "
let cur+=inc
done
}
# print currect status of the game, last added pieces are marked red
function print_board {
clear
printf "$header pieces=$pieces target=$target score=$score\n"
printf "Board status:\n" >&3
printf "\n"
printf '/------'
for l in $(_seq 1 $index_max); do
printf '+------'
done
printf '\\\n'
for l in $(_seq 0 $index_max); do
printf '|'
for m in $(_seq 0 $index_max); do
if let ${board[l*$board_size+m]}; then
if let '(last_added==(l*board_size+m))|(first_round==(l*board_size+m))'; then
printf '\033[1m\033[31m %4d \033[0m|' ${board[l*$board_size+m]}
else
printf "\033[1m\033[${colors[${board[l*$board_size+m]}]}m %4d\033[0m |" ${board[l*$board_size+m]}
fi
printf " %4d |" ${board[l*$board_size+m]} >&3
else
printf ' |'
printf ' |' >&3
fi
done
let l==$index_max || {
printf '\n|------'
for l in $(_seq 1 $index_max); do
printf '+------'
done
printf '|\n'
printf '\n' >&3
}
done
printf '\n\\------'
for l in $(_seq 1 $index_max); do
printf '+------'
done
printf '/\n'
}
# Generate new piece on the board
# inputs:
# $board - original state of the game board
# $pieces - original number of pieces
# outputs:
# $board - new state of the game board
# $pieces - new number of pieces
function generate_piece {
while true; do
let pos=RANDOM%fields_total
let board[$pos] || {
let value=RANDOM%10?2:4
board[$pos]=$value
last_added=$pos
printf "Generated new piece with value $value at position [$pos]\n" >&3
break;
}
done
let pieces++
}
# perform push operation between two pieces
# inputs:
# $1 - push position, for horizontal push this is row, for vertical column
# $2 - recipient piece, this will hold result if moving or joining
# $3 - originator piece, after moving or joining this will be left empty
# $4 - direction of push, can be either "up", "down", "left" or "right"
# $5 - if anything is passed, do not perform the push, only update number
# of valid moves
# $board - original state of the game board
# outputs:
# $change - indicates if the board was changed this round
# $flag_skip - indicates that recipient piece cannot be modified further
# $board - new state of the game board
function push_pieces {
case $4 in
"up")
let "first=$2*$board_size+$1"
let "second=($2+$3)*$board_size+$1"
;;
"down")
let "first=(index_max-$2)*$board_size+$1"
let "second=(index_max-$2-$3)*$board_size+$1"
;;
"left")
let "first=$1*$board_size+$2"
let "second=$1*$board_size+($2+$3)"
;;
"right")
let "first=$1*$board_size+(index_max-$2)"
let "second=$1*$board_size+(index_max-$2-$3)"
;;
esac
let ${board[$first]} || {
let ${board[$second]} && {
if test -z $5; then
board[$first]=${board[$second]}
let board[$second]=0
let change=1
printf "move piece with value ${board[$first]} from [$second] to [$first]\n" >&3
else
let moves++
fi
return
}
return
}
let ${board[$second]} && let flag_skip=1
let "${board[$first]}==${board[second]}" && {
if test -z $5; then
let board[$first]*=2
let "board[$first]==$target" && end_game 1
let board[$second]=0
let pieces-=1
let change=1
let score+=${board[$first]}
printf "joined piece from [$second] with [$first], new value=${board[$first]}\n" >&3
else
let moves++
fi
}
}
function apply_push {
printf "\n\ninput: $1 key\n" >&3
for i in $(_seq 0 $index_max); do
for j in $(_seq 0 $index_max); do
flag_skip=0
let increment_max=index_max-j
for k in $(_seq 1 $increment_max); do
let flag_skip && break
push_pieces $i $j $k $1 $2
done
done
done
}
function check_moves {
let moves=0
apply_push up fake
apply_push down fake
apply_push left fake
apply_push right fake
}
function key_react {
let change=0
read -d '' -sn 1
test "$REPLY" = "$ESC" && {
read -d '' -sn 1 -t1
test "$REPLY" = "[" && {
read -d '' -sn 1 -t1
case $REPLY in
A) apply_push up;;
B) apply_push down;;
C) apply_push right;;
D) apply_push left;;
esac
}
} || {
case $REPLY in
k) apply_push up;;
j) apply_push down;;
l) apply_push right;;
h) apply_push left;;
w) apply_push up;;
s) apply_push down;;
d) apply_push right;;
a) apply_push left;;
esac
}
}
function save_game {
rm -rf "$config_dir"
mkdir "$config_dir"
echo "${board[@]}" > "$config_dir/board"
echo "$board_size" > "$config_dir/board_size"
echo "$pieces" > "$config_dir/pieces"
echo "$target" > "$config_dir/target"
# echo "$log_file" > "$config_dir/log_file"
echo "$score" > "$config_dir/score"
echo "$first_round" > "$config_dir/first_round"
}
function reload_game {
printf "Loading saved game...\n" >&3
if test ! -d "$config_dir"; then
return
fi
board=(`cat "$config_dir/board"`)
board_size=(`cat "$config_dir/board_size"`)
board=(`cat "$config_dir/board"`)
pieces=(`cat "$config_dir/pieces"`)
first_round=(`cat "$config_dir/first_round"`)
target=(`cat "$config_dir/target"`)
score=(`cat "$config_dir/score"`)
fields_total=board_size*board_size
index_max=board_size-1
}
function end_game {
# count game duration
end_time=$(date +%s)
let total_time=end_time-start_time
print_board
printf "Your score: $score\n"
printf "This game lasted "
`date --version > /dev/null 2>&1`
if [[ "$?" -eq 0 ]]; then
date -u -d @${total_time} +%T
else
date -u -r ${total_time} +%T
fi
stty echo
let $1 && {
printf "Congratulations you have achieved $target\n"
exit 0
}
let test -z $2 && {
read -n1 -p "Do you want to overwrite saved game? [y|N]: "
test "$REPLY" = "Y" || test "$REPLY" = "y" && {
save_game
printf "\nGame saved. Use -r option next to load this game.\n"
exit 0
}
test "$REPLY" = "" && {
printf "\nGame not saved.\n"
exit 0
}
}
printf "\nYou have lost, better luck next time.\033[0m\n"
exit 0
}
function help {
cat <<END_HELP
Usage: $1 [-b INTEGER] [-t INTEGER] [-l FILE] [-r] [-h]
-b specify game board size (sizes 3-9 allowed)
-t specify target score to win (needs to be power of 2)
-l log debug info into specified file
-r reload the previous game
-h this help
END_HELP
}
#parse commandline options
while getopts "b:t:l:rh" opt; do
case $opt in
b ) board_size="$OPTARG"
let '(board_size>=3)&(board_size<=9)' || {
printf "Invalid board size, please choose size between 3 and 9\n"
exit -1
};;
t ) target="$OPTARG"
printf "obase=2;$target\n" | bc | grep -e '^1[^1]*$'
let $? && {
printf "Invalid target, has to be power of two\n"
exit -1
};;
r ) reload_flag="1";;
h ) help $0
exit 0;;
l ) exec 3>$OPTARG;;
\?) printf "Invalid option: -"$opt", try $0 -h\n" >&2
exit 1;;
: ) printf "Option -"$opt" requires an argument, try $0 -h\n" >&2
exit 1;;
esac
done
#init board
let fields_total=board_size*board_size
let index_max=board_size-1
for i in $(_seq 0 $fields_total); do board[$i]="0"; done
let pieces=0
generate_piece
first_round=$last_added
generate_piece
#load saved game if flag is set
if test $reload_flag = "1"; then
reload_game
fi
while true; do
print_board
key_react
let change && generate_piece
first_round=-1
let pieces==fields_total && {
check_moves
let moves==0 && end_game 0 #lose the game
}
done

18
bin/changelog Executable file
View File

@ -0,0 +1,18 @@
#!/bin/bash
echo ""
echo "CHANGELOG"
git tag -l | sort -u -r | while read TAG ; do
echo
if [ $NEXT ];then
echo [$NEXT]
else
echo "[Current]"
fi
GIT_PAGER=cat git log --no-merges --format=" * %s" $TAG..$NEXT
NEXT=$TAG
done
FIRST=$(git tag -l | head -1)
echo
echo [$FIRST]
GIT_PAGER=cat git log --no-merges --format=" * %s" $FIRST

66
bin/christtree.sh Executable file
View File

@ -0,0 +1,66 @@
#!/bin/bash
trap "tput reset; tput cnorm; exit" 2
clear
tput civis
lin=2
col=$(($(tput cols) / 2))
c=$((col-1))
est=$((c-2))
color=0
tput setaf 2; tput bold
for ((i=1; i<40; i+=2))
{
tput cup $lin $col
for ((j=1; j<=i; j++))
{
echo -n \*
}
let lin++
let col--
}
tput sgr0; tput setaf 3
for ((i=1; i<=2; i++))
{
tput cup $((lin++)) $c
echo 'mWm'
}
new_year=$(date +'%Y')
let new_year++
tput setaf 1; tput bold
tput cup $lin $((c - 6)); echo MERRY CHRISTMAS
tput cup $((lin + 1)) $((c - 10)); echo And lots of CODE in $new_year
let c++
k=1
while true; do
for ((i=1; i<=155; i++)) {
[ $k -gt 1 ] && {
tput setaf 2; tput bold
tput cup ${linea[$[k-1]$i]} ${columna[$[k-1]$i]}; echo \*
unset linea[$[k-1]$i]; unset columna[$[k-1]$i]
}
li=$((RANDOM % 19 + 3))
inicio=$((c-li+2))
fin=$((c+li+2))
co=$((RANDOM % (li-2) * 2 + 1 + inicio))
tput setaf $color; tput bold
tput cup $li $co
echo o
linea[$k$i]=$li
columna[$k$i]=$co
color=$(((color+1)%8))
sh=1
for l in C O D E
do
tput cup $((lin+1)) $((c+sh))
echo $l
let sh++
sleep 0.01
done
}
k=$((k % 2 + 1))
done

3
bin/crpass Executable file
View File

@ -0,0 +1,3 @@
#!/bin/sh
dd if=/dev/urandom bs=24 count=1 2>/dev/null | base64

366
bin/gogs Executable file
View File

@ -0,0 +1,366 @@
#!/bin/bash
# Interact with the GOGS API
# Copyright (c) 2017 Matthew Downey (mattddowney@gmail_NOSPAM_.com)
# Relased under the MIT License
# See https://raw.githubusercontent.com/mattddowney/gogs-bash/master/LICENSE for the complete license text
action=${1:-"help"}
# preseed for checks
response_code=0
# ensure GOGS_ROOT_URL is set
if [ -z $GOGS_ROOT_URL ]
then
printf "Need to set GOGS_ROOT_URL environment variable\n" >&2
printf "\tIE: https://try.gogs.io\n" >&2
response_code=1
fi
# ensure GOGS_TOKEN is set
if [ -z $GOGS_TOKEN ]
then
printf "Need to set GOGS_TOKEN environment variable\n" >&2
printf "\tThis can be obtained at $GOGS_ROOT_URL/user/settings/applications\n" >&2
response_code=1
fi
# exit if either of the environment variables above are not set
if [ $response_code -ne 0 ]
then
exit $response_code
fi
# create a GOGS repository
# https://github.com/gogits/go-gogs-client/wiki/Administration-Repositories#create-a-new-repository
create-repo() {
local user_name=$1 # name of the user / organization where the repo will be created
local repo_name=$2 # name of the repo to be created
# ensure user_name is passed in
if [ -z $user_name ]
then
response_code=1
fi
# ensure repo_name is passed in
if [ -z $repo_name ]
then
response_code=1
fi
# print help and exit either of the variables above are not passed in
if [ $response_code -ne 0 ]
then
help "create-repo"
exit $response_code
fi
printf "--" "---> Creating GOGS repository\n"
printf "--" "---> User/Org Name: $user_name\n"
printf "--" "---> Repo Name: $repo_name\n"
local body=$(cat <<-END
{
"name": "$repo_name",
"private": false
}
END
)
curl -H "Content-Type: application/json" \
-H "Authorization: token $GOGS_TOKEN" \
-d "$body" \
-v $GOGS_ROOT_URL/api/v1/admin/users/$user_name/repos
}
# create a GOGS webhook
# https://github.com/gogits/go-gogs-client/wiki/Repositories-Webhooks#create-a-hook
create-webhook() {
local user_name=$1 # name of the user / organization that owns the repo where the webhook will be created
local repo_name=$2 # name of the repo where the webhook will be created
local webhook_url=$3 # the url for the webhook that will be created
local secret=$4 # optional secret that will be passed in the X-Gogs-Signature header
# ensure user_name is passed in
if [ -z $user_name ]
then
response_code=1
fi
# ensure repo_name is passed in
if [ -z $repo_name ]
then
response_code=1
fi
# ensure that webhook_url is passed in
if [ -z $webhook_url ]
then
response_code=1
fi
# print help and exit either of the variables above are not passed in
if [ $response_code -ne 0 ]
then
help "create-webhook"
exit $response_code
fi
printf "--" "---> Creating GOGS webhook\n"
printf "--" "---> Repo Name: $repo_name\n"
printf "--" "---> Webhook URL: $webhook_url\n"
local body=$(cat <<-END
{
"type": "gogs",
"config": {
"content_type": "json",
"url": "$webhook_url"
},
"events": [ "create", "push" ],
"active": true
}
END
)
# add secret to body if one is passed in
if [ -n $secret ]
then
body=$(echo "$body" | jq ".config.secret=\"$secret\"")
fi
curl -H "Content-Type: application/json" \
-H "Authorization: token $GOGS_TOKEN" \
-d "$body" \
-v $GOGS_ROOT_URL/api/v1/repos/$user_name/$repo_name/hooks
}
# delete a GOGS webhook for a repo
# https://github.com/gogits/go-gogs-client/wiki/Repositories-Webhooks#delete-a-hook
delete-webhook() {
local user_name=$1
local repo_name=$2
local webhook_id=$3
# ensuer user_name is passed in
if [ -z $user_name ]
then
response_code=1
fi
# ensure repo_name is passed in
if [ -z $repo_name ]
then
response_code=1
fi
# ensure webhook_id is passed in
if [ -z $webhook_id ]
then
response_code=1
fi
# print help and exit any of the variables above are not passed in
if [ $reponse_code -ne 0 ]
then
help "delete-webhook"
exit $response_code
fi
printf "--" "---> Deleting GOGS webhook\n"
printf "--" "---> User Name: $user_name\n"
printf "--" "---> Repo Name: $repo_name\n"
printf "--" "---> Webhook Id: $webhook_id\n"
curl -H "Authorization: token $GOGS_TOKEN" \
-X DELETE \
-v $GOGS_ROOT_URL/api/v1/repos/$user_name/$repo_name/hooks/$webhook_id
}
# print environment information
env() {
printf "GOGS_ROOT_URL=$GOGS_ROOT_URL\n"
printf "GOGS_TOKEN=$GOGS_TOKEN\n"
}
# get a list of GOGS repos for a user
# https://github.com/gogits/go-gogs-client/wiki/Repositories#list-user-repositories
get-user-repos() {
local user_name=$1 # name of the user who's repos to list
# ensure user_name is passed in
if [ -z $user_name ]
then
help "get-user-repos"
exit 1
fi
printf "--" "---> Getting list of GOGS repos\n"
printf "--" "---> User Name: $user_name\n"
curl -H "Content-Type: application/json" \
-H "Authorization: token $GOGS_TOKEN" \
-v $GOGS_ROOT_URL/api/v1/users/$user_name/repos
}
# get a list of GOGS webhooks for a repo
# https://github.com/gogits/go-gogs-client/wiki/Repositories-Webhooks#list-hooks
get-webhooks() {
local user_name=$1 # name of the user / organization that owns the repo
local repo_name=$2 # name of the repo to list webhooks for
# ensure user_name is passed in
if [ -z $user_name ]
then
response_code=1
fi
# ensure repo_name is passed in
if [ -z $repo_name ]
then
response_code=1
fi
# print help and exit either of the variables above are not passed in
if [ $response_code -ne 0 ]
then
help "get-webhooks"
exit $response_code
fi
printf "--" "---> Getting list of GOGS webhooks\n"
printf "--" "---> User Name: $user_name\n"
printf "--" "---> Repo Name: $repo_name\n"
curl -H "Authorization: token $GOGS_TOKEN" \
-v $GOGS_ROOT_URL/api/v1/repos/$user_name/$repo_name/hooks
}
# print help
help() {
local prog_name=$(echo "$0" | rev | cut -d'/' -f1 | rev)
local topic=$1
case "$topic" in
create-repo)
cat <<-END
Create a GOGS repository.
Usage:
$prog_name $1 <user_name> <repo_name>
Arguments:
user_name name of the user or organization where the repo will be created
repo_name name of the repository to be created
END
;;
create-webhook)
cat <<-END
Create a GOGS webhook.
Usage:
$prog_name $1 <user_name> <repo_name> <webhook_url> [secret]
Arguments:
user_name name of the user / organizationo that owns the repo where the webhook will be created
repo_name name of the repo where the webhook will be created
webhook_url the url for the webhook that will be created
secret optional secret that will be passed in the X-Gogs-Signature header
END
;;
delete-webhook)
cat <<-END
Delete a GOGS webhook.
Usage:
$prog_name $1 <user_name> <repo_name> <webhook_id>
Arguments:
user_name name of the user / organizationo that owns the repo containing the webhook
repo_name name of the repo that contains the webhook
webhook_id id of the webhook that will be deleted
END
;;
env)
cat <<-END
Prints environment variables needed by this script.
Variables:
GOGS_ROOT_URL The url of the GOGS server
(IE: https://try.gogs.io)
GOGS_TOKEN Application token configured in GOGS
(Obtained from $GOGS_ROOT_URL/user/settings/applications)
END
;;
get-user-repos)
cat <<-END
Get a list of GOGS repos for a user.
Usage:
$prog_name $1 <user_name>
Arguments:
user_name name of the user who's repos to list
END
;;
get-webhooks)
cat <<-END
Get a list of GOGS webhooks for a repo.
Usage:
$prog_name $1 <user_name> <repo_name>
Arguments:
user_name name of the user / organization that owns the repo
repo_name name of the repo to list webhooks for
END
;;
*)
cat <<-END
$prog_name is a tool for interacting with the GOGS API.
Usage:
$prog_name command [arguments]
The commands are:
create-repo create a repository
create-webhook create a webhook
delete-webhook delete a webhook
env print environment information
get-user-repos get a list of repos for a user
get-webhooks get a list of webhooks for a repo
Use "$prog_name help [command]" for more information about a command.
END
;;
esac
}
"$action" "${@:2}"

1326
bin/jsawk Executable file

File diff suppressed because one or more lines are too long

14
bin/make_archive Executable file
View File

@ -0,0 +1,14 @@
#!/bin/bash -x
ARCHDIR="/home/paramah/Backups"
GIT=`which git`
PROJEKT=${PWD##*/}
DATE=`date +%Y-%m-%d`
dir=$ARCHDIR/$PROJEKT
if [[ ! -e $dir ]]; then
mkdir $dir
fi
$GIT archive master --format=zip --output=$ARCHDIR/$PROJEKT/$DATE.zip

121
bin/pipes.sh Executable file
View File

@ -0,0 +1,121 @@
#!/usr/bin/env bash
# pipes.sh: Animated pipes terminal screensaver.
#
# This modified version is maintained at:
#
# https://github.com/livibetter/pipes.sh
VERSION=0.1.1
M=32768
p=1
f=75 s=13 r=2000 t=0
w=$(tput cols) h=$(tput lines)
# ab -> idx = a*4 + b
# 0: up, 1: right, 2: down, 3: left
# 00 means going up , then going up -> ┃
# 12 means going right, then going down -> ┓
sets=(
"┃┏ ┓┛━┓ ┗┃┛┗ ┏━"
"│╭ ╮╯─╮ ╰│╯╰ ╭─"
"│┌ ┐┘─┐ └│┘└ ┌─"
"║╔ ╗╝═╗ ╚║╝╚ ╔═"
"|+ ++-+ +|++ +-"
"|/ \/-\ \|/\ /-"
)
v=()
RNDSTART=0
NOCOLOR=0
OPTIND=1
while getopts "p:t:f:s:r:RChv" arg; do
case $arg in
p) ((p=(OPTARG>0)?OPTARG:p));;
t) ((OPTARG>=0 && OPTARG<${#sets[@]})) && V+=($OPTARG);;
f) ((f=(OPTARG>19 && OPTARG<101)?OPTARG:f));;
s) ((s=(OPTARG>4 && OPTARG<16 )?OPTARG:s));;
r) ((r=(OPTARG>=0)?OPTARG:r));;
R) RNDSTART=1;;
C) NOCOLOR=1;;
h) echo -e "Usage: $(basename $0) [OPTION]..."
echo -e "Animated pipes terminal screensaver.\n"
echo -e " -p [1-]\tnumber of pipes (D=1)."
echo -e " -t [0-$((${#sets[@]} - 1))]\ttype of pipes, can be used more than once (D=0)."
echo -e " -f [20-100]\tframerate (D=75)."
echo -e " -s [5-15]\tprobability of a straight fitting (D=13)."
echo -e " -r LIMIT\treset after x characters, 0 if no limit (D=2000)."
echo -e " -R \t\trandom starting point."
echo -e " -C \t\tno color."
echo -e " -h\t\thelp (this screen)."
echo -e " -v\t\tprint version number.\n"
exit 0;;
v) echo "$(basename -- "$0") $VERSION"
exit 0
esac
done
# set default values if not by options
((${#V[@]})) || V=(0)
# Attempt to workaround for Bash versions < 4, such as 3.2 on Mac:
# https://gist.github.com/livibetter/4689307/#comment-892368
# Untested--in conduction of using shebang `env bash`--should fall back to
# `sleep`
printf -v SLEEP "read -t0.0$((1000/f)) -n 1"
if $SLEEP &>/dev/null; (($? != 142)); then
printf -v SLEEP "sleep 0.0$((1000/f))"
fi
cleanup() {
# clear up standard input
read -t 0 && cat </dev/stdin>/dev/null
# terminal has no smcup and rmcup capabilities
((FORCE_RESET)) && reset && exit 0
tput rmcup
tput cnorm
stty echo
((NOCOLOR)) && echo -ne '\e[0m'
exit 0
}
trap cleanup HUP TERM
trap 'break 2' INT
for (( i=1; i<=p; i++ )); do
c[i]=$((i%8)) n[i]=0 l[i]=0
((x[i]=RNDSTART==1?RANDOM*w/32768:w/2))
((y[i]=RNDSTART==1?RANDOM*h/32768:h/2))
v[i]=${V[${#V[@]} * RANDOM / M]}
done
stty -echo
tput smcup || FORCE_RESET=1
tput civis
tput clear
# any key press exits the loop and this script
while REPLY=; $SLEEP; [[ -z $REPLY ]] ; do
for (( i=1; i<=p; i++ )); do
# New position:
((${l[i]}%2)) && ((x[i]+=-${l[i]}+2,1)) || ((y[i]+=${l[i]}-1))
# Loop on edges (change color on loop):
((${x[i]}>w||${x[i]}<0||${y[i]}>h||${y[i]}<0)) && ((c[i]=RANDOM%8, v[i]=V[${#V[@]}*RANDOM/M]))
((x[i]=(x[i]+w)%w))
((y[i]=(y[i]+h)%h))
# New random direction:
((n[i]=RANDOM%s-1))
((n[i]=(${n[i]}>1||${n[i]}==0)?${l[i]}:${l[i]}+${n[i]}))
((n[i]=(${n[i]}<0)?3:${n[i]}%4))
# Print:
tput cup ${y[i]} ${x[i]}
[[ $NOCOLOR == 0 ]] && echo -ne "\033[1;3${c[i]}m"
echo -n "${sets[v[i]]:l[i]*4+n[i]:1}"
l[i]=${n[i]}
done
((r>0 && t*p>=r)) && tput reset && tput civis && t=0 || ((t++))
done
cleanup

344
nvim/init.vim Normal file
View File

@ -0,0 +1,344 @@
source ~/.vim/common.vim
set shell=/bin/bash
set hidden
" ____ _
" | _ \| |_ _ __ _
" | |_) | | | | |/ _` |
" | __/| | |_| | (_| |
" |_| |_|\__,_|\__, |
" |___/
" ########################################################################
"
call plug#begin('~/.vim/plugged')
" Powerline vim
" @site: https://github.com/powerline/powerline
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Plug 'powerline/powerline' " Powerline VIM
Plug 'vim-airline/vim-airline' " AirLine (tabs,etc..)
Plug 'vim-airline/vim-airline-themes' " AirLine Themes (for sexy working)
Plug 'echuraev/translate-shell.vim', { 'do': 'wget -O ~/.vim/trans git.io/trans && chmod +x ~/.vim/trans' }
" Vim addons (nice & sexy)
Plug 'mhinz/vim-startify'
Plug 'terryma/vim-expand-region'
Plug 'terryma/vim-multiple-cursors'
Plug 'editorconfig/editorconfig-vim'
Plug 'dylanaraps/wal'
"Plug 'yggdroot/indentline'
Plug 'sbdchd/neoformat'
Plug 'neomake/neomake'
Plug 'ludovicchabant/vim-gutentags'
Plug 'junegunn/fzf'
Plug 'ncm2/ncm2'
Plug 'roxma/nvim-yarp'
Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
Plug 'KabbAmine/zeavim.vim'
Plug 'tpope/vim-commentary'
Plug 'Shougo/vimproc.vim', {'do' : 'make'}
Plug 'wincent/ferret'
Plug 'moll/vim-bbye'
Plug 'shime/vim-livedown'
Plug 'tpope/vim-unimpaired'
" NOTE: you need to install completion sources to get completions. Check
" our wiki page for a list of sources: https://github.com/ncm2/ncm2/wiki
Plug 'ncm2/ncm2-bufword'
Plug 'ncm2/ncm2-tmux'
Plug 'ncm2/ncm2-path'
Plug 'ncm2/ncm2-vim-lsp'
Plug 'vim-vdebug/vdebug'
" NERDTree
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Plug 'scrooloose/nerdtree'
Plug 'zefei/vim-wintabs'
Plug 'tiagofumo/vim-nerdtree-syntax-highlight'
Plug 'ryanoasis/vim-devicons'
Plug 'jistr/vim-nerdtree-tabs'
" Vim colorscheme plugins
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Plug 'fcpg/vim-complimentary'
Plug 'fcpg/vim-farout'
Plug 'fcpg/vim-orbital'
Plug 'fcpg/vim-fahrenheit'
" Vim Git
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Plug 'tpope/vim-fugitive'
Plug 'mhinz/vim-signify'
Plug 'junegunn/gv.vim'
" Vim Snippets
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Plug 'SirVer/ultisnips'
Plug 'honza/vim-snippets'
Plug 'ssh://gogs@git.cynarski.pl:65522/myEnv/my-snips.git'
" PHP
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Plug 'StanAngeloff/php.vim'
Plug 'arnaud-lb/vim-php-namespace'
Plug 'lumiliet/vim-twig'
Plug 'phpactor/phpactor' , {'do': 'composer install'}
Plug 'phpactor/ncm2-phpactor'
Plug 'tobyS/vmustache'
Plug 'tobyS/pdv'
Plug 'StanAngeloff/php.vim', {'for': 'php'}
Plug 'adoy/vim-php-refactoring-toolbox'
Plug 'stephpy/vim-php-cs-fixer'
" TypeScript
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Plug 'leafgarland/typescript-vim'
" Plug 'mhartington/nvim-typescript'
Plug 'Quramy/tsuquyomi'
" HasiCorp
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Plug 'hashivim/vim-terraform'
Plug 'hashivim/vim-consul'
" Salt-Stack (.:REACTIVATE:.)
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Plug 'saltstack/salt-vim'
" GoLang
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Plug 'fatih/vim-go'
" DevOps Syntax
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Plug 'chr4/nginx.vim'
call plug#end()
"
" ########################################################################
"
source ~/.vim/powerline.vim
let g:trans_bin = "~/.vim"
set laststatus=2
nnoremap <silent> <leader>n :NERDTreeToggle<CR>
nnoremap <leader>v :vsplit<CR>
nnoremap <leader>s :split<CR>
map d<cr> <cr>:NERDTreeClose<cr>
set number relativenumber
augroup numbertoggle
autocmd!
autocmd BufEnter,FocusGained,InsertLeave * set relativenumber
autocmd BufLeave,FocusLost,InsertEnter * set norelativenumber
augroup END
set statusline+=%#warningmsg#
set statusline+=%*
"
"
"
"
"
"""""""""""""""""""""""""""""""
if filereadable(".bookmarks")
let g:NERDTreeBookmarksFile = ".bookmarks"
endif
nmap <leader>p :FZF<cr>
syntax enable
filetype plugin indent on
"autocmd VimEnter * colorscheme farout
autocmd VimEnter * colorscheme fahrenheit
"autocmd VimEnter *
map <C-n> <Plug>(wintabs_previous)
map <C-m> <Plug>(wintabs_next)
set mouse=a
let g:vrc_connect_timeout = 10
let g:vrc_cookie_jar = '/tmp'
let g:vrc_follow_redirects = 1
let g:vrc_include_response_header = 1
let g:vrc_max_time = 60
let g:vrc_resolve_to_ipv4 = 1
let g:vrc_ssl_secure = 1
set foldmethod=syntax
set foldnestmax=10
set foldenable
set foldlevel=4
set foldnestmax=10
"set nofoldenable
"set foldlevel=1
"let g:tex_fold_enabled=1
"let g:vimsyn_folding='af'
"let g:xml_syntax_folding = 1
"let g:php_folding = 1
"let g:perl_fold = 1
let g:SimpylFold_docstring_preview = 1
let g:startify_custom_header = []
function! s:list_commits()
let git = 'git -C ./'
let commits = systemlist(git .' log --oneline | head -n10')
let git = 'G'. git[1:]
return map(commits, '{"line": matchstr(v:val, "\\s\\zs.*"), "cmd": "'. git .' show ". matchstr(v:val, "^\\x\\+") }')
endfunction
let g:startify_session_dir = $HOME . '/.vim/sessions/'
let g:startify_lists = [
\ { 'header': [' Ostatnio edytowane'], 'type': 'dir' },
\ { 'header': [' Zapisane sesje'], 'type': 'sessions' },
\ { 'header': [' Ostatnie zmiany'], 'type': function('s:list_commits') },
\ { 'header': [' Zakładki'], 'type': 'bookmarks' },
\ ]
let g:startify_files_number = 6
let g:startify_bookmarks = [
\ {'c': '~/.vimrc'},
\ {'z': '~/.zshrc'},
\ {'v': '~/.vim/common.vim'},
\ {'b': '~/.vim/binds.vim'},
\ {'p': '~/.vim/powerline.vim'},
\ ]
let g:startify_update_oldfiles = 1
let g:startify_disable_at_vimenter = 0
let g:startify_session_autoload = 1
let g:startify_session_persistence = 1
"let g:startify_session_delete_buffers = 0
let g:startify_change_to_dir = 0
"let g:startify_change_to_vcs_root = 0 " vim-rooter has same feature
let g:startify_skiplist = [
\ 'COMMIT_EDITMSG',
\ escape(fnamemodify(resolve($VIMRUNTIME), ':p'), '\') .'doc',
\ 'bundle/.*/doc',
\ ]
augroup startify_map
au!
autocmd FileType startify nnoremap <buffer> <F2> <Nop>
if !exists('g:startify_custom_header')
autocmd FileType startify call <SID>update_logo()
endif
autocmd FileType startify setl nowrap
augroup END
" enable ncm2 for all buffers
autocmd BufEnter * call ncm2#enable_for_buffer()
" IMPORTANTE: :help Ncm2PopupOpen for more information
set completeopt=noinsert,menuone,noselect
set hidden
" _____ ____ _ _
" |_ _| _ _ __ ___/ ___| ___ _ __(_)_ __ | |_
" | || | | | '_ \ / _ \___ \ / __| '__| | '_ \| __|
" _| || |_| | |_) | __/___) | (__| | | | |_) | |_
" (_)_| \__, | .__/ \___|____/ \___|_| |_| .__/ \__|
" |___/|_| |_|
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" _
" _ __ | |__ _ __
" | '_ \| '_ \| '_ \
" _| |_) | | | | |_) |
" (_) .__/|_| |_| .__/
" |_| |_|
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
nnoremap <silent><leader>pcf :call PhpCsFixerFixFile()<CR>
let g:pdv_template_dir = $HOME ."/.vim/plugged/pdv/templates_snip"
autocmd BufWritePost *.php silent! call PhpCsFixerFixFile()
autocmd FileType php setlocal omnifunc=phpactor#Complete
" Include use statement
nmap <Leader>u :call phpactor#UseAdd()<CR>
" Invoke the context menu
nmap <Leader>mm :call phpactor#ContextMenu()<CR>
" Invoke the navigation menu
nmap <Leader>nn :call phpactor#Navigate()<CR>
" Goto definition of class or class member under the cursor
" Include use statement
nmap <Leader>u :call phpactor#UseAdd()<CR>
" Invoke the context menu
nmap <Leader>mm :call phpactor#ContextMenu()<CR>
" Invoke the navigation menu
nmap <Leader>nn :call phpactor#Navigate()<CR>
" Goto definition of class or class member under the cursor
nmap <Leader>o :call phpactor#GotoDefinition()<CR>
" Transform the classes in the current file
nmap <Leader>tt :call phpactor#Transform()<CR>
" Generate a new class (replacing the current file)
nmap <Leader>cc :call phpactor#ClassNew()<CR>
" Extract expression (normal mode)
nmap <silent><Leader>ee :call phpactor#ExtractExpression(v:false)<CR>
" Extract expression from selection
vmap <silent><Leader>ee :<C-U>call phpactor#ExtractExpression(v:true)<CR>
" Extract method from selection
vmap <silent><Leader>em :<C-U>call phpactor#ExtractMethod()<CR>
nmap <Leader>o :call phpactor#GotoDefinition()<CR>
" Transform the classes in the current file
nmap <Leader>tt :call phpactor#Transform()<CR>
" Generate a new class (replacing the current file)
nmap <Leader>cc :call phpactor#ClassNew()<CR>
let g:vim_php_refactoring_use_default_mapping = 0
" nnoremap <unique> <Leader>rlvar :call PhpRenameLocalVariable()<CR>
"nnoremap <unique> <Leader>rcvar :call PhpRenameClassVariable()<CR>
"nnoremap <unique> <Leader>rm :call PhpRenameMethod()<CR>
"nnoremap <unique> <Leader>eu :call PhpExtractUse()<CR>
vnoremap <unique> <Leader>ec :call PhpExtractConst()<CR>
"nnoremap <unique> <Leader>ep :call PhpExtractClassProperty()<CR>
" vnoremap <unique> <Leader>emm :call PhpExtractMethod()<CR>
"nnoremap <unique> <Leader>np :call PhpCreateProperty()<CR>
nnoremap <unique> <Leader>du :call PhpDetectUnusedUseStatements()<CR>
vnoremap <unique> <Leader>aa :call PhpAlignAssigns()<CR>
nnoremap <unique> <Leader>sg :call PhpCreateSettersAndGetters()<CR>
"nnoremap <unique> <Leader>cog :call PhpCreateGetters()<CR>
"nnoremap <unique> <Leader>da :call PhpDocAll()<CR>
nnoremap <unique> <Leader>da :call pdv#DocumentWithSnip()<CR><Paste>
" Extract expression (normal mode)
" let $NVIM_PYTHON_LOG_FILE="/tmp/nvim_log"
" let $NVIM_PYTHON_LOG_LEVEL="DEBUG"

34
tmux/powerline/AUTHORS Normal file
View File

@ -0,0 +1,34 @@
Please append you name/nick here when you have contributed with something!
Erik Westrup <erik.westrup@gmail.com>
Suvash Thapaliya <suvash@gmail.com>
Erik Jansson <erikjansson90@gmail.com>
Yuku Takahashi <taka84u9@gmail.com>
Oscar Olsson <osse.olsson@gmail.com>
Ryo Katsuma
negipo
Sina Siadat
Vivien Leroy <fantattitude@me.com>
Gino Lucero
Derek Ashley Thomas <derekathomas@gmail.com>
LuRsT
Tomokazu Hirai <tomokazu.hirai@gmail.com>
Matt Black
krieiter
Viktor Jackson
flytreeleft <flytreeleft@126.com>
Conner McDaniel
David Francos <me@davidfrancos.net>
Travis Thompson <butters08@gmail.com>
Jonathon Klobucar
Dylan Copeland <me@dylancopeland.com>
Pete Johns <paj-github@johnsy.com>
Robert Murray McMahon
Jeff Felchner
tobetoby
Matthew Lanigan
Hadret <hadret@gmail.com>
antiAgainst <antiAgainst@gmail.com>
Alexander Luberg <alex@luberg.me>
Stanislaw Pusep <stas@sysd.org>
Austin Beam

14
tmux/powerline/LICENSE Normal file
View File

@ -0,0 +1,14 @@
tmux-powerline - Statusbar configuration for tmux that looks like vim-powerline and consist of dynamic segments.
Copyright (c) 2012, see AUTHORS
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
* Neither the name of the <ORGANIZATION> nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
http://opensource.org/licenses/BSD-3-Clause

209
tmux/powerline/README.md Normal file
View File

@ -0,0 +1,209 @@
# DEPRECATION WARNING
This project is in a maintenance mode and no future functionality is likely to be added. tmux-powerline, with all other powerline projects, is replaced by the new unifying [powerline](https://github.com/Lokaltog/powerline). However this project is still functional and can serve as a lightweight alternative for non-python users.
# tmux-powerline
This is a set of scripts for making a nice and dynamic tmux statusbar consisting of segments. This is much like [Lokaltog/vim-powerline](https://github.com/Lokaltog/vim-powerline) but for tmux.
The following segments exists for now:
* LAN & WAN IP addresses.
* Now Playing for MPD, Spotify (GNU/Linux native or wine, OS X), iTunes (OS X), Rhythmbox, Banshee, MOC, Audacious, Rdio (OS X), cmus, Pithos and Last.fm (last scrobbled track).
* New mail count for GMail, Maildir, mbox, mailcheck, and Apple Mail.
* GNU/Linux and Macintosh OS X battery status (uses [richo/dotfiles/bin/battery](https://github.com/richoH/dotfiles/blob/master/bin/battery)).
* Weather in Celsius, Fahrenheit and Kelvin using Yahoo Weather.
* System load, cpu usage and uptime.
* Git, SVN and Mercurial branch in CWD.
* Date and time.
* Hostname.
* tmux info.
* CWD in pane.
* Current X keyboard layout.
* Network download/upload speed.
* Earthquake warnings.
# Screenshots
**Full screenshot**
![Full screenshot](img/full.png)
**left-status**
Current tmux session, window and pane, hostname and LAN & WAN IP address.
![left-status](img/left-status.png)
**right-status**
New mails, now playing, average load, weather, date and time.
![right-status](img/right-status.png)
Now I've read my inbox so the mail segment disappears!
![right-status, no mail](img/right-status_no_mail.png)
After pausing the music there's no need for showing NP anymore. Also the weather has become much nicer!
![right-status, no mpd](img/right-status_no_mpd.png)
Remaining battery.
![right-status, weather and battery](img/right-status_weather_battery.png)
# Requirements
Requirements for the lib to work are:
* Recent tmux version
* `bash --version` >= 3.2 (Does not have to be your default shell.)
* A patched font. Follow instructions at [Powerline Installation](http://powerline.readthedocs.org/en/latest/installation/linux.html) or [download](https://github.com/powerline/fonts) a new one. However you can use other substitute symbols as well; see `config.sh`.
## Segment Requirements
Requirements for some segments. You only need to fulfill the requirements for those segments you want to use.
* `wan_ip.sh`, `now_playing.sh` (last.fm), `weather_yahoo.sh`: curl, bc
* `now_playing.sh` (mpd) : [libmpdclient](http://sourceforge.net/projects/musicpd/files/libmpdclient/)
* `xkb_layout.sh`: X11, XKB
* `mailcount.sh` (gmail): wget, (mailcheck): [mailcheck](http://packages.debian.org/sid/mailcheck).
* `ifstat.sh`: ifstat (there is a simpler segment not using ifstat but samples /sys/class/net)
* `tmux_mem_cpu_load.sh`: [tmux-mem-cpu-load](https://github.com/thewtex/tmux-mem-cpu-load)
* `rainbarf.sh`: [rainbarf](https://github.com/creaktive/rainbarf)
* `weather.sh`: GNU `grep` with Perl regexp enabled (FreeBSD specific)
## OS X specific requirements
The `grep` tool is outdated on OS X 10.8 Mountain Lion so you might have to upgrade it. Unfortunately the main homebrew repo
[does not contain grep](https://github.com/mxcl/homebrew/pull/3473) so use the following command to get the lastest version.
```bash
brew install https://raw.github.com/Homebrew/homebrew-dupes/master/grep.rb
```
or if you have heightened security set up, just tap the homebrew dupes and install grep
```bash
brew tap homebrew/dupes
brew install homebrew/dupes/grep
```
## FreeBSD specific requirements
Preinstalled `grep` in FreeBSD doesn't support Perl regexp. Solution is rather simple -- you need to use `textproc/gnugrep` port instead. You also need to make sure, that it has support for PCRE and is compiled with `--enable-perl-regexp` flag.
# Installation
Start with checking out the repository with:
```console
$ cd ~/some/path/
$ git clone https://github.com/erikw/tmux-powerline.git
```
Now edit your `~/.tmux.conf` to use the scripts:
<!-- Close syntax enough. -->
```vim
set-option -g status on
set-option -g status-interval 2
set-option -g status-utf8 on
set-option -g status-justify "centre"
set-option -g status-left-length 60
set-option -g status-right-length 90
set-option -g status-left "#(~/path/to/tmux-powerline/powerline.sh left)"
set-option -g status-right "#(~/path/to/tmux-powerline/powerline.sh right)"
```
Set the maximum lengths to something that suits your configuration of segments and size of terminal (the maximum segments length will be handled better in the future).
The window list can be powerlineified if you'd like by adding the following line to the same file:
```vim
set-window-option -g window-status-current-format "#[fg=colour235, bg=colour27]⮀#[fg=colour255, bg=colour27] #I ⮁ #W #[fg=colour27, bg=colour235]⮀"
```
You can toggle the visibility of the statusbars by adding the following lines:
```vim
bind C-[ run '~/path/to/tmux-powerline/mute_powerline.sh left' # Mute left statusbar.
bind C-] run '~/path/to/tmux-powerline/mute_powerline.sh right' # Mute right statusbar.
```
Some segments e.g. cwd and cvs_branch needs to find the current working directory of the active pane. To achieve this we let tmux save the path each time the shell prompt is displayed. Put the line below in your `~/.bashrc` or where you define you PS1 variable. zsh users can put it in e.g. `~/.zshrc` and may change `PS1` to `PROMPT` (but that's not necessary).
```bash
PS1="$PS1"'$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#D" | tr -d %) "$PWD")'
```
If the active shell is Fish, PS1 is not being set normally. Instead, it has a `fish_prompt` function that is being called when prompt rendering is required. This means that one can append the following command at the end of the function in `fish_prompt.fish` file:
```fish
if set -q TMUX; tmux setenv TMUXPWD_(tmux display -p "#D" | tr -d '%') $PWD; end
```
# Configuration
The default segments that are shown are defined in `themes/default.sh`. You will probably want to change those to fit your needs. To do so you can edit that file directly but preferable, for easier updating of the repo, you can make a copy and edit that one (or see how to use custom themes directory below). A palette of colors that can be used can be obtained by running the script `color_palette.sh`.
```console
$ cp themes/default.sh themes/mytheme.sh
$ $EDITOR themes/mytheme.sh
```
Now generate a default configuration file by doing
```console
$ ./generate_rc.sh
$ mv ~/.tmux-powerlinerc.default ~/.tmux-powerlinerc
$ $EDITOR ~/.tmux-powerlinerc
```
and change theme to use and values for segments you want to use. If you want to keep the repo checkout clean you can set custom segment and theme paths in the general section and then store your files outside the repo.
# Debugging
Some segments might not work on your system for various reasons such as missing programs or different versions not having the same options. To find out which segment is not working it may help to enable the debug setting in `~/.tmux-powerlinerc`. However this may not be enough to determine the error so you can inspect all executed bash commands (will be a long output) by doing
```console
$ bash -x powerline.sh (left|right)
```
To debug smaller portions of code, say if you think the problem lies in a specific segment, insert these lines at the top and bottom of the relevant code portions e.g. inside a function:
```bash
set -x
exec 2>/tmp/tmux-powerline.log
<code to debug>
set +x
```
and then inspect the outputs like
```console
less /tmp/tmux-powerline.log
tail -f /tmp/tmux-powerline.log # or follow output like this.
```
If you can not solve the problems you can post an [issue](https://github.com/erikw/tmux-powerline/issues?state=open) and be sure to include relevant information about your system and script output (from bash -x) and/or screenshots if needed. Be sure to search in the [resolved issues](https://github.com/erikw/tmux-powerline/issues?page=1&state=closed) section for similar problems you're experiencing before posting.
## Common problems
### VCS_branch / PWD is not updating
The issue is probably that the update of the current directory in the active pane is not updated correctly. Make sure that your PS1 or PROMPT variable actually contains the line from the installation step above by simply inspecting the output of `echo $PS1`. You might have placed the PS1 line in you shell configuration such that it is overwritten later. The simplest solution is to put it at the very end to make sure that nothing overwrites it. See [issue #52](https://github.com/erikw/tmux-powerline/issues/52).
### Nothing is displayed
You have edited `~/.tmux.conf` but no powerline is displayed. This might be because tmux is not aware of the changes so you have to restart your tmux session or reloaded that file by typing this on the command line (or in tmux command mode with `prefix :`)
```console
$ tmux source-file ~/.tmux.conf
```
### Multiple lines in bash or no powerline in zsh using iTerm (OS X)
If your tmux looks like [this](https://github.com/erikw/tmux-powerline/issues/125) then you may have to in iTerm uncheck [Unicode East Asian Ambiguous characters are wide] in Preferences -> Settings -> Advanced.
# Hacking
This project can only gain positively from contributions. Fork today and make your own enhancements and segments to share back! If you'd like, add your name and E-mail to AUTHORS before making a pull request so you can get some credit for your work :-)
## How to make a segment
If you want to (of course you do!) send a pull request for a cool segment you written make sure that it follows the style of existing segments, unless you have good reason for it. Each segment resides in the `segments/` directory with a descriptive and simple name. A segment must have at least one function and that is `run_segment` which is like the main function that is called from the tmux-powerline lib. What ever text is echoed out from this function to stdout is the text displayed in the tmux statusbar. If the segment at a certain point does not have anything to show, simply don't echo anything out and the segment will be hidden. A successful execution of the `run_segment` function should return an exit code of 0. If the segment failed to execute in a fatal way return a non-zero exit code so the user can pick up the error and fix it when debug mode is on (e.g. missing program that is needed for the segment).
Usage of helper function to organize the work of a segment is encourage and should be named in the format `__helper_func`. If a segment has settings it should have a function `generate_rc` which outputs default values of all settings and a short explanation of the setting and its values. Study e.g. `segments/now_playing.sh` to see how it is done. A segment having settings should typically call a helper function `__process_settings` as the first statement in `run_segment` that sets default values to the settings that has not been set by the user.
Also, don't use bash4 features as requiring bash4 complicates installation for OS X user quite a bit. Use tabs for indentation ([discussion](https://github.com/erikw/tmux-powerline/pull/92)),

14
tmux/powerline/color_palette.sh Executable file
View File

@ -0,0 +1,14 @@
#!/usr/bin/env bash
# Print tmux color palette.
# Idea from http://superuser.com/questions/285381/how-does-the-tmux-color-palette-work
for i in $(seq 0 4 255); do
for j in $(seq $i $(expr $i + 3)); do
for k in $(seq 1 $(expr 3 - ${#j})); do
printf " "
done
printf "\x1b[38;5;${j}mcolour${j}"
[[ $(expr $j % 4) != 3 ]] && printf " "
done
printf "\n"
done

View File

@ -0,0 +1,5 @@
# Default values for non segment configuration options.
export TMUX_POWERLINE_DEBUG_MODE_ENABLED_DEFAULT="false"
export TMUX_POWERLINE_PATCHED_FONT_IN_USE_DEFAULT="true"
export TMUX_POWERLINE_THEME_DEFAULT="paramah"

View File

@ -0,0 +1,9 @@
# Other settings and helper functions.
debug_mode_enabled() {
[ -n "$TMUX_POWERLINE_DEBUG_MODE_ENABLED" -a "$TMUX_POWERLINE_DEBUG_MODE_ENABLED" != "false" ];
}
patched_font_in_use() {
[ -z "$TMUX_POWERLINE_PATCHED_FONT_IN_USE" -o "$TMUX_POWERLINE_PATCHED_FONT_IN_USE" != "false" ];
}

View File

@ -0,0 +1,14 @@
# Paths
export TMUX_POWERLINE_DIR_LIB="$TMUX_POWERLINE_DIR_HOME/lib"
export TMUX_POWERLINE_DIR_SEGMENTS="$TMUX_POWERLINE_DIR_HOME/segments"
export TMUX_POWERLINE_DIR_TEMPORARY="/tmp/tmux-powerline_${USER}"
export TMUX_POWERLINE_DIR_THEMES="$TMUX_POWERLINE_DIR_HOME/themes"
if [ -z "$TMUX_POWERLINE_RCFILE" ]; then
export TMUX_POWERLINE_RCFILE="$HOME/.tmux-powerlinerc"
fi
export TMUX_POWERLINE_RCFILE_DEFAULT="${TMUX_POWERLINE_RCFILE}.default"
if [ ! -d "$TMUX_POWERLINE_DIR_TEMPORARY" ]; then
mkdir "$TMUX_POWERLINE_DIR_TEMPORARY"
fi

View File

@ -0,0 +1,20 @@
# Shell Configuration
# vi: sw=8 ts=8 noet
ostype() { echo $OSTYPE | tr '[A-Z]' '[a-z]'; }
export SHELL_PLATFORM='unknown'
case "$(ostype)" in
*'linux'* ) SHELL_PLATFORM='linux' ;;
*'darwin'* ) SHELL_PLATFORM='osx' ;;
*'bsd'* ) SHELL_PLATFORM='bsd' ;;
esac
shell_is_linux() { [[ $SHELL_PLATFORM == 'linux' || $SHELL_PLATFORM == 'bsd' ]]; }
shell_is_osx() { [[ $SHELL_PLATFORM == 'osx' ]]; }
shell_is_bsd() { [[ $SHELL_PLATFORM == 'bsd' || $SHELL_PLATFORM == 'osx' ]]; }
export -f shell_is_linux
export -f shell_is_osx
export -f shell_is_bsd

12
tmux/powerline/generate_rc.sh Executable file
View File

@ -0,0 +1,12 @@
#!/usr/bin/env bash
# Generate default rc file.
export TMUX_POWERLINE_DIR_HOME="$(dirname $0)"
source "${TMUX_POWERLINE_DIR_HOME}/config/paths.sh"
source "${TMUX_POWERLINE_DIR_HOME}/config/defaults.sh"
source "${TMUX_POWERLINE_DIR_HOME}/config/shell.sh"
source "${TMUX_POWERLINE_DIR_LIB}/rcfile.sh"
generate_default_rc
exit 0

BIN
tmux/powerline/img/full.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -0,0 +1,9 @@
#! Check script arguments.
check_arg_side() {
local side="$1"
if ! [ "$side" == "left" -o "$side" == "right" ]; then
echo "Argument must be the side to handle {left, right} and not \"${side}\"."
exit 1
fi
}

View File

@ -0,0 +1,5 @@
__print_colored_content() {
echo -n "#[fg=colour$3, bg=colour$2]"
echo -n "$1"
echo -n "#[default]"
}

View File

@ -0,0 +1,20 @@
# Muting Logic
# In all cases $1 is the side to be muted (eg left/right).
powerline_muted() {
[ -e "$(__powerline_mute_file $1)" ];
}
toggle_powerline_mute_status() {
if powerline_muted $1; then
rm "$(__powerline_mute_file $1)"
else
touch "$(__powerline_mute_file $1)"
fi
}
__powerline_mute_file() {
local tmux_session=$(tmux display -p "#S")
echo -n "${TMUX_POWERLINE_DIR_TEMPORARY}/mute_${tmux_session}_$1"
}

View File

@ -0,0 +1,142 @@
# Library functions
print_powerline() {
local side="$1"
local upper_side=$(echo "$1" | tr '[:lower:]' '[:upper:]')
eval "local input_segments=(\"\${TMUX_POWERLINE_${upper_side}_STATUS_SEGMENTS[@]}\")"
local powerline_segments=()
local powerline_segment_contents=()
__check_platform
__process_segment_defaults
__process_scripts
__process_colors
__process_powerline
}
__process_segment_defaults() {
for segment_index in "${!input_segments[@]}"; do
local input_segment=(${input_segments[$segment_index]})
eval "local default_separator=\$TMUX_POWERLINE_DEFAULT_${upper_side}SIDE_SEPARATOR"
powerline_segment_with_defaults=(
${input_segment[0]:-"no_script"} \
${input_segment[1]:-$TMUX_POWERLINE_DEFAULT_BACKGROUND_COLOR} \
${input_segment[2]:-$TMUX_POWERLINE_DEFAULT_FOREGROUND_COLOR} \
${input_segment[3]:-$default_separator} \
)
powerline_segments[$segment_index]="${powerline_segment_with_defaults[@]}"
done
}
__process_scripts() {
for segment_index in "${!powerline_segments[@]}"; do
local powerline_segment=(${powerline_segments[$segment_index]})
if [ -n "$TMUX_POWERLINE_DIR_USER_SEGMENTS" ] && [ -f "$TMUX_POWERLINE_DIR_USER_SEGMENTS/${powerline_segment[0]}.sh" ] ; then
local script="$TMUX_POWERLINE_DIR_USER_SEGMENTS/${powerline_segment[0]}.sh"
else
local script="$TMUX_POWERLINE_DIR_SEGMENTS/${powerline_segment[0]}.sh"
fi
export TMUX_POWERLINE_CUR_SEGMENT_BG="${powerline_segment[1]}"
export TMUX_POWERLINE_CUR_SEGMENT_FG="${powerline_segment[2]}"
source "$script"
local output
output=$(run_segment)
local exit_code="$?"
unset -f run_segment
if [ "$exit_code" -ne 0 ] && debug_mode_enabled ; then
local seg_name="${script##*/}"
echo "Segment '${seg_name}' exited with code ${exit_code}. Aborting."
exit 1
fi
if [ -n "$output" ]; then
powerline_segment_contents[$segment_index]=" $output "
else
unset -v powerline_segments[$segment_index]
fi
done
}
__process_colors() {
for segment_index in "${!powerline_segments[@]}"; do
local powerline_segment=(${powerline_segments[$segment_index]})
# Find the next segment that produces content (i.e. skip empty segments).
for next_segment_index in $(eval echo {$(($segment_index + 1))..${#powerline_segments}}) ; do
[[ -n ${powerline_segments[next_segment_index]} ]] && break
done
local next_segment=(${powerline_segments[$next_segment_index]})
if [ $side == 'left' ]; then
powerline_segment[4]=${next_segment[1]:-$TMUX_POWERLINE_DEFAULT_BACKGROUND_COLOR}
elif [ $side == 'right' ]; then
powerline_segment[4]=${previous_background_color:-$TMUX_POWERLINE_DEFAULT_BACKGROUND_COLOR}
fi
if __segment_separator_is_thin; then
powerline_segment[5]=${powerline_segment[2]}
else
powerline_segment[5]=${powerline_segment[1]}
fi
local previous_background_color=${powerline_segment[1]}
powerline_segments[$segment_index]="${powerline_segment[@]}"
done
}
__process_powerline() {
for segment_index in "${!powerline_segments[@]}"; do
local powerline_segment=(${powerline_segments[$segment_index]})
local background_color=${powerline_segment[1]}
local foreground_color=${powerline_segment[2]}
local separator=${powerline_segment[3]}
local separator_background_color=${powerline_segment[4]}
local separator_foreground_color=${powerline_segment[5]}
eval "__print_${side}_segment ${segment_index} ${background_color} ${foreground_color} ${separator} ${separator_background_color} ${separator_foreground_color}"
done
}
__print_left_segment() {
local content=${powerline_segment_contents[$1]}
local content_background_color=$2
local content_foreground_color=$3
local separator=$4
local separator_background_color=$5
local separator_foreground_color=$6
__print_colored_content "$content" $content_background_color $content_foreground_color
__print_colored_content $separator $separator_background_color $separator_foreground_color
}
__print_right_segment() {
local content=${powerline_segment_contents[$1]}
local content_background_color=$2
local content_foreground_color=$3
local separator=$4
local separator_background_color=$5
local separator_foreground_color=$6
__print_colored_content $separator $separator_background_color $separator_foreground_color
__print_colored_content "$content" $content_background_color $content_foreground_color
}
__segment_separator_is_thin() {
[[ ${powerline_segment[3]} == $TMUX_POWERLINE_SEPARATOR_LEFT_THIN || \
${powerline_segment[3]} == $TMUX_POWERLINE_SEPARATOR_RIGHT_THIN ]];
}
__check_platform() {
if [ "$SHELL_PLATFORM" == "unknown" ] && debug_mode_enabled; then
echo "Unknown platform; modify config/shell.sh" &1>&2
fi
}

View File

@ -0,0 +1,68 @@
# Read user rc file.
process_settings() {
__read_rcfile
if [ -z "$TMUX_POWERLINE_DEBUG_MODE_ENABLED" ]; then
export TMUX_POWERLINE_DEBUG_MODE_ENABLED="${TMUX_POWERLINE_DEBUG_MODE_ENABLED_DEFAULT}"
fi
if [ -z "$TMUX_POWERLINE_PATCHED_FONT_IN_USE" ]; then
export TMUX_POWERLINE_PATCHED_FONT_IN_USE="${TMUX_POWERLINE_PATCHED_FONT_IN_USE_DEFAULT}"
fi
if [ -z "$TMUX_POWERLINE_THEME" ]; then
export TMUX_POWERLINE_THEME="${TMUX_POWERLINE_THEME_DEFAULT}"
fi
eval TMUX_POWERLINE_DIR_USER_SEGMENTS="$TMUX_POWERLINE_DIR_USER_SEGMENTS"
eval TMUX_POWERLINE_DIR_USER_THEMES="$TMUX_POWERLINE_DIR_USER_THEMES"
if [ -n "$TMUX_POWERLINE_DIR_USER_THEMES" ] && [ -f "${TMUX_POWERLINE_DIR_USER_THEMES}/${TMUX_POWERLINE_THEME}.sh" ]; then
source "${TMUX_POWERLINE_DIR_USER_THEMES}/${TMUX_POWERLINE_THEME}.sh"
else
source "${TMUX_POWERLINE_DIR_THEMES}/${TMUX_POWERLINE_THEME}.sh"
fi
}
generate_default_rc() {
read -d '' rccontents << EORC
# Default configuration file for tmux-powerline.
# Modeline {
# vi: foldmarker={,} foldmethod=marker foldlevel=0 tabstop=4 filetype=sh
# }
# General {
# Show which segment fails and its exit code.
export TMUX_POWERLINE_DEBUG_MODE_ENABLED="${TMUX_POWERLINE_DEBUG_MODE_ENABLED_DEFAULT}"
# Use patched font symbols.
export TMUX_POWERLINE_PATCHED_FONT_IN_USE="${TMUX_POWERLINE_PATCHED_FONT_IN_USE_DEFAULT}"
# The theme to use.
export TMUX_POWERLINE_THEME="${TMUX_POWERLINE_THEME_DEFAULT}"
# Overlay directory to look for themes. There you can put your own themes outside the repo. Fallback will still be the "themes" directory in the repo.
export TMUX_POWERLINE_DIR_USER_THEMES=""
# Overlay directory to look for segments. There you can put your own segments outside the repo. Fallback will still be the "segments" directory in the repo.
export TMUX_POWERLINE_DIR_USER_SEGMENTS=""
# }
EORC
for segment in ${TMUX_POWERLINE_DIR_SEGMENTS}/*.sh; do
source "$segment"
if declare -f generate_segmentrc >/dev/null; then
segmentrc=$(generate_segmentrc | sed -e 's/^/\\t/g')
unset -f generate_segmentrc
local seg_name="${segment##*/}"
rccontents="${rccontents}\n\n# ${seg_name} {\n${segmentrc}\n# }"
fi
done
echo -e "$rccontents" > "$TMUX_POWERLINE_RCFILE_DEFAULT"
echo "Default configuration file generated to: ${TMUX_POWERLINE_RCFILE_DEFAULT}"
echo "Copy/move it to \"${TMUX_POWERLINE_RCFILE}\" and make your changes."
}
__read_rcfile() {
if [ -f "$TMUX_POWERLINE_RCFILE" ]; then
source "$TMUX_POWERLINE_RCFILE"
fi
}

View File

@ -0,0 +1,63 @@
# Rolling anything what you want.
# arg1: text to roll.
# arg2: max length to display.
# arg3: roll speed in characters per second.
roll_text() {
local text="$1" # Text to print
if [ -z "$text" ]; then
return;
fi
local max_len="10" # Default max length.
if [ -n "$2" ]; then
max_len="$2"
fi
local speed="1" # Default roll speed in chars per second.
if [ -n "$3" ]; then
speed="$3"
fi
# Skip rolling if the output is less than max_len.
if [ "${#text}" -le "$max_len" ]; then
echo "$text"
return
fi
# Anything starting with 0 is an Octal number in Shell,C or Perl,
# so we must explicitly state the base of a number using base#number
local offset=$((10#$(date +%s) * ${speed} % ${#text}))
# Truncate text.
text=${text:offset}
local char # Character.
local bytes # The bytes of one character.
local index
for ((index=0; index < max_len; index++)); do
char=${text:index:1}
bytes=$(echo -n $char | wc -c)
# The character will takes twice space
# of an alphabet if (bytes > 1).
if ((bytes > 1)); then
max_len=$((max_len - 1))
fi
done
text=${text:0:max_len}
#echo "index=${index} max=${max_len} len=${#text}"
# How many spaces we need to fill to keep
# the length of text that will be shown?
local fill_count=$((${index} - ${#text}))
for ((index=0; index < fill_count; index++)); do
text="${text} "
done
echo "${text}"
}

View File

@ -0,0 +1,12 @@
# Get the current path in the segment.
get_tmux_cwd() {
local env_name=$(tmux display -p "TMUXPWD_#D" | tr -d %)
local env_val=$(tmux show-environment | grep --color=never "$env_name")
# The version below is still quite new for tmux. Uncomment this in the future :-)
#local env_val=$(tmux show-environment "$env_name" 2>&1)
if [[ ! $env_val =~ "unknown variable" ]]; then
local tmux_pwd=$(echo "$env_val" | sed 's/^.*=//')
echo "$tmux_pwd"
fi
}

View File

@ -0,0 +1,10 @@
#!/usr/bin/env bash
export TMUX_POWERLINE_DIR_HOME="$(dirname $0)"
source "${TMUX_POWERLINE_DIR_HOME}/config/paths.sh"
source "${TMUX_POWERLINE_DIR_LIB}/muting.sh"
source "${TMUX_POWERLINE_DIR_LIB}/arg_processing.sh"
side="$1"
check_arg_side "$side"
toggle_powerline_mute_status "$side"

22
tmux/powerline/powerline.sh Executable file
View File

@ -0,0 +1,22 @@
#!/usr/bin/env bash
export TMUX_POWERLINE_DIR_HOME="$(dirname $0)"
source "${TMUX_POWERLINE_DIR_HOME}/config/helpers.sh"
source "${TMUX_POWERLINE_DIR_HOME}/config/paths.sh"
source "${TMUX_POWERLINE_DIR_HOME}/config/shell.sh"
source "${TMUX_POWERLINE_DIR_HOME}/config/defaults.sh"
source "${TMUX_POWERLINE_DIR_LIB}/arg_processing.sh"
source "${TMUX_POWERLINE_DIR_LIB}/formatting.sh"
source "${TMUX_POWERLINE_DIR_LIB}/muting.sh"
source "${TMUX_POWERLINE_DIR_LIB}/powerline.sh"
source "${TMUX_POWERLINE_DIR_LIB}/rcfile.sh"
if ! powerline_muted "$1"; then
process_settings
check_arg_side "$1"
print_powerline "$1"
fi
exit 0

View File

@ -0,0 +1,18 @@
# Build the small MPD NP program.
# Enable debug printing with $ make -e DEBUG=1
DEBUG=0
CC = $(shell hash clang 2>/dev/null && echo clang || echo gcc)
CFLAGS = -O3 -Wall -std=c99 -I /usr/include/ -D DEBUG=${DEBUG}
LDLIBS = -lmpdclient
XKB_LAYOUT_LDLIBS= -lX11
.PHONY: all clean
all: np_mpd xkb_layout
xkb_layout: xkb_layout.c
$(CC) $(CFLAGS) $(LDFLAGS) $< $(XKB_LAYOUT_LDLIBS) -o $@
clean:
$(RM) np_mpd
$(RM) xkb_layout

View File

@ -0,0 +1,150 @@
# LICENSE This code is not under the same license as the rest of the project as it's "stolen". It's cloned from https://github.com/richoH/dotfiles/blob/master/bin/battery and just some modifications are done so it works for my laptop. Check that URL for more recent versions.
TMUX_POWERLINE_SEG_BATTERY_TYPE_DEFAULT="percentage"
TMUX_POWERLINE_SEG_BATTERY_NUM_HEARTS_DEFAULT=5
HEART_FULL="♥"
HEART_EMPTY="♡"
generate_segmentrc() {
read -d '' rccontents << EORC
# How to display battery remaining. Can be {percentage, cute}.
export TMUX_POWERLINE_SEG_BATTERY_TYPE="${TMUX_POWERLINE_SEG_BATTERY_TYPE_DEFAULT}"
# How may hearts to show if cute indicators are used.
export TMUX_POWERLINE_SEG_BATTERY_NUM_HEARTS="${TMUX_POWERLINE_SEG_BATTERY_NUM_HEARTS_DEFAULT}"
EORC
echo "$rccontents"
}
run_segment() {
__process_settings
if shell_is_osx; then
battery_status=$(__battery_osx)
else
battery_status=$(__battery_linux)
fi
[ -z "$battery_status" ] && return
case "$TMUX_POWERLINE_SEG_BATTERY_TYPE" in
"percentage")
output="${HEART_FULL} ${battery_status}%"
;;
"cute")
output=$(__cutinate $battery_status)
esac
if [ -n "$output" ]; then
echo "$output"
fi
}
__process_settings() {
if [ -z "$TMUX_POWERLINE_SEG_BATTERY_TYPE" ]; then
export TMUX_POWERLINE_SEG_BATTERY_TYPE="${TMUX_POWERLINE_SEG_BATTERY_TYPE_DEFAULT}"
fi
if [ -z "$TMUX_POWERLINE_SEG_BATTERY_NUM_HEARTS" ]; then
export TMUX_POWERLINE_SEG_BATTERY_NUM_HEARTS="${TMUX_POWERLINE_SEG_BATTERY_NUM_HEARTS_DEFAULT}"
fi
}
__battery_osx() {
ioreg -c AppleSmartBattery -w0 | \
grep -o '"[^"]*" = [^ ]*' | \
sed -e 's/= //g' -e 's/"//g' | \
sort | \
while read key value; do
case $key in
"MaxCapacity")
export maxcap=$value;;
"CurrentCapacity")
export curcap=$value;;
"ExternalConnected")
export extconnect=$value;;
"FullyCharged")
export fully_charged=$value;;
esac
if [[ -n $maxcap && -n $curcap && -n $extconnect ]]; then
if [[ "$curcap" == "$maxcap" || "$fully_charged" == "Yes" && $extconnect == "Yes" ]]; then
return
fi
charge=`pmset -g batt | grep -o "[0-9][0-9]*\%" | rev | cut -c 2- | rev`
if [[ "$extconnect" == "Yes" ]]; then
echo "$charge"
else
if [[ $charge -lt 50 ]]; then
echo -n "#[fg=red]"
fi
echo "$charge"
fi
break
fi
done
}
__battery_linux() {
case "$SHELL_PLATFORM" in
"linux")
BATPATH=/sys/class/power_supply/BAT0
if [ ! -d $BATPATH ]; then
BATPATH=/sys/class/power_supply/BAT1
fi
STATUS=$BATPATH/status
BAT_FULL=$BATPATH/charge_full
if [ ! -r $BAT_FULL ]; then
BAT_FULL=$BATPATH/energy_full
fi
BAT_NOW=$BATPATH/charge_now
if [ ! -r $BAT_NOW ]; then
BAT_NOW=$BATPATH/energy_now
fi
if [ "$1" = `cat $STATUS` -o "$1" = "" ]; then
__linux_get_bat
fi
;;
"bsd")
STATUS=`sysctl -n hw.acpi.battery.state`
case $1 in
"Discharging")
if [ $STATUS -eq 1 ]; then
__freebsd_get_bat
fi
;;
"Charging")
if [ $STATUS -eq 2 ]; then
__freebsd_get_bat
fi
;;
"")
__freebsd_get_bat
;;
esac
;;
esac
}
__cutinate() {
perc=$1
inc=$(( 100 / $TMUX_POWERLINE_SEG_BATTERY_NUM_HEARTS ))
for i in `seq $TMUX_POWERLINE_SEG_BATTERY_NUM_HEARTS`; do
if [ $perc -lt 99 ]; then
echo -n $HEART_EMPTY
else
echo -n $HEART_FULL
fi
echo -n " "
perc=$(( $perc + $inc ))
done
}
__linux_get_bat() {
bf=$(cat $BAT_FULL)
bn=$(cat $BAT_NOW)
echo $(( 100 * $bn / $bf ))
}
__freebsd_get_bat() {
echo "$(sysctl -n hw.acpi.battery.life)"
}

22
tmux/powerline/segments/cpu.sh Executable file
View File

@ -0,0 +1,22 @@
# Prints the CPU usage: user% sys% idle.
run_segment() {
if shell_is_linux; then
cpu_line=$(top -b -n 1 | grep "Cpu(s)" )
cpu_user=$(echo "$cpu_line" | grep -Po "(\d+(.\d+)?)(?=%?\s?(us(er)?))")
cpu_system=$(echo "$cpu_line" | grep -Po "(\d+(.\d+)?)(?=%?\s?(sys?))")
cpu_idle=$(echo "$cpu_line" | grep -Po "(\d+(.\d+)?)(?=%?\s?(id(le)?))")
elif shell_is_osx; then
cpus_line=$(top -e -l 1 | grep "CPU usage:" | sed 's/CPU usage: //')
cpu_user=$(echo "$cpus_line" | awk '{print $1}' | sed 's/%//' )
cpu_system=$(echo "$cpus_line" | awk '{print $3}'| sed 's/%//' )
cpu_idle=$(echo "$cpus_line" | awk '{print $5}' | sed 's/%//' )
fi
if [ -n "$cpu_user" ] && [ -n "$cpu_system" ] && [ -n "$cpu_idle" ]; then
echo "${cpu_user}, ${cpu_system}, ${cpu_idle}" | awk -F', ' '{printf("%5.1f,%5.1f,%5.1f",$1,$2,$3)}'
return 0
else
return 1
fi
}

23
tmux/powerline/segments/date.sh Executable file
View File

@ -0,0 +1,23 @@
# Print the current date.
TMUX_POWERLINE_SEG_DATE_FORMAT_DEFAULT="%F"
generate_segmentrc() {
read -d '' rccontents << EORC
# date(1) format for the date. If you don't, for some reason, like ISO 8601 format you might want to have "%D" or "%m/%d/%Y".
export TMUX_POWERLINE_SEG_DATE_FORMAT="${TMUX_POWERLINE_SEG_DATE_FORMAT_DEFAULT}"
EORC
echo "$rccontents"
}
__process_settings() {
if [ -z "$TMUX_POWERLINE_SEG_DATE_FORMAT" ]; then
export TMUX_POWERLINE_SEG_DATE_FORMAT="${TMUX_POWERLINE_SEG_DATE_FORMAT_DEFAULT}"
fi
}
run_segment() {
__process_settings
date +"$TMUX_POWERLINE_SEG_DATE_FORMAT"
return 0
}

View File

@ -0,0 +1,6 @@
# Prints the name of the current day.
run_segment() {
date +"%a"
return 0
}

View File

@ -0,0 +1,173 @@
# Prints the most recent earthquake (currently only supports japan)
# It prints the location, time, and magnitude if the quake happened within
# a timelimit and magnitude threshold
earthquake_symbol='#[fg=colour1]~'
# The update period in seconds.
update_period=600
TMUX_POWERLINE_SEG_EARTHQUAKE_DATA_PROVIDER_DEFAULT="goo"
TMUX_POWERLINE_SEG_EARTHQUAKE_UPDATE_PERIOD_DEFAULT="600"
TMUX_POWERLINE_SEG_EARTHQUAKE_ALERT_TIME_WINDOW_DEFAULT="60"
TMUX_POWERLINE_SEG_EARTHQUAKE_TIME_FORMAT_DEFAULT='(%H:%M)'
TMUX_POWERLINE_SEG_EARTHQUAKE_MIN_MAGNITUDE_DEFAULT='3'
generate_segmentrc() {
read -d '' rccontents << EORC
# The data provider to use. Currently only "goo" is supported.
export TMUX_POWERLINE_SEG_EARTHQUAKE_DATA_PROVIDER="${TMUX_POWERLINE_SEG_EARTHQUAKE_DATA_PROVIDER_DEFAULT}"
# How often to update the earthquake data in seconds.
# Note: This is not an early warning detector, use this
# to be informed about recent earthquake magnitudes in your
# area. If this is too often, goo may decide to ban you form
# their server
export TMUX_POWERLINE_SEG_EARTHQUAKE_UPDATE_PERIOD="${TMUX_POWERLINE_SEG_EARTHQUAKE_UPDATE_PERIOD_DEFAULT}"
# Only display information when earthquakes are within this many minutes
export TMUX_POWERLINE_SEG_EARTHQUAKE_ALERT_TIME_WINDOW="${TMUX_POWERLINE_SEG_EARTHQUAKE_ALERT_TIME_WINDOW_DEFAULT}"
# Display time with this format
export TMUX_POWERLINE_SEG_EARTHQUAKE_TIME_FORMAT='${TMUX_POWERLINE_SEG_EARTHQUAKE_TIME_FORMAT_DEFAULT}'
# Display only if magnitude is greater or equal to this number
export TMUX_POWERLINE_SEG_EARTHQUAKE_MIN_MAGNITUDE="${TMUX_POWERLINE_SEG_EARTHQUAKE_MIN_MAGNITUDE_DEFAULT}"
EORC
echo "$rccontents"
}
run_segment() {
__process_settings
local tmp_file="${TMUX_POWERLINE_DIR_TEMPORARY}/earthquake.txt"
local earthquake
case "$TMUX_POWERLINE_SEG_EARTHQUAKE_DATA_PROVIDER" in
"goo") earthquake=$(__goo_earthquake) ;;
*)
echo "Unknown earthquake-information provider [${$TMUX_POWERLINE_SEG_EARTHQUAKE_DATA_PROVIDER}]";
return 1
esac
if [ -n "$earthquake" ]; then
echo "$earthquake_symbol #[fg=colour237]${earthquake}"
fi
}
__process_settings() {
if [ -z "$TMUX_POWERLINE_SEG_EARTHQUAKE_DATA_PROVIDER" ]; then
export TMUX_POWERLINE_SEG_EARTHQUAKE_DATA_PROVIDER="${TMUX_POWERLINE_SEG_EARTHQUAKE_DATA_PROVIDER_DEFAULT}"
fi
if [ -z "$TMUX_POWERLINE_SEG_EARTHQUAKE_UPDATE_PERIOD" ]; then
export TMUX_POWERLINE_SEG_EARTHQUAKE_UPDATE_PERIOD="${TMUX_POWERLINE_SEG_EARTHQUAKE_UPDATE_PERIOD_DEFAULT}"
fi
if [ -z "$TMUX_POWERLINE_SEG_EARTHQUAKE_ALERT_TIME_WINDOW" ]; then
export TMUX_POWERLINE_SEG_EARTHQUAKE_ALERT_TIME_WINDOW="${TMUX_POWERLINE_SEG_EARTHQUAKE_ALERT_TIME_WINDOW_DEFAULT}"
fi
if [ -z "$TMUX_POWERLINE_SEG_EARTHQUAKE_TIME_FORMAT" ]; then
export TMUX_POWERLINE_SEG_EARTHQUAKE_TIME_FORMAT="${TMUX_POWERLINE_SEG_EARTHQUAKE_TIME_FORMAT_DEFAULT}"
fi
if [ -z "$TMUX_POWERLINE_SEG_EARTHQUAKE_MIN_MAGNITUDE" ]; then
export TMUX_POWERLINE_SEG_EARTHQUAKE_MIN_MAGNITUDE="${TMUX_POWERLINE_SEG_EARTHQUAKE_MIN_MAGNITUDE_DEFAULT}"
fi
}
__goo_earthquake() {
location=""
magnitude=""
magnitude_number=""
timestamp=""
if [[ -f "$tmp_file" ]]; then
if shell_is_osx || shell_is_bsd; then
last_update=$(stat -f "%m" ${tmp_file})
elif shell_is_linux; then
last_update=$(stat -c "%Y" ${tmp_file})
fi
time_now=$(date +%s)
up_to_date=$(echo "(${time_now}-${last_update}) < ${update_period}" | bc)
if [ "$up_to_date" -eq 1 ]; then
__read_tmp_file
fi
fi
if [ -z "$magnitude" ]; then
# get the rss file, convert encoding to UTF-8, then delete windows carriage-returns
earthquake_data=$(curl --max-time 4 -s "http://weather.goo.ne.jp/earthquake/index.rdf" | iconv -f EUC-JP -t UTF-8 | tr -d "\r")
if [ "$?" -eq "0" ]; then
# This rss feed is not very clean or easy to use, but we will use it because
# this is all that can be found for now
# we grab the data from the title of the first item (most recent earthquake)
earthquake_data=${earthquake_data#*item\><title>}
# end our data at the end of the approx. time
earthquake_data=${earthquake_data%%頃*}
# pluck our data
location=$(echo $earthquake_data | awk '{print $2}')
magnitude=$(echo $earthquake_data | awk '{print $4}')
timestamp=${earthquake_data#*\(}
__convert_jp_magnitude
__convert_jp_timestamp
echo $location > $tmp_file
echo $magnitude >> $tmp_file
echo $timestamp >> $tmp_file
elif [ -f "$tmp_file" ]; then
__read_tmp_file
fi
fi
__convert_timestamp_to_fmt
# extract the numerical portion of magnitude
magnitude_number=$(echo $magnitude | sed -e 's/+//' -e 's/-//')
if [ -n "$magnitude" ]; then
if __check_alert_time_window && __check_min_magnitude ; then
echo "${location}${timestamp_fmt}:#[fg=colour0]${magnitude}"
fi
fi
}
__convert_jp_magnitude() {
magnitude=${magnitude#震度}
# simplify high-lower designation (only used in extreme cases: above 4)
if [[ "$magnitude" == *弱 ]] ; then
magnitude="-${magnitude%弱}"
elif [[ "$magnitude" == *強 ]] ; then
magnitude="+${magnitude%強}"
fi
}
__check_alert_time_window() {
[[ $(( ( $(date +%s) - $timestamp ) / 60 )) -lt $TMUX_POWERLINE_SEG_EARTHQUAKE_ALERT_TIME_WINDOW ]]
}
__check_min_magnitude() {
[[ $magnitude_number -ge $TMUX_POWERLINE_SEG_EARTHQUAKE_MIN_MAGNITUDE ]]
}
__convert_jp_timestamp() {
if shell_is_osx ; then
timestamp=$(date -j -f "%Y年%m月%d日 %H時%M分" "$timestamp" +"%s")
else
timestamp=$(echo $timestamp | $sed -e 's/年/-/' -e 's/月/-/' -e 's/日//' -e 's/時/:/' -e 's/分//')
timestamp=$(date -d "$timestamp" +"%s")
fi
}
__convert_timestamp_to_fmt() {
if shell_is_osx ; then
timestamp_fmt=$(date -r "$timestamp" +"$TMUX_POWERLINE_SEG_EARTHQUAKE_TIME_FORMAT")
else
timestamp_fmt=$(date -d "$timestamp" +"$TMUX_POWERLINE_SEG_EARTHQUAKE_TIME_FORMAT")
fi
}
__read_tmp_file() {
if [ ! -f "$tmp_file" ]; then
return
fi
IFS_bak="$IFS"
IFS=$'\n'
lines=($(cat ${tmp_file}))
IFS="$IFS_bak"
location="${lines[0]}"
magnitude="${lines[1]}"
timestamp="${lines[2]}"
}

View File

@ -0,0 +1,31 @@
# Prints the hostname.
TMUX_POWERLINE_SEG_HOSTNAME_FORMAT_DEFAULT="short"
generate_segmentrc() {
read -d '' rccontents << EORC
# Use short or long format for the hostname. Can be {"short, long"}.
export TMUX_POWERLINE_SEG_HOSTNAME_FORMAT="${TMUX_POWERLINE_SEG_HOSTNAME_FORMAT_DEFAULT}"
EORC
echo "$rccontents"
}
__process_settings() {
if [ -z "$TMUX_POWERLINE_SEG_HOSTNAME_FORMAT" ]; then
export TMUX_POWERLINE_SEG_HOSTNAME_FORMAT="${TMUX_POWERLINE_SEG_HOSTNAME_FORMAT_DEFAULT}"
fi
}
run_segment() {
__process_settings
local opts=""
if [ "$TMUX_POWERLINE_SEG_HOSTNAME_FORMAT" == "short" ]; then
if shell_is_osx || shell_is_bsd; then
opts="-s"
else
opts="--short"
fi
fi
hostname ${opts}
return 0
}

View File

@ -0,0 +1,39 @@
# Show network statistics for all active interfaces found.
run_segment() {
type ifstat >/dev/null 2>&1
if [ "$?" -ne 0 ]; then
return 1
fi
sed="sed"
type gsed >/dev/null 2>&1
if [ "$?" -eq 0 ]; then
sed="gsed"
fi
data=$(ifstat -z -S -q 1 1)
interfaces=$(echo -e "${data}" | head -n 1)
flow_data=$(echo -e "${data}" | tail -n 1 | ${sed} "s/\s\{1,\}/,/g")
index=1
for inf in ${interfaces}; do
type=""
case ${inf} in
eth*) type="⎆"
;;
wlan*) type="☫"
;;
en*) type=" "
;;
esac
if [ -n "${type}" ]; then
format=$(echo "${format} ${type} ⇊ %5.01f ⇈ %5.01f")
holder=$(echo "${holder},\$$((index)),\$$((index+1))")
fi
index=$((index+2))
done
if [ -n "${format}" ]; then
echo $(echo "${flow_data#,}" | awk -F"," "{printf(\"${format}\"${holder})}")
fi
return 0
}

View File

@ -0,0 +1,42 @@
# Show if stats by sampling /sys/.
# Originally stolen from http://unix.stackexchange.com/questions/41346/upload-download-speed-in-tmux-status-line
run_segment() {
sleeptime="0.5"
if shell_is_osx; then
iface="en0"
type="⎆" # "☫" for wlan
RXB=$(netstat -i -b | grep -m 1 $iface | awk '{print $7}')
TXB=$(netstat -i -b | grep -m 1 $iface | awk '{print $10}')
sleep "$sleeptime"
RXBN=$(netstat -i -b | grep -m 1 $iface | awk '{print $7}')
TXBN=$(netstat -i -b | grep -m 1 $iface | awk '{print $10}')
else
iface="eth0"
type="⎆" # "☫" for wlan
RXB=$(</sys/class/net/"$iface"/statistics/rx_bytes)
TXB=$(</sys/class/net/"$iface"/statistics/tx_bytes)
sleep "$sleeptime"
RXBN=$(</sys/class/net/"$iface"/statistics/rx_bytes)
TXBN=$(</sys/class/net/"$iface"/statistics/tx_bytes)
fi
RXDIF=$(echo "$((RXBN - RXB)) / 1024 / ${sleeptime}" | bc )
TXDIF=$(echo "$((TXBN - TXB)) / 1024 / ${sleeptime}" | bc )
if [ $RXDIF -gt 1024 ]; then
RXDIF=$(echo "scale=1;${RXDIF} / 1024" | bc)
RXDIF_UNIT="M/s"
else
RXDIF_UNIT="K/s"
fi
if [ $TXDIF -gt 1024 ]; then
TXDIF=$(echo "scale=1;${TXDIF} / 1024" | bc)
TXDIF_UNIT="M/s"
else
TXDIF_UNIT="K/s"
fi
# NOTE: '%5.01' for fixed length always
printf "${type} ⇊ %5.01f${RXDIF_UNIT} ⇈ %5.01f${TXDIF_UNIT}" ${RXDIF} ${TXDIF}
return 0
}

View File

@ -0,0 +1,32 @@
# Prints the local network IPv4 address for a statically defined NIC or search for an IPv4 address on all active NICs.
run_segment() {
if shell_is_bsd || shell_is_osx ; then
all_nics=$(ifconfig 2>/dev/null | awk -F':' '/^[a-z]/ && !/^lo/ { print $1 }')
for nic in ${all_nics[@]}; do
ipv4s_on_nic=$(ifconfig ${nic} 2>/dev/null | awk '$1 == "inet" { print $2 }')
for lan_ip in ${ipv4s_on_nic[@]}; do
[[ -n "${lan_ip}" ]] && break
done
[[ -n "${lan_ip}" ]] && break
done
else
# Get the names of all attached NICs.
all_nics="$(ip addr show | cut -d ' ' -f2 | tr -d :)"
all_nics=(${all_nics[@]//lo/}) # Remove lo interface.
for nic in "${all_nics[@]}"; do
# Parse IP address for the NIC.
lan_ip="$(ip addr show ${nic} | grep '\<inet\>' | tr -s ' ' | cut -d ' ' -f3)"
# Trim the CIDR suffix.
lan_ip="${lan_ip%/*}"
# Only display the last entry
lan_ip="$(echo "$lan_ip" | tail -1)"
[ -n "$lan_ip" ] && break
done
fi
echo "${lan_ip-N/a}"
return 0
}

View File

@ -0,0 +1,6 @@
# Print the average load.
run_segment() {
uptime | cut -d "," -f 3- | cut -d ":" -f2 | sed -e "s/^[ \t]*//"
exit 0
}

View File

@ -0,0 +1,204 @@
# Report mail count for your mailbox type
TMUX_POWERLINE_SEG_MAILCOUNT_MAILDIR_INBOX_DEFAULT="$HOME/.mail/inbox/new"
TMUX_POWERLINE_SEG_MAILCOUNT_MBOX_INBOX_DEFAULT="${MAIL}"
TMUX_POWERLINE_SEG_MAILCOUNT_MAILCHECKRC_DEFAULT="${HOME}/.mailcheckrc"
TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_SERVER_DEFAULT="gmail.com"
TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_INTERVAL_DEFAULT="5"
generate_segmentrc() {
read -d '' rccontents << EORC
# Mailbox type to use. Can be any of {apple_mail, gmail, maildir, mbox, mailcheck}
export TMUX_POWERLINE_SEG_MAILCOUNT_MAILBOX_TYPE=""
## Gmail
# Enter your Gmail username here WITH OUT @gmail.com.( OR @domain)
export TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_USERNAME=""
# Google password. Recomenned to use application specific password (https://accounts.google.com/b/0/IssuedAuthSubTokens) Leave this empty to get password from OS X keychain.
# For OSX users : MAKE SURE that you add a key to the keychain in the format as follows
# Keychain Item name : http://<value-you-fill-in-server-variable-below>
# Account name : <username-below>@<server-below>
# Password : Your password ( Once again, try to use 2 step-verification and application-specific password)
# See http://support.google.com/accounts/bin/answer.py?hl=en&answer=185833 for more info.
export TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_PASSWORD=""
# Domain name that will complete your email. For normal GMail users it probably is "gmail.com but can be "foo.tld" for Google Apps users.
export TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_SERVER="${TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_SERVER_DEFAULT}"
# How often in minutes to check for new mails.
export TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_INTERVAL="${TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_INTERVAL_DEFAULT}"
## Maildir
# Path to the maildir to check.
export TMUX_POWERLINE_SEG_MAILCOUNT_MAILDIR_INBOX="${TMUX_POWERLINE_SEG_MAILCOUNT_MAILDIR_INBOX_DEFAULT}"
## mbox
# Path to the mbox to check.
export TMUX_POWERLINE_SEG_MAILCOUNT_MBOX_INBOX="${TMUX_POWERLINE_SEG_MAILCOUNT_MBOX_INBOX_DEFAULT}"
## mailcheck
# Optional path to mailcheckrc
export TMUX_POWERLINE_SEG_MAILCOUNT_MAILCHECKRC="${TMUX_POWERLINE_SEG_MAILCOUNT_MAILCHECKRC_DEFAULT}"
EORC
echo "${rccontents}"
}
__process_settings() {
if [ -z "$TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_SERVER" ]; then
export TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_SERVER="${TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_SERVER_DEFAULT}"
fi
if [ -z "$TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_INTERVAL" ]; then
export TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_INTERVAL="${TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_INTERVAL_DEFAULT}"
fi
eval TMUX_POWERLINE_SEG_MAILCOUNT_MBOX_INBOX="$TMUX_POWERLINE_SEG_MAILCOUNT_MBOX_INBOX"
if [ -z "$TMUX_POWERLINE_SEG_MAILCOUNT_MAILDIR_INBOX" ]; then
export TMUX_POWERLINE_SEG_MAILCOUNT_MAILDIR_INBOX="${TMUX_POWERLINE_SEG_MAILCOUNT_MAILDIR_INBOX_DEFAULT}"
fi
eval TMUX_POWERLINE_SEG_MAILCOUNT_MAILDIR_INBOX="$TMUX_POWERLINE_SEG_MAILCOUNT_MAILDIR_INBOX"
if [ -z "${TMUX_POWERLINE_SEG_MAILCOUNT_MBOX_INBOX}" ]; then
export TMUX_POWERLINE_SEG_MAILCOUNT_MBOX_INBOX="${TMUX_POWERLINE_SEG_MAILCOUNT_MBOX_INBOX_DEFAULT}"
fi
eval TMUX_POWERLINE_SEG_MAILCOUNT_MAILCHECKRC="$TMUX_POWERLINE_SEG_MAILCOUNT_MAILCHECKRC"
if [ -z "${TMUX_POWERLINE_SEG_MAILCOUNT_MAILCHECKRC}" ]; then
export TMUX_POWERLINE_SEG_MAILCOUNT_MAILCHECKRC="${TMUX_POWERLINE_SEG_MAILCOUNT_MAILCHECKRC_DEFAULT}"
fi
}
run_segment() {
__process_settings
if [ -z "$TMUX_POWERLINE_SEG_MAILCOUNT_MAILBOX_TYPE" ]; then
return 2
fi
local count
case "$TMUX_POWERLINE_SEG_MAILCOUNT_MAILBOX_TYPE" in
"apple_mail") count=$(__count_apple_mail) ;;
"gmail") count=$(__count_gmail) ;;
"maildir") count=$(__count_maildir) ;;
"mbox") count=$(__count_mbox) ;;
"mailcheck") count=$(__count_mailcheck) ;;
*)
echo "Unknown mailbox type [${TMUX_POWERLINE_SEG_MAILCOUNT_MAILBOX_TYPE}]";
return 1
esac
local exitcode="$?"
if [ "$exitcode" -ne 0 ]; then
return $exitcode
fi
if [[ -n "$count" && "$count" -gt 0 ]]; then
echo "${count}"
fi
return 0
}
__count_apple_mail() {
count=$(${TMUX_POWERLINE_DIR_SEGMENTS}/mailcount_apple_mail.script)
echo "$count"
}
__count_gmail() {
local tmp_file="${TMUX_POWERLINE_DIR_TEMPORARY}/gmail_count.txt"
local tmp_wgetrc="${TMUX_POWERLINE_DIR_TEMPORARY}/tmp_wgetrc.txt"
local override_passget="false" # When true a force reloaded will be done.
# Create the cache file if it doesn't exist.
if [ ! -f "$tmp_file" ]; then
touch $tmp_file
override_passget=true
fi
# Refresh mail count if the tempfile is older than $interval minutes.
let interval=60*$TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_INTERVAL
if shell_is_osx || shell_is_bsd; then
last_update=$(stat -f "%m" ${tmp_file})
elif shell_is_linux; then
last_update=$(stat -c "%Y" ${tmp_file})
fi
if [ "$(( $(date +"%s") - ${last_update} ))" -gt "$interval" ] || [ "$override_passget" == true ]; then
if [ -z "$TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_PASSWORD" ]; then # Get password from keychain if it isn't already set.
if shell_is_osx; then
__mac_keychain_get_pass "${TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_USERNAME}@${TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_SERVER}" "$TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_SERVER"
else
echo "Implement your own sexy password fetching mechanism here."
return 1
fi
fi
# Check for wget before proceeding.
which wget 2>&1 > /dev/null
if [ $? -ne 0 ]; then
echo "This script requires wget." 1>&2
return 1
fi
# Hide password from command line (visible with e.g. ps(1)).
echo -e "user=${TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_USERNAME}@${TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_SERVER}\npassword=${TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_PASSWORD}" > "$tmp_wgetrc"
mail=$(wget -q -O - https://mail.google.com/a/${TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_SERVER}/feed/atom --config "$tmp_wgetrc" | grep -E -m 1 -o '<fullcount>(.*)</fullcount>' | sed -e 's,.*<fullcount>\([^<]*\)</fullcount>.*,\1,g')
rm "$tmp_wgetrc"
if [ "$mail" != "" ]; then
echo $mail > $tmp_file
else
return 1
fi
fi
count=$(cat $tmp_file)
echo "$count"
return 0;
}
__count_maildir() {
if [ ! -d "$TMUX_POWERLINE_SEG_MAILCOUNT_MAILDIR_INBOX" ]; then
return 1
fi
count=$(ls "$TMUX_POWERLINE_SEG_MAILCOUNT_MAILDIR_INBOX" | wc -l)
# Fix for mac, otherwise whitespace is left in output
if shell_is_osx; then
count=$(echo "$count" | sed -e "s/^[ \t]*//")
fi
echo "$count"
return 0;
}
__count_mbox() {
if [ ! -f "${TMUX_POWERLINE_SEG_MAILCOUNT_MBOX_INBOX}" ]; then
return 1
fi
# This matches the From_ line (see man 5 mbox) e.g.
# From noreply@github.com Sun Dec 2 03:52:25 2012
# See https://github.com/erikw/tmux-powerline/pull/91#issuecomment-10926053 for discussion.
count=$(grep -c '^From [^[:space:]]\+ ... ... .. ..:..:.. ....$' ${TMUX_POWERLINE_SEG_MAILCOUNT_MBOX_INBOX})
echo "$count"
return 0;
}
__mac_keychain_get_pass() {
result="$(security 2>&1 > /dev/null find-internet-password -ga $1 -s $2)"
if [ $? -eq 0 ]; then
TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_PASSWORD=$(echo "$result" | sed -e 's/password: \"\(.*\)\"/\1/g')
return 0
fi
return 1
}
__count_mailcheck() {
count=$(mailcheck -f ${TMUX_POWERLINE_SEG_MAILCOUNT_MAILCHECKRC} | awk '{ if (/new/) { print $3; exit } else { print 0; exit } }')
if [ $? -eq 0 ]; then
echo "$count"
return 0
fi
return 1;
}

View File

@ -0,0 +1,14 @@
#!/usr/bin/env osascript
# Returns the number of unread mails in the INBOX of Apple Mail.
tell application "System Events"
set process_list to (name of every process)
end tell
if process_list contains "Mail" then
tell application "Mail"
if unread count of inbox > 0 then
set a to unread count of inbox
end if
end tell
end if

View File

@ -0,0 +1,297 @@
# Print current playing song in your music player of choice.
source "${TMUX_POWERLINE_DIR_LIB}/text_roll.sh"
TMUX_POWERLINE_SEG_NOW_PLAYING_MAX_LEN_DEFAULT="40"
TMUX_POWERLINE_SEG_NOW_PLAYING_TRIM_METHOD_DEFAULT="trim"
TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SPEED_DEFAULT="2"
TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_HOST_DEFAULT="localhost"
TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_PORT_DEFAULT="6600"
TMUX_POWERLINE_SEG_NOW_PLAYING_LASTFM_UPDATE_PERIOD_DEFAULT="30"
TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_SIMPLE_FORMAT_DEFAULT="%artist% - %title%"
TMUX_POWERLINE_SEG_NOW_PLAYING_RHYTHMBOX_FORMAT_DEFAULT="%aa - %tt"
TMUX_POWERLINE_SEG_NOW_PLAYING_NOTE_CHAR_DEFAULT="♫"
generate_segmentrc() {
read -d '' rccontents << EORC
# Music player to use. Can be any of {audacious, banshee, cmus, itunes, lastfm, mocp, mpd, mpd_simple, pithos, rdio, rhythmbox, spotify, spotify_wine, file}.
export TMUX_POWERLINE_SEG_NOW_PLAYING_MUSIC_PLAYER=""
# File to be read in case the song is being read from a file
export TMUX_POWERLINE_SEG_NOW_PLAYING_FILE_NAME=""
# Maximum output length.
export TMUX_POWERLINE_SEG_NOW_PLAYING_MAX_LEN="${TMUX_POWERLINE_SEG_NOW_PLAYING_MAX_LEN_DEFAULT}"
# How to handle too long strings. Can be {trim, roll}.
export TMUX_POWERLINE_SEG_NOW_PLAYING_TRIM_METHOD="${TMUX_POWERLINE_SEG_NOW_PLAYING_TRIM_METHOD_DEFAULT}"
# Charcters per second to roll if rolling trim method is used.
export TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SPEED="${TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SPEED_DEFAULT}"
# Hostname for MPD server in the format "[password@]host"
export TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_HOST="${TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_HOST_DEFAULT}"
# Port the MPD server is running on.
export TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_PORT="${TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_PORT_DEFAULT}"
# Song display format for mpd_simple. See mpc(1) for delimiters.
export TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_SIMPLE_FORMAT="${TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_SIMPLE_FORMAT_DEFAULT}"
# Song display format for rhythmbox. see "FORMATS" in rhythmbox-client(1).
export TMUX_POWERLINE_SEG_NOW_PLAYING_RHYTHMBOX_FORMAT="${TMUX_POWERLINE_SEG_NOW_PLAYING_RHYTHMBOX_FORMAT_DEFAULT}"
# Username for Last.fm if that music player is used.
export TMUX_POWERLINE_SEG_NOW_PLAYING_LASTFM_USERNAME=""
# How often in seconds to update the data from last.fm.
export TMUX_POWERLINE_SEG_NOW_PLAYING_LASTFM_UPDATE_PERIOD="${TMUX_POWERLINE_SEG_NOW_PLAYING_LASTFM_UPDATE_PERIOD_DEFAULT}"
# Fancy char to display before now playing track
export TMUX_POWERLINE_SEG_NOW_PLAYING_NOTE_CHAR="${TMUX_POWERLINE_SEG_NOW_PLAYING_NOTE_CHAR_DEFAULT}"
EORC
echo "$rccontents"
}
run_segment() {
__process_settings
if [ -z "$TMUX_POWERLINE_SEG_NOW_PLAYING_MUSIC_PLAYER" ]; then
return 1
fi
local np
local app_exit
IFS=',' read -ra PLAYERS <<< "$TMUX_POWERLINE_SEG_NOW_PLAYING_MUSIC_PLAYER"
for i in "${PLAYERS[@]}"; do
case "$i" in
"audacious") np=$(__np_audacious) ;;
"banshee") np=$(__np_banshee) ;;
"cmus") np=$(__np_cmus) ;;
"itunes") np=$(__np_itunes) ;;
"lastfm") np=$(__np_lastfm) ;;
"mocp") np=$(__np_mocp) ;;
"mpd") np=$(__np_mpd) ;;
"mpd_simple") np=$(__np_mpd_simple) ;;
"pithos") np=$(__np_pithos) ;;
"rdio") np=$(__np_rdio) ;;
"rhythmbox") np=$(__np_rhythmbox) ;;
"spotify") np=$(__np_spotify) ;;
"file") np=$(__np_file) ;;
"spotify_wine") np=$(__np_spotify_native) ;;
*)
echo "Unknown music player type [${TMUX_POWERLINE_SEG_NOW_PLAYING_MUSIC_PLAYER}]";
return 1
esac
app_exit="$?"
[ -n "$np" ] && break
done
local exitcode="$app_exit"
if [ "${exitcode}" -ne 0 ]; then
return ${exitcode}
fi
if [ -n "$np" ]; then
case "$TMUX_POWERLINE_SEG_NOW_PLAYING_TRIM_METHOD" in
"roll")
np=$(roll_text "${np}" ${TMUX_POWERLINE_SEG_NOW_PLAYING_MAX_LEN} ${TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SPEED_DEFAULT})
;;
"trim")
np=${np:0:TMUX_POWERLINE_SEG_NOW_PLAYING_MAX_LEN}
;;
esac
echo "${TMUX_POWERLINE_SEG_NOW_PLAYING_NOTE_CHAR} ${np}"
fi
return 0
}
__process_settings() {
if [ -z "$TMUX_POWERLINE_SEG_NOW_PLAYING_MAX_LEN" ]; then
export TMUX_POWERLINE_SEG_NOW_PLAYING_MAX_LEN="${TMUX_POWERLINE_SEG_NOW_PLAYING_MAX_LEN_DEFAULT}"
fi
if [ -z "$TMUX_POWERLINE_SEG_NOW_PLAYING_TRIM_METHOD" ]; then
export TMUX_POWERLINE_SEG_NOW_PLAYING_TRIM_METHOD="${TMUX_POWERLINE_SEG_NOW_PLAYING_TRIM_METHOD_DEFAULT}"
fi
if [ -z "$TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SPEED" ]; then
export TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SPEED="${TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SPEED_DEFAULT}"
fi
if [ -z "$TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_HOST" ]; then
export TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_HOST="${TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_HOST_DEFAULT}"
fi
if [ -z "$TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_PORT" ]; then
export TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_PORT="${TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_PORT_DEFAULT}"
fi
if [ -z "$TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_SIMPLE_FORMAT" ]; then
export TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_SIMPLE_FORMAT="${TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_SIMPLE_FORMAT_DEFAULT}"
fi
if [ -z "$TMUX_POWERLINE_SEG_NOW_PLAYING_LASTFM_UPDATE_PERIOD" ]; then
export TMUX_POWERLINE_SEG_NOW_PLAYING_LASTFM_UPDATE_PERIOD="${TMUX_POWERLINE_SEG_NOW_PLAYING_LASTFM_UPDATE_PERIOD_DEFAULT}"
fi
if [ -z "$TMUX_POWERLINE_SEG_NOW_PLAYING_NOTE_CHAR" ]; then
export TMUX_POWERLINE_SEG_NOW_PLAYING_NOTE_CHAR="${TMUX_POWERLINE_SEG_NOW_PLAYING_NOTE_CHAR_DEFAULT}"
fi
if [ -z "$TMUX_POWERLINE_SEG_NOW_PLAYING_RHYTHMBOX_FORMAT" ]; then
export TMUX_POWERLINE_SEG_NOW_PLAYING_RHYTHMBOX_FORMAT="${TMUX_POWERLINE_SEG_NOW_PLAYING_RHYTHMBOX_FORMAT}"
fi;
}
__np_mpd() {
cd "$TMUX_POWERLINE_DIR_SEGMENTS"
if [ ! -x "np_mpd" ]; then
make clean np_mpd &>/dev/null
fi
if [ ! -x "np_mpd" ]; then
return 2
fi
np=$(MPD_HOST="$TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_HOST" MPD_PORT="$TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_PORT" ./np_mpd)
echo "$np"
}
__np_file() {
np=$(cat $TMUX_POWERLINE_SEG_NOW_PLAYING_FILE_NAME | tr '\n' '|')
echo "$np"
}
__np_mpd_simple() {
np=$(MPD_HOST="$TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_HOST" MPD_PORT="$TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_PORT" mpc current -f "$TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_SIMPLE_FORMAT" 2>&1)
if [ $? -eq 0 ] && [ -n "$np" ]; then
mpc | grep "paused" > /dev/null
if [ $? -eq 0 ]; then
return 1
fi
echo "$np"
fi
}
__np_audacious() {
audacious_pid=$(pidof audacious)
if [ -n "$audacious_pid" ]; then
if $(audtool playback-playing); then
np=$(audtool current-song)
echo "$np"
fi
fi
}
__np_banshee() {
banshee_pid=$(pidof banshee)
if [ -n "$banshee_pid" ]; then
banshee_status=$(banshee --query-current-state 2> /dev/null)
if [[ "$banshee_status" == "current-state: playing" ]]; then
np=$(banshee --query-artist --query-title | cut -d ":" -f2 | sed -e 's/ *$//g' -e 's/^ *//g'| sed -e ':a;N;$!ba;s/\n/ - /g' )
echo "$np"
fi
fi
}
__np_cmus() {
#cmus-remote returns EXIT_FAILURE/EXIT_SUCCESS depending on whether or not cmus is running.
if cmus-remote -Q > /dev/null 2>&1; then
status=$(cmus-remote -Q | grep "status" | cut -d ' ' -f 2)
artist=$(cmus-remote -Q | grep -m 1 "artist" | cut -d ' ' -f 3-)
title=$(cmus-remote -Q | grep "title" | cut -d ' ' -f 3-)
#The lines below works fine. Just uncomment them and add them
# in np below if you want the track number or album name.
#tracknumber=$(cmus-remote -Q | grep "tracknumber" | cut -d ' ' -f 3)
#album=$(cmus-remote -Q | grep "album" | cut -d ' ' -f 3-)
np=$(echo "${artist} - ${title}")
if [ "$status" == "playing" ]; then
echo "$np"
fi
fi
}
__np_itunes() {
[ ! shell_is_osx ] && return 1
np=$(${TMUX_POWERLINE_DIR_SEGMENTS}/np_itunes.script)
echo "$np"
}
__np_lastfm() {
local tmp_file="${TMUX_POWERLINE_DIR_TEMPORARY}/np_lastfm.txt"
if [ -f "$tmp_file" ]; then
if shell_is_osx || shell_is_bsd; then
last_update=$(stat -f "%m" ${tmp_file})
elif shell_is_linux; then
last_update=$(stat -c "%Y" ${tmp_file})
fi
time_now=$(date +%s)
up_to_date=$(echo "(${time_now}-${last_update}) < ${TMUX_POWERLINE_SEG_NOW_PLAYING_LASTFM_UPDATE_PERIOD}" | bc)
if [ "$up_to_date" -eq 1 ]; then
np=$(cat ${tmp_file})
fi
fi
if [ -z "$np" ]; then
np=$(curl --max-time 2 -s http://ws.audioscrobbler.com/1.0/user/${TMUX_POWERLINE_SEG_NOW_PLAYING_LASTFM_USERNAME}/recenttracks.txt | head -n 1 | sed -e 's/^[0-9]*,//' | sed 's/\xe2\x80\x93/-/')
if [ "$?" -eq "0" ] && [ -n "$np" ]; then
echo "${np}" > $tmp_file
fi
fi
echo "$np"
}
__np_pithos() {
if [ "$(dbus-send --reply-timeout=10 --print-reply --dest=net.kevinmehall.Pithos /net/kevinmehall/Pithos net.kevinmehall.Pithos.IsPlaying 2>/dev/null | grep boolean | cut -d' ' -f5)" == "true" ]; then
np=$(${TMUX_POWERLINE_DIR_SEGMENTS}/np_pithos.py)
echo "$np"
fi
}
__np_mocp() {
mocp_pid=$(pidof mocp)
if [ -n "$mocp_pid" ]; then
np=$(mocp -i | grep ^Title | sed "s/^Title://")
mocp_paused=$(mocp -i | grep ^State | sed "s/^State: //")
if [ -n "$np" -a "$mocp_paused" != "PAUSE" ]; then
echo "$np"
fi
fi
}
__np_rdio() {
[ ! shell_is_osx ] && return 1
np=$(osascript ${TMUX_POWERLINE_DIR_SEGMENTS}/np_rdio_mac.script)
echo "$np"
}
__np_rhythmbox() {
rhythmbox_pid=$(pidof rhythmbox)
if [ -n "$rhythmbox_pid" ]; then
np=$(rhythmbox-client --no-start --print-playing-format="$TMUX_POWERLINE_SEG_NOW_PLAYING_RHYTHMBOX_FORMAT")
rhythmbox_paused=$(xwininfo -root -tree | grep "$np" | sed "s/${np}//;s/ //g" | cut -f2 -d '"')
# TODO I cant produce the output "Not playing", using rhythmbox 2.97.
#STATUS=$(rhythmbox-client --no-start --print-playing)
if [[ "$rhythmbox_paused" != "(Paused)" ]]; then
echo "$np"
fi
fi
}
__np_spotify() {
if shell_is_linux; then
metadata=$(dbus-send --reply-timeout=42 --print-reply --dest=org.mpris.MediaPlayer2.spotify / org.freedesktop.MediaPlayer2.GetMetadata 2>/dev/null)
if [ "$?" -eq 0 ] && [ -n "$metadata" ]; then
# TODO how do one express this with dbus-send? It works with qdbus but the problem is that it's probably not as common as dbus-send.
state=$(qdbus org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get org.mpris.MediaPlayer2.Player PlaybackStatus)
if [[ $state == "Playing" ]]; then
artist=$(echo "$metadata" | grep -PA2 "string\s\"xesam:artist\"" | tail -1 | grep -Po "(?<=\").*(?=\")")
track=$(echo "$metadata" | grep -PA1 "string\s\"xesam:title\"" | tail -1 | grep -Po "(?<=\").*(?=\")")
np=$(echo "${artist} - ${track}")
fi
fi
elif shell_is_osx; then
np=$(${TMUX_POWERLINE_DIR_SEGMENTS}/np_spotify_mac.script)
fi
echo "$np"
}
__np_spotify_wine() {
[ ! shell_is_linux ] && return 1
spotify_id=$(xwininfo -root -tree | grep '("spotify' | cut -f1 -d'"' | sed 's/ //g')
echo $spotify_id
if [ -n "$spotify_id" ]; then
np=$(xwininfo -id "$spotify_id" | grep "xwininfo.*Spotify -" | grep -Po "(?<=\"Spotify - ).*(?=\"$)")
echo "$np"
fi
}

View File

@ -0,0 +1,24 @@
#!/usr/bin/env osascript
# Returns the current playing song in iTunes for OSX
tell application "System Events"
set process_list to (name of every process)
end tell
if process_list contains "iTunes" then
tell application "iTunes"
if player state is playing then
set track_name to name of current track
set artist_name to artist of current track
# set album_name to album of current track
set trim_length to 40
set now_playing to artist_name & " - " & track_name
if length of now_playing is less than trim_length then
set now_playing_trim to now_playing
else
set now_playing_trim to characters 1 thru trim_length of now_playing as string
end if
end if
end tell
end if

View File

@ -0,0 +1,179 @@
#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <mpd/client.h>
#ifdef DEBUG
#define DO_DEBUG DEBUG
#else
#define DO_DEBUG 0
#endif
#define DEBUG_PRINTF(...) do{ if (DO_DEBUG) { printf(__VA_ARGS__);} } while(0)
/* Output the current song if MPD is in a playing state. The connection password, host and port is
* specified like for mpc with environment variables
* MPD_HOST=[password@]host
* MPD_PORT=port
* If they are empty they defaults to localhost on port 6600.
*/
int main(int argc, const char *argv[])
{
char *mpd_host = NULL;
char *mpd_password = NULL;
unsigned int mpd_port = 0;
char *mpd_host_m = NULL;
char *mpd_password_m = NULL;
const char *mpd_host_str = getenv("MPD_HOST");
if (mpd_host_str == NULL || strlen(mpd_host_str) == 0) {
DEBUG_PRINTF("No envvar MPD_HOST set or empty. Using default value (localhost).\n");
mpd_host = "localhost";
} else {
size_t mpd_host_len = strlen(mpd_host_str);
char mpd_host_env[mpd_host_len + 1];
strncpy(mpd_host_env, mpd_host_str, mpd_host_len);
mpd_host_env[mpd_host_len] = '\0';
char *pch = strtok(mpd_host_env, "@");
char *first = NULL;
char *second = NULL;
if (pch != NULL) {
first = pch;
}
pch = strtok(NULL, "@");
if (pch != NULL) {
second = pch;
}
if (first != NULL && second != NULL) {
DEBUG_PRINTF("%s - %s\n", first, second);
size_t first_len = strlen(first);
size_t second_len = strlen(second);
mpd_password_m = (char *) malloc(first_len + 1);
mpd_host_m= (char *) malloc(second_len + 1);
if (mpd_password_m == NULL || mpd_host_m == NULL) {
DEBUG_PRINTF("Failed alloc password/host.\n");
return EXIT_FAILURE;
}
strncpy(mpd_password_m, first, first_len);
mpd_password_m[first_len] = '\0';
strncpy(mpd_host_m, second, second_len);
mpd_host_m[second_len] = '\0';
} else if (first != NULL) {
DEBUG_PRINTF("%s\n", first);
size_t first_len = strlen(first);
mpd_host_m = (char *) malloc(first_len + 1);
if (mpd_host_m == NULL ) {
DEBUG_PRINTF("Failed alloc host.\n");
return EXIT_FAILURE;
}
strncpy(mpd_host_m, first, first_len);
mpd_host_m[first_len] = '\0';
}
}
if (mpd_host_m != NULL) {
mpd_host = mpd_host_m;
}
if (mpd_password_m != NULL) {
mpd_password = mpd_password_m;
}
const char *mpd_port_env = getenv("MPD_PORT");
if (mpd_port_env == NULL || strlen(mpd_port_env) == 0) {
DEBUG_PRINTF("No envvar MPD_PORT set or empty. Using default value (6600).\n");
mpd_port = 6600;
} else {
int mpd_port_m = atoi(mpd_port_env);
if (mpd_port_m == 0) {
DEBUG_PRINTF("Could not convert MPD_PORT to int.\n");
return EXIT_FAILURE;
} else if (mpd_port_m < 0) {
DEBUG_PRINTF("Negative port?!\n");
return EXIT_FAILURE;
} else {
mpd_port = mpd_port_m;
DEBUG_PRINTF("Using port %i\n", mpd_port);
}
}
struct mpd_connection *mpd_connection = mpd_connection_new(mpd_host, mpd_port, 1000);
if (mpd_connection == NULL) {
DEBUG_PRINTF("%s\n", "Could Not connect");
return EXIT_FAILURE;
}
if (mpd_password != NULL) {
bool authenticated = mpd_run_password(mpd_connection, mpd_password);
if (!authenticated) {
DEBUG_PRINTF("Failed to authenticate.\n");
return EXIT_FAILURE;
}
}
free(mpd_host_m);
free(mpd_password_m);
bool sent_status = mpd_send_status(mpd_connection);
if (!sent_status) {
DEBUG_PRINTF("Could not send status request.");
return EXIT_FAILURE;
}
struct mpd_status *mpd_status = mpd_recv_status(mpd_connection);
if (mpd_status == NULL) {
DEBUG_PRINTF("Could not get mpd status.\n");
return EXIT_FAILURE;
}
enum mpd_state mpd_state = mpd_status_get_state(mpd_status);
DEBUG_PRINTF("State: ");
if (mpd_state == MPD_STATE_PLAY) {
DEBUG_PRINTF("Playing.");
} else if (mpd_state == MPD_STATE_PAUSE) {
DEBUG_PRINTF("Paused.");
} else if (mpd_state == MPD_STATE_UNKNOWN) {
DEBUG_PRINTF("Unknown state.");
} else if (mpd_state == MPD_STATE_STOP) {
DEBUG_PRINTF("Stopped.");
}
DEBUG_PRINTF("\n");
if (mpd_state != MPD_STATE_PLAY) {
// Nothing to do.
mpd_status_free(mpd_status);
mpd_connection_free(mpd_connection);
return EXIT_SUCCESS;
}
int song_id = mpd_status_get_song_id(mpd_status);
DEBUG_PRINTF("songid = %i\n", song_id);
mpd_status_free(mpd_status);
struct mpd_song *song = mpd_run_get_queue_song_id(mpd_connection, song_id);
if (song == NULL) {
DEBUG_PRINTF("Could not get song.\n");
return EXIT_FAILURE;
}
const char *song_artist = mpd_song_get_tag(song, MPD_TAG_ARTIST, 0);
if (song_artist == NULL) {
DEBUG_PRINTF("Could not get song artist.");
return EXIT_FAILURE;
}
const char *song_title = mpd_song_get_tag(song, MPD_TAG_TITLE, 0);
if (song_title == NULL) {
DEBUG_PRINTF("Could not get song title.");
return EXIT_FAILURE;
}
printf("%s - %s\n", song_artist, song_title);
mpd_song_free(song);
mpd_connection_free(mpd_connection);
return EXIT_SUCCESS;
}

View File

@ -0,0 +1,9 @@
#!/usr/bin/env python
import dbus
pithos_bus = dbus.SessionBus()
pithos = pithos_bus.get_object('net.kevinmehall.Pithos', '/net/kevinmehall/Pithos')
props = pithos.get_dbus_method('GetCurrentSong', 'net.kevinmehall.Pithos')
print props()["artist"] + " - " + props()["title"]

View File

@ -0,0 +1,20 @@
#!/usr/bin/env osascript
# Returns the current playing song in Rdio for OS X.
tell application "System Events"
set process_list to (name of every process)
end tell
if process_list contains "Rdio" then
tell application "Rdio"
if player state is playing then
set track_name to name of current track
set artist_name to artist of current track
set album_name to album of current track
set now_playing to artist_name & " - " & track_name
# Uncomment if Album name is wanted
#set now_playing to now_playing & " - " & album_name
end if
end tell
end if

View File

@ -0,0 +1,27 @@
#!/usr/bin/env osascript
# Returns the current playing song in Spotify for OSX
tell application "System Events"
set process_list to (name of every process)
end tell
if process_list contains "Spotify" then
tell application "Spotify"
if player state is playing or player state is paused then
set track_name to name of current track
set artist_name to artist of current track
#set album_name to album of current track
set trim_length to 40
if player state is playing then
set now_playing to "► " & artist_name & " - " & track_name
else
set now_playing to "❙❙ " & artist_name & " - " & track_name
end if
if length of now_playing is less than trim_length then
set now_playing_trim to now_playing
else
set now_playing_trim to characters 1 thru trim_length of now_playing as string
end if
end if
end tell
end if

39
tmux/powerline/segments/pwd.sh Executable file
View File

@ -0,0 +1,39 @@
# Print the current working directory (trimmed to max length).
# NOTE The trimming code's stolen from the web. Courtesy to who ever wrote it.
# Source lib to get the function get_tmux_pwd
source "${TMUX_POWERLINE_DIR_LIB}/tmux_adapter.sh"
TMUX_POWERLINE_SEG_PWD_MAX_LEN_DEFAULT="40"
generate_segmentrc() {
read -d '' rccontents << EORC
# Maximum length of output.
export TMUX_POWERLINE_SEG_PWD_MAX_LEN="${TMUX_POWERLINE_SEG_PWD_MAX_LEN_DEFAULT}"
EORC
echo "$rccontents"
}
__process_settings() {
if [ -z "$TMUX_POWERLINE_SEG_PWD_MAX_LEN" ]; then
export TMUX_POWERLINE_SEG_PWD_MAX_LEN="${TMUX_POWERLINE_SEG_PWD_MAX_LEN_DEFAULT}"
fi
}
run_segment() {
__process_settings
# Truncate from the left.
tcwd=$(get_tmux_cwd)
trunc_symbol="···"
dir=${tcwd##*/}
local max_len="$TMUX_POWERLINE_SEG_PWD_MAX_LEN"
max_len=$(( ( max_len < ${#dir} ) ? ${#dir} : max_len ))
ttcwd=${tcwd/#$HOME/\~}
pwdoffset=$(( ${#ttcwd} - max_len ))
if [ ${pwdoffset} -gt "0" ]; then
ttcwd=${ttcwd:$pwdoffset:$max_len}
ttcwd=${trunc_symbol}/${ttcwd#*/}
fi
echo "$ttcwd"
return 0
}

View File

@ -0,0 +1,16 @@
# Print out Memory and CPU using https://github.com/creaktive/rainbarf
run_segment() {
type rainbarf >/dev/null 2>&1
if [ "$?" -ne 0 ]; then
echo 'rainbarf was not found'
return
fi
# Customize via ~/.rainbarf.conf
stats=$(rainbarf --tmux)
if [ -n "$stats" ]; then
echo "$stats";
fi
return 0
}

View File

@ -0,0 +1,9 @@
# Print out Memory and CPU using https://github.com/creaktive/rainbarf
run_segment() {
stats=$(cat ~/.thyme-tmux)
if [ -n "$stats" ]; then
echo "$stats";
fi
return 0
}

23
tmux/powerline/segments/time.sh Executable file
View File

@ -0,0 +1,23 @@
# Prints the current time.
TMUX_POWERLINE_SEG_TIME_FORMAT_DEFAULT="%H:%M"
generate_segmentrc() {
read -d '' rccontents << EORC
# date(1) format for the time. Americans might want to have "%I:%M %p".
export TMUX_POWERLINE_SEG_TIME_FORMAT="${TMUX_POWERLINE_SEG_TIME_FORMAT_DEFAULT}"
EORC
echo "$rccontents"
}
__process_settings() {
if [ -z "$TMUX_POWERLINE_SEG_TIME_FORMAT" ]; then
export TMUX_POWERLINE_SEG_TIME_FORMAT="${TMUX_POWERLINE_SEG_TIME_FORMAT_DEFAULT}"
fi
}
run_segment() {
__process_settings
date +"$TMUX_POWERLINE_SEG_TIME_FORMAT"
return 0
}

View File

@ -0,0 +1,14 @@
# Print out Memory, cpu and load using https://github.com/thewtex/tmux-mem-cpu-load
run_segment() {
type tmux-mem-cpu-load >/dev/null 2>&1
if [ "$?" -ne 0 ]; then
return
fi
stats=$(tmux-mem-cpu-load)
if [ -n "$stats" ]; then
echo "$stats";
fi
return 0
}

View File

@ -0,0 +1,7 @@
# Prints tmux session info.
# Assuems that [ -n "$TMUX"].
run_segment() {
tmux display-message -p '#S:#I.#P'
return 0
}

View File

@ -0,0 +1,30 @@
# Prints the uptime.
if shell_is_bsd; then
TMUX_POWERLINE_SEG_UPTIME_GREP_DEFAULT="/usr/local/bin/grep"
else
TMUX_POWERLINE_SEG_UPTIME_GREP_DEFAULT="grep"
fi
__process_settings() {
if [ -z "$TMUX_POWERLINE_SEG_UPTIME_GREP" ]; then
export TMUX_POWERLINE_SEG_UPTIME_GREP="${TMUX_POWERLINE_SEG_UPTIME_GREP_DEFAULT}"
fi
}
generate_segmentrc() {
read -d '' rccontents << EORC
# Name of GNU grep binary if in PATH, or path to it.
export TMUX_POWERLINE_SEG_UPTIME_GREP="${TMUX_POWERLINE_SEG_UPTIME_GREP_DEFAULT}"
EORC
echo "$rccontents"
}
run_segment() {
__process_settings
# Assume latest grep is in PATH
gnugrep="${TMUX_POWERLINE_SEG_UPTIME_GREP}"
uptime | $gnugrep -PZo "(?<=up )[^,]*"
return 0
}

View File

@ -0,0 +1,6 @@
# Prints the current time in UTC.
run_segment() {
date -u +"%H:%M"
return 0
}

View File

@ -0,0 +1,90 @@
# Prints current branch in a VCS directory if it could be detected.
# Source lib to get the function get_tmux_pwd
source "${TMUX_POWERLINE_DIR_LIB}/tmux_adapter.sh"
branch_symbol=""
git_colour="5"
svn_colour="220"
hg_colour="45"
run_segment() {
tmux_path=$(get_tmux_cwd)
cd "$tmux_path"
branch=""
if [ -n "${git_branch=$(__parse_git_branch)}" ]; then
branch="$git_branch"
elif [ -n "${svn_branch=$(__parse_svn_branch)}" ]; then
branch="$svn_branch"
elif [ -n "${hg_branch=$(__parse_hg_branch)}" ]; then
branch="$hg_branch"
fi
if [ -n "$branch" ]; then
echo "${branch}"
fi
return 0
}
# Show git banch.
__parse_git_branch() {
type git >/dev/null 2>&1
if [ "$?" -ne 0 ]; then
return
fi
#git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ \[\1\]/'
# Quit if this is not a Git repo.
branch=$(git symbolic-ref HEAD 2> /dev/null)
if [[ -z $branch ]] ; then
# attempt to get short-sha-name
branch=":$(git rev-parse --short HEAD 2> /dev/null)"
fi
if [ "$?" -ne 0 ]; then
# this must not be a git repo
return
fi
# Clean off unnecessary information.
branch=${branch##*/}
echo -n "#[fg=colour${git_colour}]${branch_symbol} #[fg=colour${TMUX_POWERLINE_CUR_SEGMENT_FG}]${branch}"
}
# Show SVN branch.
__parse_svn_branch() {
type svn >/dev/null 2>&1
if [ "$?" -ne 0 ]; then
return
fi
local svn_info=$(svn info 2>/dev/null)
if [ -z "${svn_info}" ]; then
return
fi
local svn_root=$(echo "${svn_info}" | sed -ne 's#^Repository Root: ##p')
local svn_url=$(echo "${svn_info}" | sed -ne 's#^URL: ##p')
local branch=$(echo "${svn_url}" | egrep -o '[^/]+$')
echo "#[fg=colour${svn_colour}]${branch_symbol} #[fg=colour${TMUX_POWERLINE_CUR_SEGMENT_FG}]${branch}"
}
__parse_hg_branch() {
type hg >/dev/null 2>&1
if [ "$?" -ne 0 ]; then
return
fi
summary=$(hg summary)
if [ "$?" -ne 0 ]; then
return
fi
local branch=$(echo "$summary" | grep 'branch:' | cut -d ' ' -f2)
echo "#[fg=colour${hg_colour}]${branch_symbol} #[fg=colour${TMUX_POWERLINE_CUR_SEGMENT_FG}]${branch}"
}

View File

@ -0,0 +1,71 @@
# This checks if the current branch is ahead of
# or behind the remote branch with which it is tracked
# Source lib to get the function get_tmux_pwd
source "${TMUX_POWERLINE_DIR_LIB}/tmux_adapter.sh"
flat_symbol="⤚"
run_segment() {
tmux_path=$(get_tmux_cwd)
cd "$tmux_path"
stats=""
if [ -n "${git_stats=$(__parse_git_stats)}" ]; then
stats="$git_stats"
elif [ -n "${svn_stats=$(__parse_svn_stats)}" ]; then
stats="$svn_stats"
elif [ -n "${hg_stats=$(__parse_hg_stats)}" ]; then
stats="$hg_stats"
fi
if [ -n "$stats" ]; then
echo "${stats}"
fi
return 0
}
__parse_git_stats() {
type git >/dev/null 2>&1
if [ "$?" -ne 0 ]; then
return
fi
# check if git
[[ -z $(git rev-parse --git-dir 2> /dev/null) ]] && return
symbolic_ref=$(git symbolic-ref -q HEAD)
[[ -z "${symbolic_ref}" ]] && return
tracking_branch=$(git for-each-ref --format='%(upstream:short)' ${symbolic_ref})
# creates global variables $1 and $2 based on left vs. right tracking
set -- $(git rev-list --left-right --count $tracking_branch...HEAD)
behind=$1
ahead=$2
# print out the information
if [[ $behind -gt 0 ]] ; then
local ret="$behind"
fi
if [[ $ahead -gt 0 ]] ; then
local ret="${ret}$ahead"
fi
echo "$ret"
}
__parse_hg_stats() {
type hg >/dev/null 2>&1
if [ "$?" -ne 0 ]; then
return
fi
# not yet implemented
}
__parse_svn_stats() {
type svn >/dev/null 2>&1
if [ "$?" -ne 0 ]; then
return
fi
# not yet implemented
}

View File

@ -0,0 +1,70 @@
# This checks if the current branch is ahead of
# or behind the remote branch with which it is tracked
# Source lib to get the function get_tmux_pwd
source "${TMUX_POWERLINE_DIR_LIB}/tmux_adapter.sh"
mod_symbol="﹢"
run_segment() {
tmux_path=$(get_tmux_cwd)
cd "$tmux_path"
stats=""
if [ -n "${git_stats=$(__parse_git_stats)}" ]; then
stats="$git_stats"
elif [ -n "${svn_stats=$(__parse_svn_stats)}" ]; then
stats="$svn_stats"
elif [ -n "${hg_stats=$(__parse_hg_stats)}" ]; then
stats="$hg_stats"
fi
if [[ -n "$stats" && $stats -gt 0 ]]; then
echo "${mod_symbol}${stats}"
fi
}
__parse_git_stats(){
type git >/dev/null 2>&1
if [ "$?" -ne 0 ]; then
return
fi
# check if git
[[ -z $(git rev-parse --git-dir 2> /dev/null) ]] && return
# return the number of modified but not staged items
modified=$(git status -s | cut -c 2 | awk '$1 != "" && $1 != "?" { print $1 }' | wc -l)
echo $modified
}
__parse_hg_stats(){
type hg >/dev/null 2>&1
if [ "$?" -ne 0 ]; then
return
fi
# not yet implemented
}
__parse_svn_stats() {
type svn >/dev/null 2>&1
if [ "$?" -ne 0 ]; then
return
fi
local svn_info=$(svn info 2>/dev/null)
if [ -z "${svn_info}" ]; then
return
fi
local svn_wcroot=$(echo "${svn_info}" | sed -ne 's#^Working Copy Root Path: ##p')
local svn_st=$(cd "${svn_wcroot}"; svn st)
local modified=$(echo "${svn_st}" | egrep '^M' | wc -l)
local conflicted=$(echo "${svn_st}" | egrep '^!?\s*C' | wc -l)
#print
if [[ $modified -gt 0 ]] ; then
local ret="#[fg=colour${TMUX_POWERLINE_CUR_SEGMENT_FG}${modified}"
fi
if [[ $conflicted -gt 0 ]] ; then
local ret="#[fg=colour${svn_colour}${conflicted} ${ret}"
fi
echo "${ret}"
}

View File

@ -0,0 +1,51 @@
# This checks if the current branch is ahead of or behind the remote branch with which it is tracked.
# Source lib to get the function get_tmux_pwd
source "${TMUX_POWERLINE_DIR_LIB}/tmux_adapter.sh"
other_symbol="⋯ "
run_segment() {
tmux_path=$(get_tmux_cwd)
cd "$tmux_path"
stats=""
if [ -n "${git_stats=$(__parse_git_stats)}" ]; then
stats="$git_stats"
elif [ -n "${svn_stats=$(__parse_svn_stats)}" ]; then
stats="$svn_stats"
elif [ -n "${hg_stats=$(__parse_hg_stats)}" ]; then
stats="$hg_stats"
fi
if [[ -n "$stats" && $stats -gt 0 ]]; then
echo "${other_symbol}${stats}"
fi
return 0
}
__parse_git_stats(){
type git >/dev/null 2>&1
if [ "$?" -ne 0 ]; then
return
fi
# check if git
[[ -z $(git rev-parse --git-dir 2> /dev/null) ]] && return
# return the number of untracked items
other=$(git status -s | awk '$1 == "??" { print $1 }' | wc -l)
echo $other
}
__parse_hg_stats(){
type svn >/dev/null 2>&1
if [ "$?" -ne 0 ]; then
return
fi
# not yet implemented
}
__parse_svn_stats(){
type hg >/dev/null 2>&1
if [ "$?" -ne 0 ]; then
return
fi
# not yet implemented
}

View File

@ -0,0 +1,43 @@
# This prints the vcs revision in the working directory
# currently only used in SVN
# Source lib to get the function get_tmux_pwd
source "${TMUX_POWERLINE_DIR_LIB}/tmux_adapter.sh"
run_segment() {
tmux_path=$(get_tmux_cwd)
cd "$tmux_path"
stats=""
if [[ -n "${svn_stats=$(__parse_svn_stats)}" ]]; then
stats="$svn_stats"
elif [[ -n "${hg_stats=$(__parse_hg_stats)}" ]]; then
stats="$hg_stats"
fi
if [[ -n "$stats" ]]; then
echo "${stats}"
fi
}
__parse_hg_stats(){
type hg >/dev/null 2>&1
if [ "$?" -ne 0 ]; then
return
fi
# not yet implemented
}
__parse_svn_stats(){
type svn >/dev/null 2>&1
if [ "$?" -ne 0 ]; then
return
fi
local svn_info=$(svn info 2>/dev/null)
if [ -z "${svn_info}" ]; then
return
fi
local svn_ref=$(echo "${svn_info}" | sed -ne 's#^Revision: ##p')
echo "r${svn_ref}"
}

View File

@ -0,0 +1,57 @@
# This checks if the current branch is ahead of
# or behind the remote branch with which it is tracked
# Source lib to get the function get_tmux_pwd
source "${TMUX_POWERLINE_DIR_LIB}/tmux_adapter.sh"
staged_symbol="⊕ "
run_segment() {
tmux_path=$(get_tmux_cwd)
cd "$tmux_path"
stats=""
if [ -n "${git_stats=$(__parse_git_stats)}" ]; then
stats="$git_stats"
elif [ -n "${svn_stats=$(__parse_svn_stats)}" ]; then
stats="$svn_stats"
elif [ -n "${hg_stats=$(__parse_hg_stats)}" ]; then
stats="$hg_stats"
fi
if [[ -n "$stats" && $stats -gt 0 ]]; then
stats=$(echo $stats | sed -e "s/^[ \t]*//")
echo "${staged_symbol}${stats}"
fi
return 0
}
__parse_git_stats(){
type git >/dev/null 2>&1
if [ "$?" -ne 0 ]; then
return
fi
# Check if git.
[[ -z $(git rev-parse --git-dir 2> /dev/null) ]] && return
# Return the number of staged items.
staged=$(git diff --staged --name-status | wc -l)
echo "$staged"
}
__parse_hg_stats(){
type svn >/dev/null 2>&1
if [ "$?" -ne 0 ]; then
return
fi
# not yet implemented
}
__parse_svn_stats(){
type hg >/dev/null 2>&1
if [ "$?" -ne 0 ]; then
return
fi
# not yet implemented
}

View File

@ -0,0 +1,43 @@
# Prints the WAN IP address. The result is cached and updated according to $update_period.
run_segment() {
local tmp_file="${TMUX_POWERLINE_DIR_TEMPORARY}/wan_ip.txt"
local wan_ip
if [ -f "$tmp_file" ]; then
if shell_is_osx || shell_is_bsd; then
stat >/dev/null 2>&1 && is_gnu_stat=false || is_gnu_stat=true
if [ "$is_gnu_stat" == "true" ];then
last_update=$(stat -c "%Y" ${tmp_file})
else
last_update=$(stat -f "%m" ${tmp_file})
fi
elif shell_is_linux || [ -z $is_gnu_stat]; then
last_update=$(stat -c "%Y" ${tmp_file})
fi
time_now=$(date +%s)
update_period=900
up_to_date=$(echo "(${time_now}-${last_update}) < ${update_period}" | bc)
if [ "$up_to_date" -eq 1 ]; then
wan_ip=$(cat ${tmp_file})
fi
fi
if [ -z "$wan_ip" ]; then
wan_ip=$(curl --max-time 2 -s http://whatismyip.akamai.com/)
if [ "$?" -eq "0" ]; then
echo "${wan_ip}" > $tmp_file
elif [ -f "${tmp_file}" ]; then
wan_ip=$(cat "$tmp_file")
fi
fi
if [ -n "$wan_ip" ]; then
echo "${wan_ip}"
fi
return 0
}

View File

@ -0,0 +1,191 @@
# Prints the current weather in Celsius, Fahrenheits or lord Kelvins. The forecast is cached and updated with a period of $update_period.
# The update period in seconds.
update_period=600
TMUX_POWERLINE_SEG_WEATHER_DATA_PROVIDER_DEFAULT="yahoo"
TMUX_POWERLINE_SEG_WEATHER_UNIT_DEFAULT="c"
TMUX_POWERLINE_SEG_WEATHER_UPDATE_PERIOD_DEFAULT="600"
if shell_is_bsd; then
TMUX_POWERLINE_SEG_WEATHER_GREP_DEFAULT="/usr/local/bin/grep"
else
TMUX_POWERLINE_SEG_WEATHER_GREP_DEFAULT="grep"
fi
generate_segmentrc() {
read -d '' rccontents << EORC
# The data provider to use. Currently only "yahoo" is supported.
export TMUX_POWERLINE_SEG_WEATHER_DATA_PROVIDER="${TMUX_POWERLINE_SEG_WEATHER_DATA_PROVIDER_DEFAULT}"
# What unit to use. Can be any of {c,f,k}.
export TMUX_POWERLINE_SEG_WEATHER_UNIT="${TMUX_POWERLINE_SEG_WEATHER_UNIT_DEFAULT}"
# How often to update the weather in seconds.
export TMUX_POWERLINE_SEG_WEATHER_UPDATE_PERIOD="${TMUX_POWERLINE_SEG_WEATHER_UPDATE_PERIOD_DEFAULT}"
# Name of GNU grep binary if in PATH, or path to it.
export TMUX_POWERLINE_SEG_WEATHER_GREP="${TMUX_POWERLINE_SEG_WEATHER_GREP_DEFAULT}"
# Your location. Find a code that works for you:
# 1. Go to Yahoo weather http://weather.yahoo.com/
# 2. Find the weather for you location
# 3. Copy the last numbers in that URL. e.g. "http://weather.yahoo.com/united-states/california/newport-beach-12796587/" has the numbers "12796587"
export TMUX_POWERLINE_SEG_WEATHER_LOCATION=""
EORC
echo "$rccontents"
}
run_segment() {
__process_settings
local tmp_file="${TMUX_POWERLINE_DIR_TEMPORARY}/weather_yahoo.txt"
local weather
case "$TMUX_POWERLINE_SEG_WEATHER_DATA_PROVIDER" in
"yahoo") weather=$(__yahoo_weather) ;;
*)
echo "Unknown weather provider [${$TMUX_POWERLINE_SEG_WEATHER_DATA_PROVIDER}]";
return 1
esac
if [ -n "$weather" ]; then
echo "$weather"
fi
}
__process_settings() {
if [ -z "$TMUX_POWERLINE_SEG_WEATHER_DATA_PROVIDER" ]; then
export TMUX_POWERLINE_SEG_WEATHER_DATA_PROVIDER="${TMUX_POWERLINE_SEG_WEATHER_DATA_PROVIDER_DEFAULT}"
fi
if [ -z "$TMUX_POWERLINE_SEG_WEATHER_UNIT" ]; then
export TMUX_POWERLINE_SEG_WEATHER_UNIT="${TMUX_POWERLINE_SEG_WEATHER_UNIT_DEFAULT}"
fi
if [ -z "$TMUX_POWERLINE_SEG_WEATHER_UPDATE_PERIOD" ]; then
export TMUX_POWERLINE_SEG_WEATHER_UPDATE_PERIOD="${TMUX_POWERLINE_SEG_WEATHER_UPDATE_PERIOD_DEFAULT}"
fi
if [ -z "$TMUX_POWERLINE_SEG_WEATHER_GREP" ]; then
export TMUX_POWERLINE_SEG_WEATHER_GREP="${TMUX_POWERLINE_SEG_WEATHER_GREP_DEFAULT}"
fi
if [ -z "$TMUX_POWERLINE_SEG_WEATHER_LOCATION" ]; then
echo "No weather location specified.";
exit 8
fi
}
__yahoo_weather() {
degree=""
if [ -f "$tmp_file" ]; then
if shell_is_osx || shell_is_bsd; then
last_update=$(stat -f "%m" ${tmp_file})
elif shell_is_linux; then
last_update=$(stat -c "%Y" ${tmp_file})
fi
time_now=$(date +%s)
up_to_date=$(echo "(${time_now}-${last_update}) < ${update_period}" | bc)
if [ "$up_to_date" -eq 1 ]; then
__read_tmp_file
fi
fi
if [ -z "$degree" ]; then
weather_data=$(curl --max-time 4 -s "https://query.yahooapis.com/v1/public/yql?format=xml&q=SELECT%20*%20FROM%20weather.forecast%20WHERE%20u=%27${TMUX_POWERLINE_SEG_WEATHER_UNIT}%27%20AND%20woeid%20=%20%27${TMUX_POWERLINE_SEG_WEATHER_LOCATION}%27")
if [ "$?" -eq "0" ]; then
error=$(echo "$weather_data" | grep "problem_cause\|DOCTYPE");
if [ -n "$error" ]; then
echo "error"
exit 1
fi
# Assume latest grep is in PATH
gnugrep="${TMUX_POWERLINE_SEG_WEATHER_GREP}"
# <yweather:units temperature="F" distance="mi" pressure="in" speed="mph"/>
unit=$(echo "$weather_data" | "$gnugrep" -Zo "<yweather:units [^<>]*/>" | sed 's/.*temperature="\([^"]*\)".*/\1/')
condition=$(echo "$weather_data" | "$gnugrep" -Zo "<yweather:condition [^<>]*/>")
# <yweather:condition text="Clear" code="31" temp="66" date="Mon, 01 Oct 2012 8:00 pm CST" />
degree=$(echo "$condition" | sed 's/.*temp="\([^"]*\)".*/\1/')
condition=$(echo "$condition" | sed 's/.*text="\([^"]*\)".*/\1/')
# Pull the times for sunrise and sunset so we know when to change the day/night indicator
# <yweather:astronomy sunrise="6:56 am" sunset="6:21 pm"/>
if shell_is_osx || shell_is_bsd; then
date_arg='-j -f "%H:%M %p "'
else
date_arg='-d'
fi
sunrise=$(date ${date_arg}"$(echo "$weather_data" | "$gnugrep" "yweather:astronomy" | sed 's/^\(.*\)sunset.*/\1/' | sed 's/^.*sunrise="\(.*m\)".*/\1/')" +%H%M)
sunset=$(date ${date_arg}"$(echo "$weather_data" | "$gnugrep" "yweather:astronomy" | sed 's/^.*sunset="\(.*m\)".*/\1/')" +%H%M)
elif [ -f "${tmp_file}" ]; then
__read_tmp_file
fi
fi
if [ -n "$degree" ]; then
if [ "$TMUX_POWERLINE_SEG_WEATHER_UNIT" == "k" ]; then
degree=$(echo "${degree} + 273.15" | bc)
fi
condition_symbol=$(__get_condition_symbol "$condition" "$sunrise" "$sunset")
echo "${condition_symbol} ${degree}°$(echo "$TMUX_POWERLINE_SEG_WEATHER_UNIT" | tr '[:lower:]' '[:upper:]')" | tee "${tmp_file}"
fi
}
# Get symbol for condition. Available conditions: http://developer.yahoo.com/weather/#codes
__get_condition_symbol() {
local condition=$(echo "$1" | tr '[:upper:]' '[:lower:]')
local sunrise="$2"
local sunset="$3"
case "$condition" in
"sunny" | "hot")
hourmin=$(date +%H%M)
if [ "$hourmin" -ge "$sunset" -o "$hourmin" -le "$sunrise" ]; then
#echo "☽"
echo "☾"
else
#echo "☀"
echo "☼"
fi
;;
"rain" | "mixed rain and snow" | "mixed rain and sleet" | "freezing drizzle" | "drizzle" | "light drizzle" | "freezing rain" | "showers" | "mixed rain and hail" | "scattered showers" | "isolated thundershowers" | "thundershowers" | "light rain with thunder" | "light rain" | "rain and snow")
#echo "☂"
echo "☔"
;;
"snow" | "mixed snow and sleet" | "snow flurries" | "light snow showers" | "blowing snow" | "sleet" | "hail" | "heavy snow" | "scattered snow showers" | "snow showers" | "light snow" | "snow/windy" | "snow grains" | "snow/fog")
#echo "☃"
echo "❅"
;;
"cloudy" | "mostly cloudy" | "partly cloudy" | "partly cloudy/windy")
echo "☁"
;;
"tornado" | "tropical storm" | "hurricane" | "severe thunderstorms" | "thunderstorms" | "isolated thunderstorms" | "scattered thunderstorms")
#echo "⚡"
echo "☈"
;;
"dust" | "foggy" | "fog" | "haze" | "smoky" | "blustery" | "mist")
#echo "♨"
#echo "﹌"
echo "〰"
;;
"breezy")
#echo "🌬"
echo "🍃"
;;
"windy" | "fair/windy")
#echo "⚐"
echo "⚑"
;;
"clear" | "fair" | "cold")
hourmin=$(date +%H%M)
if [ "$hourmin" -ge "$sunset" -o "$hourmin" -le "$sunrise" ]; then
echo "☾"
else
echo ""
fi
;;
*)
echo "?"
;;
esac
}
__read_tmp_file() {
if [ ! -f "$tmp_file" ]; then
return
fi
cat "${tmp_file}"
exit
}

View File

@ -0,0 +1,64 @@
/* xkb_layout
* Description:
* This program will connect to the X Server and print the id of the currently
* active keyboard layout.
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <X11/XKBlib.h>
#ifdef DEBUG
#define DO_DEBUG DEBUG
#else
#define DO_DEBUG 0
#endif
#define DEBUG_PRINTF(...) do{ if (DO_DEBUG) { printf(__VA_ARGS__);} } while(0)
int main() {
// Get X display
char *displayName = "";
int eventCode;
int errorReturn;
int major = XkbMajorVersion;
int minor = XkbMinorVersion;;
int reasonReturn;
Display *_display = XkbOpenDisplay(displayName, &eventCode, &errorReturn,
&major, &minor, &reasonReturn);
bool error = false;
switch (reasonReturn) {
case XkbOD_BadLibraryVersion:
DEBUG_PRINTF("Bad XKB library version.\n");
error = true;
break;
case XkbOD_ConnectionRefused:
DEBUG_PRINTF("Connection to X server refused.\n");
error = true;
break;
case XkbOD_BadServerVersion:
DEBUG_PRINTF("Bad X11 server version.\n");
error = true;
break;
case XkbOD_NonXkbServer:
DEBUG_PRINTF("XKB not present.\n");
error = true;
break;
case XkbOD_Success:
break;
}
if (error) {
return EXIT_FAILURE;
}
// Get current state of keyboard.
int _deviceId = XkbUseCoreKbd;
XkbStateRec xkbState;
XkbGetState(_display, _deviceId, &xkbState);
// print the groupnumber, may be used with setxkbmap -query to get name
// of current layout
printf("%d\n", xkbState.group);
return 0;
return EXIT_SUCCESS;
}

View File

@ -0,0 +1,32 @@
# Print the currently used keyboard layout
# This depends on a specifically developed program which prints the group id of
# the currently used layout.
# I developed the simple program myself with some guidance as I was unable to
# find anything already developed.
# Some people might suggest:
# $ setxkbmod -query -v | awk -F "+" '{print $2}'
# this will only work if you have set up XKB with a single layout which is true
# for some.
# This script will print the correct layout even if layout is set per window.
# Exit if platform is not linux as this script is dependant on X11
run_segment() {
if ! shell_is_linux; then
return 1
fi
cd "$TMUX_POWERLINE_DIR_SEGMENTS"
if [ ! -x "xkb_layout" ]; then
make clean xkb_layout &>/dev/null
fi
if [ -x ./xkb_layout ]; then
cur_layout_nbr=$(($(./xkb_layout)+1));
cur_layout=$(setxkbmap -query | grep layout | sed 's/layout:\s\+//g' | \
awk -F ',' '{print $'$(echo "$cur_layout_nbr")'}')
echo "$cur_layout"
else
return 1
fi
}

View File

@ -0,0 +1,58 @@
# Default Theme
if patched_font_in_use; then
TMUX_POWERLINE_SEPARATOR_LEFT_BOLD=""
TMUX_POWERLINE_SEPARATOR_LEFT_THIN=""
TMUX_POWERLINE_SEPARATOR_RIGHT_BOLD=""
TMUX_POWERLINE_SEPARATOR_RIGHT_THIN=""
else
TMUX_POWERLINE_SEPARATOR_LEFT_BOLD="◀"
TMUX_POWERLINE_SEPARATOR_LEFT_THIN=""
TMUX_POWERLINE_SEPARATOR_RIGHT_BOLD="▶"
TMUX_POWERLINE_SEPARATOR_RIGHT_THIN=""
fi
TMUX_POWERLINE_DEFAULT_BACKGROUND_COLOR=${TMUX_POWERLINE_DEFAULT_BACKGROUND_COLOR:-'235'}
TMUX_POWERLINE_DEFAULT_FOREGROUND_COLOR=${TMUX_POWERLINE_DEFAULT_FOREGROUND_COLOR:-'255'}
TMUX_POWERLINE_DEFAULT_LEFTSIDE_SEPARATOR=${TMUX_POWERLINE_DEFAULT_LEFTSIDE_SEPARATOR:-$TMUX_POWERLINE_SEPARATOR_RIGHT_BOLD}
TMUX_POWERLINE_DEFAULT_RIGHTSIDE_SEPARATOR=${TMUX_POWERLINE_DEFAULT_RIGHTSIDE_SEPARATOR:-$TMUX_POWERLINE_SEPARATOR_LEFT_BOLD}
# Format: segment_name background_color foreground_color [non_default_separator]
if [ -z $TMUX_POWERLINE_LEFT_STATUS_SEGMENTS ]; then
TMUX_POWERLINE_LEFT_STATUS_SEGMENTS=(
"tmux_session_info 148 234" \
"hostname 33 0" \
#"ifstat 30 255" \
#"ifstat_sys 30 255" \
"lan_ip 24 255 ${TMUX_POWERLINE_SEPARATOR_RIGHT_THIN}" \
"wan_ip 24 255" \
"vcs_branch 29 88" \
"vcs_compare 60 255" \
"vcs_staged 64 255" \
"vcs_modified 9 255" \
"vcs_others 245 0" \
)
fi
if [ -z $TMUX_POWERLINE_RIGHT_STATUS_SEGMENTS ]; then
TMUX_POWERLINE_RIGHT_STATUS_SEGMENTS=(
#"earthquake 3 0" \
"pwd 89 211" \
"mailcount 9 255" \
"now_playing 234 37" \
#"cpu 240 136" \
"load 237 167" \
#"tmux_mem_cpu_load 234 136" \
"battery 137 127" \
"weather 37 255" \
#"rainbarf 0 ${TMUX_POWERLINE_DEFAULT_FOREGROUND_COLOR}" \
#"xkb_layout 125 117" \
"date_day 235 136" \
"date 235 136 ${TMUX_POWERLINE_SEPARATOR_LEFT_THIN}" \
"time 235 136 ${TMUX_POWERLINE_SEPARATOR_LEFT_THIN}" \
#"utc_time 235 136 ${TMUX_POWERLINE_SEPARATOR_LEFT_THIN}" \
)
fi

View File

@ -0,0 +1,59 @@
# Default Theme
if patched_font_in_use; then
TMUX_POWERLINE_SEPARATOR_LEFT_BOLD=""
TMUX_POWERLINE_SEPARATOR_LEFT_THIN=""
TMUX_POWERLINE_SEPARATOR_RIGHT_BOLD=""
TMUX_POWERLINE_SEPARATOR_RIGHT_THIN=""
else
TMUX_POWERLINE_SEPARATOR_LEFT_BOLD="◀"
TMUX_POWERLINE_SEPARATOR_LEFT_THIN=""
TMUX_POWERLINE_SEPARATOR_RIGHT_BOLD="▶"
TMUX_POWERLINE_SEPARATOR_RIGHT_THIN=""
fi
TMUX_POWERLINE_DEFAULT_BACKGROUND_COLOR=${TMUX_POWERLINE_DEFAULT_BACKGROUND_COLOR:-'0'}
TMUX_POWERLINE_DEFAULT_FOREGROUND_COLOR=${TMUX_POWERLINE_DEFAULT_FOREGROUND_COLOR:-'255'}
TMUX_POWERLINE_DEFAULT_LEFTSIDE_SEPARATOR=${TMUX_POWERLINE_DEFAULT_LEFTSIDE_SEPARATOR:-$TMUX_POWERLINE_SEPARATOR_RIGHT_BOLD}
TMUX_POWERLINE_DEFAULT_RIGHTSIDE_SEPARATOR=${TMUX_POWERLINE_DEFAULT_RIGHTSIDE_SEPARATOR:-$TMUX_POWERLINE_SEPARATOR_LEFT_BOLD}
# Format: segment_name background_color foreground_color [non_default_separator]
if [ -z $TMUX_POWERLINE_LEFT_STATUS_SEGMENTS ]; then
TMUX_POWERLINE_LEFT_STATUS_SEGMENTS=(
"hostname 228 234" \
"tmux_session_info 208 232" \
#"ifstat 30 255" \
#"ifstat_sys 30 255" \
"lan_ip 124 234" \
#"wan_ip 234 255" \
#"vcs_branch 29 88" \
#"vcs_compare 60 255" \
#"vcs_staged 64 255" \
#"vcs_modified 9 255" \
#"vcs_others 245 0" \
)
fi
if [ -z $TMUX_POWERLINE_RIGHT_STATUS_SEGMENTS ]; then
TMUX_POWERLINE_RIGHT_STATUS_SEGMENTS=(
#"earthquake 3 0" \
#"pwd 89 211" \
#"mailcount 9 255" \
#"now_playing 234 37" \
#"cpu 240 136" \
#"tmux_mem_cpu_load 234 136" \
"battery 124 234" \
#"weather 37 255" \
#"rainbarf 0 ${TMUX_POWERLINE_DEFAULT_FOREGROUND_COLOR}" \
#"xkb_layout 125 117" \
"date_day 235 136" \
"date 235 136 ${TMUX_POWERLINE_SEPARATOR_LEFT_THIN}" \
"time 235 136 ${TMUX_POWERLINE_SEPARATOR_LEFT_THIN}" \
"thyme 124 167" \
"powerline_taskwarrior.context" \
#"utc_time 235 136 ${TMUX_POWERLINE_SEPARATOR_LEFT_THIN}" \
)
fi