parent
d15767a938
commit
68ffb60404
89 changed files with 12214 additions and 0 deletions
@ -0,0 +1 @@ |
||||
bash_logout |
@ -0,0 +1 @@ |
||||
bash_profile |
@ -0,0 +1 @@ |
||||
gitconfig |
@ -0,0 +1,33 @@ |
||||
\documentclass[12pt]{article} |
||||
|
||||
\usepackage{geometry} % Required for adjusting page dimensions |
||||
\usepackage{amsmath} |
||||
\usepackage{amsthm} |
||||
\usepackage{amssymb} |
||||
\usepackage{amsfonts} |
||||
\usepackage{longtable} |
||||
\usepackage{booktabs} |
||||
\usepackage[UKenglish]{babel} |
||||
\geometry{ |
||||
paper=a4paper, % Change to letterpaper for US letter |
||||
top=3cm, % Top margin |
||||
bottom=1.5cm, % Bottom margin |
||||
left=4.5cm, % Left margin |
||||
right=4.5cm, % Right margin |
||||
%showframe, % Uncomment to show how the type block is set on the page |
||||
} |
||||
|
||||
\title{<++>} |
||||
\author{Jonathan Hodgson} |
||||
\date{\today} |
||||
|
||||
|
||||
\begin{document} |
||||
\maketitle |
||||
|
||||
|
||||
\section{<++>} |
||||
<++> |
||||
|
||||
|
||||
\end{document} |
@ -0,0 +1,12 @@ |
||||
<!DOCTYPE html> |
||||
<html lang="en"> |
||||
<head> |
||||
<meta charset="UTF-8"> |
||||
<title><++></title> |
||||
<++> |
||||
</head> |
||||
<body> |
||||
<++> |
||||
</body> |
||||
</html> |
||||
|
@ -0,0 +1 @@ |
||||
article.latex |
@ -0,0 +1,37 @@ |
||||
\documentclass[12pt,stdletter,orderfromtodate,sigleft,a4paper,dateleft,addrfromemail,addrfromphone]{newlfm} |
||||
\usepackage{blindtext, xfrac} |
||||
\usepackage{longtable} |
||||
\usepackage{booktabs} |
||||
\usepackage[UKenglish]{babel} |
||||
|
||||
\newcommand{\latex}{\LaTeX} |
||||
|
||||
\newlfmP{dateskipbefore=20pt} |
||||
\newlfmP{sigsize=20pt} |
||||
\newlfmP{sigskipbefore=50pt} |
||||
|
||||
\newlfmP{Headlinewd=0pt,Footlinewd=0pt} |
||||
|
||||
\namefrom{Jonathan Hodgson} |
||||
\addrfrom{***REMOVED*** \\ |
||||
} |
||||
\phonefrom{***REMOVED***} |
||||
\emailfrom{jonathan@lunarweb.co.uk} |
||||
|
||||
\nameto{<+Recipient Name+>} |
||||
\addrto{% |
||||
<+Recipient Address+> |
||||
} |
||||
|
||||
\dateset{\today} |
||||
\regarding{<+Subject+>} |
||||
|
||||
\greetto{<+Dear Sir or Madam+>} |
||||
\closeline{Yours sincerely,} %Sincerly if you know the name. Failthfully if you don't |
||||
|
||||
\begin{document} |
||||
\begin{newlfm} |
||||
|
||||
<+Message+> |
||||
\end{newlfm} |
||||
\end{document} |
@ -0,0 +1,60 @@ |
||||
%---------------------------------------------------------------------------------------- |
||||
% DOCUMENT CONFIGURATION |
||||
%---------------------------------------------------------------------------------------- |
||||
|
||||
\documentclass[12pt,a4paper,stdletter,sigleft]{newlfm} % 10pt font size default, 11pt and 12pt are also possible |
||||
|
||||
|
||||
%\longindentation=0pt % Un-commenting this line will push the closing "Sincerely," to the left of the page |
||||
|
||||
|
||||
\usepackage[T1]{fontenc} % Output font encoding for international characters |
||||
\usepackage[utf8]{inputenc} % Required for inputting international characters |
||||
\usepackage[UKenglish]{babel} |
||||
\usepackage{stix} % Use the Stix font by default |
||||
|
||||
\usepackage{microtype} % Improve justification |
||||
|
||||
%---------------------------------------------------------------------------------------- |
||||
% YOUR NAME & ADDRESS SECTION |
||||
%---------------------------------------------------------------------------------------- |
||||
|
||||
\signature{Jonathan Hodgson} % Your name for the signature at the bottom |
||||
|
||||
\address{***REMOVED*** \\ ***REMOVED***} % Your address and phone number |
||||
|
||||
%---------------------------------------------------------------------------------------- |
||||
|
||||
\begin{document} |
||||
|
||||
%---------------------------------------------------------------------------------------- |
||||
% ADDRESSEE SECTION |
||||
%---------------------------------------------------------------------------------------- |
||||
|
||||
\begin{letter}{<++>} % Name/title of the addressee{Recipient Name \\ Recipient Address} |
||||
|
||||
%---------------------------------------------------------------------------------------- |
||||
% LETTER CONTENT SECTION |
||||
%---------------------------------------------------------------------------------------- |
||||
|
||||
\opening{\textbf{Dear Sir or Madam,}} |
||||
|
||||
<++> |
||||
|
||||
Thank you for your time and consideration. |
||||
|
||||
I look forward to your reply. |
||||
|
||||
\vspace{2\parskip} % Extra whitespace for aesthetics |
||||
\closing{Yours failthfully,} |
||||
\vspace{2\parskip} % Extra whitespace for aesthetics |
||||
|
||||
%\ps{P.S. You can find additional information attached to this letter.} % Postscript text, comment this line to remove it |
||||
|
||||
%\encl{Copyright permission form} % Enclosures with the letter, comment this line to remove it |
||||
|
||||
%---------------------------------------------------------------------------------------- |
||||
|
||||
\end{letter} |
||||
|
||||
\end{document} |
@ -0,0 +1,3 @@ |
||||
# |
||||
# ~/.bash_logout |
||||
# |
@ -0,0 +1,10 @@ |
||||
# |
||||
# ~/.bash_profile |
||||
# |
||||
|
||||
|
||||
[[ -f ~/.bashrc ]] && . ~/.bashrc |
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,344 @@ |
||||
# |
||||
# ~/.bashrc |
||||
# |
||||
|
||||
# If not running interactively, don't do anything |
||||
[[ $- != *i* ]] && return |
||||
|
||||
export TERMINAL=/usr/bin/konsole |
||||
export TERM=xterm-256color |
||||
export PATH=~/.bin:/opt/lampp/bin:$PATH:. |
||||
export EDITOR=vim |
||||
export CDPATH=.:~:~/Sites |
||||
|
||||
#Ruby things |
||||
#GEM_HOME=$(ls -t -U | ruby -e 'puts Gem.user_dir') |
||||
#GEM_PATH=$GEM_HOME |
||||
#export PATH=$PATH:$GEM_HOME/bin |
||||
#export GEM_HOME=$(ruby -e 'print Gem.user_dir') |
||||
|
||||
big-chromium () { |
||||
chromium --force-device-scale-factor=$1 |
||||
} |
||||
|
||||
big-new-chromium () { |
||||
chromium-snapshot-bin --force-device-scale-factor=$1 |
||||
} |
||||
|
||||
#Swap two files |
||||
function swap() { |
||||
mv $1 $1._tmp; |
||||
mv $2 $1; |
||||
mv $1._tmp $2; |
||||
} |
||||
|
||||
function old() { |
||||
mv "$1" "$1.old" |
||||
} |
||||
|
||||
#This prints the current working directory after doing a cd" |
||||
cdls(){ |
||||
cd "$@" |
||||
ls -F --color=auto |
||||
} |
||||
|
||||
#Takes you to the aquarius theme |
||||
function aquarius() { |
||||
public_html=${PWD%/public_html*}/public_html |
||||
if [ -d $public_html ]; then |
||||
theme=$public_html/wp-content/themes |
||||
if [ -d $theme ]; then |
||||
cdls $theme/aquarius |
||||
else |
||||
echo " Can't find theme folder " |
||||
fi |
||||
else |
||||
echo " Can't find public_html folder." |
||||
fi |
||||
} |
||||
|
||||
#Takes you to the child theme |
||||
function theme() { |
||||
public_html=${PWD%/public_html*}/public_html |
||||
if [ -d $public_html ]; then |
||||
theme=$public_html/wp-content/themes |
||||
if [ -d $theme ]; then |
||||
child=$(ls -d $theme/*/ | grep -v "$theme\/aquarius" | grep -v "$theme\/twenty*" | grep -v "$theme\/barelycorporate" -m 1) |
||||
cdls $child |
||||
else |
||||
echo " Can't find theme folder " |
||||
fi |
||||
else |
||||
echo " Can't find public_html folder." |
||||
fi |
||||
} |
||||
|
||||
######################################## |
||||
## ## |
||||
## Search Functions ## |
||||
## ## |
||||
######################################## |
||||
|
||||
#These search functions use grep to search all sub-folders of the current working directory |
||||
searchjs() { |
||||
# This will search through .js and .es6 files but won't search minified files |
||||
grep -r -i -n --color="auto" --include=\*.{js,es6} --exclude=\*.min.js "$1" . |
||||
} |
||||
searchcss() { |
||||
# This will search through .css and .less files but won't search minified files |
||||
grep -r -i -n --color="auto" --include=\*.{css,less} --exclude=\*.min.css "$1" . |
||||
} |
||||
searchphp() { |
||||
grep -r -i -n --color="auto" --include="*.php" "$1" . |
||||
} |
||||
|
||||
# This makes cd use function above |
||||
alias cd="cdls" |
||||
|
||||
# These alow me to easily set the file and folder permissions for a wordpress instilation. |
||||
alias folder-perms='find . -type d -not -path "./.git/*" -not -path "./.git" -exec chmod 775 {} \;' |
||||
alias file-perms='find . -type f -not -path "./.git/*" -not -path "./.git" -exec chmod 664 {} \;' |
||||
alias wp-perms='folder-perms; file-perms' |
||||
|
||||
# Make ls add Indicators to file names and colour the output |
||||
alias ls='ls -F --color=auto' |
||||
|
||||
# Make tree add indicators and color |
||||
alias tree='tree -F -C' |
||||
|
||||
#Start cups |
||||
alias cups='sudo systemctl start org.cups.cupsd.service' |
||||
|
||||
#Start network manager |
||||
alias net='sudo systemctl start NetworkManager.service' |
||||
|
||||
# Alias lampp because I don't want to clog my PATH |
||||
alias lampp='/opt/lampp/lampp' |
||||
alias glampp='gksudo /opt/lampp/manager-linux-x64.run' |
||||
|
||||
#Always make all directories necesary |
||||
alias mkdir='mkdir -p' |
||||
|
||||
# Shortcut for rewriting wp permalinks |
||||
alias perms='wp rewrite flush' |
||||
|
||||
#Clear terminal and screenfetch |
||||
alias cls='clear; screenfetch' |
||||
|
||||
#An alias for my standard less configuration |
||||
#I don't set it to lessc because sometimes I don't use this config and I always forget how to ignore an alias |
||||
#alias myless='lessc --clean-css --source-map-basepath=/home/jonathan/Sites/charts/public_html --source-map --autoprefix="last 3 versions, ie >= 9" styles.less styles.min.css' |
||||
alias myless='lessc --clean-css --source-map --autoprefix="last 3 versions, ie >= 9" styles.less styles.min.css' |
||||
|
||||
# Git shortcuts |
||||
alias status='git status ' |
||||
alias st='git status' |
||||
alias checkout='git checkout' |
||||
alias ch='git checkout' |
||||
alias push='git push ' |
||||
alias pull='git pull ' |
||||
alias bb='git open' |
||||
|
||||
# Always make grep ouput color |
||||
alias grep="grep --color=auto" |
||||
|
||||
# Shortcuts to sites folder |
||||
alias sites="cd ~/Sites" |
||||
alias s="cd ~/Sites" |
||||
|
||||
# Shortcuts to documents folder |
||||
alias documents="cd ~/Documents/" |
||||
alias d="cd ~/Documents/" |
||||
|
||||
# Shortcuts to home folder |
||||
alias home="cd ~/" |
||||
alias ~="cd ~/" |
||||
|
||||
#Goes up to the public_html folder |
||||
alias ph='cd ${PWD%/public_html*}/public_html' |
||||
|
||||
# Quit the terminal using :q (The same as Vi/Vim) |
||||
alias :q='exit;' |
||||
|
||||
# Not sure why and how but this makes sudo work with my aliases |
||||
alias sudo='sudo ' |
||||
|
||||
#Make the cal command default to start on Sunday |
||||
alias cal='cal -s' |
||||
|
||||
# update the third party wordpress plugins we are mirroring |
||||
alias u3p='update3rdPartyPlugins' |
||||
|
||||
# Edit my bashrc |
||||
alias brc='$EDITOR ~/.bashrc' |
||||
|
||||
# Edit my vimrc |
||||
alias vrc='$EDITOR ~/.vimrc' |
||||
|
||||
# Go to my .vim folder |
||||
alias .v='cd ~/.vim/' |
||||
# Go to my dotfiles folder |
||||
if [[ $(hostname) == "jonathansnuc" ]]; then |
||||
#Please don't judge - This is a reminant from first days of version controlling dotfiles |
||||
alias df='cd ~/Downloads/laptopConfig/' |
||||
else |
||||
alias df='cd ~/.dotfiles' |
||||
fi |
||||
|
||||
#Old ps1 |
||||
#PS1='[\u@\h \W]\$ ' |
||||
|
||||
|
||||
# bash completion for the `wp` command |
||||
_wp_complete() { |
||||
local OLD_IFS="$IFS" |
||||
local cur=${COMP_WORDS[COMP_CWORD]} |
||||
IFS=$'\n'; # want to preserve spaces at the end |
||||
local opts="$(wp cli completions --line="$COMP_LINE" --point="$COMP_POINT")" |
||||
if [[ "$opts" =~ \<file\>\s* ]] |
||||
then |
||||
COMPREPLY=( $(compgen -f -- $cur) ) |
||||
elif [[ $opts = "" ]] |
||||
then |
||||
COMPREPLY=( $(compgen -f -- $cur) ) |
||||
else |
||||
COMPREPLY=( ${opts[*]} ) |
||||
fi |
||||
IFS="$OLD_IFS" |
||||
return 0 |
||||
} |
||||
complete -o nospace -F _wp_complete wp |
||||
|
||||
export GIT_PS1_SHOWDIRTYSTATE=1 # Show the +(Staged) or *(unstaged) next to branch name for |
||||
export GIT_PS1_SHOWUNTRACKEDFILES=1 # Show the %(Untracked) next to branch name |
||||
export GIT_PS1_SHOWUPSTREAM="auto" |
||||
|
||||
source /usr/share/git/completion/git-completion.bash |
||||
source /usr/share/git/completion/git-prompt.sh |
||||
|
||||
############################################ |
||||
## ## |
||||
## Colours for output ## |
||||
## ## |
||||
############################################ |
||||
#{{{ |
||||
# Reset |
||||
Color_Off="\[\033[0m\]" # Text Reset |
||||
|
||||
# Regular Colors |
||||
Black="\[\033[0;30m\]" # Black |
||||
Red="\[\033[0;31m\]" # Red |
||||
Green="\[\033[0;32m\]" # Green |
||||
Yellow="\[\033[0;33m\]" # Yellow |
||||
Blue="\[\033[0;34m\]" # Blue |
||||
Purple="\[\033[0;35m\]" # Purple |
||||
Cyan="\[\033[0;36m\]" # Cyan |
||||
White="\[\033[0;37m\]" # White |
||||
|
||||
# Bold |
||||
BBlack="\[\033[1;30m\]" # Black |
||||
BRed="\[\033[1;31m\]" # Red |
||||
BGreen="\[\033[1;32m\]" # Green |
||||
BYellow="\[\033[1;33m\]" # Yellow |
||||
BBlue="\[\033[1;34m\]" # Blue |
||||
BPurple="\[\033[1;35m\]" # Purple |
||||
BCyan="\[\033[1;36m\]" # Cyan |
||||
BWhite="\[\033[1;37m\]" # White |
||||
|
||||
# Underline |
||||
UBlack="\[\033[4;30m\]" # Black |
||||
URed="\[\033[4;31m\]" # Red |
||||
UGreen="\[\033[4;32m\]" # Green |
||||
UYellow="\[\033[4;33m\]" # Yellow |
||||
UBlue="\[\033[4;34m\]" # Blue |
||||
UPurple="\[\033[4;35m\]" # Purple |
||||
UCyan="\[\033[4;36m\]" # Cyan |
||||
UWhite="\[\033[4;37m\]" # White |
||||
|
||||
# Background |
||||
On_Black="\[\033[40m\]" # Black |
||||
On_Red="\[\033[41m\]" # Red |
||||
On_Green="\[\033[42m\]" # Green |
||||
On_Yellow="\[\033[43m\]" # Yellow |
||||
On_Blue="\[\033[44m\]" # Blue |
||||
On_Purple="\[\033[45m\]" # Purple |
||||
On_Cyan="\[\033[46m\]" # Cyan |
||||
On_White="\[\033[47m\]" # White |
||||
|
||||
# High Intensty |
||||
IBlack="\[\033[0;90m\]" # Black |
||||
IRed="\[\033[0;91m\]" # Red |
||||
IGreen="\[\033[0;92m\]" # Green |
||||
IYellow="\[\033[0;93m\]" # Yellow |
||||
IBlue="\[\033[0;94m\]" # Blue |
||||
IPurple="\[\033[0;95m\]" # Purple |
||||
ICyan="\[\033[0;96m\]" # Cyan |
||||
IWhite="\[\033[0;97m\]" # White |
||||
|
||||
# Bold High Intensty |
||||
BIBlack="\[\033[1;90m\]" # Black |
||||
BIRed="\[\033[1;91m\]" # Red |
||||
BIGreen="\[\033[1;92m\]" # Green |
||||
BIYellow="\[\033[1;93m\]" # Yellow |
||||
BIBlue="\[\033[1;94m\]" # Blue |
||||
BIPurple="\[\033[1;95m\]" # Purple |
||||
BICyan="\[\033[1;96m\]" # Cyan |
||||
BIWhite="\[\033[1;97m\]" # White |
||||
|
||||
# High Intensty backgrounds |
||||
On_IBlack="\[\033[0;100m\]" # Black |
||||
On_IRed="\[\033[0;101m\]" # Red |
||||
On_IGreen="\[\033[0;102m\]" # Green |
||||
On_IYellow="\[\033[0;103m\]" # Yellow |
||||
On_IBlue="\[\033[0;104m\]" # Blue |
||||
On_IPurple="\[\033[10;95m\]" # Purple |
||||
On_ICyan="\[\033[0;106m\]" # Cyan |
||||
On_IWhite="\[\033[0;107m\]" # White |
||||
#}}} |
||||
# Various variables you might want for your PS1 prompt instead |
||||
Time12h="\T" |
||||
Time12a="\@" |
||||
PathShort="\w" |
||||
PathFull="\W" |
||||
NewLine="\n" |
||||
Jobs="\j" |
||||
Username="\u" |
||||
|
||||
# Default PS1 |
||||
# \u@\h [\w]$ |
||||
export PS1=$Username" "$Yellow$PathShort$Color_Off'$(git branch &>/dev/null;\ |
||||
if [ $? -eq 0 ]; then \ |
||||
echo "$(echo `git status` | grep "nothing to commit" > /dev/null 2>&1; \ |
||||
if [ "$?" -eq "0" ]; then \ |
||||
echo "'$Green'"$(__git_ps1 " (%s)");\ |
||||
else \ |
||||
echo "'$Red'"$(__git_ps1 " (%s)");\ |
||||
fi)"; \ |
||||
fi)'$Color_Off'\$ ' |
||||
|
||||
# export PS1="\[\033[0;97m\]\u \[\033[0;33m\]\w"'$(git branch &>/dev/null;\ |
||||
# if [ $? -eq 0 ]; then \ |
||||
# echo "$(echo `git status` | grep "nothing to commit" > /dev/null 2>&1; \ |
||||
# if [ "$?" -eq "0" ]; then \ |
||||
# echo "\[\033[0;32m\]"$(__git_ps1 " (%s)");\ |
||||
# else \ |
||||
# echo "\[\033[0;91m\]"$(__git_ps1 " (%s)");\ |
||||
# fi)"; \ |
||||
# fi)\[\033[0m\]\$ ' |
||||
function _update_ps1() { |
||||
export PS1="$(~/.config/powerline-shell/powerline-shell.py $? 2> /dev/null)" |
||||
} |
||||
|
||||
if [ "$TERM" != "linux" ]; then |
||||
PROMPT_COMMAND="_update_ps1; $PROMPT_COMMAND" |
||||
fi |
||||
|
||||
[ -r "$HOME/.smartcd_config" ] && ( [ -n $BASH_VERSION ] || [ -n $ZSH_VERSION ] ) && source ~/.smartcd_config |
||||
|
||||
#If on work computer, cd into sites |
||||
|
||||
clear |
||||
screenfetch |
||||
set -o vi |
||||
|
||||
# vim: foldmethod=marker |
@ -0,0 +1,26 @@ |
||||
#!/usr/bin/bash |
||||
if [ $1 ]; then |
||||
case $1 in |
||||
-h|--help) |
||||
echo "Add entrys to your hosts file" |
||||
echo "" |
||||
echo -e "addhost domain.com\t\t\t\tadds domain.com to your hosts and points to local machine" |
||||
echo -e "addhost (alex|aaron|jonathan) domain.com\tadds domain.com to your hosts and points to persons machine" |
||||
;; |
||||
alex) |
||||
echo -e "10.0.1.201\t$2" | sudo tee -a /etc/hosts |
||||
;; |
||||
aaron) |
||||
echo -e "10.0.1.202\t$2" | sudo tee -a /etc/hosts |
||||
;; |
||||
jonathan) |
||||
echo -e "10.0.1.203\t$2" | sudo tee -a /etc/hosts |
||||
;; |
||||
*) |
||||
echo -e "127.0.0.1\t$1" | sudo tee -a /etc/hosts |
||||
;; |
||||
esac |
||||
else |
||||
echo "You need to add at least a domain" |
||||
fi |
||||
|
@ -0,0 +1,3 @@ |
||||
#!/usr/bin/bash |
||||
v=$(xset -q | grep Caps) |
||||
echo ${v:7:17} |
@ -0,0 +1,22 @@ |
||||
#!/usr/bin/env bash |
||||
|
||||
TITLE="$1" |
||||
shift |
||||
|
||||
enscript -1 --media=A4 \ |
||||
--toc \ |
||||
--header '%H - $N | | page $% of $= in file $v' \ |
||||
--font "Menlo-Regular@8.5" \ |
||||
--header-font "Menlo-Bold@10" \ |
||||
--margins=60:60:18:60 \ |
||||
--fancy-header=sjl \ |
||||
--title $TITLE \ |
||||
--baselineskip 3 \ |
||||
--line-numbers \ |
||||
--highlight \ |
||||
--color \ |
||||
--mark-wrapped-lines=arrow \ |
||||
-p - \ |
||||
--word-wrap $* \ |
||||
| ps2pdf -i -o code.pdf |
||||
|
@ -0,0 +1,157 @@ |
||||
#!/usr/bin/env python3 |
||||
|
||||
""" |
||||
csvtomd 0.2.1 |
||||
|
||||
Convert your CSV files into Markdown tables. |
||||
|
||||
More info: http://github.com/mplewis/csvtomd |
||||
""" |
||||
|
||||
import argparse |
||||
import csv |
||||
import sys |
||||
|
||||
|
||||
def check_negative(value): |
||||
try: |
||||
ivalue = int(value) |
||||
except ValueError: |
||||
raise argparse.ArgumentTypeError( |
||||
'"%s" must be an integer' % value) |
||||
if ivalue < 0: |
||||
raise argparse.ArgumentTypeError( |
||||
'"%s" must not be a negative value' % value) |
||||
return ivalue |
||||
|
||||
|
||||
def pad_to(unpadded, target_len): |
||||
""" |
||||
Pad a string to the target length in characters, or return the original |
||||
string if it's longer than the target length. |
||||
""" |
||||
under = target_len - len(unpadded) |
||||
if under <= 0: |
||||
return unpadded |
||||
return unpadded + (' ' * under) |
||||
|
||||
|
||||
def normalize_cols(table): |
||||
""" |
||||
Pad short rows to the length of the longest row to help render "jagged" |
||||
CSV files |
||||
""" |
||||
longest_row_len = max([len(row) for row in table]) |
||||
for row in table: |
||||
while len(row) < longest_row_len: |
||||
row.append('') |
||||
return table |
||||
|
||||
|
||||
def pad_cells(table): |
||||
"""Pad each cell to the size of the largest cell in its column.""" |
||||
col_sizes = [max(map(len, col)) for col in zip(*table)] |
||||
for row in table: |
||||
for cell_num, cell in enumerate(row): |
||||
row[cell_num] = pad_to(cell, col_sizes[cell_num]) |
||||
return table |
||||
|
||||
|
||||
def horiz_div(col_widths, horiz, vert, padding): |
||||
""" |
||||
Create the column dividers for a table with given column widths. |
||||
|
||||
col_widths: list of column widths |
||||
horiz: the character to use for a horizontal divider |
||||
vert: the character to use for a vertical divider |
||||
padding: amount of padding to add to each side of a column |
||||
""" |
||||
horizs = [horiz * w for w in col_widths] |
||||
div = ''.join([padding * horiz, vert, padding * horiz]) |
||||
return div.join(horizs) |
||||
|
||||
|
||||
def add_dividers(row, divider, padding): |
||||
"""Add dividers and padding to a row of cells and return a string.""" |
||||
div = ''.join([padding * ' ', divider, padding * ' ']) |
||||
return div.join(row) |
||||
|
||||
|
||||
def md_table(table, *, padding=1, divider='|', header_div='-'): |
||||
""" |
||||
Convert a 2D array of items into a Markdown table. |
||||
|
||||
padding: the number of padding spaces on either side of each divider |
||||
divider: the vertical divider to place between columns |
||||
header_div: the horizontal divider to place between the header row and |
||||
body cells |
||||
""" |
||||
table = normalize_cols(table) |
||||
table = pad_cells(table) |
||||
header = table[0] |
||||
body = table[1:] |
||||
|
||||
col_widths = [len(cell) for cell in header] |
||||
horiz = horiz_div(col_widths, header_div, divider, padding) |
||||
|
||||
header = add_dividers(header, divider, padding) |
||||
body = [add_dividers(row, divider, padding) for row in body] |
||||
|
||||
table = [header, horiz] |
||||
table.extend(body) |
||||
table = [row.rstrip() for row in table] |
||||
return '\n'.join(table) |
||||
|
||||
|
||||
def csv_to_table(file, delimiter): |
||||
return list(csv.reader(file, delimiter=delimiter)) |
||||
|
||||
|
||||
def main(): |
||||
parser = argparse.ArgumentParser( |
||||
description='Read one or more CSV files and output their contents in ' |
||||
'the form of Markdown tables.') |
||||
parser.add_argument('files', metavar='csv_file', type=str, nargs='*', |
||||
default=['-'], |
||||
help="One or more CSV files to be converted. " |
||||
"Use - for stdin.") |
||||
parser.add_argument('-n', '--no-filenames', action='store_false', |
||||
dest='show_filenames', |
||||
help="Don't display filenames when outputting " |
||||
"multiple Markdown tables.") |
||||
parser.add_argument('-p', '--padding', type=check_negative, default=2, |
||||
help="The number of spaces to add between table cells " |
||||
"and column dividers. Default is 2 spaces.") |
||||
parser.add_argument('-d', '--delimiter', default=',', |
||||
help='The delimiter to use when parsing CSV data. ' |
||||
'Default is "%(default)s"') |
||||
|
||||
args = parser.parse_args() |
||||
first = True |
||||
|
||||
if '-' in args.files and len(args.files) > 1: |
||||
print('Standard input can only be used alone.', file=sys.stderr) |
||||
exit(1) |
||||
for file_num, filename in enumerate(args.files): |
||||
# Print space between consecutive tables |
||||
if not first: |
||||
print('') |
||||
else: |
||||
first = False |
||||
# Read the CSV files |
||||
if filename == '-': |
||||
table = csv_to_table(sys.stdin, args.delimiter) |
||||
else: |
||||
with open(filename, 'rU') as f: |
||||
table = csv_to_table(f, args.delimiter) |
||||
# Print filename for each table if --no-filenames wasn't passed and |
||||
# more than one CSV was provided |
||||
file_count = len(args.files) |
||||
if args.show_filenames and file_count > 1: |
||||
print(filename + '\n') |
||||
# Generate and print Markdown table |
||||
print(md_table(table, padding=args.padding)) |
||||
|
||||
|
||||
if __name__ == '__main__': |
||||
main() |
@ -0,0 +1,80 @@ |
||||
#!/usr/bin/bash |
||||
|
||||
if [ -f $1 ] ; then |
||||
case $1 in |
||||
*.tar.bz2) |
||||
if [ "$2" ]; then |
||||
tar xvjf $1 -C $2 |
||||
else |
||||
tar xvjf $1 |
||||
fi |
||||
;; |
||||
*.tar.gz) |
||||
if [ "$2" ]; then |
||||
tar xvzf $1 -C $2 |
||||
else |
||||
tar xvzf $1 |
||||
fi |
||||
;; |
||||
*.bz2) |
||||
if [ "$2" ]; then |
||||
bunzip -c $1 > $2 |
||||
else |
||||
bunzip $1 |
||||
fi |
||||
;; |
||||
#*.rar) rar x $1 ;; |
||||
*.gz) |
||||
if [ "$2" ]; then |
||||
gunzip -c $1 > $2 |
||||
else |
||||
gunzip $1 |
||||
fi |
||||
;; |
||||
*.tar) |
||||
if [ "$2" ]; then |
||||
tar xvf $1 -C $2 |
||||
else |
||||
tar xvf $1 |
||||
fi |
||||
;; |
||||
*.tbz2) |
||||
if [ "$2" ]; then |
||||
tar xvjf $1 -C $2 |
||||
else |
||||
tar xvjf $1 |
||||
fi |
||||
;; |
||||
*.tgz) |
||||
if [ "$2" ]; then |
||||
tar xvzf $1 -C $2 |
||||
else |
||||
tar xvzf $1 |
||||
fi |
||||
;; |
||||
*.zip) |
||||
if [ "$2" ]; then |
||||
unzip $1 -d $2 |
||||
else |
||||
unzip $1 |
||||
fi |
||||
;; |
||||
*.Z) |
||||
if [ "$2" ]; then |
||||
uncompress -c $1 > $2 |
||||
else |
||||
uncompress $1 |
||||
fi |
||||
;; |
||||
*.7z) |
||||
if [ "$2" ]; then |
||||
7z x $1 -o$2 |
||||
else |
||||
7z x $1 |
||||
fi |
||||
;; |
||||
*) echo "don't know how to extract '$1'..." ;; |
||||
esac |
||||
else |
||||
echo "'$1' is not a valid file!" |
||||
fi |
@ -0,0 +1,75 @@ |
||||
#!/usr/bin/bash |
||||
|
||||
function help() { |
||||
cat <<HELP |
||||
Git Clean |
||||
https://jonathanh.co.uk |
||||
|
||||
Some code came from Ben Alman |
||||
http://benalman.com/ |
||||
|
||||
|
||||
Usage: $(basename "$0") [command] |
||||
|
||||
Commands: |
||||
clean Remove current unstaged changes/untracked files** |
||||
cleanall Remove all saved tags, unstaged changes and untracked files** |
||||
|
||||
** This action is destructive and cannot be undone! |
||||
|
||||
Description: |
||||
Cleans unstaged changes and untracked files |
||||
|
||||
Copyright (c) 2014 "Cowboy" Ben Alman |
||||
Licensed under the MIT license. |
||||
http://benalman.com/about/license/ |
||||
HELP |
||||
} |
||||
|
||||
function usage() { |
||||
echo "Usage: $(basename "$0") [clean | cleanall]" |
||||
} |
||||
|
||||
function git_head_sha() { |
||||
git rev-parse --short HEAD |
||||
} |
||||
|
||||
# Get absolute path to root of Git repo |
||||
function git_repo_toplevel() { |
||||
git rev-parse --show-toplevel |
||||
} |
||||
|
||||
# Clean (permanently) current changes and remove the current saved tag |
||||
function clean() { |
||||
local head_sha=$(git_head_sha) |
||||
git tag -d "git-jump-$head_sha" &>/dev/null |
||||
if [[ $? == 0 ]]; then |
||||
echo "Removed stored data for commit $head_sha." |
||||
fi |
||||
local repo_root="$(git_repo_toplevel)" |
||||
git reset HEAD "$repo_root" >/dev/null |
||||
git clean -f -d -q -- "$repo_root" >/dev/null |
||||
git checkout -- "$repo_root" >/dev/null |
||||
echo "Unstaged changes and untracked files removed." |
||||
} |
||||
|
||||
# Remove (permanently) all saved tags |
||||
function clean_all_tags() { |
||||
git for-each-ref refs/tags --format='%(refname:short)' | \ |
||||
while read tag; do |
||||
if [[ "$tag" =~ ^git-jump- ]]; then |
||||
git tag -d "$tag" |
||||
fi |
||||
done |
||||
} |
||||
|
||||
# Handle CLI arguments |
||||
if [[ "$1" == "clean" ]]; then |
||||
clean |
||||
elif [[ "$1" == "cleanall" ]]; then |
||||
clean_all_tags |
||||
clean |
||||
else |
||||
usage |
||||
exit 1 |
||||
fi |
@ -0,0 +1,24 @@ |
||||
#!/usr/bin/env bash |
||||
|
||||
test -z "$1" && echo "submodule required" 1>&2 && exit 1 |
||||
#cd "$(git root)" |
||||
test ! -f .gitmodules && echo ".gitmodules file not found" 1>&2 && exit 2 |
||||
|
||||
NAME="$(echo "$1" | sed 's/\/$//g')" |
||||
test -z \ |
||||
"$(git config --file=.gitmodules submodule."$NAME".url)" \ |
||||
&& echo "submodule not found" 1>&2 && exit 3 |
||||
|
||||
# 1. Delete the relevant section from .git/config and clean submodule files |
||||
git submodule deinit -f "$NAME" || exit 4 |
||||
rmdir "$NAME" |
||||
rm -rf .git/modules/"$NAME" |
||||
# 2. Delete the relevant line from .gitmodules |
||||
git config --file=.gitmodules --remove-section submodule."$NAME" |
||||
git add .gitmodules |
||||
# 3. Run git rm --cached path_to_submodule |
||||
git rm --cached -rf "$NAME" |
||||
# 4. Need to confirm and commit the changes for yourself |
||||
echo |
||||
echo "Now submodule $NAME is deleted." |
||||
echo 'Confirm with `git submodule status` and commit the changes for yourself.' |
@ -0,0 +1,158 @@ |
||||
#!/usr/bin/bash |
||||
|
||||
function help() { |
||||
cat <<HELP |
||||
Git Jump (Forward & Back) |
||||
http://benalman.com/ |
||||
|
||||
Modified slightly by Jonathan Hodgson |
||||
https://jonathanh.co.uk/ |
||||
|
||||
Copyright (c) 2017 Jonathan Hodgson |
||||
Licensed under the MIT license. |
||||
https://en.wikipedia.org/wiki/MIT_License |
||||
|
||||
Usage: $(basename "$0") [command] |
||||
|
||||
Commands: |
||||
next Jump forward to the next commit in this branch |
||||
prev Jump backward to the next commit in this branch |
||||
|
||||
|
||||
Git config: |
||||
git-jump.branch Branch to jump through. If not set, defaults to master |
||||
|
||||
Description: |
||||
"Replay" Git commits by moving forward / backward through a branch's |
||||
history. Before jumping, any current unstaged changes and untracked |
||||
files are saved in a tag for later retrieval, which is restored when |
||||
jumped back to. |
||||
|
||||
Original Licence: |
||||
Copyright (c) 2014 "Cowboy" Ben Alman |
||||
Licensed under the MIT license. |
||||
http://benalman.com/about/license/ |
||||
HELP |
||||
} |
||||
|
||||
function usage() { |
||||
echo "Usage: $(basename "$0") [next | prev]" |
||||
} |
||||
|
||||
# Get branch stored in Git config or default to master |
||||
git_branch="$(git config git-jump.branch || echo "master")" |
||||
|
||||
# Get some (short) SHAs |
||||
function git_branch_sha() { |
||||
git rev-parse --short "$git_branch" |
||||
} |
||||
function git_head_sha() { |
||||
git rev-parse --short HEAD |
||||
} |
||||
function git_prev_sha() { |
||||
git log --format='%h' "$git_branch" "$@" | awk "/^$(git_head_sha)/{getline; print}" |
||||
} |
||||
function git_next_sha() { |
||||
git_prev_sha --reverse |
||||
} |
||||
|
||||
# Get absolute path to root of Git repo |
||||
function git_repo_toplevel() { |
||||
git rev-parse --show-toplevel |
||||
} |
||||
|
||||
# Get subject of specified commit |
||||
function git_commit_subject() { |
||||
git log --format='%s' -n 1 $1 |
||||
} |
||||
|
||||
# Save changes for later retrieval |
||||
function save() { |
||||
local status="" |
||||
local head_sha=$(git_head_sha) |
||||
# Checkout current HEAD by SHA to force detached state |
||||
git checkout -q $head_sha |
||||
# Add all files in repo |
||||
git add "$(git_repo_toplevel)" |
||||
# Commit changes (if there were any) |
||||
git commit --no-verify -m "Git Jump: saved changes for $head_sha" >/dev/null |
||||
# If the commit was successful, tag it (overwriting any previous tag) |
||||
if [[ $? == 0 ]]; then |
||||
status="*" |
||||
git tag -f "git-jump-$head_sha" >/dev/null |
||||
fi |
||||
echo "Previous HEAD was $head_sha$status, $(git_commit_subject $head_sha)" |
||||
} |
||||
|
||||
# Restore previously-saved changes |
||||
function restore() { |
||||
local status="" |
||||
# Save current changes before restoring |
||||
save |
||||
# Attempt to restore saved changes for specified commit |
||||
git checkout "git-jump-$1" 2>/dev/null |
||||
if [[ $? == 0 ]]; then |
||||
# If the restore was successful, figure out exactly what was saved, check |
||||
# out the original commit, then restore the saved changes on top of it |
||||
status="*" |
||||
local patch="$(git format-patch HEAD^ --stdout)" |
||||
git checkout HEAD^ 2>/dev/null |
||||
echo "$patch" | git apply - |
||||
else |
||||
# Otherwise, just restore the original commit |
||||
git checkout "$1" 2>/dev/null |
||||
fi |
||||
echo "HEAD is now $1$status, $(git_commit_subject $1)" |
||||
} |
||||
|
||||
# Jump to next commit |
||||
function next() { |
||||
local next_sha=$(git_next_sha) |
||||
if [[ "$next_sha" == "$(git_head_sha)" ]]; then |
||||
# Abort if no more commits |
||||
echo "Already at last commit in $git_branch. Congratulations!" |
||||
else |
||||
# Checkout branch by name if at its HEAD |
||||
if [[ "$next_sha" == "$(git_branch_sha)" ]]; then |
||||
next_sha="$git_branch" |
||||
fi |
||||
echo "Jumping ahead to next commit." |
||||
restore $next_sha |
||||
fi |
||||
} |
||||
|
||||
# Jump to previous commit |
||||
function prev() { |
||||
local prev_sha=$(git_prev_sha) |
||||
if [[ "$prev_sha" == "$(git_head_sha)" ]]; then |
||||
# Abort if no more commits |
||||
echo "Already at first commit in $git_branch." |
||||
else |
||||
echo "Jumping back to previous commit." |
||||
restore $prev_sha |
||||
fi |
||||
} |
||||
|
||||
# Show help if requested |
||||
if [[ "$1" == "--help" || "$1" == "-h" ]]; then |
||||
help |
||||
exit |
||||
fi |
||||
|
||||
# Check if branch is valid |
||||
git rev-parse "$git_branch" &>/dev/null |
||||
if [[ $? != 0 ]]; then |
||||
echo "Error: Branch \"$git_branch\" does not appear to be valid." |
||||
echo "Try $(basename "$0") --help for more information." |
||||
exit 1 |
||||
fi |
||||
|
||||
# Handle CLI arguments |
||||
if [[ "$1" == "next" ]]; then |
||||
next |
||||
elif [[ "$1" == "prev" ]]; then |
||||
prev |
||||
else |
||||
usage |
||||
exit 1 |
||||
fi |
@ -0,0 +1,12 @@ |
||||
#!/bin/sh |
||||
# |
||||
# Nukes a branch locally and on the origin remote. |
||||
# |
||||
# $1 - Branch name. |
||||
# |
||||
# Examples |
||||
# |
||||
# git nuke add-git-nuke |
||||
|
||||
git branch -D $1 |
||||
git push origin :$1 |
@ -0,0 +1,149 @@ |
||||
#!/usr/bin/env bash |
||||
|
||||
# Opens the BitBucket/GitHub page for a repo/branch in your browser. |
||||
# |
||||
# git open |
||||
# git open [remote] [branch] |
||||
|
||||
|
||||
# are we in a git repo? |
||||
git rev-parse --is-inside-work-tree &>/dev/null |
||||
|
||||
if [[ $? != 0 ]]; then |
||||
echo "Not a git repository." 1>&2 |
||||
exit 1 |
||||
fi |
||||
|
||||
|
||||
# assume origin if not provided |
||||
# fallback to upstream if neither is present. |
||||
remote="origin" |
||||
if [ -n "$1" ]; then |
||||
if [ "$1" == "issue" ]; then |
||||
currentBranch=$(git symbolic-ref -q --short HEAD) |
||||
regex='^issue' |
||||
if [[ $currentBranch =~ $regex ]]; then |
||||
issue=${currentBranch#*#} |
||||
else |
||||
echo "'git open issue' expect branch naming to be issues/#123" 1>&2 |
||||
exit 1 |
||||
fi |
||||
else |
||||
remote="$1" |
||||
fi |
||||
fi |
||||
|
||||
remote_url="remote.${remote}.url" |
||||
|
||||
giturl=$(git config --get "$remote_url") |
||||
if [ -z "$giturl" ]; then |
||||
echo "$remote_url not set." 1>&2 |
||||
exit 1 |
||||
fi |
||||
|
||||
# get current branch |
||||
if [ -z "$2" ]; then |
||||
branch=$(git symbolic-ref -q --short HEAD) |
||||
else |
||||
branch="$2" |
||||
fi |
||||
|
||||
# Make # and % characters url friendly |
||||
# github.com/paulirish/git-open/pull/24 |
||||
branch=${branch//%/%25} && branch=${branch//#/%23} |
||||
|
||||
# URL normalization |
||||
# GitHub gists |
||||
if grep -q gist.github <<<$giturl; then |
||||
giturl=${giturl/git\@gist.github\.com\:/https://gist.github.com/} |
||||
providerUrlDifference=tree |
||||
|
||||
# GitHub |
||||
elif grep -q github <<<$giturl; then |
||||
giturl=${giturl/git\@github\.com\:/https://github.com/} |
||||
|
||||
# handle SSH protocol (links like ssh://git@github.com/user/repo) |
||||
giturl=${giturl/#ssh\:\/\/git\@github\.com\//https://github.com/} |
||||
|
||||
providerUrlDifference=tree |
||||
|
||||
# Bitbucket |
||||
elif grep -q bitbucket <<<$giturl; then |
||||
giturl=${giturl/git\@bitbucket\.org\:/https://bitbucket.org/} |
||||
# handle SSH protocol (change ssh://https://bitbucket.org/user/repo to https://bitbucket.org/user/repo) |
||||
giturl=${giturl/#ssh\:\/\/git\@/https://} |
||||
|
||||
rev="$(git rev-parse HEAD)" |
||||
git_pwd="$(git rev-parse --show-prefix)" |
||||
providerUrlDifference="src/${rev}/${git_pwd}" |
||||
branch="?at=${branch}" |
||||
|
||||
# Atlassian Bitbucket Server |
||||
elif grep -q "/scm/" <<<$giturl; then |
||||
re='(.*)/scm/(.*)/(.*)\.git' |
||||
if [[ $giturl =~ $re ]]; then |
||||
giturl=${BASH_REMATCH[1]}/projects/${BASH_REMATCH[2]}/repos/${BASH_REMATCH[3]} |
||||
providerUrlDifference=browse |
||||
branch="?at=refs%2Fheads%2F${branch}" |
||||
fi |
||||
|
||||
# GitLab |
||||
else |
||||
# custom GitLab |
||||
gitlab_domain=$(git config --get gitopen.gitlab.domain) |
||||
gitlab_ssh_domain=$(git config --get gitopen.gitlab.ssh.domain) |
||||
gitlab_ssh_domain=${gitlab_ssh_domain:-$gitlab_domain} |
||||
gitlab_ssh_port=$(git config --get gitopen.gitlab.ssh.port) |
||||
|
||||
gitlab_protocol=$(git config --get gitopen.gitlab.protocol) |
||||
if [ -z "$gitlab_protocol" ]; then |
||||
gitlab_protocol=https |
||||
fi |
||||
|
||||
if [ -n "$gitlab_domain" ]; then |
||||
if egrep -q "${gitlab_domain}|${gitlab_ssh_domain}" <<<$giturl; then |
||||
|
||||
# Handle GitLab's default SSH notation (like git@gitlab.domain.com:user/repo) |
||||
giturl=${giturl/git\@${gitlab_ssh_domain}\:/${gitlab_protocol}://${gitlab_domain}/} |
||||
|
||||
# handle SSH protocol (links like ssh://git@gitlab.domain.com/user/repo) |
||||
giturl=${giturl/#ssh\:\/\//${gitlab_protocol}://} |
||||
|
||||
# remove git@ from the domain |
||||
giturl=${giturl/git\@${gitlab_ssh_domain}/${gitlab_domain}/} |
||||
|
||||
# remove SSH port |
||||
if [ -n "$gitlab_ssh_port" ]; then |
||||
giturl=${giturl/\/:${gitlab_ssh_port}\///} |
||||
fi |
||||
providerUrlDifference=tree |
||||
fi |
||||
# hosted GitLab |
||||
elif grep -q gitlab <<<$giturl; then |
||||
giturl=${giturl/git\@gitlab\.com\:/https://gitlab.com/} |
||||
providerUrlDifference=tree |
||||
fi |
||||
fi |
||||
giturl=${giturl%\.git} |
||||
|
||||
if [ -n "$issue" ]; then |
||||
giturl="${giturl}/issues/${issue}" |
||||
elif [ -n "$branch" ]; then |
||||
giturl="${giturl}/${providerUrlDifference}/${branch}" |
||||
fi |
||||
|
||||
# simplify URL for master |
||||
giturl=${giturl/tree\/master/} |
||||
|
||||
# get current open browser command |
||||
case $( uname -s ) in |
||||
Darwin) open=open;; |
||||
MINGW*) open=start;; |
||||
CYGWIN*) open=cygstart;; |
||||
MSYS*) open="powershell.exe –NoProfile Start";; |
||||
*) open=${BROWSER:-xdg-open};; |
||||
esac |
||||
|
||||
# open it in a browser |
||||
$open "$giturl" &> /dev/null |
||||
exit $? |
@ -0,0 +1,349 @@ |
||||
#!/usr/bin/env bash |
||||
|
||||
|
||||
# usage info |
||||
usage() { |
||||
cat <<EOF |
||||
Usage: git recall [options] |
||||
Options: |
||||
-d, --date Show logs for last n days. |
||||
-a, --author Author name. |
||||
-f, --fetch fetch commits. |
||||
-h, --help This message. |
||||
-v, --version Show version. |
||||
-- End of options. |
||||
EOF |
||||
} |
||||
|
||||
|
||||
# Global variables |
||||
SINCE="1 days ago" # show logs for last day by default |
||||
AUTHOR="" |
||||
FETCH=false |
||||
GIT_FORMAT="" |
||||
GIT_LOG="" |
||||
COMMITS="" |
||||
COMMITS_UNCOL=() # commits without colors |
||||
LESSKEY=false |
||||
SED_BIN="" # Sed option to use according OS. |
||||
VERSION="1.1.10" |
||||
|
||||
# Are we in a git repo? |
||||
if [[ ! -d ".git" ]] && ! git rev-parse --git-dir &>/dev/null; then |
||||
echo "abort: not a git repository." 1>&2 |
||||
exit 1 |
||||
fi |
||||
|
||||
# Parse options |
||||
while [[ "$1" =~ ^- && ! "$1" == "--" ]]; do |
||||
case $1 in |
||||
-v | --version ) |
||||
echo "$version" |
||||
exit |
||||
;; |
||||
-d | --date ) |
||||
SINCE="$2 days ago" |
||||
shift; |
||||
;; |
||||
-a | --author ) |
||||
AUTHOR="$2" |
||||
shift |
||||
;; |
||||
-f | --fetch ) |
||||
FETCH=true |
||||
;; |
||||
-h | --help ) |
||||
usage |
||||
exit |
||||
;; |
||||
* ) |
||||
echo "abort: unknown argument" 1>&2 |
||||
exit 1 |
||||
esac |
||||
shift |
||||
done |
||||
if [[ "$1" == "--" ]]; then shift; fi |
||||
|
||||
|
||||
# Colored output. |
||||
function colored() { |
||||
GREEN=$(tput setaf 4) |
||||
YELLOW=$(tput setaf 3) |
||||
NORMAL=$(tput sgr0) |
||||
REVERSE=$(tput rev) |
||||
} |
||||
|
||||
# Uncolored output. |
||||
function uncolored() { |
||||
GREEN="" |
||||
YELLOW="" |
||||
NORMAL="" |
||||
REVERSE="" |
||||
} |
||||
|
||||
# Enable colors if supported by terminal. |
||||
if [[ -t 1 ]] && [[ -n "$TERM" ]] && which tput &>/dev/null && tput colors &>/dev/null; then |
||||
ncolors=$(tput colors) |
||||
if [[ -n "$ncolors" ]] && [[ "$ncolors" -ge 8 ]] ; then |
||||
colored |
||||
else |
||||
uncolored |
||||
fi |
||||
else |
||||
uncolored |
||||
fi |
||||
|
||||
# Check if lesskey is installed. |
||||
if command -v lesskey &> /dev/null; then |
||||
LESSKEY=true |
||||
fi |
||||
|
||||
# Set AUTHOR to current user if no param passed or display for all users if param equal to "all". |
||||
if [[ ! -n $AUTHOR ]]; then |
||||
AUTHOR=$(git config user.name 2>/dev/null) |
||||
elif [[ $AUTHOR = "all" ]]; then |
||||
AUTHOR=".*" |
||||
fi |
||||
|
||||
# Fetch changes before. |
||||
if [[ $FETCH == true ]]; then |
||||
echo "${GREEN}Fetching changes...${NORMAL}" |
||||
git fetch --all &> /dev/null |
||||
tput cuu1 |
||||
tput ed # clear screen |
||||
fi |
||||
|
||||
# Log template. |
||||
GIT_FORMAT="%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset" |
||||
|
||||
# Log command. |
||||
GIT_LOG="git log --pretty=format:'${GIT_FORMAT}' |
||||
--author \"$AUTHOR\" |
||||
--since \"$SINCE\" --abbrev-commit" |
||||
|
||||
# Change temporary the IFS to store GIT_LOG's output into an array. |
||||
IFS=$'\n' |
||||
COMMITS=($(eval ${GIT_LOG} 2>/dev/null)) |
||||
unset IFS |
||||
|
||||
NI=${#COMMITS[@]} # Total number of items. |
||||
SN=$(( `tput lines` - 1 )) # Screen's number of lines. |
||||
CN=$(tput cols) # Screen's number of columns. |
||||
TN=$(( $NI < $((SN -1)) ? $NI : $((SN -1)))) # Number of lines that we will display. |
||||
OFFSET=0 #Incremented by one each time a commit's length is higher than teminal width. |
||||
|
||||
# If there is no items, exit. |
||||
if [[ $NI = 0 ]]; then |
||||
if [[ $AUTHOR = ".*" ]]; then |
||||
echo "${YELLOW}All contributors did nothing during this period.${NORMAL}" && exit 0 |
||||
else |
||||
echo "${YELLOW}The contributor \"${AUTHOR}\" did nothing during this period.${NORMAL}" && exit 0 |
||||
fi |
||||
fi |
||||
|
||||
# Set correct sed option according OS's type |
||||
case "$OSTYPE" in |
||||
darwin*) SED_BIN="sed -E" ;; |
||||
*) SED_BIN="sed -r" ;; |
||||
esac |
||||
|
||||
# Create array with uncolred commits (removing escape sequences using sed) |
||||
for elt in "${COMMITS[@]}" |
||||
do |
||||
ELT="$(echo "$elt" | $SED_BIN "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g")" # remove colors escape codes |
||||
COMMITS_UNCOL+=("$ELT") |
||||
done |
||||
# Add +1 to OFFSET if a commit's length is bigger than the current terminal session's width. (This is to fix a redraw issue) |
||||
for C in "${COMMITS_UNCOL[@]}" |
||||
do |
||||
if [[ ${#C} -gt $CN ]]; then |
||||
OFFSET=$(( OFFSET + 1 )) |
||||
fi |
||||
done |
||||
|
||||
# Set keys. |
||||
au="`echo -e '\e[A'`" # arrow up |
||||
au_1="k" # arrow up |
||||
ad="`echo -e '\e[B'`" # arrow down |
||||
ad_1="j" # arrow down |
||||
ec="`echo -e '\e'`" # escape |
||||
nl="`echo -e '\n'`" # newline |
||||
nl_1="e" # expand |
||||
co="c" # checkout |
||||
|
||||
# Create a temporary lesskey file to change the keybindings so the user can use the TAB key to quit less. (more convenient) |
||||
if [[ $LESSKEY = true ]]; then |
||||
echo "\t quit" | lesskey -o $HOME/.lsh_less_keys_tmp -- - &> /dev/null |
||||
fi |
||||
|
||||
## Get commit's diff. |
||||
function get_diff() { |
||||
ELT="$(echo "${COMMITS_UNCOL[$CP-1]}")" |
||||
DIFF_TIP=${ELT:0:7} |
||||
DIFF_CMD="git show $DIFF_TIP --color=always" |
||||
DIFF=$(eval ${DIFF_CMD} 2>/dev/null) |
||||
tmp_diff="$(echo "$DIFF" | $SED_BIN "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g")" # remove colors escape codes |
||||
off=$(echo "$tmp_diff" | grep -c ".\{$CN\}") #Number of lines in the diff that are longer than terminal width. |
||||
DIFF_LINES_NUMBER="$(echo "$DIFF" | wc -l)" |
||||
DIFF_LINES_NUMBER=$(( DIFF_LINES_NUMBER + off )) |
||||
} |
||||
|
||||
## This function will print the diff according the commit's tip. If the diff is too long, the result will be displayed using 'less'. |
||||
function print_diff() { |
||||
get_diff # get commit's diff |
||||
if [[ $(( TN + DIFF_LINES_NUMBER + OFFSET )) -ge $(( `tput lines` - 1 )) ]]; then |
||||
if [[ $LESSKEY = true ]]; then |
||||
echo "$DIFF" | less -r -k $HOME/.lsh_less_keys_tmp |
||||
else |
||||
echo "$DIFF" | less -r |
||||
fi |
||||
tput ed # Clear screen |
||||
else |
||||
stop=false |
||||
tput ed |
||||
for i in `seq 1 $TN` |
||||
do |
||||
echo -n "$NORMAL" |
||||
[[ $CP == "$i" ]] && echo -n "$REVERSE" |
||||
echo "${COMMITS[$i - 1]}" |
||||
[[ $CP == "$i" ]] && echo "$DIFF" |
||||
done |
||||
# Wait for user action. |
||||
while ! $stop |
||||
do |
||||
read -sn 1 key |
||||
case "$key" in |
||||
"$nl" | "$nl_1") |
||||
stop=true |
||||
;; |
||||
"q") |
||||
stop=true |
||||
END=true |
||||
;; |
||||
esac |
||||
done |
||||
[[ $END = false ]] && tput cuu $(( TN + DIFF_LINES_NUMBER + OFFSET )) && tput ed |
||||
[[ $END = true ]] && tput cuu 1 |
||||
fi |
||||
} |
||||
|
||||
function do_checkout(){ |
||||
ELT="$(echo "${COMMITS_UNCOL[$CP-1]}")" |
||||
DIFF_TIP=${ELT:0:7} |
||||
eval "git checkout $DIFF_TIP 2> /dev/null" |
||||
} |
||||
|
||||
# Calculate OFFSET to avoid bad redraw. |
||||
function calculate_offset { |
||||
tmp=1 |
||||
index=$(( SI -1 )) |
||||
while [[ $tmp -lt $SN ]] |
||||
do |
||||
el=${COMMITS_UNCOL[$index]} |
||||
if [[ ${#el} -gt $CN ]] && [[ $CP -lt $((SN -1)) ]]; then |
||||
OFFSET_2=$(( OFFSET_2 + 1 )) |
||||
tmp=$(( tmp + 1 )) |
||||
fi |
||||
tmp=$(( tmp + 1 )) |
||||
index=$(( index + 1 )) |
||||
done |
||||
} |
||||
|
||||
{ # capture stdout to stderr |
||||
|
||||
tput civis # hide cursor. |
||||
CP=1 # current position |
||||
SI=1 # index |
||||
END=false # end while loop |
||||
EXT=0 # Used to extend the number of lines to display. |
||||
|
||||
## Loops, reads inputs and prints commits until user presses 'q' to exit or TAB to show the diff. |
||||
while ! $END |
||||
do |
||||
END_INDEX=0 # Index for the last item to display |
||||
# When the number of item is higher than screen's number of lines, OFFSET_2 is recalculated each time we select a new item |
||||
# Set last index to print. (based on OFFSET) |
||||
if [[ $TN == $NI ]]; then |
||||
END_INDEX=$TN |
||||
OFFSET_2=$OFFSET |
||||
elif [[ $TN == $(( SN - 1 )) ]]; then |
||||
# Calculate new OFFSET. |
||||
if [[ $OFFSET != 0 ]]; then |
||||
[[ $CP -lt $((SN -1)) ]] && OFFSET_2=0 |
||||
EXT=1 |
||||
calculate_offset |
||||
fi |
||||
END_INDEX=$(( TN + SI -1 + EXT - OFFSET_2 )) |
||||
fi |
||||
|
||||
# Loop and echo commits |
||||
for i in `seq $SI $END_INDEX` |
||||
do |
||||
echo -n "$NORMAL" |
||||
[[ $CP == $i ]] && echo -n "$REVERSE" |
||||
echo "${COMMITS[$i - 1]}" |
||||
done |
||||
|
||||
read -sn 1 key |
||||
[[ "$key" == "$ec" ]] && |
||||
{ |
||||
read -sn 2 k2 |
||||
key="$key$k2" |
||||
} |
||||
|
||||
case "$key" in |
||||
|
||||
"$au" | "$au_1") |
||||
CP=$(( CP - 1 )) |
||||
[[ $CP == 0 ]] && [[ $SI == 1 ]] && [[ $TN == $(( SN - 1 )) ]] && CP=$NI && SI=$(( NI - SN + 2 + OFFSET_2 )) |
||||
[[ $CP == 0 ]] && [[ $SI == 1 ]] && [[ $TN == $NI ]] && CP=$TN |
||||
[[ $CP == $(( SI - 1 )) ]] && [[ $SI != 1 ]] && SI=$(( SI - 1 )) |
||||
|
||||
[[ $TN != $(( SN - 1 )) ]] && tput cuu $(( TN + OFFSET_2 )) |
||||
[[ $TN == $(( SN - 1 )) ]] && tput cuu $(( TN + EXT )) |
||||
[[ $SI != 1 ]] && tput ed # clear screen |
||||
;; |
||||
|
||||
"$ad" | "$ad_1") |
||||
CP=$(( CP + 1 )) |
||||
[[ $CP == $(( NI + 1 )) ]] && CP=1 && SI=1 |
||||
[[ $CP == $(( SN + SI - 1 + EXT - OFFSET_2 )) ]] && [[ $TN == $(( SN - 1 )) ]] && SI=$(( SI + 1 )) |
||||
|
||||
[[ $TN != $(( SN - 1 )) ]] && tput cuu $(( TN + OFFSET_2 )) |
||||
[[ $TN == $(( SN - 1 )) ]] && tput cuu $(( TN + EXT )) |
||||
[[ $SI != 1 ]] && tput ed # clear screen |
||||
[[ $SI = 1 ]] && [[ $CP = 1 ]] && tput ed # clear screen |
||||
;; |
||||
|
||||
"$nl" | "$nl_1") |
||||
[[ $TN == $NI ]] && tput cuu $(( TN + OFFSET_2 )) |
||||
[[ $TN != $NI ]] && tput cuu $(( TN + EXT )) |
||||
print_diff |
||||
;; |
||||
"$co") |
||||
si=false |
||||
END=true |
||||
do_checkout |
||||
tput cuu 1 #move cursor up one line. (remove extra line) |
||||
;; |
||||
|
||||
"q") |
||||
si=false |
||||
END=true |
||||
tput cuu 1 #move cursor up one line. (remove extra line) |
||||
;; |
||||
|
||||
* ) |
||||
tput cuu $(( TN + OFFSET_2 )) |
||||
esac |
||||
|
||||
done |
||||
|
||||
# remove temporary less keybindings |
||||
[[ $LESSKEY = true ]] && rm $HOME/.lsh_less_keys_tmp |
||||
|
||||
tput cnorm # unhide cursor |
||||
echo "$NORMAL" # normal colors |
||||
|
||||
} >&2 # END capture |
||||
|
@ -0,0 +1,364 @@ |
||||
#!/usr/bin/env ruby |
||||
|
||||
HELP = <<EOS |
||||
git-wtf displays the state of your repository in a readable, easy-to-scan |
||||
format. It's useful for getting a summary of how a branch relates to a remote |
||||
server, and for wrangling many topic branches. |
||||
|
||||
git-wtf can show you: |
||||
- How a branch relates to the remote repo, if it's a tracking branch. |
||||
- How a branch relates to integration branches, if it's a feature branch. |
||||
- How a branch relates to the feature branches, if it's an integration |
||||
branch. |
||||
|
||||
git-wtf is best used before a git push, or between a git fetch and a git |
||||
merge. Be sure to set color.ui to auto or yes for maximum viewing pleasure. |
||||
EOS |
||||
|
||||
KEY = <<EOS |
||||
KEY: |
||||
() branch only exists locally |
||||
{} branch only exists on a remote repo |
||||
[] branch exists locally and remotely |
||||
|
||||
x merge occurs both locally and remotely |
||||
~ merge occurs only locally |
||||
(space) branch isn't merged in |
||||
|
||||
(It's possible for merges to occur remotely and not locally, of course, but |
||||
that's a less common case and git-wtf currently doesn't display anything |
||||
special for it.) |
||||
EOS |
||||
|
||||
USAGE = <<EOS |
||||
Usage: git wtf [branch+] [options] |
||||
|
||||
If [branch] is not specified, git-wtf will use the current branch. The possible |
||||
[options] are: |
||||
|
||||
-l, --long include author info and date for each commit |
||||
-a, --all show all branches across all remote repos, not just |
||||
those from origin |
||||
-A, --all-commits show all commits, not just the first 5 |
||||
-s, --short don't show commits |
||||
-k, --key show key |
||||
-r, --relations show relation to features / integration branches |
||||
--dump-config print out current configuration and exit |
||||
|
||||
git-wtf uses some heuristics to determine which branches are integration |
||||
branches, and which are feature branches. (Specifically, it assumes the |
||||
integration branches are named "master", "next" and "edge".) If it guesses |
||||
incorrectly, you will have to create a .git-wtfrc file. |
||||
|
||||
To start building a configuration file, run "git-wtf --dump-config > |
||||
.git-wtfrc" and edit it. The config file is a YAML file that specifies the |
||||
integration branches, any branches to ignore, and the max number of commits to |
||||
display when --all-commits isn't used. git-wtf will look for a .git-wtfrc file |
||||
starting in the current directory, and recursively up to the root. |
||||
|
||||
IMPORTANT NOTE: all local branches referenced in .git-wtfrc must be prefixed |
||||
with heads/, e.g. "heads/master". Remote branches must be of the form |
||||
remotes/<remote>/<branch>. |
||||
EOS |
||||
|
||||
COPYRIGHT = <<EOS |
||||
git-wtf Copyright 2008--2009 William Morgan <wmorgan at the masanjin dot nets>. |
||||
This program is free software: you can redistribute it and/or modify it |
||||
under the terms of the GNU General Public License as published by the Free |
||||
Software Foundation, either version 3 of the License, or (at your option) |
||||
any later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, but WITHOUT |
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
||||
more details. |
||||
|
||||
You can find the GNU General Public License at: http://www.gnu.org/licenses/ |
||||
EOS |
||||
|
||||
require 'yaml' |
||||
CONFIG_FN = ".git-wtfrc" |
||||
|
||||
class Numeric; def pluralize s; "#{to_s} #{s}" + (self != 1 ? "s" : "") end end |
||||
|
||||
if ARGV.delete("--help") || ARGV.delete("-h") |
||||
puts USAGE |
||||
exit |
||||
end |
||||
|
||||
## poor man's trollop |
||||
$long = ARGV.delete("--long") || ARGV.delete("-l") |
||||
$short = ARGV.delete("--short") || ARGV.delete("-s") |
||||
$all = ARGV.delete("--all") || ARGV.delete("-a") |
||||
$all_commits = ARGV.delete("--all-commits") || ARGV.delete("-A") |
||||
$dump_config = ARGV.delete("--dump-config") |
||||
$key = ARGV.delete("--key") || ARGV.delete("-k") |
||||
$show_relations = ARGV.delete("--relations") || ARGV.delete("-r") |
||||
ARGV.each { |a| abort "Error: unknown argument #{a}." if a =~ /^--/ } |
||||
|
||||
## search up the path for a file |
||||
def find_file fn |
||||
while true |
||||
return fn if File.exist? fn |
||||
fn2 = File.join("..", fn) |
||||
return nil if File.expand_path(fn2) == File.expand_path(fn) |
||||
fn = fn2 |
||||
end |
||||
end |
||||
|
||||
want_color = `git config color.wtf` |
||||
want_color = `git config color.ui` if want_color.empty? |
||||
$color = case want_color.chomp |
||||
when "true"; true |
||||
when "auto"; $stdout.tty? |
||||
end |
||||
|
||||
def red s; $color ? "\033[31m#{s}\033[0m" : s end |
||||
def green s; $color ? "\033[32m#{s}\033[0m" : s end |
||||
def yellow s; $color ? "\033[33m#{s}\033[0m" : s end |
||||
def cyan s; $color ? "\033[36m#{s}\033[0m" : s end |
||||
def grey s; $color ? "\033[1;30m#{s}\033[0m" : s end |
||||
def purple s; $color ? "\033[35m#{s}\033[0m" : s end |
||||
|
||||
## the set of commits in 'to' that aren't in 'from'. |
||||
## if empty, 'to' has been merged into 'from'. |
||||
def commits_between from, to |
||||
if $long |
||||
`git log --pretty=format:"- %s [#{yellow "%h"}] (#{purple "%ae"}; %ar)" #{from}..#{to}` |
||||
else |
||||
`git log --pretty=format:"- %s [#{yellow "%h"}]" #{from}..#{to}` |
||||
end.split(/[\r\n]+/) |
||||
end |
||||
|
||||
def show_commits commits, prefix=" " |
||||
if commits.empty? |
||||
puts "#{prefix} none" |
||||
else |
||||
max = $all_commits ? commits.size : $config["max_commits"] |
||||
max -= 1 if max == commits.size - 1 # never show "and 1 more" |
||||
commits[0 ... max].each { |c| puts "#{prefix}#{c}" } |
||||
puts grey("#{prefix}... and #{commits.size - max} more (use -A to see all).") if commits.size > max |
||||
end |
||||
end |
||||
|
||||
def ahead_behind_string ahead, behind |
||||
[ahead.empty? ? nil : "#{ahead.size.pluralize 'commit'} ahead", |
||||
behind.empty? ? nil : "#{behind.size.pluralize 'commit'} behind"]. |
||||
compact.join("; ") |
||||
end |
||||
|
||||
def widget merged_in, remote_only=false, local_only=false, local_only_merge=false |
||||
left, right = case |
||||
when remote_only; %w({ }) |
||||
when local_only; %w{( )} |
||||
else %w([ ]) |
||||
end |
||||
middle = case |
||||
when merged_in && local_only_merge; green("~") |
||||
when merged_in; green("x") |
||||
else " " |
||||
end |
||||
print left, middle, right |
||||
end |
||||
|
||||
def show b |
||||
have_both = b[:local_branch] && b[:remote_branch] |
||||
|
||||
pushc, pullc, oosync = if have_both |
||||
[x = commits_between(b[:remote_branch], b[:local_branch]), |
||||
y = commits_between(b[:local_branch], b[:remote_branch]), |
||||
!x.empty? && !y.empty?] |
||||
end |
||||
|
||||
if b[:local_branch] |
||||
puts "Local branch: " + green(b[:local_branch].sub(/^heads\//, "")) |
||||
|
||||
if have_both |
||||
if pushc.empty? |
||||
puts "#{widget true} in sync with remote" |
||||
else |
||||
action = oosync ? "push after rebase / merge" : "push" |
||||
puts "#{widget false} NOT in sync with remote (you should #{action})" |
||||
show_commits pushc unless $short |
||||
end |
||||
end |
||||
end |
||||
|
||||
if b[:remote_branch] |
||||
puts "Remote branch: #{cyan b[:remote_branch]} (#{b[:remote_url]})" |
||||
|
||||
if have_both |
||||
if pullc.empty? |
||||
puts "#{widget true} in sync with local" |
||||
else |
||||
action = pushc.empty? ? "merge" : "rebase / merge" |
||||
puts "#{widget false} NOT in sync with local (you should #{action})" |
||||
show_commits pullc unless $short |
||||
end |
||||
end |
||||
end |
||||
|
||||
puts "\n#{red "WARNING"}: local and remote branches have diverged. A merge will occur unless you rebase." if oosync |
||||
end |
||||
|
||||
def show_relations b, all_branches |
||||
ibs, fbs = all_branches.partition { |name, br| $config["integration-branches"].include?(br[:local_branch]) || $config["integration-branches"].include?(br[:remote_branch]) } |
||||
if $config["integration-branches"].include? b[:local_branch] |
||||
puts "\nFeature branches:" unless fbs.empty? |
||||
fbs.each do |name, br| |
||||
next if $config["ignore"].member?(br[:local_branch]) || $config["ignore"].member?(br[:remote_branch]) |
||||
next if br[:ignore] |
||||
local_only = br[:remote_branch].nil? |
||||
remote_only = br[:local_branch].nil? |
||||
name = if local_only |
||||
purple br[:name] |
||||
elsif remote_only |
||||
cyan br[:name] |
||||
else |
||||
green br[:name] |
||||
end |
||||
|
||||
## for remote_only branches, we'll compute wrt the remote branch head. otherwise, we'll |
||||
## use the local branch head. |
||||
head = remote_only ? br[:remote_branch] : br[:local_branch] |
||||
|
||||
remote_ahead = b[:remote_branch] ? commits_between(b[:remote_branch], head) : [] |
||||
local_ahead = b[:local_branch] ? commits_between(b[:local_branch], head) : [] |
||||
|
||||
if local_ahead.empty? && remote_ahead.empty? |
||||
puts "#{widget true, remote_only, local_only} #{name} #{local_only ? "(local-only) " : ""}is merged in" |
||||
elsif local_ahead.empty? |
||||
puts "#{widget true, remote_only, local_only, true} #{name} merged in (only locally)" |
||||
else |
||||
behind = commits_between head, (br[:local_branch] || br[:remote_branch]) |
||||
ahead = remote_only ? remote_ahead : local_ahead |
||||
puts "#{widget false, remote_only, local_only} #{name} #{local_only ? "(local-only) " : ""}is NOT merged in (#{ahead_behind_string ahead, behind})" |
||||
show_commits ahead unless $short |
||||
end |
||||
end |
||||
else |
||||
puts "\nIntegration branches:" unless ibs.empty? # unlikely |
||||
ibs.sort_by { |v, br| v }.each do |v, br| |
||||
next if $config["ignore"].member?(br[:local_branch]) || $config["ignore"].member?(br[:remote_branch]) |
||||
next if br[:ignore] |
||||
local_only = br[:remote_branch].nil? |
||||
remote_only = br[:local_branch].nil? |
||||
name = remote_only ? cyan(br[:name]) : green(br[:name]) |
||||
|
||||
ahead = commits_between v, (b[:local_branch] || b[:remote_branch]) |
||||
if ahead.empty? |
||||
puts "#{widget true, local_only} merged into #{name}" |
||||
else |
||||
#behind = commits_between b[:local_branch], v |
||||
puts "#{widget false, local_only} NOT merged into #{name} (#{ahead.size.pluralize 'commit'} ahead)" |
||||
show_commits ahead unless $short |
||||
end |
||||
end |
||||
end |
||||
end |
||||
|
||||
#### EXECUTION STARTS HERE #### |
||||
|
||||
## find config file and load it |
||||
$config = { "integration-branches" => %w(heads/master heads/next heads/edge), "ignore" => [], "max_commits" => 5 }.merge begin |
||||
fn = find_file CONFIG_FN |
||||
if fn && (h = YAML::load_file(fn)) # yaml turns empty files into false |
||||
h["integration-branches"] ||= h["versions"] # support old nomenclature |
||||
h |
||||
else |
||||
{} |
||||
end |
||||
end |
||||
|
||||
if $dump_config |
||||
puts $config.to_yaml |
||||
exit |
||||
end |
||||
|
||||
## first, index registered remotes |
||||
remotes = `git config --get-regexp ^remote\.\*\.url`.split(/[\r\n]+/).inject({}) do |hash, l| |
||||
l =~ /^remote\.(.+?)\.url (.+)$/ or next hash |
||||
hash[$1] ||= $2 |
||||
hash |
||||
end |
||||
|
||||
## next, index followed branches |
||||
branches = `git config --get-regexp ^branch\.`.split(/[\r\n]+/).inject({}) do |hash, l| |
||||
case l |
||||
when /branch\.(.*?)\.remote (.+)/ |
||||
name, remote = $1, $2 |
||||
|
||||
hash[name] ||= {} |
||||
hash[name].merge! :remote => remote, :remote_url => remotes[remote] |
||||
when /branch\.(.*?)\.merge ((refs\/)?heads\/)?(.+)/ |
||||
name, remote_branch = $1, $4 |
||||
hash[name] ||= {} |
||||
hash[name].merge! :remote_mergepoint => remote_branch |
||||
end |
||||
hash |
||||
end |
||||
|
||||
## finally, index all branches |
||||
remote_branches = {} |
||||
`git show-ref`.split(/[\r\n]+/).each do |l| |
||||
sha1, ref = l.chomp.split " refs/" |
||||
|
||||
if ref =~ /^heads\/(.+)$/ # local branch |
||||
name = $1 |
||||
next if name == "HEAD" |
||||
branches[name] ||= {} |
||||
branches[name].merge! :name => name, :local_branch => ref |
||||
elsif ref =~ /^remotes\/(.+?)\/(.+)$/ # remote branch |
||||
remote, name = $1, $2 |
||||
remote_branches["#{remote}/#{name}"] = true |
||||
next if name == "HEAD" |
||||
ignore = !($all || remote == "origin") |
||||
|
||||
branch = name |
||||
if branches[name] && branches[name][:remote] == remote |
||||
# nothing |
||||
else |
||||
name = "#{remote}/#{branch}" |
||||
end |
||||
|
||||
branches[name] ||= {} |
||||
branches[name].merge! :name => name, :remote => remote, :remote_branch => "#{remote}/#{branch}", :remote_url => remotes[remote], :ignore => ignore |
||||
end |
||||
end |
||||
|
||||
## assemble remotes |
||||
branches.each do |k, b| |
||||
next unless b[:remote] && b[:remote_mergepoint] |
||||
b[:remote_branch] = if b[:remote] == "." |
||||
b[:remote_mergepoint] |
||||
else |
||||
t = "#{b[:remote]}/#{b[:remote_mergepoint]}" |
||||
remote_branches[t] && t # only if it's still alive |
||||
end |
||||
end |
||||
|
||||
show_dirty = ARGV.empty? |
||||
targets = if ARGV.empty? |
||||
[`git symbolic-ref HEAD`.chomp.sub(/^refs\/heads\//, "")] |
||||
else |
||||
ARGV.map { |x| x.sub(/^heads\//, "") } |
||||
end.map { |t| branches[t] or abort "Error: can't find branch #{t.inspect}." } |
||||
|
||||
targets.each do |t| |
||||
show t |
||||
show_relations t, branches if $show_relations || t[:remote_branch].nil? |
||||
end |
||||
|
||||
modified = show_dirty && `git ls-files -m` != "" |
||||
uncommitted = show_dirty && `git diff-index --cached HEAD` != "" |
||||
|
||||
if $key |
||||
puts |
||||
puts KEY |
||||
end |
||||
|
||||
puts if modified || uncommitted |
||||
puts "#{red "NOTE"}: working directory contains modified files." if modified |
||||
puts "#{red "NOTE"}: staging area contains staged but uncommitted files." if uncommitted |
||||
|
||||
# the end! |
@ -0,0 +1,103 @@ |
||||
#!/bin/bash |
||||
|
||||
# tmux requires unrecognized OSC sequences to be wrapped with DCS tmux; |
||||
# <sequence> ST, and for all ESCs in <sequence> to be replaced with ESC ESC. It |
||||
# only accepts ESC backslash for ST. |
||||
function print_osc() { |
||||
if [[ $TERM == screen* ]] ; then |
||||
printf "\033Ptmux;\033\033]" |
||||
else |
||||
printf "\033]" |
||||
fi |
||||
} |
||||
|
||||
# More of the tmux workaround described above. |
||||
function print_st() { |
||||
if [[ $TERM == screen* ]] ; then |
||||
printf "\a\033\\" |
||||
else |
||||
printf "\a" |
||||
fi |
||||
} |
||||
|
||||
# print_image filename inline base64contents |
||||
# filename: Filename to convey to client |
||||
# inline: 0 or 1 |
||||
# base64contents: Base64-encoded contents |
||||
function print_image() { |
||||
print_osc |
||||
printf '1337;File=' |
||||
if [[ -n "$1" ]]; then |
||||
printf 'name='`echo -n "$1" | base64`";" |
||||
fi |
||||
if $(base64 --version 2>&1 | grep GNU > /dev/null) |
||||
then |
||||
BASE64ARG=-d |
||||
else |
||||
BASE64ARG=-D |
||||
fi |
||||
echo -n "$3" | base64 $BASE64ARG | wc -c | awk '{printf "size=%d",$1}' |
||||
printf ";inline=$2" |
||||
printf ";width=50" |
||||
printf ":" |
||||
echo -n "$3" |
||||
print_st |
||||
printf '\n' |
||||
} |
||||
|
||||
function error() { |
||||
echo "ERROR: $*" 1>&2 |
||||
} |
||||
|
||||
function show_help() { |
||||
echo "Usage: imgcat filename ..." 1>& 2 |
||||
echo " or: cat filename | imgcat" 1>& 2 |
||||
} |
||||
|
||||
## Main |
||||
|
||||
if [ -t 0 ]; then |
||||
has_stdin=f |
||||
else |
||||
has_stdin=t |
||||
fi |
||||
|
||||
# Show help if no arguments and no stdin. |
||||
if [ $has_stdin = f -a $# -eq 0 ]; then |
||||
show_help |
||||
exit |
||||
fi |
||||
|
||||
# Look for command line flags. |
||||
while [ $# -gt 0 ]; do |
||||
case "$1" in |
||||
-h|--h|--help) |
||||
show_help |
||||
exit |
||||
;; |
||||
-*) |
||||
error "Unknown option flag: $1" |
||||
show_help |
||||
exit 1 |
||||
;; |
||||
*) |
||||
if [ -r "$1" ] ; then |
||||
print_image "$1" 1 "$(base64 < "$1")" |
||||
else |
||||
error "imgcat: $1: No such file or directory" |
||||
exit 2 |
||||
fi |
||||
;; |
||||
esac |
||||
shift |
||||
done |
||||
|
||||
# Read and print stdin |
||||
if [ $has_stdin = t ]; then |
||||
print_image "" 1 "$(cat | base64)" |
||||
fi |
||||
|
||||
echo |
||||
echo |
||||
|
||||
exit 0 |
@ -0,0 +1,91 @@ |
||||
#!/usr/bin/bash |
||||
|
||||
if [ $1 ]; then |
||||
while test $# -gt 0; do |
||||
case $1 in |
||||
-h|--help) |
||||
echo "Create files from template" |
||||
echo "" |
||||
echo "Usage: new [options] newFile" |
||||
echo "" |
||||
echo "Options:" |
||||
echo "--------" |
||||
echo -e "{-t,--template} filename \t Force use of template in Template Directory" |
||||
echo -e "{-l,--list} \t\t\t Lists the available templates" |
||||
echo -e "{-h,--help} \t\t\t Show this help text" |
||||
exit 0 |
||||
;; |
||||
-t|--template) |
||||
shift |
||||
if [[ -f "$HOME/Templates/$1" ]]; then |
||||
template="$HOME/Templates/$1" |
||||
else |
||||
echo "The file $HOME/Templates/$1 does not exits" |
||||
exit 1 |
||||
fi |
||||
shift |
||||
;; |
||||
-l|--list) |
||||
shift |
||||
for file in $HOME/Templates/*$1; do |
||||
echo ${file##*/} |
||||
done |
||||
exit 0 |
||||
;; |
||||
*) |
||||
file=$1 |
||||
if [[ "$template" == "" ]]; then |
||||
extention=${file##*.} |
||||
posTemplates=() |
||||
if [[ -f $HOME/Templates/$extention ]]; then |
||||
posTemplates+=("$HOME/Templates/$extention") |
||||
fi |
||||
for template in $HOME/Templates/*.$extention; do |
||||
if [[ -f $template ]]; then |
||||
posTemplates+=( $template ) |
||||
fi |
||||
done |
||||
if [[ ${#posTemplates[@]} == 1 ]]; then |
||||
echo "Only one template" |
||||
template=${posTemplates[0]} |
||||
else |
||||
|
||||
posTemplates+=("Cancel") |
||||
while |
||||
echo Your options are: |
||||
for (( i=0; i<${#posTemplates[@]}; i++ )); do |
||||
echo "$i: ${posTemplates[$i]##*/}" |
||||
done |
||||
echo -e -n "Please enter a number: [0] " |
||||
read input |
||||
if [[ "$input"=="" ]]; then |
||||
test=0 |
||||
fi; |
||||
if [[ "$input" == "$(expr ${#posTemplates[@]} - 1)" ]]; then |
||||
echo "Exited By User" |
||||
exit 0 |
||||
fi |
||||
template=${posTemplates[$input]} |
||||
[[ $input>=${#posTemplates[@]} || $input<0 ]] |
||||
do |
||||
echo |
||||
echo Please chose one of the available options |
||||
done |
||||
fi |
||||
fi |
||||
|
||||
|
||||
if [[ -f "$file" ]]; then |
||||
echo "$file already exists" |
||||
echo "delete it first" |
||||
exit 1 |
||||
fi |
||||
cat "$template" > "$file" |
||||
echo "$file created from template $template" |
||||
exit 0 |
||||
;; |
||||
esac |
||||
done |
||||
else |
||||
echo "You haven't given anything to work with" |
||||
fi |
@ -0,0 +1,31 @@ |
||||
#!/usr/bin/bash |
||||
line=$(php --version | grep "PHP" -m 1) |
||||
target="$1" |
||||
lampp='/opt/lampp/lampp' |
||||
echo $phpexe |
||||
if [ "$(id -u)" != "0" ]; then |
||||
echo "Sorry, you are not root." |
||||
exit 1 |
||||
fi |
||||
if [[ $target = "" ]]; then |
||||
echo "PLease specify the version you want" |
||||
exit 1 |
||||
fi; |
||||
|
||||
file="/opt/lampp/etc/extra/httpd-xampp-php$target.conf" |
||||
phpexe=$(ls /opt/lampp/bin/php-$target*) |
||||
phpcgi=$(ls /opt/lampp/bin/php-cgi-$target*) |
||||
phpconfig=$(ls /opt/lampp/bin/php-config-$target*) |
||||
phpize=$(ls /opt/lampp/bin/phpize-$target*) |
||||
|
||||
$lampp stopapache |
||||
ln -s -f $file /opt/lampp/etc/extra/httpd-xampp.conf |
||||
ln -s -f $phpexe /opt/lampp/bin/php |
||||
ln -s -f $phpcgi /opt/lampp/bin/php-cgi |
||||
ln -s -f $phpconfig /opt/lampp/bin/php-config |
||||
ln -s -f $phpize /opt/lampp/bin/phpize |
||||
|
||||
$lampp startapache |
||||
echo |
||||
echo "Now on PHP $target" |
||||
exit 0 |
@ -0,0 +1,8 @@ |
||||
#!/usr/bin/bash |
||||
|
||||
pluginFolder="/home/jonathan/WPPlugins" |
||||
for dir in $pluginFolder/*/; do |
||||
cd $dir |
||||
pwd | cowsay |
||||
git-svn-mirror update |
||||
done |
@ -0,0 +1,7 @@ |
||||
#!/usr/bin/bash |
||||
initial=$@ |
||||
place=${initial// /+} |
||||
if [[ "$place" == "" ]]; then |
||||
place="Bury+St+Edmunds" |
||||
fi |
||||
curl "wttr.in/$place" |
@ -0,0 +1,2 @@ |
||||
#!/usr/bin/bash |
||||
find . -name "$1" | sed 's/[^/]\+$//' | uniq -c | sort -g |
@ -0,0 +1,4 @@ |
||||
default-themes-1.1.cmtp.7z |
||||
default-themes-1.2.cmtp.7z |
||||
default-themes-2.1.cmtp.7z |
||||
default-themes-2.1.cmtp.7z |
@ -0,0 +1,54 @@ |
||||
background yes |
||||
update_interval 0.2 |
||||
|
||||
|
||||
double_buffer yes |
||||
no_buffers yes |
||||
text_buffer_size 2048 |
||||
|
||||
gap_x 10 |
||||
gap_y 10 |
||||
|
||||
own_window yes |
||||
own_window_type override |
||||
own_window_class Conky |
||||
own_window_transparent yes |
||||
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager |
||||
own_window_colour 000000 |
||||
#own_window_argb_visual yes |
||||
#own_window_argb_value 128 |
||||
|
||||
border_inner_margin 0 |
||||
border_outer_margin 0 |
||||
alignment top_left |
||||
|
||||
|
||||
draw_shades no |
||||
draw_outline no |
||||
draw_borders no |
||||
draw_graph_borders no |
||||
|
||||
override_utf8_locale yes |
||||
use_xft yes |
||||
xftfont caviar dreams:size=10 |
||||
xftalpha 0.5 |
||||
uppercase no |
||||
|
||||
# Defining colors |
||||
default_color FFFFFF |
||||
# Shades of Gray |
||||
color1 DDDDDD |
||||
color2 AAAAAA |
||||
color3 888888 |
||||
# Blue |
||||
color4 2f519a |
||||
# Green |
||||
color5 77B753 |
||||
|
||||
|
||||
minimum_size 250 500 |
||||
own_window_argb_value 0 |
||||
own_window_argb_visual no |
||||
TEXT |
||||
${font GE Inspira:pixelsize=30}${execpi 60 python ~/.conky/BibleVerse/bibleGateway.py} |
||||
${color 2f519a}${execpi 60 python ~/.conky/BibleVerse/reference.py} |
@ -0,0 +1,11 @@ |
||||
__author__ = 'jonathan' |
||||
|
||||
import urllib.request |
||||
import json |
||||
import html |
||||
import textwrap |
||||
|
||||
f = urllib.request.urlopen("http://www.biblegateway.com/votd/get/?format=json&version=ESV") |
||||
content = json.loads(f.read().decode("utf-8")) |
||||
|
||||
print(textwrap.fill(html.unescape(content['votd']['text']),30)) |
@ -0,0 +1,8 @@ |
||||
__author__ = 'jonathan' |
||||
|
||||
import urllib.request |
||||
import json |
||||
|
||||
f = urllib.request.urlopen("http://www.biblegateway.com/votd/get/?format=json&version=ESV") |
||||
content = json.loads(f.read().decode("utf-8")) |
||||
print(content['votd']['reference']) |
@ -0,0 +1,42 @@ |
||||
use_xft yes |
||||
xftfont 123:size=8 |
||||
xftalpha 0.1 |
||||
update_interval 0.5 |
||||
total_run_times 0 |
||||
|
||||
own_window yes |
||||
own_window_type override |
||||
own_window_class Conky |
||||
own_window_transparent yes |
||||
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager |
||||
own_window_colour 000000 |
||||
#own_window_argb_visual yes |
||||
#own_window_argb_value 128 |
||||
|
||||
background yes |
||||
|
||||
double_buffer yes |
||||
maximum_width 500 |
||||
draw_shades no |
||||
draw_outline no |
||||
draw_borders no |
||||
draw_graph_borders no |
||||
default_color white |
||||
default_shade_color red |
||||
default_outline_color green |
||||
alignment top_right |
||||
gap_x 0 |
||||
gap_y 10 |
||||
no_buffers yes |
||||
uppercase no |
||||
cpu_avg_samples 2 |
||||
net_avg_samples 1 |
||||
override_utf8_locale yes |
||||
|
||||
|
||||
own_window_argb_value 0 |
||||
own_window_argb_visual no |
||||
minimum_size 0 0 |
||||
TEXT |
||||
${color EAEAEA}${font GE Inspira:pixelsize=120}${time %H:%M}${color 2f519a}${time :%S}${font} |
||||
${color EAEAEA}${font GE Inspira:pixelsize=58}${time %A}${font GE Inspira:pixelsize=42}${color 2f519a}${time %d}${font GE Inspira:pixelsize=22}${color EAEAEA}${time %B} ${time %Y} |
Binary file not shown.
@ -0,0 +1,60 @@ |
||||
# -- Conky settings -- # |
||||
background no |
||||
update_interval 2 |
||||
|
||||
cpu_avg_samples 2 |
||||
net_avg_samples 2 |
||||
|
||||
override_utf8_locale yes |
||||
|
||||
double_buffer yes |
||||
no_buffers yes |
||||
|
||||
text_buffer_size 2048 |
||||
imlib_cache_size 0 |
||||
|
||||
# -- Window specifications -- # |
||||
|
||||
own_window yes |
||||
own_window_type override |
||||
own_window_class Conky |
||||
own_window_transparent yes |
||||
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager |
||||
own_window_colour 000000 |
||||
#own_window_argb_visual yes |
||||
#own_window_argb_value 128 |
||||
border_inner_margin 0 |
||||
border_outer_margin 0 |
||||
|
||||
minimum_size 7266 748 |
||||
|
||||
# -- Graphics settings -- # |
||||
draw_shades no |
||||
draw_outline no |
||||
draw_borders no |
||||
draw_graph_borders no |
||||
|
||||
# -- Text settings -- # |
||||
use_xft yes |
||||
xftfont Santana:size=8 |
||||
xftalpha 0.8 |
||||
|
||||
uppercase no |
||||
|
||||
default_color FFFFFF |
||||
|
||||
# -- Lua load -- # |
||||
lua_load main.lua |
||||
lua_draw_hook_pre main |
||||
lua_startup_hook setup |
||||
|
||||
alignment top_left |
||||
gap_x 280 |
||||
gap_y 80 |
||||
own_window_argb_value 0 |
||||
own_window_argb_visual yes |
||||
own_window_colour 000000 |
||||
TEXT |
||||
#${offset 636}${voffset 223}${font Roboto:size=12}${time %l:%M %P } |
||||
${offset 630}${voffset 228}${font Roboto:size=35}Arch |
||||
|
@ -0,0 +1 @@ |
||||
./face.png |
After Width: | Height: | Size: 158 KiB |
After Width: | Height: | Size: 2.6 KiB |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,17 @@ |
||||
|
||||
# dimenstions |
||||
WIDTH = 1366; |
||||
HEIGHT = 748; |
||||
|
||||
# network |
||||
NETWORK = wlo1; |
||||
|
||||
# cpu |
||||
NO_OF_CORES = 8; |
||||
|
||||
# color scheme the values are DARK or WHITE |
||||
COLOR = WHITE; |
||||
|
||||
# gmail account |
||||
MAIL = '''MAIL''':'''PASSWARD''' https://mail.google.com/mail/feed/atom/unread; |
||||
|
@ -0,0 +1,8 @@ |
||||
sleep 5s |
||||
killall conky |
||||
cd "/home/jonathan/.conky/BibleVerse" |
||||
conky -c "/home/jonathan/.conky/BibleVerse/bibleGateway" & |
||||
cd "/home/jonathan/.conky/MyBlue" |
||||
conky -c "/home/jonathan/.conky/MyBlue/MyBlue" & |
||||
cd "/home/jonathan/.conky/Octupi_Arch" |
||||
conky -c "/home/jonathan/.conky/Octupi_Arch/co_main" & |
@ -0,0 +1,36 @@ |
||||
#!/bin/bash |
||||
|
||||
scrot -z /tmp/screen.png |
||||
convert /tmp/screen.png -scale 10% -scale 1000% /tmp/screen.png |
||||
|
||||
if [[ -f $HOME/.config/screen-lock.png ]] |
||||
then |
||||
# placement x/y |
||||
PX=0 |
||||
PY=0 |
||||
# lockscreen image info |
||||
R=$(file ~/.config/screen-lock.png | grep -o '[0-9]* x [0-9]*') |
||||
RX=$(echo $R | cut -d' ' -f 1) |
||||
RY=$(echo $R | cut -d' ' -f 3) |
||||
|
||||
|
||||
|
||||
SR=$(xrandr --query | grep ' connected' | cut -f4 -d' ') |
||||
echo $SR |
||||
for RES in $SR |
||||
do |
||||
echo $RES |
||||
# monitor position/offset |
||||
SRX=$(echo $RES | cut -d'x' -f 1) # x pos |
||||
SRY=$(echo $RES | cut -d'x' -f 2 | cut -d'+' -f 1) # y pos |
||||
SROX=$(echo $RES | cut -d'x' -f 2 | cut -d'+' -f 2) # x offset |
||||
SROY=$(echo $RES | cut -d'x' -f 2 | cut -d'+' -f 3) # y offset |
||||
PX=$(($SROX + $SRX/2 - $RX/2)) |
||||
PY=$(($SROY + $SRY/2 - $RY/2)) |
||||
convert /tmp/screen.png $HOME/.config/screen-lock.png -geometry +$PX+$PY -composite -matte /tmp/screen.png |
||||
echo "done" |
||||
done |
||||
fi |
||||
# dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Stop |
||||
# i3lock -I 10 -d -e -u -n -i /tmp/screen.png |
||||
i3lock -e -n -i /tmp/screen.png |
@ -0,0 +1,31 @@ |
||||
#!/bin/sh |
||||
lock() { |
||||
~/.config/i3/fadeLockScreen |
||||
#i3lock |
||||
} |
||||
|
||||
case "$1" in |
||||
lock) |
||||
lock |
||||
;; |
||||
logout) |
||||
i3-msg exit |
||||
;; |
||||
suspend) |
||||
systemctl suspend && lock |
||||
;; |
||||
hibernate) |
||||
systemctl hibernate && lock |
||||
;; |
||||
reboot) |
||||
systemctl reboot |
||||
;; |
||||
shutdown) |
||||
systemctl poweroff |
||||
;; |
||||
*) |
||||
echo "Usage: $0 {lock|logout|suspend|hibernate|reboot|shutdown}" |
||||
exit 2 |
||||
esac |
||||
|
||||
exit 0 |
File diff suppressed because one or more lines are too long
@ -0,0 +1,86 @@ |
||||
# Changes |
||||
|
||||
2016-04-16 |
||||
|
||||
* Fix issue around unicode function for python 3 |
||||
|
||||
2016-04-01 |
||||
|
||||
* Refactor of the way the git segment manages data about git's state. |
||||
([@b-ryan](https://github.com/milkbikis/powerline-shell/pull/221)) |
||||
|
||||
2015-12-26 |
||||
|
||||
* Beginnings of unit testing for segments. Included in this change was a |
||||
refactor of the way segments are added to powerline. Now, instead of looking |
||||
for a global `powerline` object, `powerline` is passed into the function to |
||||
add the segment. Segments will also no longer add the segments by calling the |
||||
`add` function themselves. |
||||
([@b-ryan](https://github.com/milkbikis/powerline-shell/pull/212)) |
||||
* Python3 fixes for `lib/color_compliment.py`. |
||||
([@ceholden](https://github.com/milkbikis/powerline-shell/pull/220)) |
||||
|
||||
2015-11-25 |
||||
|
||||
* `virtual_env` segment now supports environments made with `conda` |
||||
([@ceholden](https://github.com/milkbikis/powerline-shell/pull/198)) |
||||
|
||||
2015-11-21 |
||||
|
||||
* Fixes for Python 3 compatibility |
||||
([@b-ryan](https://github.com/milkbikis/powerline-shell/pull/211)) |
||||
|
||||
2015-11-18 |
||||
|
||||
* The git segment has gotten a makeover |
||||
([@MartinWetterwald](https://github.com/milkbikis/powerline-shell/pull/136)) |
||||
* Fix git segment when git is not on the standard PATH |
||||
([@andrejgl](https://github.com/milkbikis/powerline-shell/pull/153)) |
||||
* Fix `--cwd-max-depth` showing duplicates when it's <= 2 |
||||
([@b-ryan](https://github.com/milkbikis/powerline-shell/pull/209)) |
||||
* Add padding around `exit_code` segment |
||||
([@phatblat](https://github.com/milkbikis/powerline-shell/pull/205)) |
||||
|
||||
2015-10-02 |
||||
|
||||
* New option (`--cwd-max-dir-size`) which allows you to limit each directory |
||||
that is displayed to a number of characters. This currently does not apply |
||||
if you are using `--cwd-mode plain`. |
||||
([@mart-e](https://github.com/milkbikis/powerline-shell/pull/127)) |
||||
|
||||
2015-08-26 |
||||
|
||||
* New `plain` mode of displaying the current working directory which can be |
||||
used by adding `--cwd-only plain` to `powerline-shell.py`. |
||||
This deprecates the `--cwd-only` option. `--cwd-mode dironly` can be used |
||||
instead. ([@paol](https://github.com/milkbikis/powerline-shell/pull/156)) |
||||
|
||||
2015-08-18 |
||||
|
||||
* New `time` segment |
||||
([@filipebarros](https://github.com/milkbikis/powerline-shell/pull/107)) |
||||
|
||||
2015-08-01 |
||||
|
||||
* Use `print` function for some python3 compatibility |
||||
([@strycore](https://github.com/milkbikis/powerline-shell/pull/195)) |
||||
|
||||
2015-07-31 |
||||
|
||||
* The current working directory no longer follows symbolic links |
||||
* New `exit_code` segment |
||||
([@disruptek](https://github.com/milkbikis/powerline-shell/pull/129)) |
||||
|
||||
2015-07-30 |
||||
|
||||
* Fix ZSH root indicator |
||||
([@nkcfan](https://github.com/milkbikis/powerline-shell/pull/150)) |
||||
* Add uptime segment |
||||
([@marcioAlmada](https://github.com/milkbikis/powerline-shell/pull/139)) |
||||
|
||||
2015-07-27 |
||||
|
||||
* Use `python2` instead of `python` in hashbangs |
||||
([@Undeterminant](https://github.com/milkbikis/powerline-shell/pull/100)) |
||||
* Add `node_version` segment |
||||
([@mmilleruva](https://github.com/milkbikis/powerline-shell/pull/189)) |
@ -0,0 +1,20 @@ |
||||
The MIT License (MIT) |
||||
|
||||
Copyright (c) 2014 Shrey Banga and contributors |
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of |
||||
this software and associated documentation files (the "Software"), to deal in |
||||
the Software without restriction, including without limitation the rights to |
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of |
||||
the Software, and to permit persons to whom the Software is furnished to do so, |
||||
subject to the following conditions: |
||||
|
||||
The above copyright notice and this permission notice shall be included in all |
||||
copies or substantial portions of the Software. |
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS |
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR |
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER |
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
@ -0,0 +1,170 @@ |
||||
A Powerline style prompt for your shell |
||||
======================================= |
||||
|
||||
A [Powerline](https://github.com/Lokaltog/vim-powerline) like prompt for Bash, ZSH and Fish: |
||||
|
||||
![MacVim+Solarized+Powerline+CtrlP](https://raw.github.com/milkbikis/dotfiles-mac/master/bash-powerline-screenshot.png) |
||||
|
||||
* Shows some important details about the git/svn/hg/fossil branch (see below) |
||||
* Changes color if the last command exited with a failure code |
||||
* If you're too deep into a directory tree, shortens the displayed path with an ellipsis |
||||
* Shows the current Python [virtualenv](http://www.virtualenv.org/) environment |
||||
* It's easy to customize and extend. See below for details. |
||||
|
||||
### Version Control |
||||
|
||||
All of the version control systems supported by powerline shell give you a |
||||
quick look into the state of your repo: |
||||
|
||||
* The current branch is displayed and changes background color when the |
||||
branch is dirty. |
||||
* When the local branch differs from the remote, the difference in number |
||||
of commits is shown along with `⇡` or `⇣` indicating whether a git push |
||||
or pull is pending |
||||
|
||||
In addition, git has a few extra symbols: |
||||
|
||||
* `✎` -- a file has been modified, but not staged for commit |
||||
* `✔` -- a file is staged for commit |
||||
* `✼` -- a file has conflicts |
||||
|
||||
FIXME |
||||
* A `+` appears when untracked files are present (except for git, which |
||||
uses `?` instead) |
||||
|
||||
Each of these will have a number next to it if more than one file matches. |
||||
|
||||
# Setup |
||||
|
||||
This script uses ANSI color codes to display colors in a terminal. These are |
||||
notoriously non-portable, so may not work for you out of the box, but try |
||||
setting your $TERM to `xterm-256color`, because that works for me. |
||||
|
||||
* Patch the font you use for your terminal: see https://github.com/Lokaltog/powerline-fonts |
||||
|
||||
* If you struggle too much to get working fonts in your terminal, you can use "compatible" mode. |
||||
* If you're using old patched fonts, you have to use the older symbols. Basically reverse [this commit](https://github.com/milkbikis/powerline-shell/commit/2a84ecc) in your copy |
||||
|
||||
* Clone this repository somewhere: |
||||
|
||||
git clone https://github.com/milkbikis/powerline-shell |
||||
|
||||
* Copy `config.py.dist` to `config.py` and edit it to configure the segments you want. Then run |
||||
|
||||
./install.py |
||||
|
||||
* This will generate `powerline-shell.py` |
||||
|
||||
* (optional) Create a symlink to this python script in your home: |
||||
|
||||
ln -s <path/to/powerline-shell.py> ~/powerline-shell.py |
||||
|
||||
* If you don't want the symlink, just modify the path in the commands below |
||||
|
||||
* For python2.6 you have to install argparse |
||||
|
||||
pip install argparse |
||||
|
||||
### All Shells: |
||||
There are a few optional arguments which can be seen by running `powerline-shell.py --help`. |
||||
|
||||
``` |
||||
--cwd-mode {fancy,plain,dironly} |
||||
How to display the current directory |
||||
--cwd-max-depth CWD_MAX_DEPTH |
||||
Maximum number of directories to show in path |
||||
--cwd-max-dir-size CWD_MAX_DIR_SIZE |
||||
Maximum number of letters displayed for each directory |
||||
in the path |
||||
--colorize-hostname Colorize the hostname based on a hash of itself. |
||||
--mode {patched,compatible,flat} |
||||
The characters used to make separators between |
||||
segments |
||||
``` |
||||
|
||||
### Bash: |
||||
Add the following to your `.bashrc` (or `.profile` on Mac): |
||||
|
||||
``` |
||||
function _update_ps1() { |
||||
PS1="$(~/powerline-shell.py $? 2> /dev/null)" |
||||
} |
||||
|
||||
if [ "$TERM" != "linux" ]; then |
||||
PROMPT_COMMAND="_update_ps1; $PROMPT_COMMAND" |
||||
fi |
||||
``` |
||||
|
||||
### ZSH: |
||||
Add the following to your `.zshrc`: |
||||
|
||||
``` |
||||
function powerline_precmd() { |
||||
PS1="$(~/powerline-shell.py $? --shell zsh 2> /dev/null)" |
||||
} |
||||
|
||||
function install_powerline_precmd() { |
||||
for s in "${precmd_functions[@]}"; do |
||||
if [ "$s" = "powerline_precmd" ]; then |
||||
return |
||||
fi |
||||
done |
||||
precmd_functions+=(powerline_precmd) |
||||
} |
||||
|
||||
if [ "$TERM" != "linux" ]; then |
||||
install_powerline_precmd |
||||
fi |
||||
``` |
||||
|
||||
### Fish: |
||||
Redefine `fish_prompt` in ~/.config/fish/config.fish: |
||||
|
||||
``` |
||||
function fish_prompt |
||||
~/powerline-shell.py $status --shell bare ^/dev/null |
||||
end |
||||
``` |
||||
|
||||
# Customization |
||||
|
||||
### Adding, Removing and Re-arranging segments |
||||
|
||||
The `config.py` file defines which segments are drawn and in which order. Simply |
||||
comment out and rearrange segment names to get your desired arrangement. Every |
||||
time you change `config.py`, run `install.py`, which will generate a new |
||||
`powerline-shell.py` customized to your configuration. You should see the new |
||||
prompt immediately. |
||||
|
||||
### Contributing new types of segments |
||||
|
||||
The `segments` directory contains python scripts which are injected as is into |
||||
a single file `powerline_shell_base.py`. Each segment script defines a function |
||||
that inserts one or more segments into the prompt. If you want to add a new |
||||
segment, simply create a new file in the segments directory and add its name to |
||||
the `config.py` file at the appropriate location. |
||||
|
||||
Make sure that your script does not introduce new globals which might conflict |
||||
with other scripts. Your script should fail silently and run quickly in any |
||||
scenario. |
||||
|
||||
Make sure you introduce new default colors in `themes/default.py` for every new |
||||
segment you create. Test your segment with this theme first. |
||||
|
||||
You should add tests for your segment as best you are able. Unit and |
||||
integration tests are both welcome. Run your tests with the `nosetests` command |
||||
after install the requirements in `dev_requirements.txt`. |
||||
|
||||
### Themes |
||||
|
||||
The `themes` directory stores themes for your prompt, which are basically color |
||||
values used by segments. The `default.py` defines a default theme which can be |
||||
used standalone, and every other theme falls back to it if they miss colors for |
||||
any segments. Create new themes by copying any other existing theme and |
||||
changing the values. To use a theme, set the `THEME` variable in `config.py` to |
||||
the name of your theme. |
||||
|
||||
A script for testing color combinations is provided at `themes/colortest.py`. |
||||
Note that the colors you see may vary depending on your terminal. When designing |
||||
a theme, please test your theme on multiple terminals, especially with default |
||||
settings. |
@ -0,0 +1,5 @@ |
||||
dependencies: |
||||
pre: |
||||
- sudo pip install -r dev_requirements.txt |
||||
- git config --global user.email "tester@example.com" |
||||
- git config --global user.name "Tester McGee" |
@ -0,0 +1,57 @@ |
||||
# This is the configuration file for your powerline-shell prompt |
||||
# Every time you make a change to this file, run install.py to apply changes |
||||
# |
||||
# For instructions on how to use the powerline-shell.py script, see the README |
||||
|
||||
# Add, remove or rearrange these segments to customize what you see on the shell |
||||
# prompt. Any segment you add must be present in the segments/ directory |
||||
|
||||
SEGMENTS = [ |
||||
# Set the terminal window title to user@host:dir |
||||
'set_term_title', |
||||
|
||||
# Show current virtual environment (see http://www.virtualenv.org/) |
||||
'virtual_env', |
||||
|
||||
# Show the current user's username as in ordinary prompts |
||||
'username', |
||||
|
||||
# Show the machine's hostname. Mostly used when ssh-ing into other machines |
||||
# 'hostname', |
||||
|
||||
# Show a padlock when ssh-ing from another machine |
||||
'ssh', |
||||
|
||||
# Show the current directory. If the path is too long, the middle part is |
||||
# replaced with ellipsis ('...') |
||||
'cwd', |
||||
|
||||
# Show a padlock if the current user has no write access to the current |
||||
# directory |
||||
'read_only', |
||||
|
||||
# Show the current git branch and status |
||||
'git', |
||||
|
||||
# Show the current mercurial branch and status |
||||
'hg', |
||||
|
||||
# Show the current svn branch and status |
||||
'svn', |
||||
|
||||
# Show the current fossil branch and status |
||||
'fossil', |
||||
|
||||
# Show number of running jobs |
||||
'jobs', |
||||
|
||||
# Show the last command's exit code if it was non-zero |
||||
# 'exit_code', |
||||
|
||||
# Shows a '#' if the current user is root, '$' otherwise |
||||
# Also, changes color if the last command exited with a non-zero error code |
||||
'root', |
||||
] |
||||
|
||||
# Change the colors used to draw individual segments in your prompt |
||||
THEME = 'default' |
@ -0,0 +1,57 @@ |
||||
# This is the configuration file for your powerline-shell prompt |
||||
# Every time you make a change to this file, run install.py to apply changes |
||||
# |
||||
# For instructions on how to use the powerline-shell.py script, see the README |
||||
|
||||
# Add, remove or rearrange these segments to customize what you see on the shell |
||||
# prompt. Any segment you add must be present in the segments/ directory |
||||
|
||||
SEGMENTS = [ |
||||
# Set the terminal window title to user@host:dir |
||||
# 'set_term_title', |
||||
|
||||
# Show current virtual environment (see http://www.virtualenv.org/) |
||||
'virtual_env', |
||||
|
||||
# Show the current user's username as in ordinary prompts |
||||
'username', |
||||
|
||||
# Show the machine's hostname. Mostly used when ssh-ing into other machines |
||||
'hostname', |
||||
|
||||
# Show a padlock when ssh-ing from another machine |
||||
'ssh', |
||||
|
||||
# Show the current directory. If the path is too long, the middle part is |
||||
# replaced with ellipsis ('...') |
||||
'cwd', |
||||
|
||||
# Show a padlock if the current user has no write access to the current |
||||
# directory |
||||
'read_only', |
||||
|
||||
# Show the current git branch and status |
||||
'git', |
||||
|
||||
# Show the current mercurial branch and status |
||||
'hg', |
||||
|
||||
# Show the current svn branch and status |
||||
'svn', |
||||
|
||||
# Show the current fossil branch and status |
||||
'fossil', |
||||
|
||||
# Show number of running jobs |
||||
'jobs', |
||||
|
||||
# Show the last command's exit code if it was non-zero |
||||
# 'exit_code', |
||||
|
||||
# Shows a '#' if the current user is root, '$' otherwise |
||||
# Also, changes color if the last command exited with a non-zero error code |
||||
'root', |
||||
] |
||||
|
||||
# Change the colors used to draw individual segments in your prompt |
||||
THEME = 'default' |
@ -0,0 +1,3 @@ |
||||
nose>=1.3.7 |
||||
mock>=1.3.0 |
||||
sh>=1.11 |
@ -0,0 +1,49 @@ |
||||
#!/usr/bin/env python |
||||
from __future__ import print_function |
||||
import os |
||||
import stat |
||||
|
||||
try: |
||||
import config |
||||
except ImportError: |
||||
print('Created personal config.py for your customizations') |
||||
import shutil |
||||
shutil.copyfile('config.py.dist', 'config.py') |
||||
import config |
||||
|
||||
TEMPLATE_FILE = 'powerline_shell_base.py' |
||||
OUTPUT_FILE = 'powerline-shell.py' |
||||
SEGMENTS_DIR = 'segments' |
||||
THEMES_DIR = 'themes' |
||||
|
||||
def load_source(srcfile): |
||||
try: |
||||
return ''.join(open(srcfile).readlines()) + '\n\n' |
||||
except IOError: |
||||
print('Could not open', srcfile) |
||||
return '' |
||||
|
||||
if __name__ == "__main__": |
||||
source = load_source(TEMPLATE_FILE) |
||||
source += load_source(os.path.join(THEMES_DIR, 'default.py')) |
||||
|
||||
if config.THEME != 'default': |
||||
source += load_source(os.path.join(THEMES_DIR, config.THEME + '.py')) |
||||
|
||||
for segment in config.SEGMENTS: |
||||
source += load_source(os.path.join(SEGMENTS_DIR, segment + '.py')) |
||||
|
||||
# assumes each segment file will have a function called |
||||
# add_segment__[segment] that accepts the powerline object |
||||
source += 'add_{}_segment(powerline)\n'.format(segment) |
||||
|
||||
source += 'sys.stdout.write(powerline.draw())\n' |
||||
|
||||
try: |
||||
open(OUTPUT_FILE, 'w').write(source) |
||||
st = os.stat(OUTPUT_FILE) |
||||
os.chmod(OUTPUT_FILE, st.st_mode | stat.S_IEXEC) |
||||
print(OUTPUT_FILE, 'saved successfully') |
||||
except IOError: |
||||
print('ERROR: Could not write to powerline-shell.py. Make sure it is writable') |
||||
exit(1) |
@ -0,0 +1,3 @@ |
||||
history |
||||
bookmarks |
||||
tagged |
@ -0,0 +1,61 @@ |
||||
# This is a sample commands.py. You can add your own commands here. |
||||
# |
||||
# Please refer to commands_full.py for all the default commands and a complete |
||||
# documentation. Do NOT add them all here, or you may end up with defunct |
||||
# commands when upgrading ranger. |
||||
|
||||
# You always need to import ranger.api.commands here to get the Command class: |
||||
from ranger.api.commands import * |
||||
|
||||
# A simple command for demonstration purposes follows. |
||||
# ----------------------------------------------------------------------------- |
||||
|
||||
# You can import any python module as needed. |
||||
import os |
||||
|
||||
# Any class that is a subclass of "Command" will be integrated into ranger as a |
||||
# command. Try typing ":my_edit<ENTER>" in ranger! |
||||
|
||||
|
||||
class my_edit(Command): |
||||
# The so-called doc-string of the class will be visible in the built-in |
||||
# help that is accessible by typing "?c" inside ranger. |
||||
""":my_edit <filename> |
||||
|
||||
A sample command for demonstration purposes that opens a file in an editor. |
||||
""" |
||||
|
||||
# The execute method is called when you run this command in ranger. |
||||
def execute(self): |
||||
# self.arg(1) is the first (space-separated) argument to the function. |
||||
# This way you can write ":my_edit somefilename<ENTER>". |
||||
if self.arg(1): |
||||
# self.rest(1) contains self.arg(1) and everything that follows |
||||
target_filename = self.rest(1) |
||||
else: |
||||
# self.fm is a ranger.core.filemanager.FileManager object and gives |
||||
# you access to internals of ranger. |
||||
# self.fm.thisfile is a ranger.container.file.File object and is a |
||||
# reference to the currently selected file. |
||||
target_filename = self.fm.thisfile.path |
||||
|
||||
# This is a generic function to print text in ranger. |
||||
self.fm.notify("Let's edit the file " + target_filename + "!") |
||||
|
||||
# Using bad=True in fm.notify allows you to print error messages: |
||||
if not os.path.exists(target_filename): |
||||
self.fm.notify("The given file does not exist!", bad=True) |
||||
return |
||||
|
||||
# This executes a function from ranger.core.acitons, a module with a |
||||
# variety of subroutines that can help you construct commands. |
||||
# Check out the source, or run "pydoc ranger.core.actions" for a list. |
||||
self.fm.edit_file(target_filename) |
||||
|
||||
# The tab method is called when you press tab, and should return a list of |
||||
# suggestions that the user will tab through. |
||||
# tabnum is 1 for <TAB> and -1 for <S-TAB> by default |
||||
def tab(self, tabnum): |
||||
# This is a generic tab-completion function that iterates through the |
||||
# content of the current directory. |
||||
return self._tab_directory_content() |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,618 @@ |
||||
# =================================================================== |
||||
# This file contains the default startup commands for ranger. |
||||
# To change them, it is recommended to create the file |
||||
# ~/.config/ranger/rc.conf and add your custom commands there. |
||||
# |
||||
# If you copy this whole file there, you may want to set the environment |
||||
# variable RANGER_LOAD_DEFAULT_RC to FALSE to avoid loading it twice. |
||||
# |
||||
# The purpose of this file is mainly to define keybindings and settings. |
||||
# For running more complex python code, please create a plugin in "plugins/" or |
||||
# a command in "commands.py". |
||||
# |
||||
# Each line is a command that will be run before the user interface |
||||
# is initialized. As a result, you can not use commands which rely |
||||
# on the UI such as :delete or :mark. |
||||
# =================================================================== |
||||
|
||||
# =================================================================== |
||||
# == Options |
||||
# =================================================================== |
||||
|
||||
# Which viewmode should be used? Possible values are: |
||||
# miller: Use miller columns which show multiple levels of the hierarchy |
||||
# multipane: Midnight-commander like multipane view showing all tabs next |
||||
# to each other |
||||
set viewmode miller |
||||
#set viewmode multipane |
||||
|
||||
# How many columns are there, and what are their relative widths? |
||||
set column_ratios 1,3,4 |
||||
|
||||
# Which files should be hidden? (regular expression) |
||||
set hidden_filter ^\.|\.(?:pyc|pyo|bak|swp)$|^lost\+found$|^__(py)?cache__$ |
||||
|
||||
# Show hidden files? You can toggle this by typing 'zh' |
||||
set show_hidden false |
||||
|
||||
# Ask for a confirmation when running the "delete" command? |
||||
# Valid values are "always", "never", "multiple" (default) |
||||
# With "multiple", ranger will ask only if you delete multiple files at once. |
||||
set confirm_on_delete multiple |
||||
|
||||
# Which script is used to generate file previews? |
||||
# ranger ships with scope.sh, a script that calls external programs (see |
||||
# README.md for dependencies) to preview images, archives, etc. |
||||
set preview_script ~/.config/ranger/scope.sh |
||||
|
||||
# Use the external preview script or display simple plain text or image previews? |
||||
set use_preview_script true |
||||
|
||||
# Automatically count files in the directory, even before entering them? |
||||
set automatically_count_files true |
||||
|
||||
# Open all images in this directory when running certain image viewers |
||||
# like feh or sxiv? You can still open selected files by marking them. |
||||
set open_all_images true |
||||
|
||||
# Be aware of version control systems and display information. |
||||
set vcs_aware true |
||||
|
||||
# State of the three backends git, hg, bzr. The possible states are |
||||
# disabled, local (only show local info), enabled (show local and remote |
||||
# information). |
||||
set vcs_backend_git enabled |
||||
set vcs_backend_hg disabled |
||||
set vcs_backend_bzr disabled |
||||
|
||||
# Use one of the supported image preview protocols |
||||
set preview_images true |
||||
|
||||
# Set the preview image method. Supported methods: |
||||
# |
||||
# * w3m (default): |
||||
# Preview images in full color with the external command "w3mimgpreview"? |
||||
# This requires the console web browser "w3m" and a supported terminal. |
||||
# It has been successfully tested with "xterm" and "urxvt" without tmux. |
||||
# |
||||
# * iterm2: |
||||
# Preview images in full color using iTerm2 image previews |
||||
# (http://iterm2.com/images.html). This requires using iTerm2 compiled |
||||
# with image preview support. |
||||
# |
||||
# * urxvt: |
||||
# Preview images in full color using urxvt image backgrounds. This |
||||
# requires using urxvt compiled with pixbuf support. |
||||
# |
||||
# * urxvt-full: |
||||
# The same as urxvt but utilizing not only the preview pane but the |
||||
# whole terminal window. |
||||
set preview_images_method w3m |
||||
|
||||
# Use a unicode "..." character to mark cut-off filenames? |
||||
set unicode_ellipsis false |
||||
|
||||
# Show dotfiles in the bookmark preview box? |
||||
set show_hidden_bookmarks true |
||||
|
||||
# Which colorscheme to use? These colorschemes are available by default: |
||||
# default, jungle, snow, solarized |
||||
set colorscheme default |
||||
|
||||
# Preview files on the rightmost column? |
||||
# And collapse (shrink) the last column if there is nothing to preview? |
||||
set preview_files true |
||||
set preview_directories true |
||||
set collapse_preview true |
||||
|
||||
# Save the console history on exit? |
||||
set save_console_history true |
||||
|
||||
# Draw the status bar on top of the browser window (default: bottom) |
||||
set status_bar_on_top false |
||||
|
||||
# Draw a progress bar in the status bar which displays the average state of all |
||||
# currently running tasks which support progress bars? |
||||
set draw_progress_bar_in_status_bar true |
||||
|
||||
# Draw borders around columns? |
||||
set draw_borders true |
||||
|
||||
# Display the directory name in tabs? |
||||
set dirname_in_tabs false |
||||
|
||||
# Enable the mouse support? |
||||
set mouse_enabled true |
||||
|
||||
# Display the file size in the main column or status bar? |
||||
set display_size_in_main_column true |
||||
set display_size_in_status_bar true |
||||
|
||||
# Display files tags in all columns or only in main column? |
||||
set display_tags_in_all_columns true |
||||
|
||||
# Set a title for the window? |
||||
set update_title false |
||||
|
||||
# Set the title to "ranger" in the tmux program? |
||||
set update_tmux_title false |
||||
|
||||
# Shorten the title if it gets long? The number defines how many |
||||
# directories are displayed at once, 0 turns off this feature. |
||||
set shorten_title 3 |
||||
|
||||
# Abbreviate $HOME with ~ in the titlebar (first line) of ranger? |
||||
set tilde_in_titlebar false |
||||
|
||||
# How many directory-changes or console-commands should be kept in history? |
||||
set max_history_size 20 |
||||
set max_console_history_size 50 |
||||
|
||||
# Try to keep so much space between the top/bottom border when scrolling: |
||||
set scroll_offset 8 |
||||
|
||||
# Flush the input after each key hit? (Noticeable when ranger lags) |
||||
set flushinput true |
||||
|
||||
# Padding on the right when there's no preview? |
||||
# This allows you to click into the space to run the file. |
||||
set padding_right true |
||||
|
||||
# Save bookmarks (used with mX and `X) instantly? |
||||
# This helps to synchronize bookmarks between multiple ranger |
||||
# instances but leads to *slight* performance loss. |
||||
# When false, bookmarks are saved when ranger is exited. |
||||
set autosave_bookmarks true |
||||
|
||||
# You can display the "real" cumulative size of directories by using the |
||||
# command :get_cumulative_size or typing "dc". The size is expensive to |
||||
# calculate and will not be updated automatically. You can choose |
||||
# to update it automatically though by turning on this option: |
||||
set autoupdate_cumulative_size false |
||||
|
||||
# Turning this on makes sense for screen readers: |
||||
set show_cursor false |
||||
|
||||
# One of: size, natural, basename, atime, ctime, mtime, type, random |
||||
set sort natural |
||||
|
||||
# Additional sorting options |
||||
set sort_reverse false |
||||
set sort_case_insensitive true |
||||
set sort_directories_first true |
||||
set sort_unicode false |
||||
|
||||
# Enable this if key combinations with the Alt Key don't work for you. |
||||
# (Especially on xterm) |
||||
set xterm_alt_key false |
||||
|
||||
# Whether to include bookmarks in cd command |
||||
set cd_bookmarks true |
||||
|
||||
# Avoid previewing files larger than this size, in bytes. Use a value of 0 to |
||||
# disable this feature. |
||||
set preview_max_size 0 |
||||
|
||||
# Add the highlighted file to the path in the titlebar |
||||
set show_selection_in_titlebar true |
||||
|
||||
# The delay that ranger idly waits for user input, in milliseconds, with a |
||||
# resolution of 100ms. Lower delay reduces lag between directory updates but |
||||
# increases CPU load. |
||||
set idle_delay 2000 |
||||
|
||||
# When the metadata manager module looks for metadata, should it only look for |
||||
# a ".metadata.json" file in the current directory, or do a deep search and |
||||
# check all directories above the current one as well? |
||||
set metadata_deep_search false |
||||
|
||||
# Clear all existing filters when leaving a directory |
||||
set clear_filters_on_dir_change false |
||||
|
||||
# Disable displaying line numbers in main column |
||||
set line_numbers false |
||||
|
||||
# =================================================================== |
||||
# == Local Options |
||||
# =================================================================== |
||||
# You can set local options that only affect a single directory. |
||||
|
||||
# Examples: |
||||
# setlocal path=~/downloads sort mtime |
||||
|
||||
# =================================================================== |
||||
# == Command Aliases in the Console |
||||
# =================================================================== |
||||
|
||||
alias e edit |
||||
alias q quit |
||||
alias q! quitall |
||||
alias qa quitall |
||||
alias qall quitall |
||||
alias setl setlocal |
||||
|
||||
alias filter scout -prt |
||||
alias find scout -aeit |
||||
alias mark scout -mr |
||||
alias unmark scout -Mr |
||||
alias search scout -rs |
||||
alias search_inc scout -rts |
||||
alias travel scout -aefiklst |
||||
|
||||
# =================================================================== |
||||
# == Define keys for the browser |
||||
# =================================================================== |
||||
|
||||
# Basic |
||||
map Q quit! |
||||
map q quit |
||||
copymap q ZZ ZQ |
||||
|
||||
map R reload_cwd |
||||
map <C-r> reset |
||||
map <C-l> redraw_window |
||||
map <C-c> abort |
||||
map <esc> change_mode normal |
||||
map ~ set viewmode! |
||||
|
||||
map i display_file |
||||
map ? help |
||||
map W display_log |
||||
map w taskview_open |
||||
map S shell $SHELL |
||||
|
||||
map : console |
||||
map ; console |
||||
map ! console shell%space |
||||
map @ console -p6 shell %%s |
||||
map # console shell -p%space |
||||
map s console shell%space |
||||
map r chain draw_possible_programs; console open_with%%space |
||||
map f console find%space |
||||
map cd console cd%space |
||||
|
||||
# Change the line mode |
||||
map Mf linemode filename |
||||
map Mi linemode fileinfo |
||||
map Mm linemode mtime |
||||
map Mp linemode permissions |
||||
map Ms linemode sizemtime |
||||
map Mt linemode metatitle |
||||
|
||||
# Tagging / Marking |
||||
map t tag_toggle |
||||
map ut tag_remove |
||||
map "<any> tag_toggle tag=%any |
||||
map <Space> mark_files toggle=True |
||||
map v mark_files all=True toggle=True |
||||
map uv mark_files all=True val=False |
||||
map V toggle_visual_mode |
||||
map uV toggle_visual_mode reverse=True |
||||
|
||||
# For the nostalgics: Midnight Commander bindings |
||||
map <F1> help |
||||
map <F3> display_file |
||||
map <F4> edit |
||||
map <F5> copy |
||||
map <F6> cut |
||||
map <F7> console mkdir%space |
||||
map <F8> console delete |
||||
map <F10> exit |
||||
|
||||
# In case you work on a keyboard with dvorak layout |
||||
map <UP> move up=1 |
||||
map <DOWN> move down=1 |
||||
map <LEFT> move left=1 |
||||
map <RIGHT> move right=1 |
||||
map <HOME> move to=0 |
||||
map <END> move to=-1 |
||||
map <PAGEDOWN> move down=1 pages=True |
||||
map <PAGEUP> move up=1 pages=True |
||||
map <CR> move right=1 |
||||
#map <DELETE> console delete |
||||
map <INSERT> console touch%space |
||||
|
||||
# VIM-like |
||||
copymap <UP> k |
||||
copymap <DOWN> j |
||||
copymap <LEFT> h |
||||
copymap <RIGHT> l |
||||
copymap <HOME> gg |
||||
copymap <END> G |
||||
copymap <PAGEDOWN> <C-F> |
||||
copymap <PAGEUP> <C-B> |
||||
|
||||
map J move down=0.5 pages=True |
||||
map K move up=0.5 pages=True |
||||
copymap J <C-D> |
||||
copymap K <C-U> |
||||
|
||||
# Jumping around |
||||
map H history_go -1 |
||||
map L history_go 1 |
||||
map ] move_parent 1 |
||||
map [ move_parent -1 |
||||
map } traverse |
||||
|
||||
map gh cd ~ |
||||
map ge cd /etc |
||||
map gu cd /usr |
||||
map gd cd /dev |
||||
map gl cd -r . |
||||
map gL cd -r %f |
||||
map go cd /opt |
||||
map gv cd /var |
||||
map gm cd /media |
||||
map gM cd /mnt |
||||
map gs cd /srv |
||||
map gr cd / |
||||
map gR eval fm.cd(ranger.RANGERDIR) |
||||
map g/ cd / |
||||
map g? cd /usr/share/doc/ranger |
||||
|
||||
# External Programs |
||||
map E edit |
||||
map du shell -p du --max-depth=1 -h --apparent-size |
||||
map dU shell -p du --max-depth=1 -h --apparent-size | sort -rh |
||||
map yp shell -f echo -n %d/%f | xsel -i; xsel -o | xsel -i -b |
||||
map yd shell -f echo -n %d | xsel -i; xsel -o | xsel -i -b |
||||
map yn shell -f echo -n %f | xsel -i; xsel -o | xsel -i -b |
||||
|
||||
# Filesystem Operations |
||||
map = chmod |
||||
|
||||
map cw console rename%space |
||||
map a rename_append |
||||
map A eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%")) |
||||
map I eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%"), position=7) |
||||
|
||||
map pp paste |
||||
map po paste overwrite=True |
||||
map pP paste append=True |
||||
map pO paste overwrite=True append=True |
||||
map pl paste_symlink relative=False |
||||
map pL paste_symlink relative=True |
||||
map phl paste_hardlink |
||||
map pht paste_hardlinked_subtree |
||||
|
||||
map dD console delete |
||||
|
||||
map dd cut |
||||
map ud uncut |
||||
map da cut mode=add |
||||
map dr cut mode=remove |
||||
map dt cut mode=toggle |
||||
|
||||
map yy copy |
||||
map uy uncut |
||||
map ya copy mode=add |
||||
map yr copy mode=remove |
||||
map yt copy mode=toggle |
||||
|
||||
# Temporary workarounds |
||||
map dgg eval fm.cut(dirarg=dict(to=0), narg=quantifier) |
||||
map dG eval fm.cut(dirarg=dict(to=-1), narg=quantifier) |
||||
map dj eval fm.cut(dirarg=dict(down=1), narg=quantifier) |
||||
map dk eval fm.cut(dirarg=dict(up=1), narg=quantifier) |
||||
map ygg eval fm.copy(dirarg=dict(to=0), narg=quantifier) |
||||
map yG eval fm.copy(dirarg=dict(to=-1), narg=quantifier) |
||||
map yj eval fm.copy(dirarg=dict(down=1), narg=quantifier) |
||||
map yk eval fm.copy(dirarg=dict(up=1), narg=quantifier) |
||||
|
||||
# Searching |
||||
map / console search%space |
||||
map n search_next |
||||
map N search_next forward=False |
||||
map ct search_next order=tag |
||||
map cs search_next order=size |
||||
map ci search_next order=mimetype |
||||
map cc search_next order=ctime |
||||
map cm search_next order=mtime |
||||
map ca search_next order=atime |
||||
|
||||
# Tabs |
||||
map <C-n> tab_new ~ |
||||
map <C-w> tab_close |
||||
map <TAB> tab_move 1 |
||||
map <S-TAB> tab_move -1 |
||||
map <A-Right> tab_move 1 |
||||
map <A-Left> tab_move -1 |
||||
map gt tab_move 1 |
||||
map gT tab_move -1 |
||||
map gn tab_new ~ |
||||
map gc tab_close |
||||
map uq tab_restore |
||||
map <a-1> tab_open 1 |
||||
map <a-2> tab_open 2 |
||||
map <a-3> tab_open 3 |
||||
map <a-4> tab_open 4 |
||||
map <a-5> tab_open 5 |
||||
map <a-6> tab_open 6 |
||||
map <a-7> tab_open 7 |
||||
map <a-8> tab_open 8 |
||||
map <a-9> tab_open 9 |
||||
|
||||
# Sorting |
||||
map or set sort_reverse! |
||||
map oz set sort=random |
||||
map os chain set sort=size; set sort_reverse=False |
||||
map ob chain set sort=basename; set sort_reverse=False |
||||
map on chain set sort=natural; set sort_reverse=False |
||||
map om chain set sort=mtime; set sort_reverse=False |
||||
map oc chain set sort=ctime; set sort_reverse=False |
||||
map oa chain set sort=atime; set sort_reverse=False |
||||
map ot chain set sort=type; set sort_reverse=False |
||||
map oe chain set sort=extension; set sort_reverse=False |
||||
|
||||
map oS chain set sort=size; set sort_reverse=True |
||||
map oB chain set sort=basename; set sort_reverse=True |
||||
map oN chain set sort=natural; set sort_reverse=True |
||||
map oM chain set sort=mtime; set sort_reverse=True |
||||
map oC chain set sort=ctime; set sort_reverse=True |
||||
map oA chain set sort=atime; set sort_reverse=True |
||||
map oT chain set sort=type; set sort_reverse=True |
||||
map oE chain set sort=extension; set sort_reverse=True |
||||
|
||||
map dc get_cumulative_size |
||||
|
||||
# Settings |
||||
map zc set collapse_preview! |
||||
map zd set sort_directories_first! |
||||
map zh set show_hidden! |
||||
map <C-h> set show_hidden! |
||||
map zI set flushinput! |
||||
map zi set preview_images! |
||||
map zm set mouse_enabled! |
||||
map zp set preview_files! |
||||
map zP set preview_directories! |
||||
map zs set sort_case_insensitive! |
||||
map zu set autoupdate_cumulative_size! |
||||
map zv set use_preview_script! |
||||
map zf console filter%space |
||||
|
||||
# Bookmarks |
||||
map `<any> enter_bookmark %any |
||||
map '<any> enter_bookmark %any |
||||
map m<any> set_bookmark %any |
||||
map um<any> unset_bookmark %any |
||||
|
||||
map m<bg> draw_bookmarks |
||||
copymap m<bg> um<bg> `<bg> '<bg> |
||||
|
||||
# Generate all the chmod bindings with some python help: |
||||
eval for arg in "rwxXst": cmd("map +u{0} shell -f chmod u+{0} %s".format(arg)) |
||||
eval for arg in "rwxXst": cmd("map +g{0} shell -f chmod g+{0} %s".format(arg)) |
||||
eval for arg in "rwxXst": cmd("map +o{0} shell -f chmod o+{0} %s".format(arg)) |
||||
eval for arg in "rwxXst": cmd("map +a{0} shell -f chmod a+{0} %s".format(arg)) |
||||
eval for arg in "rwxXst": cmd("map +{0} shell -f chmod u+{0} %s".format(arg)) |
||||
|
||||
eval for arg in "rwxXst": cmd("map -u{0} shell -f chmod u-{0} %s".format(arg)) |
||||
eval for arg in "rwxXst": cmd("map -g{0} shell -f chmod g-{0} %s".format(arg)) |
||||
eval for arg in "rwxXst": cmd("map -o{0} shell -f chmod o-{0} %s".format(arg)) |
||||
eval for arg in "rwxXst": cmd("map -a{0} shell -f chmod a-{0} %s".format(arg)) |
||||
eval for arg in "rwxXst": cmd("map -{0} shell -f chmod u-{0} %s".format(arg)) |
||||
|
||||
# =================================================================== |
||||
# == Define keys for the console |
||||
# =================================================================== |
||||
# Note: Unmapped keys are passed directly to the console. |
||||
|
||||
# Basic |
||||
cmap <tab> eval fm.ui.console.tab() |
||||
cmap <s-tab> eval fm.ui.console.tab(-1) |
||||
cmap <ESC> eval fm.ui.console.close() |
||||
cmap <CR> eval fm.ui.console.execute() |
||||
cmap <C-l> redraw_window |
||||
|
||||
copycmap <ESC> <C-c> |
||||
copycmap <CR> <C-j> |
||||
|
||||
# Move around |
||||
cmap <up> eval fm.ui.console.history_move(-1) |
||||
cmap <down> eval fm.ui.console.history_move(1) |
||||
cmap <left> eval fm.ui.console.move(left=1) |
||||
cmap <right> eval fm.ui.console.move(right=1) |
||||
cmap <home> eval fm.ui.console.move(right=0, absolute=True) |
||||
cmap <end> eval fm.ui.console.move(right=-1, absolute=True) |
||||
cmap <a-left> eval fm.ui.console.move_word(left=1) |
||||
cmap <a-right> eval fm.ui.console.move_word(right=1) |
||||
|
||||
# Line Editing |
||||
cmap <backspace> eval fm.ui.console.delete(-1) |
||||
cmap <delete> eval fm.ui.console.delete(0) |
||||
cmap <C-w> eval fm.ui.console.delete_word() |
||||
cmap <A-d> eval fm.ui.console.delete_word(backward=False) |
||||
cmap <C-k> eval fm.ui.console.delete_rest(1) |
||||
cmap <C-u> eval fm.ui.console.delete_rest(-1) |
||||
cmap <C-y> eval fm.ui.console.paste() |
||||
|
||||
# And of course the emacs way |
||||
copycmap <up> <C-p> |
||||
copycmap <down> <C-n> |
||||
copycmap <left> <C-b> |
||||
copycmap <right> <C-f> |
||||
copycmap <home> <C-a> |
||||
copycmap <end> <C-e> |
||||
copycmap <delete> <C-d> |
||||
copycmap <backspace> <C-h> |
||||
|
||||
# Note: There are multiple ways to express backspaces. <backspace> (code 263) |
||||
# and <backspace2> (code 127). To be sure, use both. |
||||
copycmap <backspace> <backspace2> |
||||
|
||||
# This special expression allows typing in numerals: |
||||
cmap <allow_quantifiers> false |
||||
|
||||
# =================================================================== |
||||
# == Pager Keybindings |
||||
# =================================================================== |
||||
|
||||
# Movement |
||||
pmap <down> pager_move down=1 |
||||
pmap <up> pager_move up=1 |
||||
pmap <left> pager_move left=4 |
||||
pmap <right> pager_move right=4 |
||||
pmap <home> pager_move to=0 |
||||
pmap <end> pager_move to=-1 |
||||
pmap <pagedown> pager_move down=1.0 pages=True |
||||
pmap <pageup> pager_move up=1.0 pages=True |
||||
pmap <C-d> pager_move down=0.5 pages=True |
||||
pmap <C-u> pager_move up=0.5 pages=True |
||||
|
||||
copypmap <UP> k <C-p> |
||||
copypmap <DOWN> j <C-n> <CR> |
||||
copypmap <LEFT> h |
||||
copypmap <RIGHT> l |
||||
copypmap <HOME> g |
||||
copypmap <END> G |
||||
copypmap <C-d> d |
||||
copypmap <C-u> u |
||||
copypmap <PAGEDOWN> n f <C-F> <Space> |
||||
copypmap <PAGEUP> p b <C-B> |
||||
|
||||
# Basic |
||||
pmap <C-l> redraw_window |
||||
pmap <ESC> pager_close |
||||
copypmap <ESC> q Q i <F3> |
||||
pmap E edit_file |
||||
|
||||
# =================================================================== |
||||
# == Taskview Keybindings |
||||
# =================================================================== |
||||
|
||||
# Movement |
||||
tmap <up> taskview_move up=1 |
||||
tmap <down> taskview_move down=1 |
||||
tmap <home> taskview_move to=0 |
||||
tmap <end> taskview_move to=-1 |
||||
tmap <pagedown> taskview_move down=1.0 pages=True |
||||
tmap <pageup> taskview_move up=1.0 pages=True |
||||
tmap <C-d> taskview_move down=0.5 pages=True |
||||
tmap <C-u> taskview_move up=0.5 pages=True |
||||
|
||||
copytmap <UP> k <C-p> |
||||
copytmap <DOWN> j <C-n> <CR> |
||||
copytmap <HOME> g |
||||
copytmap <END> G |
||||
copytmap <C-u> u |
||||
copytmap <PAGEDOWN> n f <C-F> <Space> |
||||
copytmap <PAGEUP> p b <C-B> |
||||
|
||||
# Changing priority and deleting tasks |
||||
tmap J eval -q fm.ui.taskview.task_move(-1) |
||||
tmap K eval -q fm.ui.taskview.task_move(0) |
||||
tmap dd eval -q fm.ui.taskview.task_remove() |
||||
tmap <pagedown> eval -q fm.ui.taskview.task_move(-1) |
||||
tmap <pageup> eval -q fm.ui.taskview.task_move(0) |
||||
tmap <delete> eval -q fm.ui.taskview.task_remove() |
||||
|
||||
# Basic |
||||
tmap <C-l> redraw_window |
||||
tmap <ESC> taskview_close |
||||
copytmap <ESC> q Q w <C-c> |
||||
|
||||
# =================================================================== |
||||
# == My Additions |
||||
# =================================================================== |
||||
# Start terminal at location |
||||
map S shell bash -c "cd %d ; bash" |
@ -0,0 +1,211 @@ |
||||
# vim: ft=cfg |
||||
# |
||||
# This is the configuration file of "rifle", ranger's file executor/opener. |
||||
# Each line consists of conditions and a command. For each line the conditions |
||||
# are checked and if they are met, the respective command is run. |
||||
# |
||||
# Syntax: |
||||
# <condition1> , <condition2> , ... = command |
||||
# |
||||
# The command can contain these environment variables: |
||||
# $1-$9 | The n-th selected file |
||||
# $@ | All selected files |
||||
# |
||||
# If you use the special command "ask", rifle will ask you what program to run. |
||||
# |
||||
# Prefixing a condition with "!" will negate its result. |
||||
# These conditions are currently supported: |
||||
# match <regexp> | The regexp matches $1 |
||||
# ext <regexp> | The regexp matches the extension of $1 |
||||
# mime <regexp> | The regexp matches the mime type of $1 |
||||
# name <regexp> | The regexp matches the basename of $1 |
||||
# path <regexp> | The regexp matches the absolute path of $1 |
||||
# has <program> | The program is installed (i.e. located in $PATH) |
||||
# env <variable> | The environment variable "variable" is non-empty |
||||
# file | $1 is a file |
||||
# directory | $1 is a directory |
||||
# number <n> | change the number of this command to n |
||||
# terminal | stdin, stderr and stdout are connected to a terminal |
||||
# X | $DISPLAY is not empty (i.e. Xorg runs) |
||||
# |
||||
# There are also pseudo-conditions which have a "side effect": |
||||
# flag <flags> | Change how the program is run. See below. |
||||
# label <label> | Assign a label or name to the command so it can |
||||
# | be started with :open_with <label> in ranger |
||||
# | or `rifle -p <label>` in the standalone executable. |
||||
# else | Always true. |
||||
# |
||||
# Flags are single characters which slightly transform the command: |
||||
# f | Fork the program, make it run in the background. |
||||
# | New command = setsid $command >& /dev/null & |
||||
# r | Execute the command with root permissions |
||||
# | New command = sudo $command |
||||
# t | Run the program in a new terminal. If $TERMCMD is not defined, |
||||
# | rifle will attempt to extract it from $TERM. |
||||
# | New command = $TERMCMD -e $command |
||||
# Note: The "New command" serves only as an illustration, the exact |
||||
# implementation may differ. |
||||
# Note: When using rifle in ranger, there is an additional flag "c" for |
||||
# only running the current file even if you have marked multiple files. |
||||
|
||||
#------------------------------------------- |
||||
# Websites |
||||
#------------------------------------------- |
||||
# Rarely installed browsers get higher priority; It is assumed that if you |
||||
# install a rare browser, you probably use it. Firefox/konqueror/w3m on the |
||||
# other hand are often only installed as fallback browsers. |
||||
ext x?html?, has surf, X, flag f = surf -- file://"$1" |
||||
ext x?html?, has vimprobable, X, flag f = vimprobable -- "$@" |
||||
ext x?html?, has vimprobable2, X, flag f = vimprobable2 -- "$@" |
||||
ext x?html?, has qutebrowser, X, flag f = qutebrowser -- "$@" |
||||
ext x?html?, has dwb, X, flag f = dwb -- "$@" |
||||
ext x?html?, has jumanji, X, flag f = jumanji -- "$@" |
||||
ext x?html?, has luakit, X, flag f = luakit -- "$@" |
||||
ext x?html?, has uzbl, X, flag f = uzbl -- "$@" |
||||
ext x?html?, has uzbl-tabbed, X, flag f = uzbl-tabbed -- "$@" |
||||
ext x?html?, has uzbl-browser, X, flag f = uzbl-browser -- "$@" |
||||
ext x?html?, has uzbl-core, X, flag f = uzbl-core -- "$@" |
||||
ext x?html?, has midori, X, flag f = midori -- "$@" |
||||
ext x?html?, has chromium, X, flag f = chromium -- "$@" |
||||
ext x?html?, has opera, X, flag f = opera -- "$@" |
||||
ext x?html?, has firefox, X, flag f = firefox -- "$@" |
||||
ext x?html?, has seamonkey, X, flag f = seamonkey -- "$@" |
||||
ext x?html?, has iceweasel, X, flag f = iceweasel -- "$@" |
||||
ext x?html?, has epiphany, X, flag f = epiphany -- "$@" |
||||
ext x?html?, has konqueror, X, flag f = konqueror -- "$@" |
||||
ext x?html?, has elinks, terminal = elinks "$@" |
||||
ext x?html?, has links2, terminal = links2 "$@" |
||||
ext x?html?, has links, terminal = links "$@" |
||||
ext x?html?, has lynx, terminal = lynx -- "$@" |
||||
ext x?html?, has w3m, terminal = w3m "$@" |
||||
|
||||
#------------------------------------------- |
||||
# Misc |
||||
#------------------------------------------- |
||||
# Define the "editor" for text files as first action |
||||
mime ^text, label editor = $EDITOR -- "$@" |
||||
mime ^text, label pager = "$PAGER" -- "$@" |
||||
!mime ^text, label editor, ext xml|json|csv|tex|py|pl|rb|js|sh|php = $EDITOR -- "$@" |
||||
!mime ^text, label pager, ext xml|json|csv|tex|py|pl|rb|js|sh|php = "$PAGER" -- "$@" |
||||
|
||||
ext 1 = man "$1" |
||||
ext s[wmf]c, has zsnes, X = zsnes "$1" |
||||
ext s[wmf]c, has snes9x-gtk,X = snes9x-gtk "$1" |
||||
ext nes, has fceux, X = fceux "$1" |
||||
ext exe = wine "$1" |
||||
name ^[mM]akefile$ = make |
||||
|
||||
#-------------------------------------------- |
||||
# Code |
||||
#------------------------------------------- |
||||
ext py = python -- "$1" |
||||
ext pl = perl -- "$1" |
||||
ext rb = ruby -- "$1" |
||||
ext js = node -- "$1" |
||||
ext sh = sh -- "$1" |
||||
ext php = php -- "$1" |
||||
|
||||
#-------------------------------------------- |
||||
# Audio without X |
||||
#------------------------------------------- |
||||
mime ^audio|ogg$, terminal, has mpv = mpv -- "$@" |
||||
mime ^audio|ogg$, terminal, has mplayer2 = mplayer2 -- "$@" |
||||
mime ^audio|ogg$, terminal, has mplayer = mplayer -- "$@" |
||||
ext midi?, terminal, has wildmidi = wildmidi -- "$@" |
||||
|
||||
#-------------------------------------------- |
||||
# Video/Audio with a GUI |
||||
#------------------------------------------- |
||||
mime ^video|audio, has gmplayer, X, flag f = gmplayer -- "$@" |
||||
mime ^video|audio, has smplayer, X, flag f = smplayer "$@" |
||||
mime ^video, has mpv, X, flag f = mpv -- "$@" |
||||
mime ^video, has mpv, X, flag f = mpv --fs -- "$@" |
||||
mime ^video, has mplayer2, X, flag f = mplayer2 -- "$@" |
||||
mime ^video, has mplayer2, X, flag f = mplayer2 -fs -- "$@" |
||||
mime ^video, has mplayer, X, flag f = mplayer -- "$@" |
||||
mime ^video, has mplayer, X, flag f = mplayer -fs -- "$@" |
||||
mime ^video|audio, has vlc, X, flag f = vlc -- "$@" |
||||
mime ^video|audio, has totem, X, flag f = totem -- "$@" |
||||
mime ^video|audio, has totem, X, flag f = totem --fullscreen -- "$@" |
||||
|
||||
#-------------------------------------------- |
||||
# Video without X: |
||||
#------------------------------------------- |
||||
mime ^video, terminal, !X, has mpv = mpv -- "$@" |
||||
mime ^video, terminal, !X, has mplayer2 = mplayer2 -- "$@" |
||||
mime ^video, terminal, !X, has mplayer = mplayer -- "$@" |
||||
|
||||
#------------------------------------------- |
||||
# Documents |
||||
#------------------------------------------- |
||||
ext pdf, has llpp, X, flag f = llpp "$@" |
||||
ext pdf, has zathura, X, flag f = zathura -- "$@" |
||||
ext pdf, has mupdf, X, flag f = mupdf "$@" |
||||
ext pdf, has mupdf-x11,X, flag f = mupdf-x11 "$@" |
||||
ext pdf, has apvlv, X, flag f = apvlv -- "$@" |
||||
ext pdf, has xpdf, X, flag f = xpdf -- "$@" |
||||
ext pdf, has evince, X, flag f = evince -- "$@" |
||||
ext pdf, has atril, X, flag f = atril -- "$@" |
||||
ext pdf, has okular, X, flag f = okular -- "$@" |
||||
ext pdf, has epdfview, X, flag f = epdfview -- "$@" |
||||
ext pdf, has qpdfview, X, flag f = qpdfview "$@" |
||||
|
||||
ext docx?, has catdoc, terminal = catdoc -- "$@" | "$PAGER" |
||||
|
||||
ext sxc|xlsx?|xlt|xlw|gnm|gnumeric, has gnumeric, X, flag f = gnumeric -- "$@" |
||||
ext sxc|xlsx?|xlt|xlw|gnm|gnumeric, has kspread, X, flag f = kspread -- "$@" |
||||
ext pptx?|od[dfgpst]|docx?|sxc|xlsx?|xlt|xlw|gnm|gnumeric, has libreoffice, X, flag f = libreoffice "$@" |
||||
ext pptx?|od[dfgpst]|docx?|sxc|xlsx?|xlt|xlw|gnm|gnumeric, has soffice, X, flag f = soffice "$@" |
||||
ext pptx?|od[dfgpst]|docx?|sxc|xlsx?|xlt|xlw|gnm|gnumeric, has ooffice, X, flag f = ooffice "$@" |
||||
|
||||
ext djvu, has zathura,X, flag f = zathura -- "$@" |
||||
ext djvu, has evince, X, flag f = evince -- "$@" |
||||
ext djvu, has atril, X, flag f = atril -- "$@" |
||||
|
||||
#------------------------------------------- |
||||
# Image Viewing: |
||||
#------------------------------------------- |
||||
mime ^image/svg, has inkscape, X, flag f = inkscape -- "$@" |
||||
mime ^image/svg, has display, X, flag f = display -- "$@" |
||||
|
||||
mime ^image, has pqiv, X, flag f = pqiv -- "$@" |
||||
mime ^image, has sxiv, X, flag f = sxiv -- "$@" |
||||
mime ^image, has feh, X, flag f = feh -- "$@" |
||||
mime ^image, has mirage, X, flag f = mirage -- "$@" |
||||
mime ^image, has ristretto, X, flag f = ristretto "$@" |
||||
mime ^image, has eog, X, flag f = eog -- "$@" |
||||
mime ^image, has eom, X, flag f = eom -- "$@" |
||||
mime ^image, has gimp, X, flag f = gimp -- "$@" |
||||
ext xcf, X, flag f = gimp -- "$@" |
||||
|
||||
#------------------------------------------- |
||||
# Archives |
||||
#------------------------------------------- |
||||
|
||||
# avoid password prompt by providing empty password |
||||
ext 7z, has 7z = 7z -p l "$@" | "$PAGER" |
||||
# This requires atool |
||||
ext ace|ar|arc|bz2?|cab|cpio|cpt|deb|dgc|dmg|gz, has als = als -- "$@" | "$PAGER" |
||||
ext iso|jar|msi|pkg|rar|shar|tar|tgz|xar|xpi|xz|zip, has als = als -- "$@" | "$PAGER" |
||||
ext 7z|ace|ar|arc|bz2?|cab|cpio|cpt|deb|dgc|dmg|gz, has aunpack = aunpack -- "$@" |
||||
ext iso|jar|msi|pkg|rar|shar|tar|tgz|xar|xpi|xz|zip, has aunpack = aunpack -- "$@" |
||||
|
||||
# Fallback: |
||||
ext tar|gz, has tar = tar vvtf "$@" | "$PAGER" |
||||
ext tar|gz, has tar = tar vvxf "$@" |
||||
|
||||
#------------------------------------------- |
||||
# Misc |
||||
#------------------------------------------- |
||||
label wallpaper, number 11, mime ^image, has feh, X = feh --bg-scale "$1" |
||||
label wallpaper, number 12, mime ^image, has feh, X = feh --bg-tile "$1" |
||||
label wallpaper, number 13, mime ^image, has feh, X = feh --bg-center "$1" |
||||
label wallpaper, number 14, mime ^image, has feh, X = feh --bg-fill "$1" |
||||
|
||||
# Define the editor for non-text files + pager as last action |
||||
!mime ^text, !ext xml|json|csv|tex|py|pl|rb|js|sh|php = ask |
||||
label editor, !mime ^text, !ext xml|json|csv|tex|py|pl|rb|js|sh|php = $EDITOR -- "$@" |
||||
label pager, !mime ^text, !ext xml|json|csv|tex|py|pl|rb|js|sh|php = "$PAGER" -- "$@" |
||||
|
||||
# The very last action, so that it's never triggered accidentally, is to execute a program: |
||||
mime application/x-executable = "$1" |
@ -0,0 +1,128 @@ |
||||
#!/usr/bin/env sh |
||||
# ranger supports enhanced previews. If the option "use_preview_script" |
||||
# is set to True and this file exists, this script will be called and its |
||||
# output is displayed in ranger. ANSI color codes are supported. |
||||
|
||||
# NOTES: This script is considered a configuration file. If you upgrade |
||||
# ranger, it will be left untouched. (You must update it yourself.) |
||||
# Also, ranger disables STDIN here, so interactive scripts won't work properly |
||||
|
||||
# Meanings of exit codes: |
||||
# code | meaning | action of ranger |
||||
# -----+------------+------------------------------------------- |
||||
# 0 | success | success. display stdout as preview |
||||
# 1 | no preview | failure. display no preview at all |
||||
# 2 | plain text | display the plain content of the file |
||||
# 3 | fix width | success. Don't reload when width changes |
||||
# 4 | fix height | success. Don't reload when height changes |
||||
# 5 | fix both | success. Don't ever reload |
||||
# 6 | image | success. display the image $cached points to as an image preview |
||||
# 7 | image | success. display the file directly as an image |
||||
|
||||
# Meaningful aliases for arguments: |
||||
path="$1" # Full path of the selected file |
||||
width="$2" # Width of the preview pane (number of fitting characters) |
||||
height="$3" # Height of the preview pane (number of fitting characters) |
||||
cached="$4" # Path that should be used to cache image previews |
||||
preview_images="$5" # "True" if image previews are enabled, "False" otherwise. |
||||
|
||||
maxln=200 # Stop after $maxln lines. Can be used like ls | head -n $maxln |
||||
|
||||
# Find out something about the file: |
||||
mimetype=$(file --mime-type -Lb "$path") |
||||
extension=$(/bin/echo "${path##*.}" | awk '{print tolower($0)}') |
||||
|
||||
# Functions: |
||||
# runs a command and saves its output into $output. Useful if you need |
||||
# the return value AND want to use the output in a pipe |
||||
try() { output=$(eval '"$@"'); } |
||||
|
||||
# writes the output of the previously used "try" command |
||||
dump() { /bin/echo "$output"; } |
||||
|
||||
# a common post-processing function used after most commands |
||||
trim() { head -n "$maxln"; } |
||||
|
||||
# wraps highlight to treat exit code 141 (killed by SIGPIPE) as success |
||||
safepipe() { "$@"; test $? = 0 -o $? = 141; } |
||||
|
||||
# Image previews, if enabled in ranger. |
||||
if [ "$preview_images" = "True" ]; then |
||||
case "$mimetype" in |
||||
# Image previews for SVG files, disabled by default. |
||||
###image/svg+xml) |
||||
### convert "$path" "$cached" && exit 6 || exit 1;; |
||||
# Image previews for image files. w3mimgdisplay will be called for all |
||||
# image files (unless overriden as above), but might fail for |
||||
# unsupported types. |
||||
image/svg+xml) |
||||
inkscape -e "${cached//.png}" "$path" && exit 6;; |
||||
image/*) |
||||
exit 7;; |
||||
# Image preview for video, disabled by default.: |
||||
video/*) |
||||
ffmpegthumbnailer -i "$path" -o "$cached" -s 0 && exit 6 || exit 1;; |
||||
application/pdf) |
||||
pdftoppm -jpeg -singlefile "$path" "${cached//.jpg}" && exit 6;; |
||||
esac |
||||
fi |
||||
|
||||
case "$extension" in |
||||
# Archive extensions: |
||||
a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|\ |
||||
rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip) |
||||
try als "$path" && { dump | trim; exit 0; } |
||||
try acat "$path" && { dump | trim; exit 3; } |
||||
try bsdtar -lf "$path" && { dump | trim; exit 0; } |
||||
exit 1;; |
||||
rar) |
||||
# avoid password prompt by providing empty password |
||||
try unrar -p- lt "$path" && { dump | trim; exit 0; } || exit 1;; |
||||
7z) |
||||
# avoid password prompt by providing empty password |
||||
try 7z -p l "$path" && { dump | trim; exit 0; } || exit 1;; |
||||
# PDF documents: |
||||
pdf) |
||||
try pdftotext -l 10 -nopgbrk -q "$path" - && \ |
||||
{ dump | trim | fmt -s -w $width; exit 0; } || exit 1;; |
||||
# BitTorrent Files |
||||
torrent) |
||||
try transmission-show "$path" && { dump | trim; exit 5; } || exit 1;; |
||||
# ODT Files |
||||
#odt|ods|odp|sxw) |
||||
# try odt2txt "$path" && { dump | trim; exit 5; } || exit 1;; |
||||
# Try to get the text out of a document using libreoffice |
||||
odt|ods|odp|sxw|doc|docx|xls|xlsx|ppt|pptx) |
||||
try libreoffice --cat "$path" && { dump | trim | fmt -s -w $width; exit 0; } || exit 1;; |
||||
# HTML Pages: |
||||
htm|html|xhtml) |
||||
try w3m -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; } |
||||
try lynx -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; } |
||||
try elinks -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; } |
||||
;; # fall back to highlight/cat if the text browsers fail |
||||
esac |
||||
|
||||
case "$mimetype" in |
||||
# Syntax highlight for text files: |
||||
text/* | */xml) |
||||
if [ "$(tput colors)" -ge 256 ]; then |
||||
pygmentize_format=terminal256 |
||||
highlight_format=xterm256 |
||||
else |
||||
pygmentize_format=terminal |
||||
highlight_format=ansi |
||||
fi |
||||
try safepipe highlight --out-format=${highlight_format} "$path" && { dump | trim; exit 5; } |
||||
try safepipe pygmentize -f ${pygmentize_format} "$path" && { dump | trim; exit 5; } |
||||
exit 2;; |
||||
# Ascii-previews of images: |
||||
image/*) |
||||
img2txt --gamma=0.6 --width="$width" "$path" && exit 4 || exit 1;; |
||||
# Display information about media files: |
||||
video/* | audio/*) |
||||
exiftool "$path" && exit 5 |
||||
# Use sed to remove spaces so the output fits into the narrow window |
||||
try mediainfo "$path" && { dump | trim | sed 's/ \+:/: /;'; exit 5; } || exit 1;; |
||||
esac |
||||
|
||||
exit 1 |
@ -0,0 +1,81 @@ |
||||
[options] |
||||
scroll_on_output = false |
||||
scroll_on_keystroke = true |
||||
audible_bell = false |
||||
mouse_autohide = false |
||||
allow_bold = true |
||||
dynamic_title = true |
||||
urgent_on_bell = true |
||||
clickable_url = true |
||||
#font = Monospace 12 |
||||
#font = DejaVu Sans Mono for Powerline 12 |
||||
font = Ubuntu Mono derivative Powerline 15 |
||||
font = Roboto Mono for Powerline 12 |
||||
#font = Ubuntu Mono 15 |
||||
scrollback_lines = 10000 |
||||
search_wrap = true |
||||
#icon_name = terminal |
||||
#geometry = 640x480 |
||||
|
||||
# "system", "on" or "off" |
||||
cursor_blink = system |
||||
|
||||
# "block", "underline" or "ibeam" |
||||
cursor_shape = block |
||||
|
||||
# $BROWSER is used by default if set, with xdg-open as a fallback |
||||
#browser = xdg-open |
||||
|
||||
# set size hints for the window |
||||
#size_hints = false |
||||
|
||||
# Hide links that are no longer valid in url select overlay mode |
||||
filter_unmatched_urls = true |
||||
|
||||
# emit escape sequences for extra modified keys |
||||
#modify_other_keys = false |
||||
|
||||
[colors] |
||||
#cursor = #dcdccc |
||||
#cursor_foreground = #dcdccc |
||||
foreground = #dcdccc |
||||
foreground_bold = #ffffff |
||||
background = #3f3f3f |
||||
|
||||
# 20% background transparency (requires a compositor) |
||||
background = rgba(63, 63, 63, 0.95) |
||||
|
||||
# if unset, will reverse foreground and background |
||||
highlight = #2f2f2f |
||||
|
||||
# colors from color0 to color254 can be set |
||||
#color0 = #3f3f3f |
||||
#color1 = #705050 |
||||
#color2 = #60b48a |
||||
#color3 = #dfaf8f |
||||
#color4 = #506070 |
||||
#color5 = #dc8cc3 |
||||
#color6 = #8cd0d3 |
||||
#color7 = #dcdccc |
||||
#color8 = #709080 |
||||
#color9 = #dca3a3 |
||||
#color10 = #c3bf9f |
||||
#color11 = #f0dfaf |
||||
#This is the blue that ls used by default for folders |
||||
color12 = #94bff3 |
||||
#color13 = #ec93d3 |
||||
#color14 = #93e0e3 |
||||
#color15 = #ffffff |
||||
|
||||
[hints] |
||||
#font = Monospace 12 |
||||
#foreground = #dcdccc |
||||
#background = #3f3f3f |
||||
#active_foreground = #e68080 |
||||
#active_background = #3f3f3f |
||||
#padding = 2 |
||||
#border = #3f3f3f |
||||
#border_width = 0.5 |
||||
#roundness = 2.0 |
||||
|
||||
# vim: ft=dosini cms=#%s |
@ -0,0 +1,668 @@ |
||||
# Configuration file for dnsmasq. |
||||
# |
||||
# Format is one option per line, legal options are the same |
||||
# as the long options legal on the command line. See |
||||
# "/usr/sbin/dnsmasq --help" or "man 8 dnsmasq" for details. |
||||
|
||||
# Listen on this specific port instead of the standard DNS port |
||||
# (53). Setting this to zero completely disables DNS function, |
||||
# leaving only DHCP and/or TFTP. |
||||
#port=5353 |
||||
|
||||
# The following two options make you a better netizen, since they |
||||
# tell dnsmasq to filter out queries which the public DNS cannot |
||||
# answer, and which load the servers (especially the root servers) |
||||
# unnecessarily. If you have a dial-on-demand link they also stop |
||||
# these requests from bringing up the link unnecessarily. |
||||
|
||||
# Never forward plain names (without a dot or domain part) |
||||
#domain-needed |
||||
# Never forward addresses in the non-routed address spaces. |
||||
#bogus-priv |
||||
|
||||
# Uncomment these to enable DNSSEC validation and caching: |
||||
# (Requires dnsmasq to be built with DNSSEC option.) |
||||
#conf-file=/usr/share/dnsmasq/trust-anchors.conf |
||||
#dnssec |
||||
|
||||
# Replies which are not DNSSEC signed may be legitimate, because the domain |
||||
# is unsigned, or may be forgeries. Setting this option tells dnsmasq to |
||||
# check that an unsigned reply is OK, by finding a secure proof that a DS |
||||
# record somewhere between the root and the domain does not exist. |
||||
# The cost of setting this is that even queries in unsigned domains will need |
||||
# one or more extra DNS queries to verify. |
||||
#dnssec-check-unsigned |
||||
|
||||
# Uncomment this to filter useless windows-originated DNS requests |
||||
# which can trigger dial-on-demand links needlessly. |
||||
# Note that (amongst other things) this blocks all SRV requests, |
||||
# so don't use it if you use eg Kerberos, SIP, XMMP or Google-talk. |
||||
# This option only affects forwarding, SRV records originating for |
||||
# dnsmasq (via srv-host= lines) are not suppressed by it. |
||||
#filterwin2k |
||||
|
||||
# Change this line if you want dns to get its upstream servers from |
||||
# somewhere other that /etc/resolv.conf |
||||
#resolv-file= |
||||
|
||||
# By default, dnsmasq will send queries to any of the upstream |
||||
# servers it knows about and tries to favour servers to are known |
||||
# to be up. Uncommenting this forces dnsmasq to try each query |
||||
# with each server strictly in the order they appear in |
||||
# /etc/resolv.conf |
||||
#strict-order |
||||
|
||||
# If you don't want dnsmasq to read /etc/resolv.conf or any other |
||||
# file, getting its servers from this file instead (see below), then |
||||
# uncomment this. |
||||
#no-resolv |
||||
|
||||
# If you don't want dnsmasq to poll /etc/resolv.conf or other resolv |
||||
# files for changes and re-read them then uncomment this. |
||||
#no-poll |
||||
|
||||
# Add other name servers here, with domain specs if they are for |
||||
# non-public domains. |
||||
#server=/localnet/192.168.0.1 |
||||
|
||||
# Example of routing PTR queries to nameservers: this will send all |
||||
# address->name queries for 192.168.3/24 to nameserver 10.1.2.3 |
||||
#server=/3.168.192.in-addr.arpa/10.1.2.3 |
||||
|
||||
# Add local-only domains here, queries in these domains are answered |
||||
# from /etc/hosts or DHCP only. |
||||
#local=/localnet/ |
||||
|
||||
# Add domains which you want to force to an IP address here. |
||||
# The example below send any host in double-click.net to a local |
||||
# web-server. |
||||
#address=/double-click.net/127.0.0.1 |
||||
address=/.localhost/127.0.0.1 |
||||
|
||||
# --address (and --server) work with IPv6 addresses too. |
||||
#address=/www.thekelleys.org.uk/fe80::20d:60ff:fe36:f83 |
||||
|
||||
# Add the IPs of all queries to yahoo.com, google.com, and their |
||||
# subdomains to the vpn and search ipsets: |
||||
#ipset=/yahoo.com/google.com/vpn,search |
||||
|
||||
# You can control how dnsmasq talks to a server: this forces |
||||
# queries to 10.1.2.3 to be routed via eth1 |
||||
# server=10.1.2.3@eth1 |
||||
|
||||
# and this sets the source (ie local) address used to talk to |
||||
# 10.1.2.3 to 192.168.1.1 port 55 (there must be a interface with that |
||||
# IP on the machine, obviously). |
||||
# server=10.1.2.3@192.168.1.1#55 |
||||
|
||||
# If you want dnsmasq to change uid and gid to something other |
||||
# than the default, edit the following lines. |
||||
#user= |
||||
#group= |
||||
|
||||
# If you want dnsmasq to listen for DHCP and DNS requests only on |
||||
# specified interfaces (and the loopback) give the name of the |
||||
# interface (eg eth0) here. |
||||
# Repeat the line for more than one interface. |
||||
#interface= |
||||
# Or you can specify which interface _not_ to listen on |
||||
#except-interface= |
||||
# Or which to listen on by address (remember to include 127.0.0.1 if |
||||
# you use this.) |
||||
#listen-address= |
||||
listen-address=127.0.0.1 |
||||
# If you want dnsmasq to provide only DNS service on an interface, |
||||
# configure it as shown above, and then use the following line to |
||||
# disable DHCP and TFTP on it. |
||||
#no-dhcp-interface= |
||||
|
||||
# On systems which support it, dnsmasq binds the wildcard address, |
||||
# even when it is listening on only some interfaces. It then discards |
||||
# requests that it shouldn't reply to. This has the advantage of |
||||
# working even when interfaces come and go and change address. If you |
||||
# want dnsmasq to really bind only the interfaces it is listening on, |
||||
# uncomment this option. About the only time you may need this is when |
||||
# running another nameserver on the same machine. |
||||
#bind-interfaces |
||||
|
||||
# If you don't want dnsmasq to read /etc/hosts, uncomment the |
||||
# following line. |
||||
#no-hosts |
||||
# or if you want it to read another file, as well as /etc/hosts, use |
||||
# this. |
||||
#addn-hosts=/etc/banner_add_hosts |
||||
|
||||
# Set this (and domain: see below) if you want to have a domain |
||||
# automatically added to simple names in a hosts-file. |
||||
#expand-hosts |
||||
|
||||
# Set the domain for dnsmasq. this is optional, but if it is set, it |
||||
# does the following things. |
||||
# 1) Allows DHCP hosts to have fully qualified domain names, as long |
||||
# as the domain part matches this setting. |
||||
# 2) Sets the "domain" DHCP option thereby potentially setting the |
||||
# domain of all systems configured by DHCP |
||||
# 3) Provides the domain part for "expand-hosts" |
||||
#domain=thekelleys.org.uk |
||||
|
||||
# Set a different domain for a particular subnet |
||||
#domain=wireless.thekelleys.org.uk,192.168.2.0/24 |
||||
|
||||
# Same idea, but range rather then subnet |
||||
#domain=reserved.thekelleys.org.uk,192.68.3.100,192.168.3.200 |
||||
|
||||
# Uncomment this to enable the integrated DHCP server, you need |
||||
# to supply the range of addresses available for lease and optionally |
||||
# a lease time. If you have more than one network, you will need to |
||||
# repeat this for each network on which you want to supply DHCP |
||||
# service. |
||||
#dhcp-range=192.168.0.50,192.168.0.150,12h |
||||
|
||||
# This is an example of a DHCP range where the netmask is given. This |
||||
# is needed for networks we reach the dnsmasq DHCP server via a relay |
||||
# agent. If you don't know what a DHCP relay agent is, you probably |
||||
# don't need to worry about this. |
||||
#dhcp-range=192.168.0.50,192.168.0.150,255.255.255.0,12h |
||||
|
||||
# This is an example of a DHCP range which sets a tag, so that |
||||
# some DHCP options may be set only for this network. |
||||
#dhcp-range=set:red,192.168.0.50,192.168.0.150 |
||||
|
||||
# Use this DHCP range only when the tag "green" is set. |
||||
#dhcp-range=tag:green,192.168.0.50,192.168.0.150,12h |
||||
|
||||
# Specify a subnet which can't be used for dynamic address allocation, |
||||
# is available for hosts with matching --dhcp-host lines. Note that |
||||
# dhcp-host declarations will be ignored unless there is a dhcp-range |
||||
# of some type for the subnet in question. |
||||
# In this case the netmask is implied (it comes from the network |
||||
# configuration on the machine running dnsmasq) it is possible to give |
||||
# an explicit netmask instead. |
||||
#dhcp-range=192.168.0.0,static |
||||
|
||||
# Enable DHCPv6. Note that the prefix-length does not need to be specified |
||||
# and defaults to 64 if missing/ |
||||
#dhcp-range=1234::2, 1234::500, 64, 12h |
||||
|
||||
# Do Router Advertisements, BUT NOT DHCP for this subnet. |
||||
#dhcp-range=1234::, ra-only |
||||
|
||||
# Do Router Advertisements, BUT NOT DHCP for this subnet, also try and |
||||
# add names to the DNS for the IPv6 address of SLAAC-configured dual-stack |
||||
# hosts. Use the DHCPv4 lease to derive the name, network segment and |
||||
# MAC address and assume that the host will also have an |
||||
# IPv6 address calculated using the SLAAC alogrithm. |
||||
#dhcp-range=1234::, ra-names |
||||
|
||||
# Do Router Advertisements, BUT NOT DHCP for this subnet. |
||||
# Set the lifetime to 46 hours. (Note: minimum lifetime is 2 hours.) |
||||
#dhcp-range=1234::, ra-only, 48h |
||||
|
||||
# Do DHCP and Router Advertisements for this subnet. Set the A bit in the RA |
||||
# so that clients can use SLAAC addresses as well as DHCP ones. |
||||
#dhcp-range=1234::2, 1234::500, slaac |
||||
|
||||
# Do Router Advertisements and stateless DHCP for this subnet. Clients will |
||||
# not get addresses from DHCP, but they will get other configuration information. |
||||
# They will use SLAAC for addresses. |
||||
#dhcp-range=1234::, ra-stateless |
||||
|
||||
# Do stateless DHCP, SLAAC, and generate DNS names for SLAAC addresses |
||||
# from DHCPv4 leases. |
||||
#dhcp-range=1234::, ra-stateless, ra-names |
||||
|
||||
# Do router advertisements for all subnets where we're doing DHCPv6 |
||||
# Unless overriden by ra-stateless, ra-names, et al, the router |
||||
# advertisements will have the M and O bits set, so that the clients |
||||
# get addresses and configuration from DHCPv6, and the A bit reset, so the |
||||
# clients don't use SLAAC addresses. |
||||
#enable-ra |
||||
|
||||
# Supply parameters for specified hosts using DHCP. There are lots |
||||
# of valid alternatives, so we will give examples of each. Note that |
||||
# IP addresses DO NOT have to be in the range given above, they just |
||||
# need to be on the same network. The order of the parameters in these |
||||
# do not matter, it's permissible to give name, address and MAC in any |
||||
# order. |
||||
|
||||
# Always allocate the host with Ethernet address 11:22:33:44:55:66 |
||||
# The IP address 192.168.0.60 |
||||
#dhcp-host=11:22:33:44:55:66,192.168.0.60 |
||||
|
||||
# Always set the name of the host with hardware address |
||||
# 11:22:33:44:55:66 to be "fred" |
||||
#dhcp-host=11:22:33:44:55:66,fred |
||||
|
||||
# Always give the host with Ethernet address 11:22:33:44:55:66 |
||||
# the name fred and IP address 192.168.0.60 and lease time 45 minutes |
||||
#dhcp-host=11:22:33:44:55:66,fred,192.168.0.60,45m |
||||
|
||||
# Give a host with Ethernet address 11:22:33:44:55:66 or |
||||
# 12:34:56:78:90:12 the IP address 192.168.0.60. Dnsmasq will assume |
||||
# that these two Ethernet interfaces will never be in use at the same |
||||
# time, and give the IP address to the second, even if it is already |
||||
# in use by the first. Useful for laptops with wired and wireless |
||||
# addresses. |
||||
#dhcp-host=11:22:33:44:55:66,12:34:56:78:90:12,192.168.0.60 |
||||
|
||||
# Give the machine which says its name is "bert" IP address |
||||
# 192.168.0.70 and an infinite lease |
||||
#dhcp-host=bert,192.168.0.70,infinite |
||||
|
||||
# Always give the host with client identifier 01:02:02:04 |
||||
# the IP address 192.168.0.60 |
||||
#dhcp-host=id:01:02:02:04,192.168.0.60 |
||||
|
||||
# Always give the Infiniband interface with hardware address |
||||
# 80:00:00:48:fe:80:00:00:00:00:00:00:f4:52:14:03:00:28:05:81 the |
||||
# ip address 192.168.0.61. The client id is derived from the prefix |
||||
# ff:00:00:00:00:00:02:00:00:02:c9:00 and the last 8 pairs of |
||||
# hex digits of the hardware address. |
||||
#dhcp-host=id:ff:00:00:00:00:00:02:00:00:02:c9:00:f4:52:14:03:00:28:05:81,192.168.0.61 |
||||
|
||||
# Always give the host with client identifier "marjorie" |
||||
# the IP address 192.168.0.60 |
||||
#dhcp-host=id:marjorie,192.168.0.60 |
||||
|
||||
# Enable the address given for "judge" in /etc/hosts |
||||
# to be given to a machine presenting the name "judge" when |
||||
# it asks for a DHCP lease. |
||||
#dhcp-host=judge |
||||
|
||||
# Never offer DHCP service to a machine whose Ethernet |
||||
# address is 11:22:33:44:55:66 |
||||
#dhcp-host=11:22:33:44:55:66,ignore |
||||
|
||||
# Ignore any client-id presented by the machine with Ethernet |
||||
# address 11:22:33:44:55:66. This is useful to prevent a machine |
||||
# being treated differently when running under different OS's or |
||||
# between PXE boot and OS boot. |
||||
#dhcp-host=11:22:33:44:55:66,id:* |
||||
|
||||
# Send extra options which are tagged as "red" to |
||||
# the machine with Ethernet address 11:22:33:44:55:66 |
||||
#dhcp-host=11:22:33:44:55:66,set:red |
||||
|
||||
# Send extra options which are tagged as "red" to |
||||
# any machine with Ethernet address starting 11:22:33: |
||||
#dhcp-host=11:22:33:*:*:*,set:red |
||||
|
||||
# Give a fixed IPv6 address and name to client with |
||||
# DUID 00:01:00:01:16:d2:83:fc:92:d4:19:e2:d8:b2 |
||||
# Note the MAC addresses CANNOT be used to identify DHCPv6 clients. |
||||
# Note also the they [] around the IPv6 address are obilgatory. |
||||
#dhcp-host=id:00:01:00:01:16:d2:83:fc:92:d4:19:e2:d8:b2, fred, [1234::5] |
||||
|
||||
# Ignore any clients which are not specified in dhcp-host lines |
||||
# or /etc/ethers. Equivalent to ISC "deny unknown-clients". |
||||
# This relies on the special "known" tag which is set when |
||||
# a host is matched. |
||||
#dhcp-ignore=tag:!known |
||||
|
||||
# Send extra options which are tagged as "red" to any machine whose |
||||
# DHCP vendorclass string includes the substring "Linux" |
||||
#dhcp-vendorclass=set:red,Linux |
||||
|
||||
# Send extra options which are tagged as "red" to any machine one |
||||
# of whose DHCP userclass strings includes the substring "accounts" |
||||
#dhcp-userclass=set:red,accounts |
||||
|
||||
# Send extra options which are tagged as "red" to any machine whose |
||||
# MAC address matches the pattern. |
||||
#dhcp-mac=set:red,00:60:8C:*:*:* |
||||
|
||||
# If this line is uncommented, dnsmasq will read /etc/ethers and act |
||||
# on the ethernet-address/IP pairs found there just as if they had |
||||
# been given as --dhcp-host options. Useful if you keep |
||||
# MAC-address/host mappings there for other purposes. |
||||
#read-ethers |
||||
|
||||
# Send options to hosts which ask for a DHCP lease. |
||||
# See RFC 2132 for details of available options. |
||||
# Common options can be given to dnsmasq by name: |
||||
# run "dnsmasq --help dhcp" to get a list. |
||||
# Note that all the common settings, such as netmask and |
||||
# broadcast address, DNS server and default route, are given |
||||
# sane defaults by dnsmasq. You very likely will not need |
||||
# any dhcp-options. If you use Windows clients and Samba, there |
||||
# are some options which are recommended, they are detailed at the |
||||
# end of this section. |
||||
|
||||
# Override the default route supplied by dnsmasq, which assumes the |
||||
# router is the same machine as the one running dnsmasq. |
||||
#dhcp-option=3,1.2.3.4 |
||||
|
||||
# Do the same thing, but using the option name |
||||
#dhcp-option=option:router,1.2.3.4 |
||||
|
||||
# Override the default route supplied by dnsmasq and send no default |
||||
# route at all. Note that this only works for the options sent by |
||||
# default (1, 3, 6, 12, 28) the same line will send a zero-length option |
||||
# for all other option numbers. |
||||
#dhcp-option=3 |
||||
|
||||
# Set the NTP time server addresses to 192.168.0.4 and 10.10.0.5 |
||||
#dhcp-option=option:ntp-server,192.168.0.4,10.10.0.5 |
||||
|
||||
# Send DHCPv6 option. Note [] around IPv6 addresses. |
||||
#dhcp-option=option6:dns-server,[1234::77],[1234::88] |
||||
|
||||
# Send DHCPv6 option for namservers as the machine running |
||||
# dnsmasq and another. |
||||
#dhcp-option=option6:dns-server,[::],[1234::88] |
||||
|
||||
# Ask client to poll for option changes every six hours. (RFC4242) |
||||
#dhcp-option=option6:information-refresh-time,6h |
||||
|
||||
# Set option 58 client renewal time (T1). Defaults to half of the |
||||
# lease time if not specified. (RFC2132) |
||||
#dhcp-option=option:T1:1m |
||||
|
||||
# Set option 59 rebinding time (T2). Defaults to 7/8 of the |
||||
# lease time if not specified. (RFC2132) |
||||
#dhcp-option=option:T2:2m |
||||
|
||||
# Set the NTP time server address to be the same machine as |
||||
# is running dnsmasq |
||||
#dhcp-option=42,0.0.0.0 |
||||
|
||||
# Set the NIS domain name to "welly" |
||||
#dhcp-option=40,welly |
||||
|
||||
# Set the default time-to-live to 50 |
||||
#dhcp-option=23,50 |
||||
|
||||
# Set the "all subnets are local" flag |
||||
#dhcp-option=27,1 |
||||
|
||||
# Send the etherboot magic flag and then etherboot options (a string). |
||||
#dhcp-option=128,e4:45:74:68:00:00 |
||||
#dhcp-option=129,NIC=eepro100 |
||||
|
||||
# Specify an option which will only be sent to the "red" network |
||||
# (see dhcp-range for the declaration of the "red" network) |
||||
# Note that the tag: part must precede the option: part. |
||||
#dhcp-option = tag:red, option:ntp-server, 192.168.1.1 |
||||
|
||||
# The following DHCP options set up dnsmasq in the same way as is specified |
||||
# for the ISC dhcpcd in |
||||
# http://www.samba.org/samba/ftp/docs/textdocs/DHCP-Server-Configuration.txt |
||||
# adapted for a typical dnsmasq installation where the host running |
||||
# dnsmasq is also the host running samba. |
||||
# you may want to uncomment some or all of them if you use |
||||
# Windows clients and Samba. |
||||
#dhcp-option=19,0 # option ip-forwarding off |
||||
#dhcp-option=44,0.0.0.0 # set netbios-over-TCP/IP nameserver(s) aka WINS server(s) |
||||
#dhcp-option=45,0.0.0.0 # netbios datagram distribution server |
||||
#dhcp-option=46,8 # netbios node type |
||||
|
||||
# Send an empty WPAD option. This may be REQUIRED to get windows 7 to behave. |
||||
#dhcp-option=252,"\n" |
||||
|
||||
# Send RFC-3397 DNS domain search DHCP option. WARNING: Your DHCP client |
||||
# probably doesn't support this...... |
||||
#dhcp-option=option:domain-search,eng.apple.com,marketing.apple.com |
||||
|
||||
# Send RFC-3442 classless static routes (note the netmask encoding) |
||||
#dhcp-option=121,192.168.1.0/24,1.2.3.4,10.0.0.0/8,5.6.7.8 |
||||
|
||||
# Send vendor-class specific options encapsulated in DHCP option 43. |
||||
# The meaning of the options is defined by the vendor-class so |
||||
# options are sent only when the client supplied vendor class |
||||
# matches the class given here. (A substring match is OK, so "MSFT" |
||||
# matches "MSFT" and "MSFT 5.0"). This example sets the |
||||
# mtftp address to 0.0.0.0 for PXEClients. |
||||
#dhcp-option=vendor:PXEClient,1,0.0.0.0 |
||||
|
||||
# Send microsoft-specific option to tell windows to release the DHCP lease |
||||
# when it shuts down. Note the "i" flag, to tell dnsmasq to send the |
||||
# value as a four-byte integer - that's what microsoft wants. See |
||||
# http://technet2.microsoft.com/WindowsServer/en/library/a70f1bb7-d2d4-49f0-96d6-4b7414ecfaae1033.mspx?mfr=true |
||||
#dhcp-option=vendor:MSFT,2,1i |
||||
|
||||
# Send the Encapsulated-vendor-class ID needed by some configurations of |
||||
# Etherboot to allow is to recognise the DHCP server. |
||||
#dhcp-option=vendor:Etherboot,60,"Etherboot" |
||||
|
||||
# Send options to PXELinux. Note that we need to send the options even |
||||
# though they don't appear in the parameter request list, so we need |
||||
# to use dhcp-option-force here. |
||||
# See http://syslinux.zytor.com/pxe.php#special for details. |
||||
# Magic number - needed before anything else is recognised |
||||
#dhcp-option-force=208,f1:00:74:7e |
||||
# Configuration file name |
||||
#dhcp-option-force=209,configs/common |
||||
# Path prefix |
||||
#dhcp-option-force=210,/tftpboot/pxelinux/files/ |
||||
# Reboot time. (Note 'i' to send 32-bit value) |
||||
#dhcp-option-force=211,30i |
||||
|
||||
# Set the boot filename for netboot/PXE. You will only need |
||||
# this is you want to boot machines over the network and you will need |
||||
# a TFTP server; either dnsmasq's built in TFTP server or an |
||||
# external one. (See below for how to enable the TFTP server.) |
||||
#dhcp-boot=pxelinux.0 |
||||
|
||||
# The same as above, but use custom tftp-server instead machine running dnsmasq |
||||
#dhcp-boot=pxelinux,server.name,192.168.1.100 |
||||
|
||||
# Boot for Etherboot gPXE. The idea is to send two different |
||||
# filenames, the first loads gPXE, and the second tells gPXE what to |
||||
# load. The dhcp-match sets the gpxe tag for requests from gPXE. |
||||
#dhcp-match=set:gpxe,175 # gPXE sends a 175 option. |
||||
#dhcp-boot=tag:!gpxe,undionly.kpxe |
||||
#dhcp-boot=mybootimage |
||||
|
||||
# Encapsulated options for Etherboot gPXE. All the options are |
||||
# encapsulated within option 175 |
||||
#dhcp-option=encap:175, 1, 5b # priority code |
||||
#dhcp-option=encap:175, 176, 1b # no-proxydhcp |
||||
#dhcp-option=encap:175, 177, string # bus-id |
||||
#dhcp-option=encap:175, 189, 1b # BIOS drive code |
||||
#dhcp-option=encap:175, 190, user # iSCSI username |
||||
#dhcp-option=encap:175, 191, pass # iSCSI password |
||||
|
||||
# Test for the architecture of a netboot client. PXE clients are |
||||
# supposed to send their architecture as option 93. (See RFC 4578) |
||||
#dhcp-match=peecees, option:client-arch, 0 #x86-32 |
||||
#dhcp-match=itanics, option:client-arch, 2 #IA64 |
||||
#dhcp-match=hammers, option:client-arch, 6 #x86-64 |
||||
#dhcp-match=mactels, option:client-arch, 7 #EFI x86-64 |
||||
|
||||
# Do real PXE, rather than just booting a single file, this is an |
||||
# alternative to dhcp-boot. |
||||
#pxe-prompt="What system shall I netboot?" |
||||
# or with timeout before first available action is taken: |
||||
#pxe-prompt="Press F8 for menu.", 60 |
||||
|
||||
# Available boot services. for PXE. |
||||
#pxe-service=x86PC, "Boot from local disk" |
||||
|
||||
# Loads <tftp-root>/pxelinux.0 from dnsmasq TFTP server. |
||||
#pxe-service=x86PC, "Install Linux", pxelinux |
||||
|
||||
# Loads <tftp-root>/pxelinux.0 from TFTP server at 1.2.3.4. |
||||
# Beware this fails on old PXE ROMS. |
||||
#pxe-service=x86PC, "Install Linux", pxelinux, 1.2.3.4 |
||||
|
||||
# Use bootserver on network, found my multicast or broadcast. |
||||
#pxe-service=x86PC, "Install windows from RIS server", 1 |
||||
|
||||
# Use bootserver at a known IP address. |
||||
#pxe-service=x86PC, "Install windows from RIS server", 1, 1.2.3.4 |
||||
|
||||
# If you have multicast-FTP available, |
||||
# information for that can be passed in a similar way using options 1 |
||||
# to 5. See page 19 of |
||||
# http://download.intel.com/design/archives/wfm/downloads/pxespec.pdf |
||||
|
||||
|
||||
# Enable dnsmasq's built-in TFTP server |
||||
#enable-tftp |
||||
|
||||
# Set the root directory for files available via FTP. |
||||
#tftp-root=/var/ftpd |
||||
|
||||
# Do not abort if the tftp-root is unavailable |
||||
#tftp-no-fail |
||||
|
||||
# Make the TFTP server more secure: with this set, only files owned by |
||||
# the user dnsmasq is running as will be send over the net. |
||||
#tftp-secure |
||||
|
||||
# This option stops dnsmasq from negotiating a larger blocksize for TFTP |
||||
# transfers. It will slow things down, but may rescue some broken TFTP |
||||
# clients. |
||||
#tftp-no-blocksize |
||||
|
||||
# Set the boot file name only when the "red" tag is set. |
||||
#dhcp-boot=tag:red,pxelinux.red-net |
||||
|
||||
# An example of dhcp-boot with an external TFTP server: the name and IP |
||||
# address of the server are given after the filename. |
||||
# Can fail with old PXE ROMS. Overridden by --pxe-service. |
||||
#dhcp-boot=/var/ftpd/pxelinux.0,boothost,192.168.0.3 |
||||
|
||||
# If there are multiple external tftp servers having a same name |
||||
# (using /etc/hosts) then that name can be specified as the |
||||
# tftp_servername (the third option to dhcp-boot) and in that |
||||
# case dnsmasq resolves this name and returns the resultant IP |
||||
# addresses in round robin fasion. This facility can be used to |
||||
# load balance the tftp load among a set of servers. |
||||
#dhcp-boot=/var/ftpd/pxelinux.0,boothost,tftp_server_name |
||||
|
||||
# Set the limit on DHCP leases, the default is 150 |
||||
#dhcp-lease-max=150 |
||||
|
||||
# The DHCP server needs somewhere on disk to keep its lease database. |
||||
# This defaults to a sane location, but if you want to change it, use |
||||
# the line below. |
||||
#dhcp-leasefile=/var/lib/misc/dnsmasq.leases |
||||
|
||||
# Set the DHCP server to authoritative mode. In this mode it will barge in |
||||
# and take over the lease for any client which broadcasts on the network, |
||||
# whether it has a record of the lease or not. This avoids long timeouts |
||||
# when a machine wakes up on a new network. DO NOT enable this if there's |
||||
# the slightest chance that you might end up accidentally configuring a DHCP |
||||
# server for your campus/company accidentally. The ISC server uses |
||||
# the same option, and this URL provides more information: |
||||
# http://www.isc.org/files/auth.html |
||||
#dhcp-authoritative |
||||
|
||||
# Run an executable when a DHCP lease is created or destroyed. |
||||
# The arguments sent to the script are "add" or "del", |
||||
# then the MAC address, the IP address and finally the hostname |
||||
# if there is one. |
||||
#dhcp-script=/bin/echo |
||||
|
||||
# Set the cachesize here. |
||||
#cache-size=150 |
||||
|
||||
# If you want to disable negative caching, uncomment this. |
||||
#no-negcache |
||||
|
||||
# Normally responses which come from /etc/hosts and the DHCP lease |
||||
# file have Time-To-Live set as zero, which conventionally means |
||||
# do not cache further. If you are happy to trade lower load on the |
||||
# server for potentially stale date, you can set a time-to-live (in |
||||
# seconds) here. |
||||
#local-ttl= |
||||
|
||||
# If you want dnsmasq to detect attempts by Verisign to send queries |
||||
# to unregistered .com and .net hosts to its sitefinder service and |
||||
# have dnsmasq instead return the correct NXDOMAIN response, uncomment |
||||
# this line. You can add similar lines to do the same for other |
||||
# registries which have implemented wildcard A records. |
||||
#bogus-nxdomain=64.94.110.11 |
||||
|
||||
# If you want to fix up DNS results from upstream servers, use the |
||||
# alias option. This only works for IPv4. |
||||
# This alias makes a result of 1.2.3.4 appear as 5.6.7.8 |
||||
#alias=1.2.3.4,5.6.7.8 |
||||
# and this maps 1.2.3.x to 5.6.7.x |
||||
#alias=1.2.3.0,5.6.7.0,255.255.255.0 |
||||
# and this maps 192.168.0.10->192.168.0.40 to 10.0.0.10->10.0.0.40 |
||||
#alias=192.168.0.10-192.168.0.40,10.0.0.0,255.255.255.0 |
||||
|
||||
# Change these lines if you want dnsmasq to serve MX records. |
||||
|
||||
# Return an MX record named "maildomain.com" with target |
||||
# servermachine.com and preference 50 |
||||
#mx-host=maildomain.com,servermachine.com,50 |
||||
|
||||
# Set the default target for MX records created using the localmx option. |
||||
#mx-target=servermachine.com |
||||
|
||||
# Return an MX record pointing to the mx-target for all local |
||||
# machines. |
||||
#localmx |
||||
|
||||
# Return an MX record pointing to itself for all local machines. |
||||
#selfmx |
||||
|
||||
# Change the following lines if you want dnsmasq to serve SRV |
||||
# records. These are useful if you want to serve ldap requests for |
||||
# Active Directory and other windows-originated DNS requests. |
||||
# See RFC 2782. |
||||
# You may add multiple srv-host lines. |
||||
# The fields are <name>,<target>,<port>,<priority>,<weight> |
||||
# If the domain part if missing from the name (so that is just has the |
||||
# service and protocol sections) then the domain given by the domain= |
||||
# config option is used. (Note that expand-hosts does not need to be |
||||
# set for this to work.) |
||||
|
||||
# A SRV record sending LDAP for the example.com domain to |
||||
# ldapserver.example.com port 389 |
||||
#srv-host=_ldap._tcp.example.com,ldapserver.example.com,389 |
||||
|
||||
# A SRV record sending LDAP for the example.com domain to |
||||
# ldapserver.example.com port 389 (using domain=) |
||||
#domain=example.com |
||||
#srv-host=_ldap._tcp,ldapserver.example.com,389 |
||||
|
||||
# Two SRV records for LDAP, each with different priorities |
||||
#srv-host=_ldap._tcp.example.com,ldapserver.example.com,389,1 |
||||
#srv-host=_ldap._tcp.example.com,ldapserver.example.com,389,2 |
||||
|
||||
# A SRV record indicating that there is no LDAP server for the domain |
||||
# example.com |
||||
#srv-host=_ldap._tcp.example.com |
||||
|
||||
# The following line shows how to make dnsmasq serve an arbitrary PTR |
||||
# record. This is useful for DNS-SD. (Note that the |
||||
# domain-name expansion done for SRV records _does_not |
||||
# occur for PTR records.) |
||||
#ptr-record=_http._tcp.dns-sd-services,"New Employee Page._http._tcp.dns-sd-services" |
||||
|
||||
# Change the following lines to enable dnsmasq to serve TXT records. |
||||
# These are used for things like SPF and zeroconf. (Note that the |
||||
# domain-name expansion done for SRV records _does_not |
||||
# occur for TXT records.) |
||||
|
||||
#Example SPF. |
||||
#txt-record=example.com,"v=spf1 a -all" |
||||
|
||||
#Example zeroconf |
||||
#txt-record=_http._tcp.example.com,name=value,paper=A4 |
||||
|
||||
# Provide an alias for a "local" DNS name. Note that this _only_ works |
||||
# for targets which are names from DHCP or /etc/hosts. Give host |
||||
# "bert" another name, bertrand |
||||
#cname=bertand,bert |
||||
|
||||
# For debugging purposes, log each DNS query as it passes through |
||||
# dnsmasq. |
||||
#log-queries |
||||
|
||||
# Log lots of extra information about DHCP transactions. |
||||
#log-dhcp |
||||
|
||||
# Include another lot of configuration options. |
||||
#conf-file=/etc/dnsmasq.more.conf |
||||
#conf-dir=/etc/dnsmasq.d |
||||
|
||||
# Include all the files in a directory except those ending in .bak |
||||
#conf-dir=/etc/dnsmasq.d,.bak |
||||
|
||||
# Include all files in a directory which end in .conf |
||||
#conf-dir=/etc/dnsmasq.d/,*.conf |
@ -0,0 +1,101 @@ |
||||
# |
||||
# /etc/pacman.conf |
||||
# |
||||
# See the pacman.conf(5) manpage for option and repository directives |
||||
|
||||
# |
||||
# GENERAL OPTIONS |
||||
# |
||||
[options] |
||||
# The following paths are commented out with their default values listed. |
||||
# If you wish to use different paths, uncomment and update the paths. |
||||
#RootDir = / |
||||
#DBPath = /var/lib/pacman/ |
||||
#CacheDir = /var/cache/pacman/pkg/ |
||||
#LogFile = /var/log/pacman.log |
||||
#GPGDir = /etc/pacman.d/gnupg/ |
||||
#HookDir = /etc/pacman.d/hooks/ |
||||
HoldPkg = pacman glibc |
||||
#XferCommand = /usr/bin/curl -C - -f %u > %o |
||||
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u |
||||
#CleanMethod = KeepInstalled |
||||
#UseDelta = 0.7 |
||||
Architecture = auto |
||||
|
||||
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup |
||||
#IgnorePkg = |
||||
#IgnoreGroup = |
||||
|
||||
#NoUpgrade = |
||||
#NoExtract = |
||||
|
||||
# Misc options |
||||
#UseSyslog |
||||
Color |
||||
#TotalDownload |
||||
CheckSpace |
||||
#VerbosePkgLists |
||||
ILoveCandy |
||||
|
||||
# By default, pacman accepts packages signed by keys that its local keyring |
||||
# trusts (see pacman-key and its man page), as well as unsigned packages. |
||||
SigLevel = Required DatabaseOptional |
||||
LocalFileSigLevel = Optional |
||||
#RemoteFileSigLevel = Required |
||||
|
||||
# NOTE: You must run `pacman-key --init` before first using pacman; the local |
||||
# keyring can then be populated with the keys of all official Arch Linux |
||||
# packagers with `pacman-key --populate archlinux`. |
||||
|
||||
# |
||||
# REPOSITORIES |
||||
# - can be defined here or included from another file |
||||
# - pacman will search repositories in the order defined here |
||||
# - local/custom mirrors can be added here or in separate files |
||||
# - repositories listed first will take precedence when packages |
||||
# have identical names, regardless of version number |
||||
# - URLs will have $repo replaced by the name of the current repo |
||||
# - URLs will have $arch replaced by the name of the architecture |
||||
# |
||||
# Repository entries are of the format: |
||||
# [repo-name] |
||||
# Server = ServerName |
||||
# Include = IncludePath |
||||
# |
||||
# The header [repo-name] is crucial - it must be present and |
||||
# uncommented to enable the repo. |
||||
# |
||||
|
||||
# The testing repositories are disabled by default. To enable, uncomment the |
||||
# repo name header and Include lines. You can add preferred servers immediately |
||||
# after the header, and they will be used before the default mirrors. |
||||
|
||||
#[testing] |
||||
#Include = /etc/pacman.d/mirrorlist |
||||
|
||||
[core] |
||||
Include = /etc/pacman.d/mirrorlist |
||||
|
||||
[extra] |
||||
Include = /etc/pacman.d/mirrorlist |
||||
|
||||
#[community-testing] |
||||
#Include = /etc/pacman.d/mirrorlist |
||||
|
||||
[community] |
||||
Include = /etc/pacman.d/mirrorlist |
||||
|
||||
# If you want to run 32 bit applications on your x86_64 system, |
||||
# enable the multilib repositories as required here. |
||||
|
||||
#[multilib-testing] |
||||
#Include = /etc/pacman.d/mirrorlist |
||||
|
||||
#[multilib] |
||||
Include = /etc/pacman.d/mirrorlist |
||||
|
||||
# An example of a custom package repository. See the pacman manpage for |
||||
# tips on creating your own repositories. |
||||
#[custom] |
||||
#SigLevel = Optional TrustAll |
||||
#Server = file:///home/custompkgs |
@ -0,0 +1,16 @@ |
||||
[user] |
||||
email = jonathan@lunarweb.co.uk |
||||
name = Jonathan Hodgson |
||||
[core] |
||||
editor = vim |
||||
[status] |
||||
submoduleSummary = true |
||||
[alias] |
||||
#lol = log --graph --decorate --pretty=oneline --abbrev-commit |
||||
lol = log --graph --pretty=format:\"%C(yellow)%h %C(blue)%cd %C(green)%cn %C(white) - %s\" --date=format:\"%d/%m/%Y %H:%M:%S\" |
||||
#lola = log --graph --decorate --pretty=oneline --abbrev-commit --all |
||||
lola = log --graph --pretty=format:\"%C(yellow)%h %C(blue)%cd %C(green)%cn %C(white) - %s\" --date=format:\"%d/%m/%Y %H:%M:%S\" --all |
||||
ilog = recall |
||||
detach = "!git checkout $(git rev-parse HEAD)" |
||||
undo = reset --soft HEAD^ |
||||
|
@ -0,0 +1,93 @@ |
||||
# |
||||
# Directives controlling the display of server-generated directory listings. |
||||
# |
||||
# Required modules: mod_authz_core, mod_authz_host, |
||||
# mod_autoindex, mod_alias |
||||
# |
||||
# To see the listing of a directory, the Options directive for the |
||||
# directory must include "Indexes", and the directory must not contain |
||||
# a file matching those listed in the DirectoryIndex directive. |
||||
# |
||||
|
||||
# |
||||
# IndexOptions: Controls the appearance of server-generated directory |
||||
# listings. |
||||
# |
||||
IndexOptions FancyIndexing HTMLTable VersionSort |
||||
|
||||
# We include the /icons/ alias for FancyIndexed directory listings. If |
||||
# you do not use FancyIndexing, you may comment this out. |
||||
# |
||||
Alias /icons/ "/opt/lampp/icons/" |
||||
|
||||
<Directory "/opt/lampp/icons"> |
||||
Options Indexes MultiViews |
||||
AllowOverride None |
||||
Require all granted |
||||
</Directory> |
||||
|
||||
# |
||||
# AddIcon* directives tell the server which icon to show for different |
||||
# files or filename extensions. These are only displayed for |
||||
# FancyIndexed directories. |
||||
# |
||||
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip |
||||
|
||||
AddIconByType (TXT,/icons/text.gif) text/* |
||||
AddIconByType (IMG,/icons/image2.gif) image/* |
||||
AddIconByType (SND,/icons/sound2.gif) audio/* |
||||
AddIconByType (VID,/icons/movie.gif) video/* |
||||
|
||||
AddIcon /icons/binary.gif .bin .exe |
||||
AddIcon /icons/binhex.gif .hqx |
||||
AddIcon /icons/tar.gif .tar |
||||
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv |
||||
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip |
||||
AddIcon /icons/a.gif .ps .ai .eps |
||||
AddIcon /icons/layout.gif .html .shtml .htm .pdf |
||||
AddIcon /icons/text.gif .txt |
||||
AddIcon /icons/c.gif .c |
||||
AddIcon /icons/p.gif .pl .py |
||||
AddIcon /icons/f.gif .for |
||||
AddIcon /icons/dvi.gif .dvi |
||||
AddIcon /icons/uuencoded.gif .uu |
||||
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl |
||||
AddIcon /icons/tex.gif .tex |
||||
AddIcon /icons/bomb.gif core |
||||
|
||||
AddIcon /icons/back.gif .. |
||||
AddIcon /icons/hand.right.gif README |
||||
AddIcon /icons/folder.gif ^^DIRECTORY^^ |
||||
AddIcon /icons/blank.gif ^^BLANKICON^^ |
||||
|
||||
# |
||||
# DefaultIcon is which icon to show for files which do not have an icon |
||||
# explicitly set. |
||||
# |
||||
DefaultIcon /icons/unknown.gif |
||||
|
||||
# |
||||
# AddDescription allows you to place a short description after a file in |
||||
# server-generated indexes. These are only displayed for FancyIndexed |
||||
# directories. |
||||
# Format: AddDescription "description" filename |
||||
# |
||||
#AddDescription "GZIP compressed document" .gz |
||||
#AddDescription "tar archive" .tar |
||||
#AddDescription "GZIP compressed tar archive" .tgz |
||||
|
||||
# |
||||
# ReadmeName is the name of the README file the server will look for by |
||||
# default, and append to directory listings. |
||||
# |
||||
# HeaderName is the name of a file which should be prepended to |
||||
# directory indexes. |
||||
ReadmeName README.html |
||||
HeaderName HEADER.html |
||||
|
||||
# |
||||
# IndexIgnore is a set of filenames which directory indexing should ignore |
||||
# and not include in the listing. Shell-style wildcarding is permitted. |
||||
# |
||||
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t |
||||
|
@ -0,0 +1,50 @@ |
||||
# |
||||
# Distributed authoring and versioning (WebDAV) |
||||
# |
||||
# Required modules: mod_alias, mod_auth_digest, mod_authn_core, mod_authn_file, |
||||
# mod_authz_core, mod_authz_user, mod_dav, mod_dav_fs, |
||||
# mod_setenvif |
||||
|
||||
# The following example gives DAV write access to a directory called |
||||
# "uploads" under the ServerRoot directory. |
||||
# |
||||
# The User/Group specified in httpd.conf needs to have write permissions |
||||
# on the directory where the DavLockDB is placed and on any directory where |
||||
# "Dav On" is specified. |
||||
|
||||
DavLockDB "/opt/lampp/var/DavLock" |
||||
|
||||
Alias /uploads "/opt/lampp/uploads" |
||||
|
||||
<Directory "/opt/lampp/uploads"> |
||||
Dav On |
||||
|
||||
AuthType Digest |
||||
AuthName DAV-upload |
||||
# You can use the htdigest program to create the password database: |
||||
# htdigest -c "/opt/lampp/user.passwd" DAV-upload admin |
||||
AuthUserFile "/opt/lampp/user.passwd" |
||||
AuthDigestProvider file |
||||
|
||||
# Allow universal read-access, but writes are restricted |
||||
# to the admin user. |
||||
<RequireAny> |
||||
Require method GET POST OPTIONS |
||||
Require user admin |
||||
</RequireAny> |
||||
</Directory> |
||||
|
||||
# |
||||
# The following directives disable redirects on non-GET requests for |
||||
# a directory that does not include the trailing slash. This fixes a |
||||
# problem with several clients that do not appropriately handle |
||||
# redirects for folders with DAV methods. |
||||
# |
||||
BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully |
||||
BrowserMatch "MS FrontPage" redirect-carefully |
||||
BrowserMatch "^WebDrive" redirect-carefully |
||||
BrowserMatch "^WebDAVFS/1.[01234]" redirect-carefully |
||||
BrowserMatch "^gnome-vfs/1.0" redirect-carefully |
||||
BrowserMatch "^XML Spy" redirect-carefully |
||||
BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully |
||||
BrowserMatch " Konqueror/4" redirect-carefully |
@ -0,0 +1,90 @@ |
||||
# |
||||
# This configuration file reflects default settings for Apache HTTP Server. |
||||
# |
||||
# You may change these, but chances are that you may not need to. |
||||
# |
||||
|
||||
# |
||||
# Timeout: The number of seconds before receives and sends time out. |
||||
# |
||||
Timeout 300 |
||||
|
||||
# |
||||
# KeepAlive: Whether or not to allow persistent connections (more than |
||||
# one request per connection). Set to "Off" to deactivate. |
||||
# |
||||
KeepAlive On |
||||
|
||||
# |
||||
# MaxKeepAliveRequests: The maximum number of requests to allow |
||||
# during a persistent connection. Set to 0 to allow an unlimited amount. |
||||
# We recommend you leave this number high, for maximum performance. |
||||
# |
||||
MaxKeepAliveRequests 100 |
||||
|
||||
# |
||||
# KeepAliveTimeout: Number of seconds to wait for the next request from the |
||||
# same client on the same connection. |
||||
# |
||||
KeepAliveTimeout 5 |
||||
|
||||
# |
||||
# UseCanonicalName: Determines how Apache constructs self-referencing |
||||
# URLs and the SERVER_NAME and SERVER_PORT variables. |
||||
# When set "Off", Apache will use the Hostname and Port supplied |
||||
# by the client. When set "On", Apache will use the value of the |
||||
# ServerName directive. |
||||
# |
||||
UseCanonicalName Off |
||||
|
||||
# |
||||
# AccessFileName: The name of the file to look for in each directory |
||||
# for additional configuration directives. See also the AllowOverride |
||||
# directive. |
||||
# |
||||
AccessFileName .htaccess |
||||
|
||||
# |
||||
# ServerTokens |
||||
# This directive configures what you return as the Server HTTP response |
||||
# Header. The default is 'Full' which sends information about the OS-Type |
||||
# and compiled in modules. |
||||
# Set to one of: Full | OS | Minor | Minimal | Major | Prod |
||||
# where Full conveys the most information, and Prod the least. |
||||
# |
||||
ServerTokens Full |
||||
|
||||
# |
||||
# Optionally add a line containing the server version and virtual host |
||||
# name to server-generated pages (internal error documents, FTP directory |
||||
# listings, mod_status and mod_info output etc., but not CGI generated |
||||
# documents or custom error documents). |
||||
# Set to "EMail" to also include a mailto: link to the ServerAdmin. |
||||
# Set to one of: On | Off | EMail |
||||
# |
||||
ServerSignature Off |
||||
|
||||
# |
||||
# HostnameLookups: Log the names of clients or just their IP addresses |
||||
# e.g., www.apache.org (on) or 204.62.129.132 (off). |
||||
# The default is off because it'd be overall better for the net if people |
||||
# had to knowingly turn this feature on, since enabling it means that |
||||
# each client request will result in AT LEAST one lookup request to the |
||||
# nameserver. |
||||
# |
||||
HostnameLookups Off |
||||
|
||||
# |
||||
# Set a timeout for how long the client may take to send the request header |
||||
# and body. |
||||
# The default for the headers is header=20-40,MinRate=500, which means wait |
||||
# for the first byte of headers for 20 seconds. If some data arrives, |
||||
# increase the timeout corresponding to a data rate of 500 bytes/s, but not |
||||
# above 40 seconds. |
||||
# The default for the request body is body=20,MinRate=500, which is the same |
||||
# but has no upper limit for the timeout. |
||||
# To disable, set to header=0 body=0 |
||||
# |
||||
<IfModule reqtimeout_module> |
||||
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500 |
||||
</IfModule> |
@ -0,0 +1,36 @@ |
||||
# |
||||
# Get information about the requests being processed by the server |
||||
# and the configuration of the server. |
||||
# |
||||
# Required modules: mod_authz_core, mod_authz_host, |
||||
# mod_info (for the server-info handler), |
||||
# mod_status (for the server-status handler) |
||||
|
||||
# |
||||
# Allow server status reports generated by mod_status, |
||||
# with the URL of http://servername/server-status |
||||
# Change the ".example.com" to match your domain to enable. |
||||
|
||||
<Location /server-status> |
||||
SetHandler server-status |
||||
Require host .example.com |
||||
Require ip 127 |
||||
</Location> |
||||
|
||||
# |
||||
# ExtendedStatus controls whether Apache will generate "full" status |
||||
# information (ExtendedStatus On) or just basic information (ExtendedStatus |
||||
# Off) when the "server-status" handler is called. The default is Off. |
||||
# |
||||
#ExtendedStatus On |
||||
|
||||
# |
||||
# Allow remote server configuration reports, with the URL of |
||||
# http://servername/server-info (requires that mod_info.c be loaded). |
||||
# Change the ".example.com" to match your domain to enable. |
||||
# |
||||
<Location /server-info> |
||||
SetHandler server-info |
||||
Require host .example.com |
||||
Require ip 127 |
||||
</Location> |
@ -0,0 +1,141 @@ |
||||
# |
||||
# Settings for hosting different languages. |
||||
# |
||||
# Required modules: mod_mime, mod_negotiation |
||||
|
||||
# DefaultLanguage and AddLanguage allows you to specify the language of |
||||
# a document. You can then use content negotiation to give a browser a |
||||
# file in a language the user can understand. |
||||
# |
||||
# Specify a default language. This means that all data |
||||
# going out without a specific language tag (see below) will |
||||
# be marked with this one. You probably do NOT want to set |
||||
# this unless you are sure it is correct for all cases. |
||||
# |
||||
# * It is generally better to not mark a page as |
||||
# * being a certain language than marking it with the wrong |
||||
# * language! |
||||
# |
||||
# DefaultLanguage nl |
||||
# |
||||
# Note 1: The suffix does not have to be the same as the language |
||||
# keyword --- those with documents in Polish (whose net-standard |
||||
# language code is pl) may wish to use "AddLanguage pl .po" to |
||||
# avoid the ambiguity with the common suffix for perl scripts. |
||||
# |
||||
# Note 2: The example entries below illustrate that in some cases |
||||
# the two character 'Language' abbreviation is not identical to |
||||
# the two character 'Country' code for its country, |
||||
# E.g. 'Danmark/dk' versus 'Danish/da'. |
||||
# |
||||
# Note 3: In the case of 'ltz' we violate the RFC by using a three char |
||||
# specifier. There is 'work in progress' to fix this and get |
||||
# the reference data for rfc1766 cleaned up. |
||||
# |
||||
# Catalan (ca) - Croatian (hr) - Czech (cs) - Danish (da) - Dutch (nl) |
||||
# English (en) - Esperanto (eo) - Estonian (et) - French (fr) - German (de) |
||||
# Greek-Modern (el) - Hebrew (he) - Italian (it) - Japanese (ja) |
||||
# Korean (ko) - Luxembourgeois* (ltz) - Norwegian Nynorsk (nn) |
||||
# Norwegian (no) - Polish (pl) - Portugese (pt) |
||||
# Brazilian Portuguese (pt-BR) - Russian (ru) - Swedish (sv) |
||||
# Turkish (tr) - Simplified Chinese (zh-CN) - Spanish (es) |
||||
# Traditional Chinese (zh-TW) |
||||
# |
||||
AddLanguage ca .ca |
||||
AddLanguage cs .cz .cs |
||||
AddLanguage da .dk |
||||
AddLanguage de .de |
||||
AddLanguage el .el |
||||
AddLanguage en .en |
||||
AddLanguage eo .eo |
||||
AddLanguage es .es |
||||
AddLanguage et .et |
||||
AddLanguage fr .fr |
||||
AddLanguage he .he |
||||
AddLanguage hr .hr |
||||
AddLanguage it .it |
||||
AddLanguage ja .ja |
||||
AddLanguage ko .ko |
||||
AddLanguage ltz .ltz |
||||
AddLanguage nl .nl |
||||
AddLanguage nn .nn |
||||
AddLanguage no .no |
||||
AddLanguage pl .po |
||||
AddLanguage pt .pt |
||||
AddLanguage pt-BR .pt-br |
||||
AddLanguage ru .ru |
||||
AddLanguage sv .sv |
||||
AddLanguage tr .tr |
||||
AddLanguage zh-CN .zh-cn |
||||
AddLanguage zh-TW .zh-tw |
||||
|
||||
# LanguagePriority allows you to give precedence to some languages |
||||
# in case of a tie during content negotiation. |
||||
# |
||||
# Just list the languages in decreasing order of preference. We have |
||||
# more or less alphabetized them here. You probably want to change this. |
||||
# |
||||
LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv tr zh-CN zh-TW |
||||
|
||||
# |
||||
# ForceLanguagePriority allows you to serve a result page rather than |
||||
# MULTIPLE CHOICES (Prefer) [in case of a tie] or NOT ACCEPTABLE (Fallback) |
||||
# [in case no accepted languages matched the available variants] |
||||
# |
||||
ForceLanguagePriority Prefer Fallback |
||||
|
||||
# |
||||
# Commonly used filename extensions to character sets. You probably |
||||
# want to avoid clashes with the language extensions, unless you |
||||
# are good at carefully testing your setup after each change. |
||||
# See http://www.iana.org/assignments/character-sets for the |
||||
# official list of charset names and their respective RFCs. |
||||
# |
||||
AddCharset us-ascii.ascii .us-ascii |
||||
AddCharset ISO-8859-1 .iso8859-1 .latin1 |
||||
AddCharset ISO-8859-2 .iso8859-2 .latin2 .cen |
||||
AddCharset ISO-8859-3 .iso8859-3 .latin3 |
||||
AddCharset ISO-8859-4 .iso8859-4 .latin4 |
||||
AddCharset ISO-8859-5 .iso8859-5 .cyr .iso-ru |
||||
AddCharset ISO-8859-6 .iso8859-6 .arb .arabic |
||||
AddCharset ISO-8859-7 .iso8859-7 .grk .greek |
||||
AddCharset ISO-8859-8 .iso8859-8 .heb .hebrew |
||||
AddCharset ISO-8859-9 .iso8859-9 .latin5 .trk |
||||
AddCharset ISO-8859-10 .iso8859-10 .latin6 |
||||
AddCharset ISO-8859-13 .iso8859-13 |
||||
AddCharset ISO-8859-14 .iso8859-14 .latin8 |
||||
AddCharset ISO-8859-15 .iso8859-15 .latin9 |
||||
AddCharset ISO-8859-16 .iso8859-16 .latin10 |
||||
AddCharset ISO-2022-JP .iso2022-jp .jis |
||||
AddCharset ISO-2022-KR .iso2022-kr .kis |
||||
AddCharset ISO-2022-CN .iso2022-cn .cis |
||||
AddCharset Big5.Big5 .big5 .b5 |
||||
AddCharset cn-Big5 .cn-big5 |
||||
# For russian, more than one charset is used (depends on client, mostly): |
||||
AddCharset WINDOWS-1251 .cp-1251 .win-1251 |
||||
AddCharset CP866 .cp866 |
||||
AddCharset KOI8 .koi8 |
||||
AddCharset KOI8-E .koi8-e |
||||
AddCharset KOI8-r .koi8-r .koi8-ru |
||||
AddCharset KOI8-U .koi8-u |
||||
AddCharset KOI8-ru .koi8-uk .ua |
||||
AddCharset ISO-10646-UCS-2 .ucs2 |
||||
AddCharset ISO-10646-UCS-4 .ucs4 |
||||
AddCharset UTF-7 .utf7 |
||||
AddCharset UTF-8 .utf8 |
||||
AddCharset UTF-16 .utf16 |
||||
AddCharset UTF-16BE .utf16be |
||||
AddCharset UTF-16LE .utf16le |
||||
AddCharset UTF-32 .utf32 |
||||
AddCharset UTF-32BE .utf32be |
||||
AddCharset UTF-32LE .utf32le |
||||
AddCharset euc-cn .euc-cn |
||||
AddCharset euc-gb .euc-gb |
||||
AddCharset euc-jp .euc-jp |
||||
AddCharset euc-kr .euc-kr |
||||
#Not sure how euc-tw got in - IANA doesn't list it??? |
||||
AddCharset EUC-TW .euc-tw |
||||
AddCharset gb2312 .gb2312 .gb |
||||
AddCharset iso-10646-ucs-2 .ucs-2 .iso-10646-ucs-2 |
||||
AddCharset iso-10646-ucs-4 .ucs-4 .iso-10646-ucs-4 |
||||
AddCharset shift_jis .shift_jis .sjis |
@ -0,0 +1,33 @@ |
||||
# |
||||
# Provide access to the documentation on your server as |
||||
# http://yourserver.example.com/manual/ |
||||
# The documentation is always available at |
||||
# http://httpd.apache.org/docs/2.4/ |
||||
# |
||||
# Required modules: mod_alias, mod_authz_core, mod_authz_host, |
||||
# mod_setenvif, mod_negotiation |
||||
# |
||||
|
||||
AliasMatch ^/manual(?:/(?:da|de|en|es|fr|ja|ko|pt-br|ru|tr|zh-cn))?(/.*)?$ "/opt/lampp/manual$1" |
||||
|
||||
<Directory "/opt/lampp/manual"> |
||||
Options Indexes |
||||
AllowOverride None |
||||
Require all granted |
||||
|
||||
<Files *.html> |
||||
SetHandler type-map |
||||
</Files> |
||||
# .tr is text/troff in mime.types! |
||||
<Files *.html.tr.utf8> |
||||
ForceType "text/html; charset=utf-8" |
||||
</Files> |
||||
|
||||
AddLanguage da .da |
||||
|
||||
SetEnvIf Request_URI ^/manual/(da|de|en|es|fr|ja|ko|pt-br|ru|tr|zh-cn)/ prefer-language=$1 |
||||
RedirectMatch 301 ^/manual(?:/(da|de|en|es|fr|ja|ko|pt-br|ru|tr|zh-cn)){2,}(/.*)?$ /manual/$1$2 |
||||
|
||||
LanguagePriority en da de es fr ja ko pt-br ru tr |
||||
ForceLanguagePriority Prefer Fallback |
||||
</Directory> |
@ -0,0 +1,119 @@ |
||||
# |
||||
# Server-Pool Management (MPM specific) |
||||
# |
||||
|
||||
# |
||||
# PidFile: The file in which the server should record its process |
||||
# identification number when it starts. |
||||
# |
||||
# Note that this is the default PidFile for most MPMs. |
||||
# |
||||
<IfModule !mpm_netware_module> |
||||
PidFile "logs/httpd.pid" |
||||
</IfModule> |
||||
|
||||
# |
||||
# Only one of the below sections will be relevant on your |
||||
# installed httpd. Use "apachectl -l" to find out the |
||||
# active mpm. |
||||
# |
||||
|
||||
# prefork MPM |
||||
# StartServers: number of server processes to start |
||||
# MinSpareServers: minimum number of server processes which are kept spare |
||||
# MaxSpareServers: maximum number of server processes which are kept spare |
||||
# MaxRequestWorkers: maximum number of server processes allowed to start |
||||
# MaxConnectionsPerChild: maximum number of connections a server process serves |
||||
# before terminating |
||||
<IfModule mpm_prefork_module> |
||||
StartServers 5 |
||||
MinSpareServers 5 |
||||
MaxSpareServers 10 |
||||
MaxRequestWorkers 150 |
||||
MaxConnectionsPerChild 0 |
||||
</IfModule> |
||||
|
||||
# worker MPM |
||||
# StartServers: initial number of server processes to start |
||||
# MinSpareThreads: minimum number of worker threads which are kept spare |
||||
# MaxSpareThreads: maximum number of worker threads which are kept spare |
||||
# ThreadsPerChild: constant number of worker threads in each server process |
||||
# MaxRequestWorkers: maximum number of worker threads |
||||
# MaxConnectionsPerChild: maximum number of connections a server process serves |
||||
# before terminating |
||||
<IfModule mpm_worker_module> |
||||
StartServers 2 |
||||
MinSpareThreads 25 |
||||
MaxSpareThreads 75 |
||||
ThreadsPerChild 25 |
||||
MaxRequestWorkers 150 |
||||
MaxConnectionsPerChild 0 |
||||
</IfModule> |
||||
|
||||
# event MPM |
||||
# StartServers: initial number of server processes to start |
||||
# MinSpareThreads: minimum number of worker threads which are kept spare |
||||
# MaxSpareThreads: maximum number of worker threads which are kept spare |
||||
# ThreadsPerChild: constant number of worker threads in each server process |
||||
# MaxRequestWorkers: maximum number of worker threads |
||||
# MaxConnectionsPerChild: maximum number of connections a server process serves |
||||
# before terminating |
||||
<IfModule mpm_event_module> |
||||
StartServers 2 |
||||
MinSpareThreads 25 |
||||
MaxSpareThreads 75 |
||||
ThreadsPerChild 25 |
||||
MaxRequestWorkers 150 |
||||
MaxConnectionsPerChild 0 |
||||
</IfModule> |
||||
|
||||
# NetWare MPM |
||||
# ThreadStackSize: Stack size allocated for each worker thread |
||||
# StartThreads: Number of worker threads launched at server startup |
||||
# MinSpareThreads: Minimum number of idle threads, to handle request spikes |
||||
# MaxSpareThreads: Maximum number of idle threads |
||||
# MaxThreads: Maximum number of worker threads alive at the same time |
||||
# MaxConnectionsPerChild: Maximum number of connections a thread serves. It |
||||
# is recommended that the default value of 0 be set |
||||
# for this directive on NetWare. This will allow the |
||||
# thread to continue to service requests indefinitely. |
||||
<IfModule mpm_netware_module> |
||||
ThreadStackSize 65536 |
||||
StartThreads 250 |
||||
MinSpareThreads 25 |
||||
MaxSpareThreads 250 |
||||
MaxThreads 1000 |
||||
MaxConnectionsPerChild 0 |
||||
</IfModule> |
||||
|
||||
# OS/2 MPM |
||||
# StartServers: Number of server processes to maintain |
||||
# MinSpareThreads: Minimum number of idle threads per process, |
||||
# to handle request spikes |
||||
# MaxSpareThreads: Maximum number of idle threads per process |
||||
# MaxConnectionsPerChild: Maximum number of connections per server process |
||||
<IfModule mpm_mpmt_os2_module> |
||||
StartServers 2 |
||||
MinSpareThreads 5 |
||||
MaxSpareThreads 10 |
||||
MaxConnectionsPerChild 0 |
||||
</IfModule> |
||||
|
||||
# WinNT MPM |
||||
# ThreadsPerChild: constant number of worker threads in the server process |
||||
# MaxConnectionsPerChild: maximum number of connections a server process serves |
||||
<IfModule mpm_winnt_module> |
||||
ThreadsPerChild 150 |
||||
MaxConnectionsPerChild 0 |
||||
</IfModule> |
||||
|
||||
# The maximum number of free Kbytes that every allocator is allowed |
||||
# to hold without calling free(). In threaded MPMs, every thread has its own |
||||
# allocator. When not set, or when set to zero, the threshold will be set to |
||||
# unlimited. |
||||
<IfModule !mpm_netware_module> |
||||
MaxMemFree 2048 |
||||
</IfModule> |
||||
<IfModule mpm_netware_module> |
||||
MaxMemFree 100 |
||||
</IfModule> |
@ -0,0 +1,52 @@ |
||||
# |
||||
# The configuration below implements multi-language error documents through |
||||
# content-negotiation. |
||||
# |
||||
# Required modules: mod_alias, mod_authz_core, mod_authz_host, |
||||
# mod_include, mod_negotiation |
||||
# |
||||
# We use Alias to redirect any /error/HTTP_<error>.html.var response to |
||||
# our collection of by-error message multi-language collections. We use |
||||
# includes to substitute the appropriate text. |
||||
# |
||||
# You can modify the messages' appearance without changing any of the |
||||
# default HTTP_<error>.html.var files by adding the line: |
||||
# |
||||
# Alias /error/include/ "/your/include/path/" |
||||
# |
||||
# which allows you to create your own set of files by starting with the |
||||
# /opt/lampp/error/include/ files and copying them to /your/include/path/, |
||||
# even on a per-VirtualHost basis. The default include files will display |
||||
# your Apache version number and your ServerAdmin email address regardless |
||||
# of the setting of ServerSignature. |
||||
|
||||
Alias /error/ "/opt/lampp/error/" |
||||
|
||||
<Directory "/opt/lampp/error"> |
||||
AllowOverride None |
||||
Options IncludesNoExec |
||||
AddOutputFilter Includes html |
||||
AddHandler type-map var |
||||
Require all granted |
||||
LanguagePriority en cs de es fr it ja ko nl pl pt-br ro sv tr |
||||
ForceLanguagePriority Prefer Fallback |
||||
</Directory> |
||||
|
||||
ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var |
||||
ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var |
||||
ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var |
||||
ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var |
||||
ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var |
||||
ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var |
||||
ErrorDocument 410 /error/HTTP_GONE.html.var |
||||
ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var |
||||
ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var |
||||
ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var |
||||
ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var |
||||
ErrorDocument 415 /error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var |
||||
ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var |
||||
ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var |
||||
ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var |
||||
ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var |
||||
ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var |
||||
|
@ -0,0 +1,244 @@ |
||||
# |
||||
# This is the Apache server configuration file providing SSL support. |
||||
# It contains the configuration directives to instruct the server how to |
||||
# serve pages over an https connection. For detailed information about these |
||||
# directives see <URL:http://httpd.apache.org/docs/trunk/mod/mod_ssl.html> |
||||
# |
||||
# Do NOT simply read the instructions in here without understanding |
||||
# what they do. They're here only as hints or reminders. If you are unsure |
||||
# consult the online docs. You have been warned. |
||||
# |
||||
# Required modules: mod_log_config, mod_setenvif, mod_ssl, |
||||
# socache_shmcb_module (for default value of SSLSessionCache) |
||||
|
||||
# |
||||
# Pseudo Random Number Generator (PRNG): |
||||
# Configure one or more sources to seed the PRNG of the SSL library. |
||||
# The seed data should be of good random quality. |
||||
# WARNING! On some platforms /dev/random blocks if not enough entropy |
||||
# is available. This means you then cannot use the /dev/random device |
||||
# because it would lead to very long connection times (as long as |
||||
# it requires to make more entropy available). But usually those |
||||
# platforms additionally provide a /dev/urandom device which doesn't |
||||
# block. So, if available, use this one instead. Read the mod_ssl User |
||||
# Manual for more details. |
||||
# |
||||
#SSLRandomSeed startup file:/dev/random 512 |
||||
#SSLRandomSeed startup file:/dev/urandom 512 |
||||
#SSLRandomSeed connect file:/dev/random 512 |
||||
#SSLRandomSeed connect file:/dev/urandom 512 |
||||
|
||||
|
||||
# |
||||
# When we also provide SSL we have to listen to the |
||||
# standard HTTP port (see above) and to the HTTPS port |
||||
# |
||||
# Note: Configurations that use IPv6 but not IPv4-mapped addresses need two |
||||
# Listen directives: "Listen [::]:443" and "Listen 0.0.0.0:443" |
||||
# |
||||
Listen 443 |
||||
|
||||
## |
||||
## SSL Global Context |
||||
## |
||||
## All SSL configuration in this context applies both to |
||||
## the main server and all SSL-enabled virtual hosts. |
||||
## |
||||
|
||||
# SSL Cipher Suite: |
||||
# List the ciphers that the client is permitted to negotiate. |
||||
# See the mod_ssl documentation for a complete list. |
||||
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5 |
||||
|
||||
# Speed-optimized SSL Cipher configuration: |
||||
# If speed is your main concern (on busy HTTPS servers e.g.), |
||||
# you might want to force clients to specific, performance |
||||
# optimized ciphers. In this case, prepend those ciphers |
||||
# to the SSLCipherSuite list, and enable SSLHonorCipherOrder. |
||||
# Caveat: by giving precedence to RC4-SHA and AES128-SHA |
||||
# (as in the example below), most connections will no longer |
||||
# have perfect forward secrecy - if the server's key is |
||||
# compromised, captures of past or future traffic must be |
||||
# considered compromised, too. |
||||
#SSLCipherSuite RC4-SHA:AES128-SHA:HIGH:MEDIUM:!aNULL:!MD5 |
||||
#SSLHonorCipherOrder on |
||||
|
||||
# Pass Phrase Dialog: |
||||
# Configure the pass phrase gathering process. |
||||
# The filtering dialog program (`builtin' is an internal |
||||
# terminal dialog) has to provide the pass phrase on stdout. |
||||
SSLPassPhraseDialog builtin |
||||
|
||||
# Inter-Process Session Cache: |
||||
# Configure the SSL Session Cache: First the mechanism |
||||
# to use and second the expiring timeout (in seconds). |
||||
#SSLSessionCache "dbm:/opt/lampp/logs/ssl_scache" |
||||
SSLSessionCache "shmcb:/opt/lampp/logs/ssl_scache(512000)" |
||||
SSLSessionCacheTimeout 300 |
||||
|
||||
## |
||||
## SSL Virtual Host Context |
||||
## |
||||
|
||||
<VirtualHost _default_:443> |
||||
|
||||
# General setup for the virtual host |
||||
DocumentRoot "/opt/lampp/htdocs" |
||||
ServerName www.example.com:443 |
||||
ServerAdmin you@example.com |
||||
ErrorLog "/opt/lampp/logs/error_log" |
||||
TransferLog "/opt/lampp/logs/access_log" |
||||
|
||||
# SSL Engine Switch: |
||||
# Enable/Disable SSL for this virtual host. |
||||
SSLEngine on |
||||
|
||||
# Server Certificate: |
||||
# Point SSLCertificateFile at a PEM encoded certificate. If |
||||
# the certificate is encrypted, then you will be prompted for a |
||||
# pass phrase. Note that a kill -HUP will prompt again. Keep |
||||
# in mind that if you have both an RSA and a DSA certificate you |
||||
# can configure both in parallel (to also allow the use of DSA |
||||
# ciphers, etc.) |
||||
# Some ECC cipher suites (http://www.ietf.org/rfc/rfc4492.txt) |
||||
# require an ECC certificate which can also be configured in |
||||
# parallel. |
||||
SSLCertificateFile "/opt/lampp/etc/ssl.crt/server.crt" |
||||
#SSLCertificateFile "/opt/lampp/etc/server-dsa.crt" |
||||
#SSLCertificateFile "/opt/lampp/etc/server-ecc.crt" |
||||
|
||||
# Server Private Key: |
||||
# If the key is not combined with the certificate, use this |
||||
# directive to point at the key file. Keep in mind that if |
||||
# you've both a RSA and a DSA private key you can configure |
||||
# both in parallel (to also allow the use of DSA ciphers, etc.) |
||||
# ECC keys, when in use, can also be configured in parallel |
||||
SSLCertificateKeyFile "/opt/lampp/etc/ssl.key/server.key" |
||||
#SSLCertificateKeyFile "/opt/lampp/etc/server-dsa.key" |
||||
#SSLCertificateKeyFile "/opt/lampp/etc/server-ecc.key" |
||||
|
||||
# Server Certificate Chain: |
||||
# Point SSLCertificateChainFile at a file containing the |
||||
# concatenation of PEM encoded CA certificates which form the |
||||
# certificate chain for the server certificate. Alternatively |
||||
# the referenced file can be the same as SSLCertificateFile |
||||
# when the CA certificates are directly appended to the server |
||||
# certificate for convenience. |
||||
#SSLCertificateChainFile "/opt/lampp/etc/server-ca.crt" |
||||
|
||||
# Certificate Authority (CA): |
||||
# Set the CA certificate verification path where to find CA |
||||
# certificates for client authentication or alternatively one |
||||
# huge file containing all of them (file must be PEM encoded) |
||||
# Note: Inside SSLCACertificatePath you need hash symlinks |
||||
# to point to the certificate files. Use the provided |
||||
# Makefile to update the hash symlinks after changes. |
||||
#SSLCACertificatePath "/opt/lampp/etc/ssl.crt" |
||||
#SSLCACertificateFile "/opt/lampp/etc/ssl.crt/ca-bundle.crt" |
||||
|
||||
# Certificate Revocation Lists (CRL): |
||||
# Set the CA revocation path where to find CA CRLs for client |
||||
# authentication or alternatively one huge file containing all |
||||
# of them (file must be PEM encoded). |
||||
# The CRL checking mode needs to be configured explicitly |
||||
# through SSLCARevocationCheck (defaults to "none" otherwise). |
||||
# Note: Inside SSLCARevocationPath you need hash symlinks |
||||
# to point to the certificate files. Use the provided |
||||
# Makefile to update the hash symlinks after changes. |
||||
#SSLCARevocationPath "/opt/lampp/etc/ssl.crl" |
||||
#SSLCARevocationFile "/opt/lampp/etc/ssl.crl/ca-bundle.crl" |
||||
#SSLCARevocationCheck chain |
||||
|
||||
# Client Authentication (Type): |
||||
# Client certificate verification type and depth. Types are |
||||
# none, optional, require and optional_no_ca. Depth is a |
||||
# number which specifies how deeply to verify the certificate |
||||
# issuer chain before deciding the certificate is not valid. |
||||
#SSLVerifyClient require |
||||
#SSLVerifyDepth 10 |
||||
|
||||
# Access Control: |
||||
# With SSLRequire you can do per-directory access control based |
||||
# on arbitrary complex boolean expressions containing server |
||||
# variable checks and other lookup directives. The syntax is a |
||||
# mixture between C and Perl. See the mod_ssl documentation |
||||
# for more details. |
||||
#<Location /> |
||||
#SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \ |
||||
# and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \ |
||||
# and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \ |
||||
# and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \ |
||||
# and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20 ) \ |
||||
# or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/ |
||||
#</Location> |
||||
|
||||
# SSL Engine Options: |
||||
# Set various options for the SSL engine. |
||||
# o FakeBasicAuth: |
||||
# Translate the client X.509 into a Basic Authorisation. This means that |
||||
# the standard Auth/DBMAuth methods can be used for access control. The |
||||
# user name is the `one line' version of the client's X.509 certificate. |
||||
# Note that no password is obtained from the user. Every entry in the user |
||||
# file needs this password: `xxj31ZMTZzkVA'. |
||||
# o ExportCertData: |
||||
# This exports two additional environment variables: SSL_CLIENT_CERT and |
||||
# SSL_SERVER_CERT. These contain the PEM-encoded certificates of the |
||||
# server (always existing) and the client (only existing when client |
||||
# authentication is used). This can be used to import the certificates |
||||
# into CGI scripts. |
||||
# o StdEnvVars: |
||||
# This exports the standard SSL/TLS related `SSL_*' environment variables. |
||||
# Per default this exportation is switched off for performance reasons, |
||||
# because the extraction step is an expensive operation and is usually |
||||
# useless for serving static content. So one usually enables the |
||||
# exportation for CGI and SSI requests only. |
||||
# o StrictRequire: |
||||
# This denies access when "SSLRequireSSL" or "SSLRequire" applied even |
||||
# under a "Satisfy any" situation, i.e. when it applies access is denied |
||||
# and no other module can change it. |
||||
# o OptRenegotiate: |
||||
# This enables optimized SSL connection renegotiation handling when SSL |
||||
# directives are used in per-directory context. |
||||
#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire |
||||
<FilesMatch "\.(cgi|shtml|phtml|php)$"> |
||||
SSLOptions +StdEnvVars |
||||
</FilesMatch> |
||||
<Directory "/opt/lampp/cgi-bin"> |
||||
SSLOptions +StdEnvVars |
||||
</Directory> |
||||
|
||||
# SSL Protocol Adjustments: |
||||
# The safe and default but still SSL/TLS standard compliant shutdown |
||||
# approach is that mod_ssl sends the close notify alert but doesn't wait for |
||||
# the close notify alert from client. When you need a different shutdown |
||||
# approach you can use one of the following variables: |
||||
# o ssl-unclean-shutdown: |
||||
# This forces an unclean shutdown when the connection is closed, i.e. no |
||||
# SSL close notify alert is sent or allowed to be received. This violates |
||||
# the SSL/TLS standard but is needed for some brain-dead browsers. Use |
||||
# this when you receive I/O errors because of the standard approach where |
||||
# mod_ssl sends the close notify alert. |
||||
# o ssl-accurate-shutdown: |
||||
# This forces an accurate shutdown when the connection is closed, i.e. a |
||||
# SSL close notify alert is send and mod_ssl waits for the close notify |
||||
# alert of the client. This is 100% SSL/TLS standard compliant, but in |
||||
# practice often causes hanging connections with brain-dead browsers. Use |
||||
# this only for browsers where you know that their SSL implementation |
||||
# works correctly. |
||||
# Notice: Most problems of broken clients are also related to the HTTP |
||||
# keep-alive facility, so you usually additionally want to disable |
||||
# keep-alive for those clients, too. Use variable "nokeepalive" for this. |
||||
# Similarly, one has to force some clients to use HTTP/1.0 to workaround |
||||
# their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and |
||||
# "force-response-1.0" for this. |
||||
BrowserMatch "MSIE [2-5]" \ |
||||
nokeepalive ssl-unclean-shutdown \ |
||||
downgrade-1.0 force-response-1.0 |
||||
|
||||
# Per-Server Logging: |
||||
# The home of a custom SSL log file. Use this when you want a |
||||
# compact non-error SSL logfile on a virtual host basis. |
||||
CustomLog "/opt/lampp/logs/ssl_request_log" \ |
||||
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" |
||||
|
||||
</VirtualHost> |
@ -0,0 +1,21 @@ |
||||
# Settings for user home directories |
||||
# |
||||
# Required module: mod_authz_core, mod_authz_host, mod_userdir |
||||
|
||||
# |
||||
# UserDir: The name of the directory that is appended onto a user's home |
||||
# directory if a ~user request is received. Note that you must also set |
||||
# the default access control for these directories, as in the example below. |
||||
# |
||||
#UserDir Sites |
||||
|
||||
# |
||||
# Control access to UserDir directories. The following is an example |
||||
# for a site where these directories are restricted to read-only. |
||||
# |
||||
<Directory "/home/*/Sites"> |
||||
AllowOverride FileInfo AuthConfig Limit Indexes |
||||
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec |
||||
Require method GET POST OPTIONS |
||||
</Directory> |
||||
|
@ -0,0 +1,30 @@ |
||||
# Virtual Hosts |
||||
# |
||||
# Required modules: mod_log_config |
||||
|
||||
# If you want to maintain multiple domains/hostnames on your |
||||
# machine you can setup VirtualHost containers for them. Most configurations |
||||
# use only name-based virtual hosts so the server doesn't need to worry about |
||||
# IP addresses. This is indicated by the asterisks in the directives below. |
||||
# |
||||
# Please see the documentation at |
||||
# <URL:http://httpd.apache.org/docs/2.4/vhosts/> |
||||
# for further details before you try to setup virtual hosts. |
||||
# |
||||
# You may use the command line option '-S' to verify your virtual host |
||||
# configuration. |
||||
|
||||
# |
||||
# VirtualHost example: |
||||
# Almost any Apache directive may go into a VirtualHost container. |
||||
# The first VirtualHost section is used for all requests that do not |
||||
# match a ServerName or ServerAlias in any <VirtualHost> block. |
||||
# |
||||
<VirtualHost *:80> |
||||
ServerName test.local |
||||
ServerAlias *.local |
||||
VirtualDocumentRoot /home/jonathan/Sites/%-2/public_html |
||||
CustomLog /home/jonathan/Sites/access.log vhost_combined |
||||
ErrorLog /home/jonathan/Sites/error.log |
||||
</VirtualHost> |
||||
|
@ -0,0 +1,58 @@ |
||||
#<IfDefine PHP4> |
||||
#LoadModule php4_module modules/libphp4.so |
||||
#</IfDefine> |
||||
#<IfDefine PHP7> |
||||
#LoadModule php7_module modules/libphp7.so |
||||
#</IfDefine> |
||||
|
||||
# We will enable it by default |
||||
#<IfDefine PHP> |
||||
LoadModule php7_module modules/libphp7.so |
||||
#</IfDefine> |
||||
|
||||
LoadModule perl_module modules/mod_perl.so |
||||
|
||||
Alias /phpmyadmin "/opt/lampp/phpmyadmin" |
||||
Alias /phpsqliteadmin "/opt/lampp/phpsqliteadmin" |
||||
|
||||
# since XAMPP 1.4.3 |
||||
<Directory "/opt/lampp/phpmyadmin"> |
||||
AllowOverride AuthConfig Limit |
||||
Require local |
||||
ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var |
||||
</Directory> |
||||
|
||||
<Directory "/opt/lampp/phpsqliteadmin"> |
||||
AllowOverride AuthConfig Limit |
||||
Require local |
||||
ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var |
||||
</Directory> |
||||
|
||||
# since LAMPP 1.0RC1 |
||||
AddType application/x-httpd-php .php .php3 .php4 |
||||
|
||||
XBitHack on |
||||
|
||||
# since 0.9.8 we've mod_perl |
||||
<IfModule mod_perl.c> |
||||
AddHandler perl-script .pl |
||||
PerlHandler ModPerl::PerlRunPrefork |
||||
PerlOptions +ParseHeaders |
||||
PerlSendHeader On |
||||
</IfModule> |
||||
|
||||
# demo for mod_perl responsehandler |
||||
#PerlModule Apache::CurrentTime |
||||
#<Location /time> |
||||
# SetHandler modperl |
||||
# PerlResponseHandler Apache::CurrentTime |
||||
#</Location> |
||||
|
||||
# AcceptMutex sysvsem is default but on some systems we need this |
||||
# thanks to jeff ort for this hint |
||||
#AcceptMutex flock |
||||
#LockFile /opt/lampp/logs/accept.lock |
||||
|
||||
# this makes mod_dbd happy - oswald, 02aug06 |
||||
# mod_dbd doesn't work in Apache 2.2.3: getting always heaps of "glibc detected *** corrupted double-linked list" on shutdown - oswald, 10sep06 |
||||
#DBDriver sqlite3 |
@ -0,0 +1,90 @@ |
||||
# Configuration example. |
||||
# |
||||
# For detailed information about these directives see |
||||
# <URL:http://httpd.apache.org/docs/2.4/mod/mod_proxy_html.html> |
||||
# and for mod_xml2enc see |
||||
# <URL:http://httpd.apache.org/docs/2.4/mod/mod_xml2enc.html> |
||||
# |
||||
# First, to load the module with its prerequisites. Note: mod_xml2enc |
||||
# is not always necessary, but without it mod_proxy_html is likely to |
||||
# mangle pages in encodings other than ASCII or Unicode (utf-8). |
||||
# |
||||
# For Unix-family systems: |
||||
# LoadFile /usr/lib/libxml2.so |
||||
# LoadModule proxy_html_module modules/mod_proxy_html.so |
||||
# LoadModule xml2enc_module modules/mod_xml2enc.so |
||||
# |
||||
# For Windows (I don't know if there's a standard path for the libraries) |
||||
# LoadFile C:/path/zlib.dll |
||||
# LoadFile C:/path/iconv.dll |
||||
# LoadFile C:/path/libxml2.dll |
||||
# LoadModule proxy_html_module modules/mod_proxy_html.so |
||||
# LoadModule xml2enc_module modules/mod_xml2enc.so |
||||
# |
||||
# All knowledge of HTML links has been removed from the mod_proxy_html |
||||
# code itself, and is instead read from httpd.conf (or included file) |
||||
# at server startup. So you MUST declare it. This will normally be |
||||
# at top level, but can also be used in a <Location>. |
||||
# |
||||
# Here's the declaration for W3C HTML 4.01 and XHTML 1.0 |
||||
|
||||
ProxyHTMLLinks a href |
||||
ProxyHTMLLinks area href |
||||
ProxyHTMLLinks link href |
||||
ProxyHTMLLinks img src longdesc usemap |
||||
ProxyHTMLLinks object classid codebase data usemap |
||||
ProxyHTMLLinks q cite |
||||
ProxyHTMLLinks blockquote cite |
||||
ProxyHTMLLinks ins cite |
||||
ProxyHTMLLinks del cite |
||||
ProxyHTMLLinks form action |
||||
ProxyHTMLLinks input src usemap |
||||
ProxyHTMLLinks head profile |
||||
ProxyHTMLLinks base href |
||||
ProxyHTMLLinks script src for |
||||
|
||||
# To support scripting events (with ProxyHTMLExtended On), |
||||
# you'll need to declare them too. |
||||
|
||||
ProxyHTMLEvents onclick ondblclick onmousedown onmouseup \ |
||||
onmouseover onmousemove onmouseout onkeypress \ |
||||
onkeydown onkeyup onfocus onblur onload \ |
||||
onunload onsubmit onreset onselect onchange |
||||
|
||||
# If you need to support legacy (pre-1998, aka "transitional") HTML or XHTML, |
||||
# you'll need to uncomment the following deprecated link attributes. |
||||
# Note that these are enabled in earlier mod_proxy_html versions |
||||
# |
||||
# ProxyHTMLLinks frame src longdesc |
||||
# ProxyHTMLLinks iframe src longdesc |
||||
# ProxyHTMLLinks body background |
||||
# ProxyHTMLLinks applet codebase |
||||
# |
||||
# If you're dealing with proprietary HTML variants, |
||||
# declare your own URL attributes here as required. |
||||
# |
||||
# ProxyHTMLLinks myelement myattr otherattr |
||||
# |
||||
########### |
||||
# EXAMPLE # |
||||
########### |
||||
# |
||||
# To define the URL /my-gateway/ as a gateway to an appserver with address |
||||
# http://some.app.intranet/ on a private network, after loading the |
||||
# modules and including this configuration file: |
||||
# |
||||
# ProxyRequests Off <-- this is an important security setting |
||||
# ProxyPass /my-gateway/ http://some.app.intranet/ |
||||
# <Location /my-gateway/> |
||||
# ProxyPassReverse / |
||||
# ProxyHTMLEnable On |
||||
# ProxyHTMLURLMap http://some.app.intranet/ /my-gateway/ |
||||
# ProxyHTMLURLMap / /my-gateway/ |
||||
# </Location> |
||||
# |
||||
# Many (though not all) real-life setups are more complex. |
||||
# |
||||
# See the documentation at |
||||
# http://apache.webthing.com/mod_proxy_html/ |
||||
# and the tutorial at |
||||
# http://www.apachetutor.org/admin/reverseproxies |
@ -0,0 +1,525 @@ |
||||
# |
||||
# This is the main Apache HTTP server configuration file. It contains the |
||||
# configuration directives that give the server its instructions. |
||||
# See <URL:http://httpd.apache.org/docs/trunk/> for detailed information. |
||||
# In particular, see |
||||
# <URL:http://httpd.apache.org/docs/trunk/mod/directives.html> |
||||
# for a discussion of each configuration directive. |
||||
# |
||||
# Do NOT simply read the instructions in here without understanding |
||||
# what they do. They're here only as hints or reminders. If you are unsure |
||||
# consult the online docs. You have been warned. |
||||
# |
||||
# Configuration and logfile names: If the filenames you specify for many |
||||
# of the server's control files begin with "/" (or "drive:/" for Win32), the |
||||
# server will use that explicit path. If the filenames do *not* begin |
||||
# with "/", the value of ServerRoot is prepended -- so 'log/access_log' |
||||
# with ServerRoot set to '/www' will be interpreted by the |
||||
# server as '/www/log/access_log', where as '/log/access_log' will be |
||||
# interpreted as '/log/access_log'. |
||||
|
||||
# |
||||
# ServerRoot: The top of the directory tree under which the server's |
||||
# configuration, error, and log files are kept. |
||||
# |
||||
# Do not add a slash at the end of the directory path. If you point |
||||
# ServerRoot at a non-local disk, be sure to specify a local disk on the |
||||
# Mutex directive, if file-based mutexes are used. If you wish to share the |
||||
# same ServerRoot for multiple httpd daemons, you will need to change at |
||||
# least PidFile. |
||||
# |
||||
ServerRoot "/opt/lampp" |
||||
|
||||
# |
||||
# Mutex: Allows you to set the mutex mechanism and mutex file directory |
||||
# for individual mutexes, or change the global defaults |
||||
# |
||||
# Uncomment and change the directory if mutexes are file-based and the default |
||||
# mutex file directory is not on a local disk or is not appropriate for some |
||||
# other reason. |
||||
# |
||||
# Mutex default:logs |
||||
|
||||
# |
||||
# Listen: Allows you to bind Apache to specific IP addresses and/or |
||||
# ports, instead of the default. See also the <VirtualHost> |
||||
# directive. |
||||
# |
||||
# Change this to Listen on specific IP addresses as shown below to |
||||
# prevent Apache from glomming onto all bound IP addresses. |
||||
# |
||||
#Listen 12.34.56.78:80 |
||||
Listen 80 |
||||
|
||||
# |
||||
# Dynamic Shared Object (DSO) Support |
||||
# |
||||
# To be able to use the functionality of a module which was built as a DSO you |
||||
# have to place corresponding `LoadModule' lines at this location so the |
||||
# directives contained in it are actually available _before_ they are used. |
||||
# Statically compiled modules (those listed by `httpd -l') do not need |
||||
# to be loaded here. |
||||
# |
||||
# Example: |
||||
# LoadModule foo_module modules/mod_foo.so |
||||
# |
||||
LoadModule authn_file_module modules/mod_authn_file.so |
||||
LoadModule authn_dbm_module modules/mod_authn_dbm.so |
||||
LoadModule authn_anon_module modules/mod_authn_anon.so |
||||
LoadModule authn_dbd_module modules/mod_authn_dbd.so |
||||
LoadModule authn_socache_module modules/mod_authn_socache.so |
||||
LoadModule authn_core_module modules/mod_authn_core.so |
||||
LoadModule authz_host_module modules/mod_authz_host.so |
||||
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so |
||||
LoadModule authz_user_module modules/mod_authz_user.so |
||||
LoadModule authz_dbm_module modules/mod_authz_dbm.so |
||||
LoadModule authz_owner_module modules/mod_authz_owner.so |
||||
LoadModule authz_dbd_module modules/mod_authz_dbd.so |
||||
LoadModule authz_core_module modules/mod_authz_core.so |
||||
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so |
||||
LoadModule access_compat_module modules/mod_access_compat.so |
||||
LoadModule auth_basic_module modules/mod_auth_basic.so |
||||
LoadModule auth_form_module modules/mod_auth_form.so |
||||
LoadModule auth_digest_module modules/mod_auth_digest.so |
||||
LoadModule allowmethods_module modules/mod_allowmethods.so |
||||
LoadModule file_cache_module modules/mod_file_cache.so |
||||
LoadModule cache_module modules/mod_cache.so |
||||
LoadModule cache_disk_module modules/mod_cache_disk.so |
||||
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so |
||||
LoadModule socache_dbm_module modules/mod_socache_dbm.so |
||||
LoadModule socache_memcache_module modules/mod_socache_memcache.so |
||||
LoadModule dbd_module modules/mod_dbd.so |
||||
LoadModule bucketeer_module modules/mod_bucketeer.so |
||||
LoadModule dumpio_module modules/mod_dumpio.so |
||||
LoadModule echo_module modules/mod_echo.so |
||||
LoadModule case_filter_module modules/mod_case_filter.so |
||||
LoadModule case_filter_in_module modules/mod_case_filter_in.so |
||||
LoadModule buffer_module modules/mod_buffer.so |
||||
LoadModule ratelimit_module modules/mod_ratelimit.so |
||||
LoadModule reqtimeout_module modules/mod_reqtimeout.so |
||||
LoadModule ext_filter_module modules/mod_ext_filter.so |
||||
LoadModule request_module modules/mod_request.so |
||||
LoadModule include_module modules/mod_include.so |
||||
LoadModule filter_module modules/mod_filter.so |
||||
LoadModule substitute_module modules/mod_substitute.so |
||||
LoadModule sed_module modules/mod_sed.so |
||||
LoadModule charset_lite_module modules/mod_charset_lite.so |
||||
LoadModule deflate_module modules/mod_deflate.so |
||||
LoadModule mime_module modules/mod_mime.so |
||||
LoadModule ldap_module modules/mod_ldap.so |
||||
LoadModule log_config_module modules/mod_log_config.so |
||||
LoadModule log_debug_module modules/mod_log_debug.so |
||||
LoadModule logio_module modules/mod_logio.so |
||||
LoadModule env_module modules/mod_env.so |
||||
LoadModule mime_magic_module modules/mod_mime_magic.so |
||||
LoadModule cern_meta_module modules/mod_cern_meta.so |
||||
LoadModule expires_module modules/mod_expires.so |
||||
LoadModule headers_module modules/mod_headers.so |
||||
LoadModule usertrack_module modules/mod_usertrack.so |
||||
LoadModule unique_id_module modules/mod_unique_id.so |
||||
LoadModule setenvif_module modules/mod_setenvif.so |
||||
LoadModule version_module modules/mod_version.so |
||||
LoadModule remoteip_module modules/mod_remoteip.so |
||||
LoadModule proxy_module modules/mod_proxy.so |
||||
LoadModule proxy_connect_module modules/mod_proxy_connect.so |
||||
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so |
||||
LoadModule proxy_http_module modules/mod_proxy_http.so |
||||
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so |
||||
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so |
||||
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so |
||||
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so |
||||
LoadModule proxy_express_module modules/mod_proxy_express.so |
||||
LoadModule session_module modules/mod_session.so |
||||
LoadModule session_cookie_module modules/mod_session_cookie.so |
||||
LoadModule session_dbd_module modules/mod_session_dbd.so |
||||
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so |
||||
LoadModule ssl_module modules/mod_ssl.so |
||||
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so |
||||
LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so |
||||
LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so |
||||
LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so |
||||
LoadModule unixd_module modules/mod_unixd.so |
||||
LoadModule dav_module modules/mod_dav.so |
||||
LoadModule status_module modules/mod_status.so |
||||
LoadModule autoindex_module modules/mod_autoindex.so |
||||
LoadModule info_module modules/mod_info.so |
||||
LoadModule suexec_module modules/mod_suexec.so |
||||
LoadModule cgi_module modules/mod_cgi.so |
||||
LoadModule cgid_module modules/mod_cgid.so |
||||
LoadModule dav_fs_module modules/mod_dav_fs.so |
||||
LoadModule vhost_alias_module modules/mod_vhost_alias.so |
||||
LoadModule negotiation_module modules/mod_negotiation.so |
||||
LoadModule dir_module modules/mod_dir.so |
||||
LoadModule actions_module modules/mod_actions.so |
||||
LoadModule speling_module modules/mod_speling.so |
||||
LoadModule userdir_module modules/mod_userdir.so |
||||
LoadModule alias_module modules/mod_alias.so |
||||
LoadModule rewrite_module modules/mod_rewrite.so |
||||
|
||||
<IfDefine JUSTTOMAKEAPXSHAPPY> |
||||
LoadModule php4_module modules/libphp4.so |
||||
LoadModule php5_module modules/libphp5.so |
||||
</IfDefine> |
||||
|
||||
<IfModule unixd_module> |
||||
# |
||||
# If you wish httpd to run as a different user or group, you must run |
||||
# httpd as root initially and it will switch. |
||||
# |
||||
# User/Group: The name (or #number) of the user/group to run httpd as. |
||||
# It is usually good practice to create a dedicated user and group for |
||||
# running httpd, as with most system services. |
||||
# |
||||
User http |
||||
Group http |
||||
</IfModule> |
||||
|
||||
# 'Main' server configuration |
||||
# |
||||
# The directives in this section set up the values used by the 'main' |
||||
# server, which responds to any requests that aren't handled by a |
||||
# <VirtualHost> definition. These values also provide defaults for |
||||
# any <VirtualHost> containers you may define later in the file. |
||||
# |
||||
# All of these directives may appear inside <VirtualHost> containers, |
||||
# in which case these default settings will be overridden for the |
||||
# virtual host being defined. |
||||
# |
||||
|
||||
# |
||||
# ServerAdmin: Your address, where problems with the server should be |
||||
# e-mailed. This address appears on some server-generated pages, such |
||||
# as error documents. e.g. admin@your-domain.com |
||||
# |
||||
ServerAdmin you@example.com |
||||
|
||||
# |
||||
# ServerName gives the name and port that the server uses to identify itself. |
||||
# This can often be determined automatically, but we recommend you specify |
||||
# it explicitly to prevent problems during startup. |
||||
# |
||||
# If your host doesn't have a registered DNS name, enter its IP address here. |
||||
# |
||||
#ServerName www.example.com:@@Port@@ |
||||
# XAMPP |
||||
ServerName localhost |
||||
|
||||
# |
||||
# Deny access to the entirety of your server's filesystem. You must |
||||
# explicitly permit access to web content directories in other |
||||
# <Directory> blocks below. |
||||
# |
||||
<Directory /> |
||||
AllowOverride none |
||||
Require all denied |
||||
</Directory> |
||||
|
||||
# |
||||
# Note that from this point forward you must specifically allow |
||||
# particular features to be enabled - so if something's not working as |
||||
# you might expect, make sure that you have specifically enabled it |
||||
# below. |
||||
# |
||||
|
||||
# |
||||
# DocumentRoot: The directory out of which you will serve your |
||||
# documents. By default, all requests are taken from this directory, but |
||||
# symbolic links and aliases may be used to point to other locations. |
||||
# |
||||
DocumentRoot "/opt/lampp/htdocs" |
||||
<Directory "/opt/lampp/htdocs"> |
||||
# |
||||
# Possible values for the Options directive are "None", "All", |
||||
# or any combination of: |
||||
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews |
||||
# |
||||
# Note that "MultiViews" must be named *explicitly* --- "Options All" |
||||
# doesn't give it to you. |
||||
# |
||||
# The Options directive is both complicated and important. Please see |
||||
# http://httpd.apache.org/docs/trunk/mod/core.html#options |
||||
# for more information. |
||||
# |
||||
#Options Indexes FollowSymLinks |
||||
# XAMPP |
||||
Options Indexes FollowSymLinks ExecCGI Includes |
||||
|
||||
# |
||||
# AllowOverride controls what directives may be placed in .htaccess files. |
||||
# It can be "All", "None", or any combination of the keywords: |
||||
# Options FileInfo AuthConfig Limit |
||||
# |
||||
#AllowOverride None |
||||
# since XAMPP 1.4: |
||||
AllowOverride All |
||||
|
||||
# |
||||
# Controls who can get stuff from this server. |
||||
# |
||||
Require all granted |
||||
</Directory> |
||||
|
||||
# |
||||
# DirectoryIndex: sets the file that Apache will serve if a directory |
||||
# is requested. |
||||
# |
||||
<IfModule dir_module> |
||||
#DirectoryIndex index.html |
||||
# XAMPP |
||||
DirectoryIndex index.html index.html.var index.php index.php3 index.php4 |
||||
</IfModule> |
||||
|
||||
# |
||||
# The following lines prevent .htaccess and .htpasswd files from being |
||||
# viewed by Web clients. |
||||
# |
||||
<Files ".ht*"> |
||||
Require all denied |
||||
</Files> |
||||
|
||||
# |
||||
# ErrorLog: The location of the error log file. |
||||
# If you do not specify an ErrorLog directive within a <VirtualHost> |
||||
# container, error messages relating to that virtual host will be |
||||
# logged here. If you *do* define an error logfile for a <VirtualHost> |
||||
# container, that host's errors will be logged there and not here. |
||||
# |
||||
ErrorLog "logs/error_log" |
||||
|
||||
# |
||||
# LogLevel: Control the number of messages logged to the error_log. |
||||
# Possible values include: debug, info, notice, warn, error, crit, |
||||
# alert, emerg. |
||||
# |
||||
LogLevel warn |
||||
|
||||
<IfModule log_config_module> |
||||
# |
||||
# The following directives define some format nicknames for use with |
||||
# a CustomLog directive (see below). |
||||
# |
||||
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined |
||||
LogFormat "%h %l %u %t \"%r\" %>s %b" common |
||||
|
||||
<IfModule logio_module> |
||||
# You need to enable mod_logio.c to use %I and %O |
||||
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio |
||||
</IfModule> |
||||
|
||||
# |
||||
# The location and format of the access logfile (Common Logfile Format). |
||||
# If you do not define any access logfiles within a <VirtualHost> |
||||
# container, they will be logged here. Contrariwise, if you *do* |
||||
# define per-<VirtualHost> access logfiles, transactions will be |
||||
# logged therein and *not* in this file. |
||||
# |
||||
CustomLog "logs/access_log" common |
||||
|
||||
# |
||||
# If you prefer a logfile with access, agent, and referer information |
||||
# (Combined Logfile Format) you can use the following directive. |
||||
# |
||||
#CustomLog "logs/access_log" combined |
||||
</IfModule> |
||||
|
||||
<IfModule alias_module> |
||||
# |
||||
# Redirect: Allows you to tell clients about documents that used to |
||||
# exist in your server's namespace, but do not anymore. The client |
||||
# will make a new request for the document at its new location. |
||||
# Example: |
||||
# Redirect permanent /foo http://www.example.com/bar |
||||
|
||||
# |
||||
# Alias: Maps web paths into filesystem paths and is used to |
||||
# access content that does not live under the DocumentRoot. |
||||
# Example: |
||||
# Alias /webpath /full/filesystem/path |
||||
# |
||||
# If you include a trailing / on /webpath then the server will |
||||
# require it to be present in the URL. You will also likely |
||||
# need to provide a <Directory> section to allow access to |
||||
# the filesystem path. |
||||
|
||||
# |
||||
# ScriptAlias: This controls which directories contain server scripts. |
||||
# ScriptAliases are essentially the same as Aliases, except that |
||||
# documents in the target directory are treated as applications and |
||||
# run by the server when requested rather than as documents sent to the |
||||
# client. The same rules about trailing "/" apply to ScriptAlias |
||||
# directives as to Alias. |
||||
# |
||||
ScriptAlias /cgi-bin/ "/opt/lampp/cgi-bin/" |
||||
|
||||
Alias /Sites /home/jonathan/Sites |
||||
</IfModule> |
||||
|
||||
<IfModule cgid_module> |
||||
# |
||||
# ScriptSock: On threaded servers, designate the path to the UNIX |
||||
# socket used to communicate with the CGI daemon of mod_cgid. |
||||
# |
||||
#Scriptsock logs/cgisock |
||||
</IfModule> |
||||
|
||||
# |
||||
# "/opt/lampp/cgi-bin" should be changed to whatever your ScriptAliased |
||||
# CGI directory exists, if you have that configured. |
||||
# |
||||
<Directory "/opt/lampp/cgi-bin"> |
||||
AllowOverride None |
||||
Options None |
||||
Require all granted |
||||
</Directory> |
||||
|
||||
<IfModule mime_module> |
||||
# |
||||
# TypesConfig points to the file containing the list of mappings from |
||||
# filename extension to MIME-type. |
||||
# |
||||
TypesConfig etc/mime.types |
||||
|
||||
# |
||||
# AddType allows you to add to or override the MIME configuration |
||||
# file specified in TypesConfig for specific file types. |
||||
# |
||||
#AddType application/x-gzip .tgz |
||||
# |
||||
# AddEncoding allows you to have certain browsers uncompress |
||||
# information on the fly. Note: Not all browsers support this. |
||||
# |
||||
#AddEncoding x-compress .Z |
||||
#AddEncoding x-gzip .gz .tgz |
||||
# |
||||
# If the AddEncoding directives above are commented-out, then you |
||||
# probably should define those extensions to indicate media types: |
||||
# |
||||
AddType application/x-compress .Z |
||||
AddType application/x-gzip .gz .tgz |
||||
|
||||
# |
||||
# AddHandler allows you to map certain file extensions to "handlers": |
||||
# actions unrelated to filetype. These can be either built into the server |
||||
# or added with the Action directive (see below) |
||||
# |
||||
# To use CGI scripts outside of ScriptAliased directories: |
||||
# (You will also need to add "ExecCGI" to the "Options" directive.) |
||||
# |
||||
#AddHandler cgi-script .cgi |
||||
# XAMPP, since LAMPP 0.9.8: |
||||
AddHandler cgi-script .cgi .pl |
||||
|
||||
# For type maps (negotiated resources): |
||||
#AddHandler type-map var |
||||
|
||||
# |
||||
# Filters allow you to process content before it is sent to the client. |
||||
# |
||||
# To parse .shtml files for server-side includes (SSI): |
||||
# (You will also need to add "Includes" to the "Options" directive.) |
||||
# |
||||
# XAMPP |
||||
AddType text/html .shtml |
||||
AddOutputFilter INCLUDES .shtml |
||||
</IfModule> |
||||
|
||||
# |
||||
# The mod_mime_magic module allows the server to use various hints from the |
||||
# contents of the file itself to determine its type. The MIMEMagicFile |
||||
# directive tells the module where the hint definitions are located. |
||||
# |
||||
#MIMEMagicFile etc/magic |
||||
|
||||
# |
||||
# Customizable error responses come in three flavors: |
||||
# 1) plain text 2) local redirects 3) external redirects |
||||
# |
||||
# Some examples: |
||||
#ErrorDocument 500 "The server made a boo boo." |
||||
#ErrorDocument 404 /missing.html |
||||
#ErrorDocument 404 "/cgi-bin/missing_handler.pl" |
||||
#ErrorDocument 402 http://www.example.com/subscription_info.html |
||||
# |
||||
|
||||
# |
||||
# MaxRanges: Maximum number of Ranges in a request before |
||||
# returning the entire resource, or one of the special |
||||
# values 'default', 'none' or 'unlimited'. |
||||
# Default setting is to accept 200 Ranges. |
||||
#MaxRanges unlimited |
||||
|
||||
# |
||||
# EnableMMAP and EnableSendfile: On systems that support it, |
||||
# memory-mapping or the sendfile syscall may be used to deliver |
||||
# files. This usually improves server performance, but must |
||||
# be turned off when serving from networked-mounted |
||||
# filesystems or if support for these functions is otherwise |
||||
# broken on your system. |
||||
# Defaults: EnableMMAP On, EnableSendfile Off |
||||
# |
||||
EnableMMAP off |
||||
EnableSendfile off |
||||
|
||||
# Supplemental configuration |
||||
# |
||||
# The configuration files in the etc/extra/ directory can be |
||||
# included to add extra features or to modify the default configuration of |
||||
# the server, or you may simply copy their contents here and change as |
||||
# necessary. |
||||
|
||||
# Server-pool management (MPM specific) |
||||
#Include etc/extra/httpd-mpm.conf |
||||
|
||||
# Multi-language error messages |
||||
Include etc/extra/httpd-multilang-errordoc.conf |
||||
|
||||
# Fancy directory listings |
||||
Include etc/extra/httpd-autoindex.conf |
||||
|
||||
# Language settings |
||||
#Include etc/extra/httpd-languages.conf |
||||
|
||||
# User home directories |
||||
Include etc/extra/httpd-userdir.conf |
||||
|
||||
# Real-time info on requests and configuration |
||||
#Include etc/extra/httpd-info.conf |
||||
|
||||
# Virtual hosts |
||||
Include etc/extra/httpd-vhosts.conf |
||||
|
||||
# Local access to the Apache HTTP Server Manual |
||||
#Include etc/extra/httpd-manual.conf |
||||
|
||||
# Distributed authoring and versioning (WebDAV) |
||||
#Include etc/extra/httpd-dav.conf |
||||
|
||||
# Various default settings |
||||
Include etc/extra/httpd-default.conf |
||||
|
||||
# Configure mod_proxy_html to understand HTML4/XHTML1 |
||||
<IfModule proxy_html_module> |
||||
Include etc/extra/proxy-html.conf |
||||
</IfModule> |
||||
|
||||
# Secure (SSL/TLS) connections |
||||
<IfModule ssl_module> |
||||
# XAMPP |
||||
<IfDefine SSL> |
||||
Include etc/extra/httpd-ssl.conf |
||||
</IfDefine> |
||||
</IfModule> |
||||
# |
||||
# Note: The following must must be present to support |
||||
# starting without SSL on platforms with no /dev/random equivalent |
||||
# but a statically compiled-in mod_ssl. |
||||
# |
||||
<IfModule ssl_module> |
||||
SSLRandomSeed startup builtin |
||||
SSLRandomSeed connect builtin |
||||
</IfModule> |
||||
|
||||
# XAMPP |
||||
Include etc/extra/httpd-xampp.conf |
||||
Include "/opt/lampp/apache2/conf/httpd.conf" |
||||
|
Loading…
Reference in new issue